import assert from 'node:assert/strict' import test from 'node:test' import { apiRequest } from '../src/http' import { _initializeFromResolvedConfig, awaitInitialization } from '../src/sdk' test('awaitInitialization observes in-flight work and retries a transient config request failure', async () => { const originalFetch = globalThis.fetch let requestCount = 0 const requestedUrls: string[] = [] globalThis.fetch = async input => { requestCount += 1 requestedUrls.push(String(input)) if (requestCount === 1) { throw new TypeError('Network request failed') } if (requestCount === 3) { return new Response(JSON.stringify({ data: { available: true } }), { headers: { 'content-type': 'application/json' }, status: 200, }) } return new Response( JSON.stringify({ data: { apiUrl: 'https://api.example.test', }, }), { headers: { 'content-type': 'application/json' }, status: 200, }, ) } try { const autoInitialization = _initializeFromResolvedConfig( { appKey: 'test-app', appName: '测试应用', serverUrl: 'https://dev.xuqinmin.com', signingKey: 'secret', }, { debug: true }, ) await assert.rejects(() => awaitInitialization(), /Network request failed/) await assert.rejects(() => autoInitialization, /Network request failed/) // 配置内容由 common 保存,扩展包再次等待时可以自行重试,无需宿主传递配置。 await assert.doesNotReject(() => awaitInitialization()) assert.equal(requestCount, 2) const result = await apiRequest<{ available: boolean }>('/api/v1/rn/release-set/check', { skipAuth: true, }) assert.deepEqual(result, { available: true }) assert.equal(requestedUrls[2], 'https://dev.xuqinmin.com/api/v1/rn/release-set/check') assert.equal(requestedUrls[2]?.includes('api.example.test'), false) } finally { globalThis.fetch = originalFetch } })