@amplitude/analytics-react-native 0.0.1-dev.0 → 0.0.1-dev.3

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.
Files changed (104) hide show
  1. package/ios/AmplitudeReactNative-Bridging-Header.h +1 -4
  2. package/ios/AppleContextProvider.swift +1 -1
  3. package/lib/commonjs/config.js +41 -3
  4. package/lib/commonjs/config.js.map +1 -1
  5. package/lib/commonjs/index.js +6 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/plugins/context.js +1 -1
  8. package/lib/commonjs/plugins/context.js.map +1 -1
  9. package/lib/commonjs/react-native-client.js +22 -1
  10. package/lib/commonjs/react-native-client.js.map +1 -1
  11. package/lib/commonjs/storage/cookie.js +8 -3
  12. package/lib/commonjs/storage/cookie.js.map +1 -1
  13. package/lib/commonjs/utils/snippet-helper.js.map +1 -1
  14. package/lib/commonjs/version.js +1 -1
  15. package/lib/commonjs/version.js.map +1 -1
  16. package/lib/module/config.js +37 -2
  17. package/lib/module/config.js.map +1 -1
  18. package/lib/module/index.js +1 -1
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/plugins/context.js +1 -1
  21. package/lib/module/plugins/context.js.map +1 -1
  22. package/lib/module/react-native-client.js +19 -0
  23. package/lib/module/react-native-client.js.map +1 -1
  24. package/lib/module/storage/cookie.js +8 -3
  25. package/lib/module/storage/cookie.js.map +1 -1
  26. package/lib/module/utils/snippet-helper.js.map +1 -1
  27. package/lib/module/version.js +1 -1
  28. package/lib/module/version.js.map +1 -1
  29. package/lib/typescript/{attribution → src/attribution}/campaign-parser.d.ts +0 -0
  30. package/lib/typescript/src/attribution/campaign-parser.d.ts.map +1 -0
  31. package/lib/typescript/{attribution → src/attribution}/campaign-tracker.d.ts +0 -0
  32. package/lib/typescript/src/attribution/campaign-tracker.d.ts.map +1 -0
  33. package/lib/typescript/{attribution → src/attribution}/constants.d.ts +0 -0
  34. package/lib/typescript/src/attribution/constants.d.ts.map +1 -0
  35. package/lib/typescript/{config.d.ts → src/config.d.ts} +1 -0
  36. package/lib/typescript/src/config.d.ts.map +1 -0
  37. package/lib/typescript/{constants.d.ts → src/constants.d.ts} +0 -0
  38. package/lib/typescript/src/constants.d.ts.map +1 -0
  39. package/lib/typescript/{cookie-migration → src/cookie-migration}/index.d.ts +0 -0
  40. package/lib/typescript/src/cookie-migration/index.d.ts.map +1 -0
  41. package/lib/typescript/src/index.d.ts +6 -0
  42. package/lib/typescript/src/index.d.ts.map +1 -0
  43. package/lib/typescript/{plugins → src/plugins}/context.d.ts +0 -0
  44. package/lib/typescript/src/plugins/context.d.ts.map +1 -0
  45. package/lib/typescript/{react-native-client.d.ts → src/react-native-client.d.ts} +21 -9
  46. package/lib/typescript/src/react-native-client.d.ts.map +1 -0
  47. package/lib/typescript/{session-manager.d.ts → src/session-manager.d.ts} +0 -0
  48. package/lib/typescript/src/session-manager.d.ts.map +1 -0
  49. package/lib/typescript/{storage → src/storage}/cookie.d.ts +0 -0
  50. package/lib/typescript/src/storage/cookie.d.ts.map +1 -0
  51. package/lib/typescript/{storage → src/storage}/local-storage.d.ts +0 -0
  52. package/lib/typescript/src/storage/local-storage.d.ts.map +1 -0
  53. package/lib/typescript/{storage → src/storage}/utm-cookie.d.ts +0 -0
  54. package/lib/typescript/src/storage/utm-cookie.d.ts.map +1 -0
  55. package/lib/typescript/{transports → src/transports}/fetch.d.ts +0 -0
  56. package/lib/typescript/src/transports/fetch.d.ts.map +1 -0
  57. package/lib/typescript/{transports → src/transports}/send-beacon.d.ts +0 -0
  58. package/lib/typescript/src/transports/send-beacon.d.ts.map +1 -0
  59. package/lib/typescript/{transports → src/transports}/xhr.d.ts +0 -0
  60. package/lib/typescript/src/transports/xhr.d.ts.map +1 -0
  61. package/lib/typescript/{utils → src/utils}/cookie-name.d.ts +0 -0
  62. package/lib/typescript/src/utils/cookie-name.d.ts.map +1 -0
  63. package/lib/typescript/{utils → src/utils}/language.d.ts +0 -0
  64. package/lib/typescript/src/utils/language.d.ts.map +1 -0
  65. package/lib/typescript/{utils → src/utils}/platform.d.ts +0 -0
  66. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  67. package/lib/typescript/{utils → src/utils}/query-params.d.ts +0 -0
  68. package/lib/typescript/src/utils/query-params.d.ts.map +1 -0
  69. package/lib/typescript/{utils → src/utils}/snippet-helper.d.ts +0 -0
  70. package/lib/typescript/src/utils/snippet-helper.d.ts.map +1 -0
  71. package/lib/typescript/src/version.d.ts +2 -0
  72. package/lib/typescript/src/version.d.ts.map +1 -0
  73. package/package.json +3 -3
  74. package/src/config.ts +31 -1
  75. package/src/index.ts +1 -0
  76. package/src/plugins/context.ts +1 -1
  77. package/src/react-native-client.ts +17 -0
  78. package/src/storage/cookie.ts +7 -2
  79. package/src/utils/snippet-helper.ts +1 -1
  80. package/src/version.ts +1 -1
  81. package/lib/typescript/attribution/campaign-parser.d.ts.map +0 -1
  82. package/lib/typescript/attribution/campaign-tracker.d.ts.map +0 -1
  83. package/lib/typescript/attribution/constants.d.ts.map +0 -1
  84. package/lib/typescript/config.d.ts.map +0 -1
  85. package/lib/typescript/constants.d.ts.map +0 -1
  86. package/lib/typescript/cookie-migration/index.d.ts.map +0 -1
  87. package/lib/typescript/index.d.ts +0 -6
  88. package/lib/typescript/index.d.ts.map +0 -1
  89. package/lib/typescript/plugins/context.d.ts.map +0 -1
  90. package/lib/typescript/react-native-client.d.ts.map +0 -1
  91. package/lib/typescript/session-manager.d.ts.map +0 -1
  92. package/lib/typescript/storage/cookie.d.ts.map +0 -1
  93. package/lib/typescript/storage/local-storage.d.ts.map +0 -1
  94. package/lib/typescript/storage/utm-cookie.d.ts.map +0 -1
  95. package/lib/typescript/transports/fetch.d.ts.map +0 -1
  96. package/lib/typescript/transports/send-beacon.d.ts.map +0 -1
  97. package/lib/typescript/transports/xhr.d.ts.map +0 -1
  98. package/lib/typescript/utils/cookie-name.d.ts.map +0 -1
  99. package/lib/typescript/utils/language.d.ts.map +0 -1
  100. package/lib/typescript/utils/platform.d.ts.map +0 -1
  101. package/lib/typescript/utils/query-params.d.ts.map +0 -1
  102. package/lib/typescript/utils/snippet-helper.d.ts.map +0 -1
  103. package/lib/typescript/version.d.ts +0 -2
  104. package/lib/typescript/version.d.ts.map +0 -1
@@ -1,5 +1,2 @@
1
- #if __has_include("RCTBridgeModule.h")
2
- #import "RCTBridgeModule.h"
3
- #else
4
1
  #import <React/RCTBridgeModule.h>
5
- #endif
2
+ #import <React/RCTViewManager.h>
@@ -28,7 +28,7 @@ import Foundation
28
28
 
29
29
  private static func getOsVersion() -> String {
30
30
  let systemVersion = ProcessInfo.processInfo.operatingSystemVersion
31
- return "\(systemVersion.majorVersion).\(systemVersion.minorVersion).\(systemVersion.patchVersion)."
31
+ return "\(systemVersion.majorVersion).\(systemVersion.minorVersion).\(systemVersion.patchVersion)"
32
32
  }
33
33
 
34
34
  private static func getDeviceManufacturer() -> String {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useReactNativeConfig = exports.getDefaultConfig = exports.createTransport = exports.createFlexibleStorage = exports.createEventsStorage = exports.createDeviceId = exports.createCookieStorage = exports.ReactNativeConfig = void 0;
6
+ exports.useReactNativeConfig = exports.getTopLevelDomain = exports.getDefaultConfig = exports.createTransport = exports.createFlexibleStorage = exports.createEventsStorage = exports.createDeviceId = exports.createCookieStorage = exports.ReactNativeConfig = void 0;
7
7
 
8
8
  var _analyticsTypes = require("@amplitude/analytics-types");
9
9
 
@@ -158,10 +158,13 @@ class ReactNativeConfig extends _analyticsCore.Config {
158
158
  exports.ReactNativeConfig = ReactNativeConfig;
159
159
 
160
160
  const useReactNativeConfig = async (apiKey, userId, options) => {
161
- var _options$optOut, _await$cookieStorage$, _await$cookieStorage$2, _options$transportPro2;
161
+ var _options$domain2, _options$optOut, _await$cookieStorage$, _await$cookieStorage$2, _options$transportPro2;
162
162
 
163
163
  const defaultConfig = getDefaultConfig();
164
- const cookieStorage = await createCookieStorage(options);
164
+ const domain = (_options$domain2 = options === null || options === void 0 ? void 0 : options.domain) !== null && _options$domain2 !== void 0 ? _options$domain2 : await getTopLevelDomain();
165
+ const cookieStorage = await createCookieStorage({ ...options,
166
+ domain
167
+ });
165
168
  const cookieName = (0, _cookieName.getCookieName)(apiKey);
166
169
  const cookies = await cookieStorage.get(cookieName);
167
170
  const queryParams = (0, _queryParams.getQueryParams)();
@@ -170,6 +173,7 @@ const useReactNativeConfig = async (apiKey, userId, options) => {
170
173
  cookieStorage,
171
174
  sessionManager,
172
175
  deviceId: createDeviceId(cookies === null || cookies === void 0 ? void 0 : cookies.deviceId, options === null || options === void 0 ? void 0 : options.deviceId, queryParams.deviceId),
176
+ domain,
173
177
  optOut: (_options$optOut = options === null || options === void 0 ? void 0 : options.optOut) !== null && _options$optOut !== void 0 ? _options$optOut : Boolean(cookies === null || cookies === void 0 ? void 0 : cookies.optOut),
174
178
  sessionId: (_await$cookieStorage$ = (_await$cookieStorage$2 = await cookieStorage.get(cookieName)) === null || _await$cookieStorage$2 === void 0 ? void 0 : _await$cookieStorage$2.sessionId) !== null && _await$cookieStorage$ !== void 0 ? _await$cookieStorage$ : options === null || options === void 0 ? void 0 : options.sessionId,
175
179
  storageProvider: await createEventsStorage(options),
@@ -254,4 +258,38 @@ const createTransport = transport => {
254
258
  };
255
259
 
256
260
  exports.createTransport = createTransport;
261
+
262
+ const getTopLevelDomain = async url => {
263
+ if (!(await new _cookie.CookieStorage().isEnabled()) || !url && typeof location === 'undefined') {
264
+ return '';
265
+ }
266
+
267
+ const host = url !== null && url !== void 0 ? url : location.hostname;
268
+ const parts = host.split('.');
269
+ const levels = [];
270
+ const storageKey = 'AMP_TLDTEST';
271
+
272
+ for (let i = parts.length - 2; i >= 0; --i) {
273
+ levels.push(parts.slice(i).join('.'));
274
+ }
275
+
276
+ for (let i = 0; i < levels.length; i++) {
277
+ const domain = levels[i];
278
+ const options = {
279
+ domain: '.' + domain
280
+ };
281
+ const storage = new _cookie.CookieStorage(options);
282
+ await storage.set(storageKey, 1);
283
+ const value = await storage.get(storageKey);
284
+
285
+ if (value) {
286
+ await storage.remove(storageKey);
287
+ return '.' + domain;
288
+ }
289
+ }
290
+
291
+ return '';
292
+ };
293
+
294
+ exports.getTopLevelDomain = getTopLevelDomain;
257
295
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getDefaultConfig","cookieStorage","MemoryStorage","cookieExpiration","cookieSameSite","cookieSecure","disableCookies","domain","sessionManager","SessionManager","sessionTimeout","storageProvider","trackingOptions","city","country","carrier","deviceManufacturer","deviceModel","dma","ipAddress","language","osName","osVersion","platform","region","versionName","transportProvider","FetchTransport","ReactNativeConfig","Config","constructor","apiKey","userId","options","defaultConfig","appVersion","deviceId","lastEventTime","optOut","Boolean","partnerId","sessionId","getDeviceId","setDeviceId","getUserId","setUserId","getSessionId","setSessionId","getOptOut","setOptOut","getLastEventTime","setLastEventTime","useReactNativeConfig","createCookieStorage","cookieName","getCookieName","cookies","get","queryParams","getQueryParams","load","createDeviceId","createEventsStorage","createTransport","transport","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","CookieStorage","expirationDays","sameSite","secure","LocalStorage","eventsStorage","idFromCookies","idFromOptions","idFromQueryParams","UUID","TransportType","XHR","XHRTransport","SendBeacon","SendBeaconTransport"],"sources":["config.ts"],"sourcesContent":["import {\n Event,\n ReactNativeOptions,\n ReactNativeConfig as IReactNativeConfig,\n Storage,\n TrackingOptions,\n TransportType,\n UserSession,\n SessionManager as ISessionManager,\n} from '@amplitude/analytics-types';\nimport { Config, MemoryStorage, UUID } from '@amplitude/analytics-core';\n\nimport { CookieStorage } from './storage/cookie';\nimport { FetchTransport } from './transports/fetch';\nimport { LocalStorage } from './storage/local-storage';\nimport { getCookieName } from './utils/cookie-name';\nimport { getQueryParams } from './utils/query-params';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { SessionManager } from './session-manager';\n\nexport const getDefaultConfig = () => {\n const cookieStorage = new MemoryStorage<UserSession>();\n return {\n cookieExpiration: 365,\n cookieSameSite: 'Lax',\n cookieSecure: false,\n cookieStorage,\n disableCookies: false,\n domain: '',\n sessionManager: new SessionManager(cookieStorage, ''),\n sessionTimeout: 30 * 60 * 1000,\n storageProvider: new MemoryStorage<Event[]>(),\n trackingOptions: {\n city: true,\n country: true,\n carrier: true,\n deviceManufacturer: true,\n deviceModel: true,\n dma: true,\n ipAddress: true,\n language: true,\n osName: true,\n osVersion: true,\n platform: true,\n region: true,\n versionName: true,\n },\n transportProvider: new FetchTransport(),\n };\n};\n\nexport class ReactNativeConfig extends Config implements IReactNativeConfig {\n appVersion?: string;\n cookieExpiration: number;\n cookieSameSite: string;\n cookieSecure: boolean;\n cookieStorage: Storage<UserSession>;\n disableCookies: boolean;\n domain: string;\n partnerId?: string;\n sessionTimeout: number;\n trackingOptions: TrackingOptions;\n sessionManager: ISessionManager;\n\n constructor(apiKey: string, userId?: string, options?: ReactNativeOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n ...options,\n apiKey,\n storageProvider: options?.storageProvider ?? defaultConfig.storageProvider,\n transportProvider: options?.transportProvider ?? defaultConfig.transportProvider,\n });\n this.cookieStorage = options?.cookieStorage ?? defaultConfig.cookieStorage;\n this.sessionManager = options?.sessionManager ?? defaultConfig.sessionManager;\n this.sessionTimeout = options?.sessionTimeout ?? defaultConfig.sessionTimeout;\n\n this.appVersion = options?.appVersion;\n this.cookieExpiration = options?.cookieExpiration ?? defaultConfig.cookieExpiration;\n this.cookieSameSite = options?.cookieSameSite ?? defaultConfig.cookieSameSite;\n this.cookieSecure = options?.cookieSecure ?? defaultConfig.cookieSecure;\n this.deviceId = options?.deviceId;\n this.disableCookies = options?.disableCookies ?? defaultConfig.disableCookies;\n this.domain = options?.domain ?? defaultConfig.domain;\n this.lastEventTime = this.lastEventTime ?? options?.lastEventTime;\n this.optOut = Boolean(options?.optOut);\n this.partnerId = options?.partnerId;\n this.sessionId = options?.sessionId;\n this.trackingOptions = options?.trackingOptions ?? defaultConfig.trackingOptions;\n this.userId = userId;\n }\n\n get deviceId() {\n return this.sessionManager.getDeviceId();\n }\n\n set deviceId(deviceId: string | undefined) {\n this.sessionManager.setDeviceId(deviceId);\n }\n\n get userId() {\n return this.sessionManager.getUserId();\n }\n\n set userId(userId: string | undefined) {\n this.sessionManager.setUserId(userId);\n }\n\n get sessionId() {\n return this.sessionManager.getSessionId();\n }\n\n set sessionId(sessionId: number | undefined) {\n this.sessionManager.setSessionId(sessionId);\n }\n\n get optOut() {\n return this.sessionManager.getOptOut();\n }\n\n set optOut(optOut: boolean) {\n this.sessionManager?.setOptOut(Boolean(optOut));\n }\n\n get lastEventTime() {\n return this.sessionManager.getLastEventTime();\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n this.sessionManager.setLastEventTime(lastEventTime);\n }\n}\n\nexport const useReactNativeConfig = async (\n apiKey: string,\n userId?: string,\n options?: ReactNativeOptions,\n): Promise<IReactNativeConfig> => {\n const defaultConfig = getDefaultConfig();\n const cookieStorage = await createCookieStorage(options);\n const cookieName = getCookieName(apiKey);\n const cookies = await cookieStorage.get(cookieName);\n const queryParams = getQueryParams();\n const sessionManager = await new SessionManager(cookieStorage, apiKey).load();\n\n return new ReactNativeConfig(apiKey, userId ?? cookies?.userId, {\n ...options,\n cookieStorage,\n sessionManager,\n deviceId: createDeviceId(cookies?.deviceId, options?.deviceId, queryParams.deviceId),\n optOut: options?.optOut ?? Boolean(cookies?.optOut),\n sessionId: (await cookieStorage.get(cookieName))?.sessionId ?? options?.sessionId,\n storageProvider: await createEventsStorage(options),\n trackingOptions: { ...defaultConfig.trackingOptions, ...options?.trackingOptions },\n transportProvider: options?.transportProvider ?? createTransport(options?.transport),\n });\n};\n\nexport const createCookieStorage = async (\n overrides?: ReactNativeOptions,\n baseConfig = getDefaultConfig(),\n): Promise<Storage<UserSession>> => {\n const options = { ...baseConfig, ...overrides };\n const cookieStorage = overrides?.cookieStorage;\n if (!cookieStorage || !(await cookieStorage.isEnabled())) {\n return createFlexibleStorage<UserSession>(options);\n }\n return cookieStorage;\n};\n\nexport const createFlexibleStorage = async <T>(options: ReactNativeOptions): Promise<Storage<T>> => {\n let storage: Storage<T> = new CookieStorage({\n domain: options.domain,\n expirationDays: options.cookieExpiration,\n sameSite: options.cookieSameSite,\n secure: options.cookieSecure,\n });\n if (options.disableCookies || !(await storage.isEnabled())) {\n storage = new LocalStorage();\n if (!(await storage.isEnabled())) {\n storage = new MemoryStorage();\n }\n }\n return storage;\n};\n\nexport const createEventsStorage = async (overrides?: ReactNativeOptions): Promise<Storage<Event[]>> => {\n let eventsStorage = overrides?.storageProvider;\n if (!eventsStorage || !(await eventsStorage.isEnabled())) {\n eventsStorage = new LocalStorage();\n if (!(await eventsStorage.isEnabled())) {\n eventsStorage = new MemoryStorage();\n }\n }\n return eventsStorage;\n};\n\nexport const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {\n return idFromOptions || idFromQueryParams || idFromCookies || UUID();\n};\n\nexport const createTransport = (transport?: TransportType) => {\n if (transport === TransportType.XHR) {\n return new XHRTransport();\n }\n if (transport === TransportType.SendBeacon) {\n return new SendBeaconTransport();\n }\n return getDefaultConfig().transportProvider;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["getDefaultConfig","cookieStorage","MemoryStorage","cookieExpiration","cookieSameSite","cookieSecure","disableCookies","domain","sessionManager","SessionManager","sessionTimeout","storageProvider","trackingOptions","city","country","carrier","deviceManufacturer","deviceModel","dma","ipAddress","language","osName","osVersion","platform","region","versionName","transportProvider","FetchTransport","ReactNativeConfig","Config","constructor","apiKey","userId","options","defaultConfig","appVersion","deviceId","lastEventTime","optOut","Boolean","partnerId","sessionId","getDeviceId","setDeviceId","getUserId","setUserId","getSessionId","setSessionId","getOptOut","setOptOut","getLastEventTime","setLastEventTime","useReactNativeConfig","getTopLevelDomain","createCookieStorage","cookieName","getCookieName","cookies","get","queryParams","getQueryParams","load","createDeviceId","createEventsStorage","createTransport","transport","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","CookieStorage","expirationDays","sameSite","secure","LocalStorage","eventsStorage","idFromCookies","idFromOptions","idFromQueryParams","UUID","TransportType","XHR","XHRTransport","SendBeacon","SendBeaconTransport","url","location","host","hostname","parts","split","levels","storageKey","i","length","push","slice","join","set","value","remove"],"sources":["config.ts"],"sourcesContent":["import {\n Event,\n ReactNativeOptions,\n ReactNativeConfig as IReactNativeConfig,\n Storage,\n TrackingOptions,\n TransportType,\n UserSession,\n SessionManager as ISessionManager,\n} from '@amplitude/analytics-types';\nimport { Config, MemoryStorage, UUID } from '@amplitude/analytics-core';\n\nimport { CookieStorage } from './storage/cookie';\nimport { FetchTransport } from './transports/fetch';\nimport { LocalStorage } from './storage/local-storage';\nimport { getCookieName } from './utils/cookie-name';\nimport { getQueryParams } from './utils/query-params';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { SessionManager } from './session-manager';\n\nexport const getDefaultConfig = () => {\n const cookieStorage = new MemoryStorage<UserSession>();\n return {\n cookieExpiration: 365,\n cookieSameSite: 'Lax',\n cookieSecure: false,\n cookieStorage,\n disableCookies: false,\n domain: '',\n sessionManager: new SessionManager(cookieStorage, ''),\n sessionTimeout: 30 * 60 * 1000,\n storageProvider: new MemoryStorage<Event[]>(),\n trackingOptions: {\n city: true,\n country: true,\n carrier: true,\n deviceManufacturer: true,\n deviceModel: true,\n dma: true,\n ipAddress: true,\n language: true,\n osName: true,\n osVersion: true,\n platform: true,\n region: true,\n versionName: true,\n },\n transportProvider: new FetchTransport(),\n };\n};\n\nexport class ReactNativeConfig extends Config implements IReactNativeConfig {\n appVersion?: string;\n cookieExpiration: number;\n cookieSameSite: string;\n cookieSecure: boolean;\n cookieStorage: Storage<UserSession>;\n disableCookies: boolean;\n domain: string;\n partnerId?: string;\n sessionTimeout: number;\n trackingOptions: TrackingOptions;\n sessionManager: ISessionManager;\n\n constructor(apiKey: string, userId?: string, options?: ReactNativeOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n ...options,\n apiKey,\n storageProvider: options?.storageProvider ?? defaultConfig.storageProvider,\n transportProvider: options?.transportProvider ?? defaultConfig.transportProvider,\n });\n this.cookieStorage = options?.cookieStorage ?? defaultConfig.cookieStorage;\n this.sessionManager = options?.sessionManager ?? defaultConfig.sessionManager;\n this.sessionTimeout = options?.sessionTimeout ?? defaultConfig.sessionTimeout;\n\n this.appVersion = options?.appVersion;\n this.cookieExpiration = options?.cookieExpiration ?? defaultConfig.cookieExpiration;\n this.cookieSameSite = options?.cookieSameSite ?? defaultConfig.cookieSameSite;\n this.cookieSecure = options?.cookieSecure ?? defaultConfig.cookieSecure;\n this.deviceId = options?.deviceId;\n this.disableCookies = options?.disableCookies ?? defaultConfig.disableCookies;\n this.domain = options?.domain ?? defaultConfig.domain;\n this.lastEventTime = this.lastEventTime ?? options?.lastEventTime;\n this.optOut = Boolean(options?.optOut);\n this.partnerId = options?.partnerId;\n this.sessionId = options?.sessionId;\n this.trackingOptions = options?.trackingOptions ?? defaultConfig.trackingOptions;\n this.userId = userId;\n }\n\n get deviceId() {\n return this.sessionManager.getDeviceId();\n }\n\n set deviceId(deviceId: string | undefined) {\n this.sessionManager.setDeviceId(deviceId);\n }\n\n get userId() {\n return this.sessionManager.getUserId();\n }\n\n set userId(userId: string | undefined) {\n this.sessionManager.setUserId(userId);\n }\n\n get sessionId() {\n return this.sessionManager.getSessionId();\n }\n\n set sessionId(sessionId: number | undefined) {\n this.sessionManager.setSessionId(sessionId);\n }\n\n get optOut() {\n return this.sessionManager.getOptOut();\n }\n\n set optOut(optOut: boolean) {\n this.sessionManager?.setOptOut(Boolean(optOut));\n }\n\n get lastEventTime() {\n return this.sessionManager.getLastEventTime();\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n this.sessionManager.setLastEventTime(lastEventTime);\n }\n}\n\nexport const useReactNativeConfig = async (\n apiKey: string,\n userId?: string,\n options?: ReactNativeOptions,\n): Promise<IReactNativeConfig> => {\n const defaultConfig = getDefaultConfig();\n const domain = options?.domain ?? (await getTopLevelDomain());\n const cookieStorage = await createCookieStorage({ ...options, domain });\n const cookieName = getCookieName(apiKey);\n const cookies = await cookieStorage.get(cookieName);\n const queryParams = getQueryParams();\n const sessionManager = await new SessionManager(cookieStorage, apiKey).load();\n\n return new ReactNativeConfig(apiKey, userId ?? cookies?.userId, {\n ...options,\n cookieStorage,\n sessionManager,\n deviceId: createDeviceId(cookies?.deviceId, options?.deviceId, queryParams.deviceId),\n domain,\n optOut: options?.optOut ?? Boolean(cookies?.optOut),\n sessionId: (await cookieStorage.get(cookieName))?.sessionId ?? options?.sessionId,\n storageProvider: await createEventsStorage(options),\n trackingOptions: { ...defaultConfig.trackingOptions, ...options?.trackingOptions },\n transportProvider: options?.transportProvider ?? createTransport(options?.transport),\n });\n};\n\nexport const createCookieStorage = async (\n overrides?: ReactNativeOptions,\n baseConfig = getDefaultConfig(),\n): Promise<Storage<UserSession>> => {\n const options = { ...baseConfig, ...overrides };\n const cookieStorage = overrides?.cookieStorage;\n if (!cookieStorage || !(await cookieStorage.isEnabled())) {\n return createFlexibleStorage<UserSession>(options);\n }\n return cookieStorage;\n};\n\nexport const createFlexibleStorage = async <T>(options: ReactNativeOptions): Promise<Storage<T>> => {\n let storage: Storage<T> = new CookieStorage({\n domain: options.domain,\n expirationDays: options.cookieExpiration,\n sameSite: options.cookieSameSite,\n secure: options.cookieSecure,\n });\n if (options.disableCookies || !(await storage.isEnabled())) {\n storage = new LocalStorage();\n if (!(await storage.isEnabled())) {\n storage = new MemoryStorage();\n }\n }\n return storage;\n};\n\nexport const createEventsStorage = async (overrides?: ReactNativeOptions): Promise<Storage<Event[]>> => {\n let eventsStorage = overrides?.storageProvider;\n if (!eventsStorage || !(await eventsStorage.isEnabled())) {\n eventsStorage = new LocalStorage();\n if (!(await eventsStorage.isEnabled())) {\n eventsStorage = new MemoryStorage();\n }\n }\n return eventsStorage;\n};\n\nexport const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {\n return idFromOptions || idFromQueryParams || idFromCookies || UUID();\n};\n\nexport const createTransport = (transport?: TransportType) => {\n if (transport === TransportType.XHR) {\n return new XHRTransport();\n }\n if (transport === TransportType.SendBeacon) {\n return new SendBeaconTransport();\n }\n return getDefaultConfig().transportProvider;\n};\n\nexport const getTopLevelDomain = async (url?: string) => {\n if (!(await new CookieStorage<string>().isEnabled()) || (!url && typeof location === 'undefined')) {\n return '';\n }\n\n const host = url ?? location.hostname;\n const parts = host.split('.');\n const levels = [];\n const storageKey = 'AMP_TLDTEST';\n\n for (let i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n for (let i = 0; i < levels.length; i++) {\n const domain = levels[i];\n const options = { domain: '.' + domain };\n const storage = new CookieStorage<number>(options);\n await storage.set(storageKey, 1);\n const value = await storage.get(storageKey);\n if (value) {\n await storage.remove(storageKey);\n return '.' + domain;\n }\n }\n\n return '';\n};\n"],"mappings":"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"}
@@ -22,6 +22,12 @@ Object.defineProperty(exports, "add", {
22
22
  return _reactNativeClient.add;
23
23
  }
24
24
  });
25
+ Object.defineProperty(exports, "flush", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _reactNativeClient.flush;
29
+ }
30
+ });
25
31
  Object.defineProperty(exports, "getDeviceId", {
26
32
  enumerable: true,
27
33
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export {\n add,\n getDeviceId,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} from './react-native-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nimport * as Types from '@amplitude/analytics-types';\nexport { Types };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmBA;;AACA;;AACA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export {\n add,\n flush,\n getDeviceId,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} from './react-native-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nimport * as Types from '@amplitude/analytics-types';\nexport { Types };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAoBA;;AACA;;AACA"}
@@ -41,7 +41,7 @@ class Context {
41
41
 
42
42
  _defineProperty(this, "nativeModule", _reactNative.NativeModules.AmplitudeReactNative);
43
43
 
44
- _defineProperty(this, "library", `amplitude-ts/${_version.VERSION}`);
44
+ _defineProperty(this, "library", `amplitude-react-native-ts/${_version.VERSION}`);
45
45
 
46
46
  let agent;
47
47
  /* istanbul ignore else */
@@ -1 +1 @@
1
- {"version":3,"names":["BROWSER_PLATFORM","IP_ADDRESS","Context","constructor","PluginType","BEFORE","NativeModules","AmplitudeReactNative","VERSION","agent","navigator","userAgent","uaResult","UAParser","getResult","setup","config","Promise","resolve","undefined","execute","context","isSessionValid","sessionId","Date","now","lastEventTime","time","getTime","nativeContext","nativeModule","getApplicationContext","appVersion","version","platform","osName","os_name","browser","name","osVersion","os_version","deviceVendor","device_manufacturer","device","vendor","deviceModel","device_model","model","os","language","getLanguage","carrier","event","user_id","userId","device_id","deviceId","session_id","app_version","trackingOptions","deviceManufacturer","ipAddress","ip","insert_id","UUID","partner_id","partnerId","plan","event_id","eventId","library","timeSinceLastEvent","sessionTimeout"],"sources":["context.ts"],"sourcesContent":["import { BeforePlugin, ReactNativeConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '../utils/language';\nimport { VERSION } from '../version';\nimport { NativeModules } from 'react-native';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\n\ntype NativeContext = {\n version: string;\n platform: string;\n language: string;\n os_name: string;\n os_version: string;\n device_brand: string;\n device_manufacturer: string;\n device_model: string;\n carrier: string;\n};\n\nexport interface AmplitudeReactNative {\n getApplicationContext(): Promise<NativeContext>;\n}\n\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: ReactNativeConfig;\n eventId = 0;\n uaResult: UAParser.IResult;\n nativeModule: AmplitudeReactNative | undefined = NativeModules.AmplitudeReactNative as\n | AmplitudeReactNative\n | undefined;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).getResult();\n }\n\n setup(config: ReactNativeConfig): Promise<undefined> {\n this.config = config;\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n /**\n * Manages user session triggered by new events\n */\n if (!this.isSessionValid()) {\n // Creates new session\n this.config.sessionId = Date.now();\n } // else use previously creates session\n // Updates last event time to extend time-based session\n this.config.lastEventTime = Date.now();\n const time = new Date().getTime();\n const nativeContext = await this.nativeModule?.getApplicationContext();\n const appVersion = nativeContext?.version || this.config.appVersion;\n const platform = nativeContext?.platform || BROWSER_PLATFORM;\n const osName = nativeContext?.os_name || this.uaResult.browser.name;\n const osVersion = nativeContext?.os_version || this.uaResult.browser.version;\n const deviceVendor = nativeContext?.device_manufacturer || this.uaResult.device.vendor;\n const deviceModel = nativeContext?.device_model || this.uaResult.device.model || this.uaResult.os.name;\n const language = nativeContext?.language || getLanguage();\n const carrier = nativeContext?.carrier;\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: appVersion }),\n ...(this.config.trackingOptions.platform && { platform: platform }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: language }),\n ...(this.config.trackingOptions.carrier && { carrier: carrier }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...context,\n event_id: this.eventId++,\n library: this.library,\n };\n return event;\n }\n\n isSessionValid() {\n const lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = Date.now() - lastEventTime;\n return timeSinceLastEvent < this.config.sessionTimeout;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["BROWSER_PLATFORM","IP_ADDRESS","Context","constructor","PluginType","BEFORE","NativeModules","AmplitudeReactNative","VERSION","agent","navigator","userAgent","uaResult","UAParser","getResult","setup","config","Promise","resolve","undefined","execute","context","isSessionValid","sessionId","Date","now","lastEventTime","time","getTime","nativeContext","nativeModule","getApplicationContext","appVersion","version","platform","osName","os_name","browser","name","osVersion","os_version","deviceVendor","device_manufacturer","device","vendor","deviceModel","device_model","model","os","language","getLanguage","carrier","event","user_id","userId","device_id","deviceId","session_id","app_version","trackingOptions","deviceManufacturer","ipAddress","ip","insert_id","UUID","partner_id","partnerId","plan","event_id","eventId","library","timeSinceLastEvent","sessionTimeout"],"sources":["context.ts"],"sourcesContent":["import { BeforePlugin, ReactNativeConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '../utils/language';\nimport { VERSION } from '../version';\nimport { NativeModules } from 'react-native';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\n\ntype NativeContext = {\n version: string;\n platform: string;\n language: string;\n os_name: string;\n os_version: string;\n device_brand: string;\n device_manufacturer: string;\n device_model: string;\n carrier: string;\n};\n\nexport interface AmplitudeReactNative {\n getApplicationContext(): Promise<NativeContext>;\n}\n\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: ReactNativeConfig;\n eventId = 0;\n uaResult: UAParser.IResult;\n nativeModule: AmplitudeReactNative | undefined = NativeModules.AmplitudeReactNative as\n | AmplitudeReactNative\n | undefined;\n library = `amplitude-react-native-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).getResult();\n }\n\n setup(config: ReactNativeConfig): Promise<undefined> {\n this.config = config;\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n /**\n * Manages user session triggered by new events\n */\n if (!this.isSessionValid()) {\n // Creates new session\n this.config.sessionId = Date.now();\n } // else use previously creates session\n // Updates last event time to extend time-based session\n this.config.lastEventTime = Date.now();\n const time = new Date().getTime();\n const nativeContext = await this.nativeModule?.getApplicationContext();\n const appVersion = nativeContext?.version || this.config.appVersion;\n const platform = nativeContext?.platform || BROWSER_PLATFORM;\n const osName = nativeContext?.os_name || this.uaResult.browser.name;\n const osVersion = nativeContext?.os_version || this.uaResult.browser.version;\n const deviceVendor = nativeContext?.device_manufacturer || this.uaResult.device.vendor;\n const deviceModel = nativeContext?.device_model || this.uaResult.device.model || this.uaResult.os.name;\n const language = nativeContext?.language || getLanguage();\n const carrier = nativeContext?.carrier;\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: appVersion }),\n ...(this.config.trackingOptions.platform && { platform: platform }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: language }),\n ...(this.config.trackingOptions.carrier && { carrier: carrier }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...context,\n event_id: this.eventId++,\n library: this.library,\n };\n return event;\n }\n\n isSessionValid() {\n const lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = Date.now() - lastEventTime;\n return timeSinceLastEvent < this.config.sessionTimeout;\n }\n}\n"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setGroup = exports.setDeviceId = exports.revenue = exports.remove = exports.regenerateDeviceId = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getDeviceId = exports.add = exports.AmplitudeReactNative = void 0;
6
+ exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setGroup = exports.setDeviceId = exports.revenue = exports.remove = exports.regenerateDeviceId = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getDeviceId = exports.flush = exports.add = exports.AmplitudeReactNative = void 0;
7
7
 
8
8
  var _analyticsCore = require("@amplitude/analytics-core");
9
9
 
@@ -17,6 +17,8 @@ var _cookieMigration = require("./cookie-migration");
17
17
 
18
18
  var _campaignTracker = require("./attribution/campaign-tracker");
19
19
 
20
+ var _platform = require("./utils/platform");
21
+
20
22
  class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
21
23
  async init(apiKey, userId, options) {
22
24
  var _oldCookies$deviceId, _oldCookies$sessionId, _options$optOut;
@@ -52,6 +54,11 @@ class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
52
54
 
53
55
  async runAttributionStrategy(attributionConfig) {
54
56
  let isNewSession = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
57
+
58
+ if ((0, _platform.isNative)()) {
59
+ return;
60
+ }
61
+
55
62
  const track = this.track.bind(this);
56
63
  const onNewCampaign = this.setSessionId.bind(this, Date.now());
57
64
  const storage = await (0, _config.createFlexibleStorage)(this.config);
@@ -358,5 +365,19 @@ const setOptOut = client.setOptOut.bind(client);
358
365
 
359
366
  exports.setOptOut = setOptOut;
360
367
  const setTransport = client.setTransport.bind(client);
368
+ /**
369
+ * Flush and send all the events which haven't been sent.
370
+ *
371
+ *```typescript
372
+ * // Send all the unsent events
373
+ * flush();
374
+ *
375
+ * // alternatively, this tracking method is awaitable
376
+ * await flush().promise;
377
+ * ```
378
+ */
379
+
361
380
  exports.setTransport = setTransport;
381
+ const flush = (0, _analyticsCore.returnWrapper)(client.flush.bind(client));
382
+ exports.flush = flush;
362
383
  //# sourceMappingURL=react-native-client.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AmplitudeReactNative","AmplitudeCore","init","apiKey","userId","options","oldCookies","parseOldCookies","reactNativeOptions","useReactNativeConfig","deviceId","sessionId","optOut","lastEventTime","undefined","isNewSession","config","Date","now","sessionTimeout","add","Context","Destination","runAttributionStrategy","attribution","attributionConfig","track","bind","onNewCampaign","setSessionId","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","getDeviceId","setDeviceId","regenerateDeviceId","createDeviceId","getSessionId","setOptOut","setTransport","transport","transportProvider","createTransport","identify","eventOptions","isInstanceProxy","queue","_q","convertProxyObjectToRealObject","Identify","groupIdentify","groupType","groupName","revenue","Revenue","client","returnWrapper","remove","logEvent","setGroup"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey: string, userId?: string, options?: ReactNativeOptions & AdditionalReactNativeOptions) {\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(undefined, undefined, reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.config.sessionId = Date.now();\n isNewSession = true;\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 Destination());\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionReactNativeOptions, isNewSession = false) {\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 this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n}\n\nconst client = new AmplitudeReactNative();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n"],"mappings":";;;;;;;AAAA;;AAaA;;AACA;;AACA;;AACA;;AACA;;AAEO,MAAMA,oBAAN,SAAmCC,4BAAnC,CAAoE;EAC/D,MAAJC,IAAI,CAACC,MAAD,EAAiBC,MAAjB,EAAkCC,OAAlC,EAA+F;IAAA;;IACvG;IACA,MAAMC,UAAU,GAAG,MAAM,IAAAC,gCAAA,EAAgBJ,MAAhB,EAAwBE,OAAxB,CAAzB,CAFuG,CAIvG;;IACA,MAAMG,kBAAkB,GAAG,MAAM,IAAAC,4BAAA,EAAqBN,MAArB,EAA6BC,MAAM,IAAIE,UAAU,CAACF,MAAlD,EAA0D,EACzF,GAAGC,OADsF;MAEzFK,QAAQ,0BAAEJ,UAAU,CAACI,QAAb,uEAAyBL,OAAzB,aAAyBA,OAAzB,uBAAyBA,OAAO,CAAEK,QAF+C;MAGzFC,SAAS,2BAAEL,UAAU,CAACK,SAAb,yEAA0BN,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEM,SAH6C;MAIzFC,MAAM,qBAAEP,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEO,MAAX,6DAAqBN,UAAU,CAACM,MAJmD;MAKzFC,aAAa,EAAEP,UAAU,CAACO;IAL+D,CAA1D,CAAjC;IAOA,MAAM,MAAMX,IAAN,CAAWY,SAAX,EAAsBA,SAAtB,EAAiCN,kBAAjC,CAAN,CAZuG,CAcvG;;IACA,IAAIO,YAAY,GAAG,KAAnB;;IACA,IACE,CAAC,KAAKC,MAAL,CAAYL,SAAb,IACC,KAAKK,MAAL,CAAYH,aAAZ,IAA6BI,IAAI,CAACC,GAAL,KAAa,KAAKF,MAAL,CAAYH,aAAzB,GAAyC,KAAKG,MAAL,CAAYG,cAFrF,EAGE;MACA;MACA;MACA;MACA,KAAKH,MAAL,CAAYL,SAAZ,GAAwBM,IAAI,CAACC,GAAL,EAAxB;MACAH,YAAY,GAAG,IAAf;IACD,CAzBsG,CA2BvG;IACA;;;IACA,MAAM,KAAKK,GAAL,CAAS,IAAIC,gBAAJ,EAAT,CAAN;IACA,MAAM,KAAKD,GAAL,CAAS,IAAIE,0BAAJ,EAAT,CAAN,CA9BuG,CAgCvG;;IACA,MAAM,KAAKC,sBAAL,CAA4BlB,OAA5B,aAA4BA,OAA5B,uBAA4BA,OAAO,CAAEmB,WAArC,EAAkDT,YAAlD,CAAN;EACD;;EAE2B,MAAtBQ,sBAAsB,CAACE,iBAAD,EAA0E;IAAA,IAAtBV,YAAsB,uEAAP,KAAO;IACpG,MAAMW,KAAK,GAAG,KAAKA,KAAL,CAAWC,IAAX,CAAgB,IAAhB,CAAd;IACA,MAAMC,aAAa,GAAG,KAAKC,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,EAA6BV,IAAI,CAACC,GAAL,EAA7B,CAAtB;IAEA,MAAMY,OAAO,GAAG,MAAM,IAAAC,6BAAA,EAAgC,KAAKf,MAArC,CAAtB;IACA,MAAMgB,eAAe,GAAG,IAAIC,gCAAJ,CAAoB,KAAKjB,MAAL,CAAYb,MAAhC,EAAwC,EAC9D,GAAGsB,iBAD2D;MAE9DK,OAF8D;MAG9DJ,KAH8D;MAI9DE;IAJ8D,CAAxC,CAAxB;IAOA,MAAMI,eAAe,CAACE,IAAhB,CAAqBnB,YAArB,CAAN;EACD;;EAEDoB,SAAS,GAAG;IACV,OAAO,KAAKnB,MAAL,CAAYZ,MAAnB;EACD;;EAEDgC,SAAS,CAAChC,MAAD,EAA6B;IACpC,KAAKY,MAAL,CAAYZ,MAAZ,GAAqBA,MAArB;EACD;;EAEDiC,WAAW,GAAG;IACZ,OAAO,KAAKrB,MAAL,CAAYN,QAAnB;EACD;;EAED4B,WAAW,CAAC5B,QAAD,EAAmB;IAC5B,KAAKM,MAAL,CAAYN,QAAZ,GAAuBA,QAAvB;EACD;;EAED6B,kBAAkB,GAAG;IACnB,MAAM7B,QAAQ,GAAG,IAAA8B,sBAAA,GAAjB;IACA,KAAKF,WAAL,CAAiB5B,QAAjB;EACD;;EAED+B,YAAY,GAAG;IACb,OAAO,KAAKzB,MAAL,CAAYL,SAAnB;EACD;;EAEDkB,YAAY,CAAClB,SAAD,EAAoB;IAC9B,KAAKK,MAAL,CAAYL,SAAZ,GAAwBA,SAAxB;EACD;;EAED+B,SAAS,CAAC9B,MAAD,EAAkB;IACzB,KAAKI,MAAL,CAAYJ,MAAZ,GAAqBA,MAArB;EACD;;EAED+B,YAAY,CAACC,SAAD,EAA2B;IACrC,KAAK5B,MAAL,CAAY6B,iBAAZ,GAAgC,IAAAC,uBAAA,EAAgBF,SAAhB,CAAhC;EACD;;EAEDG,QAAQ,CAACA,QAAD,EAAsBC,YAAtB,EAAoE;IAC1E,IAAI,IAAAC,8BAAA,EAAgBF,QAAhB,CAAJ,EAA+B;MAC7B,MAAMG,KAAK,GAAGH,QAAQ,CAACI,EAAvB;MACAJ,QAAQ,CAACI,EAAT,GAAc,EAAd;MACAJ,QAAQ,GAAG,IAAAK,6CAAA,EAA+B,IAAIC,uBAAJ,EAA/B,EAA+CH,KAA/C,CAAX;IACD;;IACD,OAAO,MAAMH,QAAN,CAAeA,QAAf,EAAyBC,YAAzB,CAAP;EACD;;EAEDM,aAAa,CACXC,SADW,EAEXC,SAFW,EAGXT,QAHW,EAIXC,YAJW,EAKM;IACjB,IAAI,IAAAC,8BAAA,EAAgBF,QAAhB,CAAJ,EAA+B;MAC7B,MAAMG,KAAK,GAAGH,QAAQ,CAACI,EAAvB;MACAJ,QAAQ,CAACI,EAAT,GAAc,EAAd;MACAJ,QAAQ,GAAG,IAAAK,6CAAA,EAA+B,IAAIC,uBAAJ,EAA/B,EAA+CH,KAA/C,CAAX;IACD;;IACD,OAAO,MAAMI,aAAN,CAAoBC,SAApB,EAA+BC,SAA/B,EAA0CT,QAA1C,EAAoDC,YAApD,CAAP;EACD;;EAEDS,OAAO,CAACA,OAAD,EAAoBT,YAApB,EAAiD;IACtD,IAAI,IAAAC,8BAAA,EAAgBQ,OAAhB,CAAJ,EAA8B;MAC5B,MAAMP,KAAK,GAAGO,OAAO,CAACN,EAAtB;MACAM,OAAO,CAACN,EAAR,GAAa,EAAb;MACAM,OAAO,GAAG,IAAAL,6CAAA,EAA+B,IAAIM,sBAAJ,EAA/B,EAA8CR,KAA9C,CAAV;IACD;;IACD,OAAO,MAAMO,OAAN,CAAcA,OAAd,EAAuBT,YAAvB,CAAP;EACD;;AAvHwE;;;AA0H3E,MAAMW,MAAM,GAAG,IAAI3D,oBAAJ,EAAf;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,MAAME,IAAI,GAAG,IAAA0D,4BAAA,EAAcD,MAAM,CAACzD,IAAP,CAAYyB,IAAZ,CAAiBgC,MAAjB,CAAd,CAAb;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMvC,GAAG,GAAG,IAAAwC,4BAAA,EAAcD,MAAM,CAACvC,GAAP,CAAWO,IAAX,CAAgBgC,MAAhB,CAAd,CAAZ;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAME,MAAM,GAAG,IAAAD,4BAAA,EAAcD,MAAM,CAACE,MAAP,CAAclC,IAAd,CAAmBgC,MAAnB,CAAd,CAAf;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMjC,KAAK,GAAG,IAAAkC,4BAAA,EAAcD,MAAM,CAACjC,KAAP,CAAaC,IAAb,CAAkBgC,MAAlB,CAAd,CAAd;AAEP;AACA;AACA;;;AACO,MAAMG,QAAQ,GAAG,IAAAF,4BAAA,EAAcD,MAAM,CAACG,QAAP,CAAgBnC,IAAhB,CAAqBgC,MAArB,CAAd,CAAjB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMZ,QAAQ,GAAG,IAAAa,4BAAA,EAAcD,MAAM,CAACZ,QAAP,CAAgBpB,IAAhB,CAAqBgC,MAArB,CAAd,CAAjB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAML,aAAa,GAAG,IAAAM,4BAAA,EAAcD,MAAM,CAACL,aAAP,CAAqB3B,IAArB,CAA0BgC,MAA1B,CAAd,CAAtB;;AACA,MAAMI,QAAQ,GAAG,IAAAH,4BAAA,EAAcD,MAAM,CAACI,QAAP,CAAgBpC,IAAhB,CAAqBgC,MAArB,CAAd,CAAjB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMF,OAAO,GAAG,IAAAG,4BAAA,EAAcD,MAAM,CAACF,OAAP,CAAe9B,IAAf,CAAoBgC,MAApB,CAAd,CAAhB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMxB,SAAS,GAAGwB,MAAM,CAACxB,SAAP,CAAiBR,IAAjB,CAAsBgC,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMvB,SAAS,GAAGuB,MAAM,CAACvB,SAAP,CAAiBT,IAAjB,CAAsBgC,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMtB,WAAW,GAAGsB,MAAM,CAACtB,WAAP,CAAmBV,IAAnB,CAAwBgC,MAAxB,CAApB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMrB,WAAW,GAAGqB,MAAM,CAACrB,WAAP,CAAmBX,IAAnB,CAAwBgC,MAAxB,CAApB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMpB,kBAAkB,GAAGoB,MAAM,CAACpB,kBAAP,CAA0BZ,IAA1B,CAA+BgC,MAA/B,CAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMlB,YAAY,GAAGkB,MAAM,CAAClB,YAAP,CAAoBd,IAApB,CAAyBgC,MAAzB,CAArB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAM9B,YAAY,GAAG8B,MAAM,CAAC9B,YAAP,CAAoBF,IAApB,CAAyBgC,MAAzB,CAArB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMjB,SAAS,GAAGiB,MAAM,CAACjB,SAAP,CAAiBf,IAAjB,CAAsBgC,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMhB,YAAY,GAAGgB,MAAM,CAAChB,YAAP,CAAoBhB,IAApB,CAAyBgC,MAAzB,CAArB"}
1
+ {"version":3,"names":["AmplitudeReactNative","AmplitudeCore","init","apiKey","userId","options","oldCookies","parseOldCookies","reactNativeOptions","useReactNativeConfig","deviceId","sessionId","optOut","lastEventTime","undefined","isNewSession","config","Date","now","sessionTimeout","add","Context","Destination","runAttributionStrategy","attribution","attributionConfig","isNative","track","bind","onNewCampaign","setSessionId","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","getDeviceId","setDeviceId","regenerateDeviceId","createDeviceId","getSessionId","setOptOut","setTransport","transport","transportProvider","createTransport","identify","eventOptions","isInstanceProxy","queue","_q","convertProxyObjectToRealObject","Identify","groupIdentify","groupType","groupName","revenue","Revenue","client","returnWrapper","remove","logEvent","setGroup","flush"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { isNative } from './utils/platform';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey: string, userId?: string, options?: ReactNativeOptions & AdditionalReactNativeOptions) {\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(undefined, undefined, reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.config.sessionId = Date.now();\n isNewSession = true;\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 Destination());\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionReactNativeOptions, 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 this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n}\n\nconst client = new AmplitudeReactNative();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n\n/**\n * Flush and send all the events which haven't been sent.\n *\n *```typescript\n * // Send all the unsent events\n * flush();\n *\n * // alternatively, this tracking method is awaitable\n * await flush().promise;\n * ```\n */\nexport const flush = returnWrapper(client.flush.bind(client));\n"],"mappings":"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"}
@@ -45,14 +45,19 @@ class CookieStorage {
45
45
  }
46
46
 
47
47
  async get(key) {
48
- const value = await this.getRaw(key);
48
+ let value = await this.getRaw(key);
49
49
 
50
50
  if (!value) {
51
51
  return undefined;
52
52
  }
53
53
 
54
54
  try {
55
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
55
+ try {
56
+ value = decodeURIComponent(atob(value));
57
+ } catch {// value not encoded
58
+ } // eslint-disable-next-line @typescript-eslint/no-unsafe-return
59
+
60
+
56
61
  return JSON.parse(value);
57
62
  } catch {
58
63
  /* istanbul ignore next */
@@ -85,7 +90,7 @@ class CookieStorage {
85
90
  expireDate = date;
86
91
  }
87
92
 
88
- let str = `${key}=${JSON.stringify(value)}`;
93
+ let str = `${key}=${btoa(encodeURIComponent(JSON.stringify(value)))}`;
89
94
 
90
95
  if (expireDate) {
91
96
  str += `; expires=${expireDate.toUTCString()}`;
@@ -1 +1 @@
1
- {"version":3,"names":["CookieStorage","constructor","options","isEnabled","isNative","window","random","String","Date","now","testStrorage","testKey","set","value","get","remove","key","getRaw","undefined","JSON","parse","cookie","document","split","match","find","c","indexOf","substring","length","expirationDays","expires","expireDate","date","setTime","getTime","str","stringify","toUTCString","domain","secure","sameSite","reset"],"sources":["cookie.ts"],"sourcesContent":["import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';\nimport { isNative } from '../utils/platform';\n\nexport class CookieStorage<T> implements Storage<T> {\n options: CookieStorageOptions;\n\n constructor(options?: CookieStorageOptions) {\n this.options = { ...options };\n }\n\n async isEnabled(): Promise<boolean> {\n if (isNative()) {\n return false;\n }\n /* istanbul ignore if */\n if (typeof window === 'undefined') {\n return false;\n }\n\n const random = String(Date.now());\n const testStrorage = new CookieStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStrorage.set(testKey, random);\n const value = await testStrorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStrorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n const value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n try {\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 const cookie = window.document.cookie.split('; ');\n const match = cookie.find((c) => c.indexOf(key + '=') === 0);\n if (!match) {\n return undefined;\n }\n return match.substring(key.length + 1);\n }\n\n async set(key: string, value: T | null): Promise<void> {\n try {\n const expirationDays = this.options.expirationDays ?? 0;\n const expires = value !== null ? expirationDays : -1;\n let expireDate: Date | undefined = undefined;\n if (expires) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n let str = `${key}=${JSON.stringify(value)}`;\n if (expireDate) {\n str += `; expires=${expireDate.toUTCString()}`;\n }\n str += '; path=/';\n if (this.options.domain) {\n str += `; domain=${this.options.domain}`;\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += `; SameSite=${this.options.sameSite}`;\n }\n window.document.cookie = str;\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n await this.set(key, null);\n }\n\n async reset(): Promise<void> {\n return;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["CookieStorage","constructor","options","isEnabled","isNative","window","random","String","Date","now","testStrorage","testKey","set","value","get","remove","key","getRaw","undefined","decodeURIComponent","atob","JSON","parse","cookie","document","split","match","find","c","indexOf","substring","length","expirationDays","expires","expireDate","date","setTime","getTime","str","btoa","encodeURIComponent","stringify","toUTCString","domain","secure","sameSite","reset"],"sources":["cookie.ts"],"sourcesContent":["import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';\nimport { isNative } from '../utils/platform';\n\nexport class CookieStorage<T> implements Storage<T> {\n options: CookieStorageOptions;\n\n constructor(options?: CookieStorageOptions) {\n this.options = { ...options };\n }\n\n async isEnabled(): Promise<boolean> {\n if (isNative()) {\n return false;\n }\n /* istanbul ignore if */\n if (typeof window === 'undefined') {\n return false;\n }\n\n const random = String(Date.now());\n const testStrorage = new CookieStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStrorage.set(testKey, random);\n const value = await testStrorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStrorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n let value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n try {\n try {\n value = decodeURIComponent(atob(value));\n } catch {\n // value not encoded\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 const cookie = window.document.cookie.split('; ');\n const match = cookie.find((c) => c.indexOf(key + '=') === 0);\n if (!match) {\n return undefined;\n }\n return match.substring(key.length + 1);\n }\n\n async set(key: string, value: T | null): Promise<void> {\n try {\n const expirationDays = this.options.expirationDays ?? 0;\n const expires = value !== null ? expirationDays : -1;\n let expireDate: Date | undefined = undefined;\n if (expires) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n let str = `${key}=${btoa(encodeURIComponent(JSON.stringify(value)))}`;\n if (expireDate) {\n str += `; expires=${expireDate.toUTCString()}`;\n }\n str += '; path=/';\n if (this.options.domain) {\n str += `; domain=${this.options.domain}`;\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += `; SameSite=${this.options.sameSite}`;\n }\n window.document.cookie = str;\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n await this.set(key, null);\n }\n\n async reset(): Promise<void> {\n return;\n }\n}\n"],"mappings":";;;;;;;AACA;;;;AAEO,MAAMA,aAAN,CAA6C;EAGlDC,WAAW,CAACC,OAAD,EAAiC;IAAA;;IAC1C,KAAKA,OAAL,GAAe,EAAE,GAAGA;IAAL,CAAf;EACD;;EAEc,MAATC,SAAS,GAAqB;IAClC,IAAI,IAAAC,kBAAA,GAAJ,EAAgB;MACd,OAAO,KAAP;IACD;IACD;;;IACA,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;MACjC,OAAO,KAAP;IACD;;IAED,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAArB;IACA,MAAMC,YAAY,GAAG,IAAIV,aAAJ,EAArB;IACA,MAAMW,OAAO,GAAG,UAAhB;;IACA,IAAI;MACF,MAAMD,YAAY,CAACE,GAAb,CAAiBD,OAAjB,EAA0BL,MAA1B,CAAN;MACA,MAAMO,KAAK,GAAG,MAAMH,YAAY,CAACI,GAAb,CAAiBH,OAAjB,CAApB;MACA,OAAOE,KAAK,KAAKP,MAAjB;IACD,CAJD,CAIE,MAAM;MACN;MACA,OAAO,KAAP;IACD,CAPD,SAOU;MACR,MAAMI,YAAY,CAACK,MAAb,CAAoBJ,OAApB,CAAN;IACD;EACF;;EAEQ,MAAHG,GAAG,CAACE,GAAD,EAAsC;IAC7C,IAAIH,KAAK,GAAG,MAAM,KAAKI,MAAL,CAAYD,GAAZ,CAAlB;;IACA,IAAI,CAACH,KAAL,EAAY;MACV,OAAOK,SAAP;IACD;;IACD,IAAI;MACF,IAAI;QACFL,KAAK,GAAGM,kBAAkB,CAACC,IAAI,CAACP,KAAD,CAAL,CAA1B;MACD,CAFD,CAEE,MAAM,CACN;MACD,CALC,CAMF;;;MACA,OAAOQ,IAAI,CAACC,KAAL,CAAWT,KAAX,CAAP;IACD,CARD,CAQE,MAAM;MACN;MACA,OAAOK,SAAP;IACD;EACF;;EAEW,MAAND,MAAM,CAACD,GAAD,EAA2C;IACrD,MAAMO,MAAM,GAAGlB,MAAM,CAACmB,QAAP,CAAgBD,MAAhB,CAAuBE,KAAvB,CAA6B,IAA7B,CAAf;IACA,MAAMC,KAAK,GAAGH,MAAM,CAACI,IAAP,CAAaC,CAAD,IAAOA,CAAC,CAACC,OAAF,CAAUb,GAAG,GAAG,GAAhB,MAAyB,CAA5C,CAAd;;IACA,IAAI,CAACU,KAAL,EAAY;MACV,OAAOR,SAAP;IACD;;IACD,OAAOQ,KAAK,CAACI,SAAN,CAAgBd,GAAG,CAACe,MAAJ,GAAa,CAA7B,CAAP;EACD;;EAEQ,MAAHnB,GAAG,CAACI,GAAD,EAAcH,KAAd,EAA8C;IACrD,IAAI;MAAA;;MACF,MAAMmB,cAAc,4BAAG,KAAK9B,OAAL,CAAa8B,cAAhB,yEAAkC,CAAtD;MACA,MAAMC,OAAO,GAAGpB,KAAK,KAAK,IAAV,GAAiBmB,cAAjB,GAAkC,CAAC,CAAnD;MACA,IAAIE,UAA4B,GAAGhB,SAAnC;;MACA,IAAIe,OAAJ,EAAa;QACX,MAAME,IAAI,GAAG,IAAI3B,IAAJ,EAAb;QACA2B,IAAI,CAACC,OAAL,CAAaD,IAAI,CAACE,OAAL,KAAiBJ,OAAO,GAAG,EAAV,GAAe,EAAf,GAAoB,EAApB,GAAyB,IAAvD;QACAC,UAAU,GAAGC,IAAb;MACD;;MACD,IAAIG,GAAG,GAAI,GAAEtB,GAAI,IAAGuB,IAAI,CAACC,kBAAkB,CAACnB,IAAI,CAACoB,SAAL,CAAe5B,KAAf,CAAD,CAAnB,CAA4C,EAApE;;MACA,IAAIqB,UAAJ,EAAgB;QACdI,GAAG,IAAK,aAAYJ,UAAU,CAACQ,WAAX,EAAyB,EAA7C;MACD;;MACDJ,GAAG,IAAI,UAAP;;MACA,IAAI,KAAKpC,OAAL,CAAayC,MAAjB,EAAyB;QACvBL,GAAG,IAAK,YAAW,KAAKpC,OAAL,CAAayC,MAAO,EAAvC;MACD;;MACD,IAAI,KAAKzC,OAAL,CAAa0C,MAAjB,EAAyB;QACvBN,GAAG,IAAI,UAAP;MACD;;MACD,IAAI,KAAKpC,OAAL,CAAa2C,QAAjB,EAA2B;QACzBP,GAAG,IAAK,cAAa,KAAKpC,OAAL,CAAa2C,QAAS,EAA3C;MACD;;MACDxC,MAAM,CAACmB,QAAP,CAAgBD,MAAhB,GAAyBe,GAAzB;IACD,CAxBD,CAwBE,MAAM,CACN;IACD;EACF;;EAEW,MAANvB,MAAM,CAACC,GAAD,EAA6B;IACvC,MAAM,KAAKJ,GAAL,CAASI,GAAT,EAAc,IAAd,CAAN;EACD;;EAEU,MAAL8B,KAAK,GAAkB;IAC3B;EACD;;AA/FiD"}
@@ -1 +1 @@
1
- {"version":3,"names":["runQueuedFunctions","instance","queue","convertProxyObjectToRealObject","i","length","name","args","resolve","fn","result","apply","promise","isInstanceProxy","instanceProxy","_q","undefined"],"sources":["snippet-helper.ts"],"sourcesContent":["import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Result>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACO,MAAMA,kBAAkB,GAAG,CAACC,QAAD,EAAmBC,KAAnB,KAAyC;EACzEC,8BAA8B,CAACF,QAAD,EAAWC,KAAX,CAA9B;AACD,CAFM;AAIP;AACA;AACA;AACA;;;;;AACO,MAAMC,8BAA8B,GAAG,CAAIF,QAAJ,EAAiBC,KAAjB,KAA0C;EACtF,KAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAM;MAAEE,IAAF;MAAQC,IAAR;MAAcC;IAAd,IAA0BN,KAAK,CAACE,CAAD,CAArC;IACA,MAAMK,EAAE,GAAGR,QAAQ,IAAIA,QAAQ,CAACK,IAAD,CAA/B;;IACA,IAAI,OAAOG,EAAP,KAAc,UAAlB,EAA8B;MAC5B,MAAMC,MAAM,GAAGD,EAAE,CAACE,KAAH,CAASV,QAAT,EAAmBM,IAAnB,CAAf;;MACA,IAAI,OAAOC,OAAP,KAAmB,UAAvB,EAAmC;QACjCA,OAAO,CAACE,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEE,OAAT,CAAP;MACD;IACF;EACF;;EACD,OAAOX,QAAP;AACD,CAZM;AAcP;AACA;AACA;;;;;AACO,MAAMY,eAAe,GAAIZ,QAAD,IAAkD;EAC/E,MAAMa,aAAa,GAAGb,QAAtB;EACA,OAAOa,aAAa,IAAIA,aAAa,CAACC,EAAd,KAAqBC,SAA7C;AACD,CAHM"}
1
+ {"version":3,"names":["runQueuedFunctions","instance","queue","convertProxyObjectToRealObject","i","length","name","args","resolve","fn","result","apply","promise","isInstanceProxy","instanceProxy","_q","undefined"],"sources":["snippet-helper.ts"],"sourcesContent":["import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Promise<Result>>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACO,MAAMA,kBAAkB,GAAG,CAACC,QAAD,EAAmBC,KAAnB,KAAyC;EACzEC,8BAA8B,CAACF,QAAD,EAAWC,KAAX,CAA9B;AACD,CAFM;AAIP;AACA;AACA;AACA;;;;;AACO,MAAMC,8BAA8B,GAAG,CAAIF,QAAJ,EAAiBC,KAAjB,KAA0C;EACtF,KAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;IACrC,MAAM;MAAEE,IAAF;MAAQC,IAAR;MAAcC;IAAd,IAA0BN,KAAK,CAACE,CAAD,CAArC;IACA,MAAMK,EAAE,GAAGR,QAAQ,IAAIA,QAAQ,CAACK,IAAD,CAA/B;;IACA,IAAI,OAAOG,EAAP,KAAc,UAAlB,EAA8B;MAC5B,MAAMC,MAAM,GAAGD,EAAE,CAACE,KAAH,CAASV,QAAT,EAAmBM,IAAnB,CAAf;;MACA,IAAI,OAAOC,OAAP,KAAmB,UAAvB,EAAmC;QACjCA,OAAO,CAACE,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAEE,OAAT,CAAP;MACD;IACF;EACF;;EACD,OAAOX,QAAP;AACD,CAZM;AAcP;AACA;AACA;;;;;AACO,MAAMY,eAAe,GAAIZ,QAAD,IAAkD;EAC/E,MAAMa,aAAa,GAAGb,QAAtB;EACA,OAAOa,aAAa,IAAIA,aAAa,CAACC,EAAd,KAAqBC,SAA7C;AACD,CAHM"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- const VERSION = '0.0.1-dev.0';
7
+ const VERSION = '0.0.1-dev.3';
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.0.1-dev.0';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,aAAhB"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.0.1-dev.3';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,aAAhB"}
@@ -135,10 +135,13 @@ export class ReactNativeConfig extends Config {
135
135
 
136
136
  }
137
137
  export const useReactNativeConfig = async (apiKey, userId, options) => {
138
- var _options$optOut, _await$cookieStorage$, _await$cookieStorage$2, _options$transportPro2;
138
+ var _options$domain2, _options$optOut, _await$cookieStorage$, _await$cookieStorage$2, _options$transportPro2;
139
139
 
140
140
  const defaultConfig = getDefaultConfig();
141
- const cookieStorage = await createCookieStorage(options);
141
+ const domain = (_options$domain2 = options === null || options === void 0 ? void 0 : options.domain) !== null && _options$domain2 !== void 0 ? _options$domain2 : await getTopLevelDomain();
142
+ const cookieStorage = await createCookieStorage({ ...options,
143
+ domain
144
+ });
142
145
  const cookieName = getCookieName(apiKey);
143
146
  const cookies = await cookieStorage.get(cookieName);
144
147
  const queryParams = getQueryParams();
@@ -147,6 +150,7 @@ export const useReactNativeConfig = async (apiKey, userId, options) => {
147
150
  cookieStorage,
148
151
  sessionManager,
149
152
  deviceId: createDeviceId(cookies === null || cookies === void 0 ? void 0 : cookies.deviceId, options === null || options === void 0 ? void 0 : options.deviceId, queryParams.deviceId),
153
+ domain,
150
154
  optOut: (_options$optOut = options === null || options === void 0 ? void 0 : options.optOut) !== null && _options$optOut !== void 0 ? _options$optOut : Boolean(cookies === null || cookies === void 0 ? void 0 : cookies.optOut),
151
155
  sessionId: (_await$cookieStorage$ = (_await$cookieStorage$2 = await cookieStorage.get(cookieName)) === null || _await$cookieStorage$2 === void 0 ? void 0 : _await$cookieStorage$2.sessionId) !== null && _await$cookieStorage$ !== void 0 ? _await$cookieStorage$ : options === null || options === void 0 ? void 0 : options.sessionId,
152
156
  storageProvider: await createEventsStorage(options),
@@ -214,4 +218,35 @@ export const createTransport = transport => {
214
218
 
215
219
  return getDefaultConfig().transportProvider;
216
220
  };
221
+ export const getTopLevelDomain = async url => {
222
+ if (!(await new CookieStorage().isEnabled()) || !url && typeof location === 'undefined') {
223
+ return '';
224
+ }
225
+
226
+ const host = url !== null && url !== void 0 ? url : location.hostname;
227
+ const parts = host.split('.');
228
+ const levels = [];
229
+ const storageKey = 'AMP_TLDTEST';
230
+
231
+ for (let i = parts.length - 2; i >= 0; --i) {
232
+ levels.push(parts.slice(i).join('.'));
233
+ }
234
+
235
+ for (let i = 0; i < levels.length; i++) {
236
+ const domain = levels[i];
237
+ const options = {
238
+ domain: '.' + domain
239
+ };
240
+ const storage = new CookieStorage(options);
241
+ await storage.set(storageKey, 1);
242
+ const value = await storage.get(storageKey);
243
+
244
+ if (value) {
245
+ await storage.remove(storageKey);
246
+ return '.' + domain;
247
+ }
248
+ }
249
+
250
+ return '';
251
+ };
217
252
  //# sourceMappingURL=config.js.map