diff --git a/packages/sdk/browser/contract-tests/entity/src/ClientEntity.ts b/packages/sdk/browser/contract-tests/entity/src/ClientEntity.ts index 739bfd7c61..124d31ae41 100644 --- a/packages/sdk/browser/contract-tests/entity/src/ClientEntity.ts +++ b/packages/sdk/browser/contract-tests/entity/src/ClientEntity.ts @@ -354,7 +354,11 @@ export async function newSdkClientEntity(options: CreateInstanceParams) { initialContext, sdkConfig, ); - const { status } = await client.start({ timeout: timeout / 1000 }); + const bootstrap = options.configuration.clientSide?.bootstrap; + const { status } = await client.start({ + timeout: timeout / 1000, + ...(bootstrap != null && { bootstrap }), + }); const failed = status !== 'complete'; if (failed && !options.configuration.initCanFail) { client.close(); diff --git a/packages/sdk/browser/contract-tests/entity/src/TestHarnessWebSocket.ts b/packages/sdk/browser/contract-tests/entity/src/TestHarnessWebSocket.ts index de8f5f5c6d..9bde09419b 100644 --- a/packages/sdk/browser/contract-tests/entity/src/TestHarnessWebSocket.ts +++ b/packages/sdk/browser/contract-tests/entity/src/TestHarnessWebSocket.ts @@ -46,6 +46,7 @@ export default class TestHarnessWebSocket { 'client-per-context-summaries', 'track-hooks', 'fdv1-fallback', + 'bootstrap', ]; break; diff --git a/packages/sdk/node-client/contract-tests/src/index.ts b/packages/sdk/node-client/contract-tests/src/index.ts index 64e19c7fc9..9dd67b80ad 100644 --- a/packages/sdk/node-client/contract-tests/src/index.ts +++ b/packages/sdk/node-client/contract-tests/src/index.ts @@ -43,6 +43,7 @@ app.get('/', (req: Request, res: Response) => { 'wrapper', 'fdv1-fallback', 'client-event-source-http-errors', + 'bootstrap', ], }); }); diff --git a/packages/sdk/node-client/contract-tests/src/sdkClientEntity.ts b/packages/sdk/node-client/contract-tests/src/sdkClientEntity.ts index a1cb6c06e1..d281d3ae96 100644 --- a/packages/sdk/node-client/contract-tests/src/sdkClientEntity.ts +++ b/packages/sdk/node-client/contract-tests/src/sdkClientEntity.ts @@ -277,7 +277,11 @@ export async function newSdkClientEntity(options: CreateInstanceParams): Promise initialContext, sdkConfig, ); - const startResult = await client.start({ timeout: timeout / 1000 }); + const bootstrap = options.configuration.clientSide?.bootstrap; + const startResult = await client.start({ + timeout: timeout / 1000, + ...(bootstrap != null && { bootstrap }), + }); const failed = startResult.status !== 'complete'; if (failed && !options.configuration.initCanFail) { await client.close(); diff --git a/packages/sdk/react-native/contract-tests/entity/src/ClientEntity.ts b/packages/sdk/react-native/contract-tests/entity/src/ClientEntity.ts index 21b8b5f257..979763e049 100644 --- a/packages/sdk/react-native/contract-tests/entity/src/ClientEntity.ts +++ b/packages/sdk/react-native/contract-tests/entity/src/ClientEntity.ts @@ -364,8 +364,13 @@ export async function newSdkClientEntity(options: CreateInstanceParams) { let failed = false; try { + const bootstrap = options.configuration.clientSide?.bootstrap; await Promise.race([ - client.identify(initialContext, { timeout: timeout / 1000, waitForNetworkResults: true }), + client.identify(initialContext, { + timeout: timeout / 1000, + waitForNetworkResults: true, + ...(bootstrap != null && { bootstrap }), + }), new Promise((_resolve, reject) => { setTimeout(reject, timeout); }), diff --git a/packages/sdk/react-native/contract-tests/entity/src/TestHarnessWebSocket.ts b/packages/sdk/react-native/contract-tests/entity/src/TestHarnessWebSocket.ts index 979eb816ed..dad55c9f48 100644 --- a/packages/sdk/react-native/contract-tests/entity/src/TestHarnessWebSocket.ts +++ b/packages/sdk/react-native/contract-tests/entity/src/TestHarnessWebSocket.ts @@ -60,6 +60,7 @@ export default class TestHarnessWebSocket { 'track-hooks', 'fdv1-fallback', 'client-event-source-http-errors', + 'bootstrap', ]; break; diff --git a/packages/sdk/react/contract-tests/app/ClientRoot.tsx b/packages/sdk/react/contract-tests/app/ClientRoot.tsx index fb282868c0..5a47e65631 100644 --- a/packages/sdk/react/contract-tests/app/ClientRoot.tsx +++ b/packages/sdk/react/contract-tests/app/ClientRoot.tsx @@ -60,7 +60,11 @@ export default function ClientRoot({ children }: { children: React.ReactNode }) sdkConfig, ); - const { status } = await client.start({ timeout: timeout / 1000 }); + const bootstrap = params.configuration.clientSide?.bootstrap; + const { status } = await client.start({ + timeout: timeout / 1000, + ...(bootstrap != null && { bootstrap }), + }); if (status === 'failed' && !params.configuration.initCanFail) { client.close(); diff --git a/packages/sdk/react/contract-tests/app/TestHarnessWebSocket.ts b/packages/sdk/react/contract-tests/app/TestHarnessWebSocket.ts index 8d09d8c2de..e8c72d5c18 100644 --- a/packages/sdk/react/contract-tests/app/TestHarnessWebSocket.ts +++ b/packages/sdk/react/contract-tests/app/TestHarnessWebSocket.ts @@ -50,6 +50,7 @@ export default class TestHarnessWebSocket { 'client-per-context-summaries', 'track-hooks', 'fdv1-fallback', + 'bootstrap', ]; break; diff --git a/packages/sdk/vue/contract-tests/src/ClientEntity.ts b/packages/sdk/vue/contract-tests/src/ClientEntity.ts index 3b5da3d559..618b789f5c 100644 --- a/packages/sdk/vue/contract-tests/src/ClientEntity.ts +++ b/packages/sdk/vue/contract-tests/src/ClientEntity.ts @@ -403,8 +403,10 @@ export async function newSdkClientEntity(options: CreateInstanceParams) { // Forward a harness-supplied secure mode hash as the `h` query parameter, only when // the harness actually configured one. const secureModeHash = options.configuration.clientSide?.hash; + const bootstrap = options.configuration.clientSide?.bootstrap; const result = await client.start({ timeout: timeout / 1000, + ...(bootstrap != null && { bootstrap }), ...(secureModeHash !== undefined && { identifyOptions: { hash: secureModeHash } }), }); if (result.status !== 'complete') { diff --git a/packages/sdk/vue/contract-tests/src/TestHarnessWebSocket.ts b/packages/sdk/vue/contract-tests/src/TestHarnessWebSocket.ts index 3d9ff65138..95de66e09e 100644 --- a/packages/sdk/vue/contract-tests/src/TestHarnessWebSocket.ts +++ b/packages/sdk/vue/contract-tests/src/TestHarnessWebSocket.ts @@ -50,6 +50,7 @@ export default class TestHarnessWebSocket { 'secure-mode-hash', 'flag-change-listeners', 'fdv1-fallback', + 'bootstrap', ]; break; diff --git a/packages/tooling/contract-test-utils/src/types/ConfigParams.ts b/packages/tooling/contract-test-utils/src/types/ConfigParams.ts index 848fdde91f..25156ce07c 100644 --- a/packages/tooling/contract-test-utils/src/types/ConfigParams.ts +++ b/packages/tooling/contract-test-utils/src/types/ConfigParams.ts @@ -102,6 +102,7 @@ export interface SDKConfigClientSideParams { useReport?: boolean; includeEnvironmentAttributes?: boolean; hash?: string; + bootstrap?: unknown; } export interface SDKConfigEvaluationHookData {