@amplitude/analytics-react-native 0.4.8 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -68,17 +68,11 @@ class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
68
68
  await this.add(new _context.Context());
69
69
  await this.add(new _analyticsClientCommon.IdentityEventSender());
70
70
  await this.add(new _analyticsCore.Destination());
71
- this.initializing = false; // Step 5: Set timeline ready for processing events
72
- // Send existing events, which might be collected by track before init
71
+ this.initializing = false; // Step 5: Track attributions
73
72
 
74
- this.timeline.isReady = true;
73
+ await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession); // Step 6: Run queued dispatch functions
75
74
 
76
- if (!this.config.optOut) {
77
- this.timeline.scheduleApply(0);
78
- } // Step 6: Track attributions
79
-
80
-
81
- await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession);
75
+ await this.runQueuedFunctions('dispatchQ');
82
76
  }
83
77
 
84
78
  async runAttributionStrategy(attributionConfig) {
@@ -1 +1 @@
1
- {"version":3,"names":["AmplitudeReactNative","AmplitudeCore","init","apiKey","userId","options","initializing","oldCookies","parseOldCookies","reactNativeOptions","useReactNativeConfig","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","setSessionId","connector","getAnalyticsConnector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","Context","IdentityEventSender","Destination","timeline","isReady","scheduleApply","runAttributionStrategy","attribution","attributionConfig","isNative","bind","onNewCampaign","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","q","push","editIdentity","commit","getDeviceId","setDeviceId","identify","eventOptions","user_id","device_id","reset","undefined","UUID","getSessionId","createInstance","client","returnWrapper","remove","logEvent","groupIdentify","setGroup","revenue","flush","setOptOut"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, UUID, returnWrapper } from '@amplitude/analytics-core';\nimport { CampaignTracker, IdentityEventSender, getAnalyticsConnector } from '@amplitude/analytics-client-common';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AttributionOptions,\n ReactNativeClient,\n Identify as IIdentify,\n EventOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { isNative } from './utils/platform';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey = '', userId?: string, options?: ReactNativeOptions) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create react native config\n const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = !this.config.lastEventTime;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.setSessionId(Date.now());\n isNewSession = true;\n }\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector();\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n this.initializing = false;\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionOptions, isNewSession = false) {\n if (isNative()) {\n return;\n }\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.userId = userId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setUserId(userId)\n .commit();\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setDeviceId(deviceId)\n .commit();\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n reset() {\n this.setUserId(undefined);\n this.setDeviceId(UUID());\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n this.config.sessionId = sessionId;\n }\n}\n\nexport const createInstance = (): ReactNativeClient => {\n const client = new AmplitudeReactNative();\n return {\n init: returnWrapper(client.init.bind(client)),\n add: returnWrapper(client.add.bind(client)),\n remove: returnWrapper(client.remove.bind(client)),\n track: returnWrapper(client.track.bind(client)),\n logEvent: returnWrapper(client.logEvent.bind(client)),\n identify: returnWrapper(client.identify.bind(client)),\n groupIdentify: returnWrapper(client.groupIdentify.bind(client)),\n setGroup: returnWrapper(client.setGroup.bind(client)),\n revenue: returnWrapper(client.revenue.bind(client)),\n flush: returnWrapper(client.flush.bind(client)),\n getUserId: client.getUserId.bind(client),\n setUserId: client.setUserId.bind(client),\n getDeviceId: client.getDeviceId.bind(client),\n setDeviceId: client.setDeviceId.bind(client),\n reset: client.reset.bind(client),\n getSessionId: client.getSessionId.bind(client),\n setSessionId: client.setSessionId.bind(client),\n setOptOut: client.setOptOut.bind(client),\n };\n};\n\nexport default createInstance();\n"],"mappings":"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"}
1
+ {"version":3,"names":["AmplitudeReactNative","AmplitudeCore","init","apiKey","userId","options","initializing","oldCookies","parseOldCookies","reactNativeOptions","useReactNativeConfig","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","setSessionId","connector","getAnalyticsConnector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","Context","IdentityEventSender","Destination","runAttributionStrategy","attribution","runQueuedFunctions","attributionConfig","isNative","bind","onNewCampaign","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","q","push","editIdentity","commit","getDeviceId","setDeviceId","identify","eventOptions","user_id","device_id","reset","undefined","UUID","getSessionId","createInstance","client","returnWrapper","remove","logEvent","groupIdentify","setGroup","revenue","flush","setOptOut"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, UUID, returnWrapper } from '@amplitude/analytics-core';\nimport { CampaignTracker, IdentityEventSender, getAnalyticsConnector } from '@amplitude/analytics-client-common';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AttributionOptions,\n ReactNativeClient,\n Identify as IIdentify,\n EventOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { isNative } from './utils/platform';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey = '', userId?: string, options?: ReactNativeOptions) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create react native config\n const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = !this.config.lastEventTime;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.setSessionId(Date.now());\n isNewSession = true;\n }\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector();\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n this.initializing = false;\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionOptions, isNewSession = false) {\n if (isNative()) {\n return;\n }\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.userId = userId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setUserId(userId)\n .commit();\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setDeviceId(deviceId)\n .commit();\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n reset() {\n this.setUserId(undefined);\n this.setDeviceId(UUID());\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n this.config.sessionId = sessionId;\n }\n}\n\nexport const createInstance = (): ReactNativeClient => {\n const client = new AmplitudeReactNative();\n return {\n init: returnWrapper(client.init.bind(client)),\n add: returnWrapper(client.add.bind(client)),\n remove: returnWrapper(client.remove.bind(client)),\n track: returnWrapper(client.track.bind(client)),\n logEvent: returnWrapper(client.logEvent.bind(client)),\n identify: returnWrapper(client.identify.bind(client)),\n groupIdentify: returnWrapper(client.groupIdentify.bind(client)),\n setGroup: returnWrapper(client.setGroup.bind(client)),\n revenue: returnWrapper(client.revenue.bind(client)),\n flush: returnWrapper(client.flush.bind(client)),\n getUserId: client.getUserId.bind(client),\n setUserId: client.setUserId.bind(client),\n getDeviceId: client.getDeviceId.bind(client),\n setDeviceId: client.setDeviceId.bind(client),\n reset: client.reset.bind(client),\n getSessionId: client.getSessionId.bind(client),\n setSessionId: client.setSessionId.bind(client),\n setOptOut: client.setOptOut.bind(client),\n };\n};\n\nexport default createInstance();\n"],"mappings":"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"}
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.LocalStorage = void 0;
7
7
 
8
+ var _analyticsClientCommon = require("@amplitude/analytics-client-common");
9
+
8
10
  var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
9
11
 
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -12,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
12
14
  class LocalStorage {
13
15
  async isEnabled() {
14
16
  /* istanbul ignore if */
15
- if (typeof window === 'undefined') {
17
+ if (!(0, _analyticsClientCommon.getGlobalScope)()) {
16
18
  return false;
17
19
  }
18
20
 
@@ -1 +1 @@
1
- {"version":3,"names":["LocalStorage","isEnabled","window","random","String","Date","now","testStorage","testKey","set","value","get","remove","key","getRaw","undefined","JSON","parse","AsyncStorage","getItem","setItem","stringify","removeItem","reset","clear"],"sources":["local-storage.ts"],"sourcesContent":["import { Storage } from '@amplitude/analytics-types';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nexport class LocalStorage<T> implements Storage<T> {\n async isEnabled(): Promise<boolean> {\n /* istanbul ignore if */\n if (typeof window === 'undefined') {\n return false;\n }\n\n const random = String(Date.now());\n const testStorage = new LocalStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStorage.set(testKey, random);\n const value = await testStorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n try {\n const value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(value);\n } catch {\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async getRaw(key: string): Promise<string | undefined> {\n return (await AsyncStorage.getItem(key)) || undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n //\n }\n }\n\n async reset(): Promise<void> {\n try {\n await AsyncStorage.clear();\n } catch {\n //\n }\n }\n}\n"],"mappings":";;;;;;;AACA;;;;AAEO,MAAMA,YAAN,CAA4C;EAClC,MAATC,SAAS,GAAqB;IAClC;IACA,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;MACjC,OAAO,KAAP;IACD;;IAED,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAArB;IACA,MAAMC,WAAW,GAAG,IAAIP,YAAJ,EAApB;IACA,MAAMQ,OAAO,GAAG,UAAhB;;IACA,IAAI;MACF,MAAMD,WAAW,CAACE,GAAZ,CAAgBD,OAAhB,EAAyBL,MAAzB,CAAN;MACA,MAAMO,KAAK,GAAG,MAAMH,WAAW,CAACI,GAAZ,CAAgBH,OAAhB,CAApB;MACA,OAAOE,KAAK,KAAKP,MAAjB;IACD,CAJD,CAIE,MAAM;MACN;MACA,OAAO,KAAP;IACD,CAPD,SAOU;MACR,MAAMI,WAAW,CAACK,MAAZ,CAAmBJ,OAAnB,CAAN;IACD;EACF;;EAEQ,MAAHG,GAAG,CAACE,GAAD,EAAsC;IAC7C,IAAI;MACF,MAAMH,KAAK,GAAG,MAAM,KAAKI,MAAL,CAAYD,GAAZ,CAApB;;MACA,IAAI,CAACH,KAAL,EAAY;QACV,OAAOK,SAAP;MACD,CAJC,CAKF;;;MACA,OAAOC,IAAI,CAACC,KAAL,CAAWP,KAAX,CAAP;IACD,CAPD,CAOE,MAAM;MACN;MACA,OAAOK,SAAP;IACD;EACF;;EAEW,MAAND,MAAM,CAACD,GAAD,EAA2C;IACrD,OAAO,CAAC,MAAMK,qBAAA,CAAaC,OAAb,CAAqBN,GAArB,CAAP,KAAqCE,SAA5C;EACD;;EAEQ,MAAHN,GAAG,CAACI,GAAD,EAAcH,KAAd,EAAuC;IAC9C,IAAI;MACF,MAAMQ,qBAAA,CAAaE,OAAb,CAAqBP,GAArB,EAA0BG,IAAI,CAACK,SAAL,CAAeX,KAAf,CAA1B,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEW,MAANE,MAAM,CAACC,GAAD,EAA6B;IACvC,IAAI;MACF,MAAMK,qBAAA,CAAaI,UAAb,CAAwBT,GAAxB,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEU,MAALU,KAAK,GAAkB;IAC3B,IAAI;MACF,MAAML,qBAAA,CAAaM,KAAb,EAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;AA9DgD"}
1
+ {"version":3,"names":["LocalStorage","isEnabled","getGlobalScope","random","String","Date","now","testStorage","testKey","set","value","get","remove","key","getRaw","undefined","JSON","parse","AsyncStorage","getItem","setItem","stringify","removeItem","reset","clear"],"sources":["local-storage.ts"],"sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { Storage } from '@amplitude/analytics-types';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nexport class LocalStorage<T> implements Storage<T> {\n async isEnabled(): Promise<boolean> {\n /* istanbul ignore if */\n if (!getGlobalScope()) {\n return false;\n }\n\n const random = String(Date.now());\n const testStorage = new LocalStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStorage.set(testKey, random);\n const value = await testStorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n try {\n const value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(value);\n } catch {\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async getRaw(key: string): Promise<string | undefined> {\n return (await AsyncStorage.getItem(key)) || undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n //\n }\n }\n\n async reset(): Promise<void> {\n try {\n await AsyncStorage.clear();\n } catch {\n //\n }\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEO,MAAMA,YAAN,CAA4C;EAClC,MAATC,SAAS,GAAqB;IAClC;IACA,IAAI,CAAC,IAAAC,qCAAA,GAAL,EAAuB;MACrB,OAAO,KAAP;IACD;;IAED,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAArB;IACA,MAAMC,WAAW,GAAG,IAAIP,YAAJ,EAApB;IACA,MAAMQ,OAAO,GAAG,UAAhB;;IACA,IAAI;MACF,MAAMD,WAAW,CAACE,GAAZ,CAAgBD,OAAhB,EAAyBL,MAAzB,CAAN;MACA,MAAMO,KAAK,GAAG,MAAMH,WAAW,CAACI,GAAZ,CAAgBH,OAAhB,CAApB;MACA,OAAOE,KAAK,KAAKP,MAAjB;IACD,CAJD,CAIE,MAAM;MACN;MACA,OAAO,KAAP;IACD,CAPD,SAOU;MACR,MAAMI,WAAW,CAACK,MAAZ,CAAmBJ,OAAnB,CAAN;IACD;EACF;;EAEQ,MAAHG,GAAG,CAACE,GAAD,EAAsC;IAC7C,IAAI;MACF,MAAMH,KAAK,GAAG,MAAM,KAAKI,MAAL,CAAYD,GAAZ,CAApB;;MACA,IAAI,CAACH,KAAL,EAAY;QACV,OAAOK,SAAP;MACD,CAJC,CAKF;;;MACA,OAAOC,IAAI,CAACC,KAAL,CAAWP,KAAX,CAAP;IACD,CAPD,CAOE,MAAM;MACN;MACA,OAAOK,SAAP;IACD;EACF;;EAEW,MAAND,MAAM,CAACD,GAAD,EAA2C;IACrD,OAAO,CAAC,MAAMK,qBAAA,CAAaC,OAAb,CAAqBN,GAArB,CAAP,KAAqCE,SAA5C;EACD;;EAEQ,MAAHN,GAAG,CAACI,GAAD,EAAcH,KAAd,EAAuC;IAC9C,IAAI;MACF,MAAMQ,qBAAA,CAAaE,OAAb,CAAqBP,GAArB,EAA0BG,IAAI,CAACK,SAAL,CAAeX,KAAf,CAA1B,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEW,MAANE,MAAM,CAACC,GAAD,EAA6B;IACvC,IAAI;MACF,MAAMK,qBAAA,CAAaI,UAAb,CAAwBT,GAAxB,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEU,MAALU,KAAK,GAAkB;IAC3B,IAAI;MACF,MAAML,qBAAA,CAAaM,KAAb,EAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;AA9DgD"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- const VERSION = '0.4.8';
7
+ const VERSION = '0.4.9';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.4.8';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,OAAhB"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.4.9';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,OAAhB"}
@@ -55,17 +55,11 @@ export class AmplitudeReactNative extends AmplitudeCore {
55
55
  await this.add(new Context());
56
56
  await this.add(new IdentityEventSender());
57
57
  await this.add(new Destination());
58
- this.initializing = false; // Step 5: Set timeline ready for processing events
59
- // Send existing events, which might be collected by track before init
58
+ this.initializing = false; // Step 5: Track attributions
60
59
 
61
- this.timeline.isReady = true;
60
+ await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession); // Step 6: Run queued dispatch functions
62
61
 
63
- if (!this.config.optOut) {
64
- this.timeline.scheduleApply(0);
65
- } // Step 6: Track attributions
66
-
67
-
68
- await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession);
62
+ await this.runQueuedFunctions('dispatchQ');
69
63
  }
70
64
 
71
65
  async runAttributionStrategy(attributionConfig) {
@@ -1 +1 @@
1
- {"version":3,"names":["AmplitudeCore","Destination","UUID","returnWrapper","CampaignTracker","IdentityEventSender","getAnalyticsConnector","Context","useReactNativeConfig","createFlexibleStorage","parseOldCookies","isNative","AmplitudeReactNative","init","apiKey","userId","options","initializing","oldCookies","reactNativeOptions","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","setSessionId","connector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","timeline","isReady","scheduleApply","runAttributionStrategy","attribution","attributionConfig","bind","onNewCampaign","storage","campaignTracker","send","getUserId","setUserId","q","push","editIdentity","commit","getDeviceId","setDeviceId","identify","eventOptions","user_id","device_id","reset","undefined","getSessionId","createInstance","client","remove","logEvent","groupIdentify","setGroup","revenue","flush","setOptOut"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, UUID, returnWrapper } from '@amplitude/analytics-core';\nimport { CampaignTracker, IdentityEventSender, getAnalyticsConnector } from '@amplitude/analytics-client-common';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AttributionOptions,\n ReactNativeClient,\n Identify as IIdentify,\n EventOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { isNative } from './utils/platform';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey = '', userId?: string, options?: ReactNativeOptions) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create react native config\n const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = !this.config.lastEventTime;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.setSessionId(Date.now());\n isNewSession = true;\n }\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector();\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n this.initializing = false;\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionOptions, isNewSession = false) {\n if (isNative()) {\n return;\n }\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.userId = userId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setUserId(userId)\n .commit();\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setDeviceId(deviceId)\n .commit();\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n reset() {\n this.setUserId(undefined);\n this.setDeviceId(UUID());\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n this.config.sessionId = sessionId;\n }\n}\n\nexport const createInstance = (): ReactNativeClient => {\n const client = new AmplitudeReactNative();\n return {\n init: returnWrapper(client.init.bind(client)),\n add: returnWrapper(client.add.bind(client)),\n remove: returnWrapper(client.remove.bind(client)),\n track: returnWrapper(client.track.bind(client)),\n logEvent: returnWrapper(client.logEvent.bind(client)),\n identify: returnWrapper(client.identify.bind(client)),\n groupIdentify: returnWrapper(client.groupIdentify.bind(client)),\n setGroup: returnWrapper(client.setGroup.bind(client)),\n revenue: returnWrapper(client.revenue.bind(client)),\n flush: returnWrapper(client.flush.bind(client)),\n getUserId: client.getUserId.bind(client),\n setUserId: client.setUserId.bind(client),\n getDeviceId: client.getDeviceId.bind(client),\n setDeviceId: client.setDeviceId.bind(client),\n reset: client.reset.bind(client),\n getSessionId: client.getSessionId.bind(client),\n setSessionId: client.setSessionId.bind(client),\n setOptOut: client.setOptOut.bind(client),\n };\n};\n\nexport default createInstance();\n"],"mappings":"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"}
1
+ {"version":3,"names":["AmplitudeCore","Destination","UUID","returnWrapper","CampaignTracker","IdentityEventSender","getAnalyticsConnector","Context","useReactNativeConfig","createFlexibleStorage","parseOldCookies","isNative","AmplitudeReactNative","init","apiKey","userId","options","initializing","oldCookies","reactNativeOptions","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","setSessionId","connector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","runAttributionStrategy","attribution","runQueuedFunctions","attributionConfig","bind","onNewCampaign","storage","campaignTracker","send","getUserId","setUserId","q","push","editIdentity","commit","getDeviceId","setDeviceId","identify","eventOptions","user_id","device_id","reset","undefined","getSessionId","createInstance","client","remove","logEvent","groupIdentify","setGroup","revenue","flush","setOptOut"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, UUID, returnWrapper } from '@amplitude/analytics-core';\nimport { CampaignTracker, IdentityEventSender, getAnalyticsConnector } from '@amplitude/analytics-client-common';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AttributionOptions,\n ReactNativeClient,\n Identify as IIdentify,\n EventOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { isNative } from './utils/platform';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey = '', userId?: string, options?: ReactNativeOptions) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create react native config\n const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = !this.config.lastEventTime;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.setSessionId(Date.now());\n isNewSession = true;\n }\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector();\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n this.initializing = false;\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionOptions, isNewSession = false) {\n if (isNative()) {\n return;\n }\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.userId = userId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setUserId(userId)\n .commit();\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n getAnalyticsConnector()\n .identityStore.editIdentity()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .setDeviceId(deviceId)\n .commit();\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n reset() {\n this.setUserId(undefined);\n this.setDeviceId(UUID());\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n this.config.sessionId = sessionId;\n }\n}\n\nexport const createInstance = (): ReactNativeClient => {\n const client = new AmplitudeReactNative();\n return {\n init: returnWrapper(client.init.bind(client)),\n add: returnWrapper(client.add.bind(client)),\n remove: returnWrapper(client.remove.bind(client)),\n track: returnWrapper(client.track.bind(client)),\n logEvent: returnWrapper(client.logEvent.bind(client)),\n identify: returnWrapper(client.identify.bind(client)),\n groupIdentify: returnWrapper(client.groupIdentify.bind(client)),\n setGroup: returnWrapper(client.setGroup.bind(client)),\n revenue: returnWrapper(client.revenue.bind(client)),\n flush: returnWrapper(client.flush.bind(client)),\n getUserId: client.getUserId.bind(client),\n setUserId: client.setUserId.bind(client),\n getDeviceId: client.getDeviceId.bind(client),\n setDeviceId: client.setDeviceId.bind(client),\n reset: client.reset.bind(client),\n getSessionId: client.getSessionId.bind(client),\n setSessionId: client.setSessionId.bind(client),\n setOptOut: client.setOptOut.bind(client),\n };\n};\n\nexport default createInstance();\n"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
+ import { getGlobalScope } from '@amplitude/analytics-client-common';
1
2
  import AsyncStorage from '@react-native-async-storage/async-storage';
2
3
  export class LocalStorage {
3
4
  async isEnabled() {
4
5
  /* istanbul ignore if */
5
- if (typeof window === 'undefined') {
6
+ if (!getGlobalScope()) {
6
7
  return false;
7
8
  }
8
9
 
@@ -1 +1 @@
1
- {"version":3,"names":["AsyncStorage","LocalStorage","isEnabled","window","random","String","Date","now","testStorage","testKey","set","value","get","remove","key","getRaw","undefined","JSON","parse","getItem","setItem","stringify","removeItem","reset","clear"],"sources":["local-storage.ts"],"sourcesContent":["import { Storage } from '@amplitude/analytics-types';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nexport class LocalStorage<T> implements Storage<T> {\n async isEnabled(): Promise<boolean> {\n /* istanbul ignore if */\n if (typeof window === 'undefined') {\n return false;\n }\n\n const random = String(Date.now());\n const testStorage = new LocalStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStorage.set(testKey, random);\n const value = await testStorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n try {\n const value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(value);\n } catch {\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async getRaw(key: string): Promise<string | undefined> {\n return (await AsyncStorage.getItem(key)) || undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n //\n }\n }\n\n async reset(): Promise<void> {\n try {\n await AsyncStorage.clear();\n } catch {\n //\n }\n }\n}\n"],"mappings":"AACA,OAAOA,YAAP,MAAyB,2CAAzB;AAEA,OAAO,MAAMC,YAAN,CAA4C;EAClC,MAATC,SAAS,GAAqB;IAClC;IACA,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;MACjC,OAAO,KAAP;IACD;;IAED,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAArB;IACA,MAAMC,WAAW,GAAG,IAAIP,YAAJ,EAApB;IACA,MAAMQ,OAAO,GAAG,UAAhB;;IACA,IAAI;MACF,MAAMD,WAAW,CAACE,GAAZ,CAAgBD,OAAhB,EAAyBL,MAAzB,CAAN;MACA,MAAMO,KAAK,GAAG,MAAMH,WAAW,CAACI,GAAZ,CAAgBH,OAAhB,CAApB;MACA,OAAOE,KAAK,KAAKP,MAAjB;IACD,CAJD,CAIE,MAAM;MACN;MACA,OAAO,KAAP;IACD,CAPD,SAOU;MACR,MAAMI,WAAW,CAACK,MAAZ,CAAmBJ,OAAnB,CAAN;IACD;EACF;;EAEQ,MAAHG,GAAG,CAACE,GAAD,EAAsC;IAC7C,IAAI;MACF,MAAMH,KAAK,GAAG,MAAM,KAAKI,MAAL,CAAYD,GAAZ,CAApB;;MACA,IAAI,CAACH,KAAL,EAAY;QACV,OAAOK,SAAP;MACD,CAJC,CAKF;;;MACA,OAAOC,IAAI,CAACC,KAAL,CAAWP,KAAX,CAAP;IACD,CAPD,CAOE,MAAM;MACN;MACA,OAAOK,SAAP;IACD;EACF;;EAEW,MAAND,MAAM,CAACD,GAAD,EAA2C;IACrD,OAAO,CAAC,MAAMd,YAAY,CAACmB,OAAb,CAAqBL,GAArB,CAAP,KAAqCE,SAA5C;EACD;;EAEQ,MAAHN,GAAG,CAACI,GAAD,EAAcH,KAAd,EAAuC;IAC9C,IAAI;MACF,MAAMX,YAAY,CAACoB,OAAb,CAAqBN,GAArB,EAA0BG,IAAI,CAACI,SAAL,CAAeV,KAAf,CAA1B,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEW,MAANE,MAAM,CAACC,GAAD,EAA6B;IACvC,IAAI;MACF,MAAMd,YAAY,CAACsB,UAAb,CAAwBR,GAAxB,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEU,MAALS,KAAK,GAAkB;IAC3B,IAAI;MACF,MAAMvB,YAAY,CAACwB,KAAb,EAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;AA9DgD"}
1
+ {"version":3,"names":["getGlobalScope","AsyncStorage","LocalStorage","isEnabled","random","String","Date","now","testStorage","testKey","set","value","get","remove","key","getRaw","undefined","JSON","parse","getItem","setItem","stringify","removeItem","reset","clear"],"sources":["local-storage.ts"],"sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { Storage } from '@amplitude/analytics-types';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nexport class LocalStorage<T> implements Storage<T> {\n async isEnabled(): Promise<boolean> {\n /* istanbul ignore if */\n if (!getGlobalScope()) {\n return false;\n }\n\n const random = String(Date.now());\n const testStorage = new LocalStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStorage.set(testKey, random);\n const value = await testStorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n try {\n const value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(value);\n } catch {\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async getRaw(key: string): Promise<string | undefined> {\n return (await AsyncStorage.getItem(key)) || undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n await AsyncStorage.removeItem(key);\n } catch {\n //\n }\n }\n\n async reset(): Promise<void> {\n try {\n await AsyncStorage.clear();\n } catch {\n //\n }\n }\n}\n"],"mappings":"AAAA,SAASA,cAAT,QAA+B,oCAA/B;AAEA,OAAOC,YAAP,MAAyB,2CAAzB;AAEA,OAAO,MAAMC,YAAN,CAA4C;EAClC,MAATC,SAAS,GAAqB;IAClC;IACA,IAAI,CAACH,cAAc,EAAnB,EAAuB;MACrB,OAAO,KAAP;IACD;;IAED,MAAMI,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAArB;IACA,MAAMC,WAAW,GAAG,IAAIN,YAAJ,EAApB;IACA,MAAMO,OAAO,GAAG,UAAhB;;IACA,IAAI;MACF,MAAMD,WAAW,CAACE,GAAZ,CAAgBD,OAAhB,EAAyBL,MAAzB,CAAN;MACA,MAAMO,KAAK,GAAG,MAAMH,WAAW,CAACI,GAAZ,CAAgBH,OAAhB,CAApB;MACA,OAAOE,KAAK,KAAKP,MAAjB;IACD,CAJD,CAIE,MAAM;MACN;MACA,OAAO,KAAP;IACD,CAPD,SAOU;MACR,MAAMI,WAAW,CAACK,MAAZ,CAAmBJ,OAAnB,CAAN;IACD;EACF;;EAEQ,MAAHG,GAAG,CAACE,GAAD,EAAsC;IAC7C,IAAI;MACF,MAAMH,KAAK,GAAG,MAAM,KAAKI,MAAL,CAAYD,GAAZ,CAApB;;MACA,IAAI,CAACH,KAAL,EAAY;QACV,OAAOK,SAAP;MACD,CAJC,CAKF;;;MACA,OAAOC,IAAI,CAACC,KAAL,CAAWP,KAAX,CAAP;IACD,CAPD,CAOE,MAAM;MACN;MACA,OAAOK,SAAP;IACD;EACF;;EAEW,MAAND,MAAM,CAACD,GAAD,EAA2C;IACrD,OAAO,CAAC,MAAMb,YAAY,CAACkB,OAAb,CAAqBL,GAArB,CAAP,KAAqCE,SAA5C;EACD;;EAEQ,MAAHN,GAAG,CAACI,GAAD,EAAcH,KAAd,EAAuC;IAC9C,IAAI;MACF,MAAMV,YAAY,CAACmB,OAAb,CAAqBN,GAArB,EAA0BG,IAAI,CAACI,SAAL,CAAeV,KAAf,CAA1B,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEW,MAANE,MAAM,CAACC,GAAD,EAA6B;IACvC,IAAI;MACF,MAAMb,YAAY,CAACqB,UAAb,CAAwBR,GAAxB,CAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;EAEU,MAALS,KAAK,GAAkB;IAC3B,IAAI;MACF,MAAMtB,YAAY,CAACuB,KAAb,EAAN;IACD,CAFD,CAEE,MAAM,CACN;IACD;EACF;;AA9DgD"}
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.4.8';
1
+ export const VERSION = '0.4.9';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.4.8';\n"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,OAAhB"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.4.9';\n"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,OAAhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"react-native-client.d.ts","sourceRoot":"","sources":["../../src/react-native-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoC,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,IAAI,SAAS,EACrB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAMpC,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IAClE,IAAI,CAAC,MAAM,SAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAgE/D,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,YAAY,UAAQ;IAkBzF,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAcpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAc5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAUzD,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;CAO/B;AAED,eAAO,MAAM,cAAc,QAAO,iBAsBjC,CAAC;;AAEF,wBAAgC"}
1
+ {"version":3,"file":"react-native-client.d.ts","sourceRoot":"","sources":["../../src/react-native-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoC,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,IAAI,SAAS,EACrB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAMpC,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IAClE,IAAI,CAAC,MAAM,SAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IA4D/D,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,YAAY,UAAQ;IAkBzF,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAcpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAc5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAUzD,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;CAO/B;AAED,eAAO,MAAM,cAAc,QAAO,iBAsBjC,CAAC;;AAEF,wBAAgC"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAC1C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAcxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
1
+ {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/local-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAC1C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAcxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.4.8";
1
+ export declare const VERSION = "0.4.9";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/analytics-react-native",
3
- "version": "0.4.8",
3
+ "version": "0.4.9",
4
4
  "description": "Official React Native SDK",
5
5
  "keywords": [
6
6
  "analytics",
@@ -57,8 +57,8 @@
57
57
  "url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
58
58
  },
59
59
  "dependencies": {
60
- "@amplitude/analytics-client-common": "^0.3.1",
61
- "@amplitude/analytics-core": "^0.9.6",
60
+ "@amplitude/analytics-client-common": "^0.3.2",
61
+ "@amplitude/analytics-core": "^0.9.7",
62
62
  "@amplitude/analytics-types": "^0.11.0",
63
63
  "@amplitude/ua-parser-js": "^0.7.31",
64
64
  "@react-native-async-storage/async-storage": "^1.17.7",
@@ -89,5 +89,5 @@
89
89
  ]
90
90
  ]
91
91
  },
92
- "gitHead": "e0e8c340cf94fd182cc313a177d4148ed89f4bd5"
92
+ "gitHead": "7e75f22a1d9a972f627d18ae2e09add8dac2c63f"
93
93
  }
@@ -68,15 +68,11 @@ export class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {
68
68
 
69
69
  this.initializing = false;
70
70
 
71
- // Step 5: Set timeline ready for processing events
72
- // Send existing events, which might be collected by track before init
73
- this.timeline.isReady = true;
74
- if (!this.config.optOut) {
75
- this.timeline.scheduleApply(0);
76
- }
77
-
78
- // Step 6: Track attributions
71
+ // Step 5: Track attributions
79
72
  await this.runAttributionStrategy(options?.attribution, isNewSession);
73
+
74
+ // Step 6: Run queued dispatch functions
75
+ await this.runQueuedFunctions('dispatchQ');
80
76
  }
81
77
 
82
78
  async runAttributionStrategy(attributionConfig?: AttributionOptions, isNewSession = false) {
@@ -1,10 +1,11 @@
1
+ import { getGlobalScope } from '@amplitude/analytics-client-common';
1
2
  import { Storage } from '@amplitude/analytics-types';
2
3
  import AsyncStorage from '@react-native-async-storage/async-storage';
3
4
 
4
5
  export class LocalStorage<T> implements Storage<T> {
5
6
  async isEnabled(): Promise<boolean> {
6
7
  /* istanbul ignore if */
7
- if (typeof window === 'undefined') {
8
+ if (!getGlobalScope()) {
8
9
  return false;
9
10
  }
10
11
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.4.8';
1
+ export const VERSION = '0.4.9';