diff --git a/README.md b/README.md index 89fd83e..a0e028e 100644 --- a/README.md +++ b/README.md @@ -1714,7 +1714,7 @@ Start real-time sharing or SOS. Wrapper for `setSdkMode`. See SDK type https://datamob.gitbook.io/doc-locator/TQfkVhcPsZiXIvXxq8Bv/english/service#id-4.5.3-setsdkmode-mode-locatorsdkmode-void ```ts -setLocatorSdkMode: (mode: string) => Promise; +setLocatorSdkMode: (mode: string, correlation?: Record) => Promise; ``` ### getLocatorJwtToken diff --git a/src/__tests__/family-locator-test.ts b/src/__tests__/family-locator-test.ts index e2c489c..4e1f069 100644 --- a/src/__tests__/family-locator-test.ts +++ b/src/__tests__/family-locator-test.ts @@ -96,11 +96,17 @@ test('getLocatorSdkState', async () => { expect(res).toEqual({state: 'collecting'}); }); -test('setLocatorSdkMode', async () => { +test.each` + name | mode | correlation | expectedPayload + ${'with correlation'} | ${'observed'} | ${{traceId: 'abc123'}} | ${{mode: 'observed', correlation: {traceId: 'abc123'}}} + ${'with multiple correlation fields'} | ${'sos'} | ${{traceId: 'xyz', spanId: '456'}} | ${{mode: 'sos', correlation: {traceId: 'xyz', spanId: '456'}}} + ${'without correlation'} | ${'observed'} | ${undefined} | ${{mode: 'observed'}} + ${'with empty correlation'} | ${'hidden'} | ${{}} | ${{mode: 'hidden'}} +`('setLocatorSdkMode $name', async ({mode, correlation, expectedPayload}) => { createFakeAndroidPostMessage({ checkMessage: (msg) => { expect(msg.type).toBe('SET_LOCATOR_SDK_MODE'); - expect(msg.payload).toEqual({mode: 'observed'}); + expect(msg.payload).toEqual(expectedPayload); }, getResponse: (msg) => ({ type: 'SET_LOCATOR_SDK_MODE', @@ -108,7 +114,7 @@ test('setLocatorSdkMode', async () => { }), }); - const res = await setLocatorSdkMode('observed'); + const res = await setLocatorSdkMode(mode, correlation); expect(res).toBeUndefined(); }); diff --git a/src/family-locator.ts b/src/family-locator.ts index 7ce4eae..8a85eb7 100644 --- a/src/family-locator.ts +++ b/src/family-locator.ts @@ -17,11 +17,17 @@ export const setupLocatorSdkConfig = ( export const getLocatorSdkState = (): Promise<{state: string}> => postMessageToNativeApp({type: 'GET_LOCATOR_SDK_STATE'}); -export const setLocatorSdkMode = (mode: LocatorSdkMode): Promise => +export const setLocatorSdkMode = ( + mode: LocatorSdkMode, + correlation?: Record, +): Promise => postMessageToNativeApp({ type: 'SET_LOCATOR_SDK_MODE', payload: { mode, + ...(correlation && Object.keys(correlation).length > 0 + ? {correlation} + : {}), }, });