@amplitude/analytics-react-native 0.0.1-dev.9 → 0.2.0

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 (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/lib/commonjs/config.js +17 -9
  4. package/lib/commonjs/config.js.map +1 -1
  5. package/lib/commonjs/index.js +8 -2
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/plugins/identity.js +1 -1
  8. package/lib/commonjs/plugins/identity.js.map +1 -1
  9. package/lib/commonjs/react-native-client.js +32 -5
  10. package/lib/commonjs/react-native-client.js.map +1 -1
  11. package/lib/commonjs/version.js +1 -1
  12. package/lib/commonjs/version.js.map +1 -1
  13. package/lib/module/config.js +17 -9
  14. package/lib/module/config.js.map +1 -1
  15. package/lib/module/index.js +6 -4
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/plugins/identity.js +1 -1
  18. package/lib/module/plugins/identity.js.map +1 -1
  19. package/lib/module/react-native-client.js +29 -3
  20. package/lib/module/react-native-client.js.map +1 -1
  21. package/lib/module/version.js +1 -1
  22. package/lib/module/version.js.map +1 -1
  23. package/lib/typescript/attribution/campaign-tracker.d.ts +0 -1
  24. package/lib/typescript/attribution/campaign-tracker.d.ts.map +1 -1
  25. package/lib/typescript/config.d.ts +1 -1
  26. package/lib/typescript/config.d.ts.map +1 -1
  27. package/lib/typescript/index.d.ts +3 -2
  28. package/lib/typescript/index.d.ts.map +1 -1
  29. package/lib/typescript/react-native-client.d.ts +14 -1
  30. package/lib/typescript/react-native-client.d.ts.map +1 -1
  31. package/lib/typescript/version.d.ts +1 -1
  32. package/lib/typescript/version.d.ts.map +1 -1
  33. package/package.json +10 -9
  34. package/src/config.ts +16 -7
  35. package/src/index.ts +5 -1
  36. package/src/plugins/identity.ts +1 -1
  37. package/src/react-native-client.ts +28 -3
  38. package/src/version.ts +1 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Amplitude Analytics
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -30,7 +30,7 @@ yarn add @react-native-async-storage/async-storage
30
30
  Initialization is necessary before any instrumentation is done. The API key for your Amplitude project is required.
31
31
 
32
32
  ```typescript
33
- amplitude.init(API_KEY)
33
+ amplitude.init(API_KEY);
34
34
  ```
35
35
 
36
36
  ### Tracking an Event
@@ -59,7 +59,11 @@ class ReactNativeConfig extends _analyticsCore.Config {
59
59
  var _options$storageProvi, _options$transportPro, _options$cookieStorag, _options$sessionManag, _options$sessionTimeo, _options$cookieExpira, _options$cookieSameSi, _options$cookieSecure, _options$disableCooki, _options$domain, _this$lastEventTime, _options$trackingOpti;
60
60
 
61
61
  const defaultConfig = getDefaultConfig();
62
- super({ ...options,
62
+ super({
63
+ flushIntervalMillis: 1000,
64
+ flushMaxRetries: 5,
65
+ flushQueueSize: 30,
66
+ ...options,
63
67
  apiKey,
64
68
  storageProvider: (_options$storageProvi = options === null || options === void 0 ? void 0 : options.storageProvider) !== null && _options$storageProvi !== void 0 ? _options$storageProvi : defaultConfig.storageProvider,
65
69
  transportProvider: (_options$transportPro = options === null || options === void 0 ? void 0 : options.transportProvider) !== null && _options$transportPro !== void 0 ? _options$transportPro : defaultConfig.transportProvider
@@ -218,17 +222,21 @@ const createFlexibleStorage = async options => {
218
222
  exports.createFlexibleStorage = createFlexibleStorage;
219
223
 
220
224
  const createEventsStorage = async overrides => {
221
- let eventsStorage = overrides === null || overrides === void 0 ? void 0 : overrides.storageProvider;
222
-
223
- if (!eventsStorage || !(await eventsStorage.isEnabled())) {
224
- eventsStorage = new _localStorage.LocalStorage();
225
-
226
- if (!(await eventsStorage.isEnabled())) {
227
- eventsStorage = new _analyticsCore.MemoryStorage();
225
+ const hasStorageProviderProperty = overrides && Object.prototype.hasOwnProperty.call(overrides, 'storageProvider'); // If storageProperty is explicitly undefined like `{ storageProperty: undefined }`
226
+ // then storageProvider is undefined
227
+ // If storageProvider is implicitly undefined like `{ }`
228
+ // then storageProvider is LocalStorage
229
+ // Otherwise storageProvider is overriden
230
+
231
+ if (!hasStorageProviderProperty || overrides.storageProvider) {
232
+ for (const storage of [overrides === null || overrides === void 0 ? void 0 : overrides.storageProvider, new _localStorage.LocalStorage()]) {
233
+ if (storage && (await storage.isEnabled())) {
234
+ return storage;
235
+ }
228
236
  }
229
237
  }
230
238
 
231
- return eventsStorage;
239
+ return undefined;
232
240
  };
233
241
 
234
242
  exports.createEventsStorage = createEventsStorage;
@@ -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","getTopLevelDomain","createCookieStorage","cookieName","getCookieName","cookies","get","queryParams","getQueryParams","load","createDeviceId","createEventsStorage","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","CookieStorage","expirationDays","sameSite","secure","LocalStorage","eventsStorage","idFromCookies","idFromOptions","idFromQueryParams","UUID","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 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 { 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 ?? new FetchTransport(),\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 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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"}
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","flushIntervalMillis","flushMaxRetries","flushQueueSize","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","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","CookieStorage","expirationDays","sameSite","secure","LocalStorage","hasStorageProviderProperty","Object","prototype","hasOwnProperty","call","undefined","idFromCookies","idFromOptions","idFromQueryParams","UUID","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 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 { 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 flushIntervalMillis: 1000,\n flushMaxRetries: 5,\n flushQueueSize: 30,\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 ?? new FetchTransport(),\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[]> | undefined> => {\n const hasStorageProviderProperty = overrides && Object.prototype.hasOwnProperty.call(overrides, 'storageProvider');\n // If storageProperty is explicitly undefined like `{ storageProperty: undefined }`\n // then storageProvider is undefined\n // If storageProvider is implicitly undefined like `{ }`\n // then storageProvider is LocalStorage\n // Otherwise storageProvider is overriden\n if (!hasStorageProviderProperty || overrides.storageProvider) {\n for (const storage of [overrides?.storageProvider, new LocalStorage<Event[]>()]) {\n if (storage && (await storage.isEnabled())) {\n return storage;\n }\n }\n }\n return undefined;\n};\n\nexport const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {\n return idFromOptions || idFromQueryParams || idFromCookies || UUID();\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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"}
@@ -76,6 +76,12 @@ Object.defineProperty(exports, "remove", {
76
76
  return _reactNativeClient.remove;
77
77
  }
78
78
  });
79
+ Object.defineProperty(exports, "reset", {
80
+ enumerable: true,
81
+ get: function () {
82
+ return _reactNativeClient.reset;
83
+ }
84
+ });
79
85
  Object.defineProperty(exports, "revenue", {
80
86
  enumerable: true,
81
87
  get: function () {
@@ -123,9 +129,9 @@ var _reactNativeClient = require("./react-native-client");
123
129
 
124
130
  var _analyticsCore = require("@amplitude/analytics-core");
125
131
 
126
- var _Types = _interopRequireWildcard(require("@amplitude/analytics-types"));
132
+ var Types = _interopRequireWildcard(require("@amplitude/analytics-types"));
127
133
 
128
- exports.Types = _Types;
134
+ exports.Types = Types;
129
135
 
130
136
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
131
137
 
@@ -1 +1 @@
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 setUserId,\n track,\n} from './react-native-client';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport * as Types from '@amplitude/analytics-types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmBA"}
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 reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setUserId,\n track,\n} from './react-native-client';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n// Hack - react-native apps have trouble with:\n// export * as Types from '@amplitude/analytics-types\nimport * as Types from '@amplitude/analytics-types';\nexport { Types };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAoBA;;AAGA"}
@@ -24,7 +24,7 @@ class IdentityEventSender {
24
24
  const userProperties = context.user_properties;
25
25
 
26
26
  if (userProperties) {
27
- this.identityStore.editIdentity().setUserProperties(userProperties).commit();
27
+ this.identityStore.editIdentity().updateUserProperties(userProperties).commit();
28
28
  }
29
29
 
30
30
  return context;
@@ -1 +1 @@
1
- {"version":3,"names":["IdentityEventSender","PluginType","BEFORE","getAnalyticsConnector","identityStore","execute","context","userProperties","user_properties","editIdentity","setUserProperties","commit","setup","_","Promise","resolve","undefined"],"sources":["identity.ts"],"sourcesContent":["import { BeforePlugin, PluginType, Event, Config } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../utils/analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n name = 'identity';\n type = PluginType.BEFORE as const;\n\n identityStore = getAnalyticsConnector().identityStore;\n\n async execute(context: Event): Promise<Event> {\n const userProperties = context.user_properties as Record<string, any>;\n if (userProperties) {\n this.identityStore.editIdentity().setUserProperties(userProperties).commit();\n }\n return context;\n }\n\n setup(_: Config): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEO,MAAMA,mBAAN,CAAkD;EAAA;IAAA,8BAChD,UADgD;;IAAA,8BAEhDC,0BAAA,CAAWC,MAFqC;;IAAA,uCAIvC,IAAAC,yCAAA,IAAwBC,aAJe;EAAA;;EAM1C,MAAPC,OAAO,CAACC,OAAD,EAAiC;IAC5C,MAAMC,cAAc,GAAGD,OAAO,CAACE,eAA/B;;IACA,IAAID,cAAJ,EAAoB;MAClB,KAAKH,aAAL,CAAmBK,YAAnB,GAAkCC,iBAAlC,CAAoDH,cAApD,EAAoEI,MAApE;IACD;;IACD,OAAOL,OAAP;EACD;;EAEDM,KAAK,CAACC,CAAD,EAAgC;IACnC,OAAOC,OAAO,CAACC,OAAR,CAAgBC,SAAhB,CAAP;EACD;;AAhBsD"}
1
+ {"version":3,"names":["IdentityEventSender","PluginType","BEFORE","getAnalyticsConnector","identityStore","execute","context","userProperties","user_properties","editIdentity","updateUserProperties","commit","setup","_","Promise","resolve","undefined"],"sources":["identity.ts"],"sourcesContent":["import { BeforePlugin, PluginType, Event, Config } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../utils/analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n name = 'identity';\n type = PluginType.BEFORE as const;\n\n identityStore = getAnalyticsConnector().identityStore;\n\n async execute(context: Event): Promise<Event> {\n const userProperties = context.user_properties as Record<string, any>;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return context;\n }\n\n setup(_: Config): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEO,MAAMA,mBAAN,CAAkD;EAAA;IAAA,8BAChD,UADgD;;IAAA,8BAEhDC,0BAAA,CAAWC,MAFqC;;IAAA,uCAIvC,IAAAC,yCAAA,IAAwBC,aAJe;EAAA;;EAM1C,MAAPC,OAAO,CAACC,OAAD,EAAiC;IAC5C,MAAMC,cAAc,GAAGD,OAAO,CAACE,eAA/B;;IACA,IAAID,cAAJ,EAAoB;MAClB,KAAKH,aAAL,CAAmBK,YAAnB,GAAkCC,oBAAlC,CAAuDH,cAAvD,EAAuEI,MAAvE;IACD;;IACD,OAAOL,OAAP;EACD;;EAEDM,KAAK,CAACC,CAAD,EAAgC;IACnC,OAAOC,OAAO,CAACC,OAAR,CAAgBC,SAAhB,CAAP;EACD;;AAhBsD"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.track = exports.setUserId = 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;
6
+ exports.track = exports.setUserId = exports.setSessionId = exports.setOptOut = exports.setGroup = exports.setDeviceId = exports.revenue = exports.reset = 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
 
@@ -34,7 +34,7 @@ class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
34
34
  optOut: (_options$optOut = options === null || options === void 0 ? void 0 : options.optOut) !== null && _options$optOut !== void 0 ? _options$optOut : oldCookies.optOut,
35
35
  lastEventTime: oldCookies.lastEventTime
36
36
  });
37
- await super.init(undefined, undefined, reactNativeOptions); // Step 3: Manage session
37
+ await super._init(reactNativeOptions); // Step 3: Manage session
38
38
 
39
39
  let isNewSession = false;
40
40
 
@@ -58,7 +58,15 @@ class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
58
58
 
59
59
  await this.add(new _context.Context());
60
60
  await this.add(new _identity.IdentityEventSender());
61
- await this.add(new _analyticsCore.Destination()); // Step 5: Track attributions
61
+ await this.add(new _analyticsCore.Destination()); // Step 5: Set timeline ready for processing events
62
+ // Send existing events, which might be collected by track before init
63
+
64
+ this.timeline.isReady = true;
65
+
66
+ if (!this.config.optOut) {
67
+ this.timeline.scheduleApply(0);
68
+ } // Step 6: Track attributions
69
+
62
70
 
63
71
  await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession);
64
72
  }
@@ -108,6 +116,11 @@ class AmplitudeReactNative extends _analyticsCore.AmplitudeCore {
108
116
  this.setDeviceId(deviceId);
109
117
  }
110
118
 
119
+ reset() {
120
+ this.setUserId(undefined);
121
+ this.regenerateDeviceId();
122
+ }
123
+
111
124
  getSessionId() {
112
125
  return this.config.sessionId;
113
126
  }
@@ -287,7 +300,7 @@ const setDeviceId = client.setDeviceId.bind(client);
287
300
  /**
288
301
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
289
302
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
290
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
303
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
291
304
  *
292
305
  * ```typescript
293
306
  * regenerateDeviceId();
@@ -296,6 +309,20 @@ const setDeviceId = client.setDeviceId.bind(client);
296
309
 
297
310
  exports.setDeviceId = setDeviceId;
298
311
  const regenerateDeviceId = client.regenerateDeviceId.bind(client);
312
+ /**
313
+ * reset is a shortcut to anonymize users after they log out, by:
314
+ * - setting userId to `undefined`
315
+ * - regenerating a new random deviceId
316
+ *
317
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
318
+ *
319
+ * ```typescript
320
+ * reset();
321
+ * ```
322
+ */
323
+
324
+ exports.regenerateDeviceId = regenerateDeviceId;
325
+ const reset = client.reset.bind(client);
299
326
  /**
300
327
  * Returns current session ID.
301
328
  *
@@ -304,7 +331,7 @@ const regenerateDeviceId = client.regenerateDeviceId.bind(client);
304
331
  * ```
305
332
  */
306
333
 
307
- exports.regenerateDeviceId = regenerateDeviceId;
334
+ exports.reset = reset;
308
335
  const getSessionId = client.getSessionId.bind(client);
309
336
  /**
310
337
  * Sets a new session ID.
@@ -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","connector","getAnalyticsConnector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","Context","IdentityEventSender","Destination","runAttributionStrategy","attribution","attributionConfig","isNative","bind","onNewCampaign","setSessionId","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","editIdentity","commit","getDeviceId","setDeviceId","regenerateDeviceId","createDeviceId","getSessionId","setOptOut","client","returnWrapper","remove","logEvent","identify","groupIdentify","setGroup","revenue","flush"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { isNative } from './utils/platform';\nimport { IdentityEventSender } from './plugins/identity';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\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 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 // 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 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 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 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\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 * 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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"}
1
+ {"version":3,"names":["AmplitudeReactNative","AmplitudeCore","init","apiKey","userId","options","oldCookies","parseOldCookies","reactNativeOptions","useReactNativeConfig","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","connector","getAnalyticsConnector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","Context","IdentityEventSender","Destination","timeline","isReady","scheduleApply","runAttributionStrategy","attribution","attributionConfig","isNative","bind","onNewCampaign","setSessionId","storage","createFlexibleStorage","campaignTracker","CampaignTracker","send","getUserId","setUserId","editIdentity","commit","getDeviceId","setDeviceId","regenerateDeviceId","createDeviceId","reset","undefined","getSessionId","setOptOut","client","returnWrapper","remove","logEvent","identify","groupIdentify","setGroup","revenue","flush"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { isNative } from './utils/platform';\nimport { IdentityEventSender } from './plugins/identity';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\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(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 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 // 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?: 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 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 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 regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n reset() {\n this.setUserId(undefined);\n this.regenerateDeviceId();\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\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 `undefined` 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 * reset is a shortcut to anonymize users after they log out, by:\n * - setting userId to `undefined`\n * - regenerating a new random deviceId\n *\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * reset();\n * ```\n */\nexport const reset = client.reset.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 * 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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"}
@@ -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.9';
7
+ const VERSION = '0.2.0';
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.9';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,aAAhB"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.2.0';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,OAAhB"}
@@ -42,7 +42,11 @@ export class ReactNativeConfig extends Config {
42
42
  var _options$storageProvi, _options$transportPro, _options$cookieStorag, _options$sessionManag, _options$sessionTimeo, _options$cookieExpira, _options$cookieSameSi, _options$cookieSecure, _options$disableCooki, _options$domain, _this$lastEventTime, _options$trackingOpti;
43
43
 
44
44
  const defaultConfig = getDefaultConfig();
45
- super({ ...options,
45
+ super({
46
+ flushIntervalMillis: 1000,
47
+ flushMaxRetries: 5,
48
+ flushQueueSize: 30,
49
+ ...options,
46
50
  apiKey,
47
51
  storageProvider: (_options$storageProvi = options === null || options === void 0 ? void 0 : options.storageProvider) !== null && _options$storageProvi !== void 0 ? _options$storageProvi : defaultConfig.storageProvider,
48
52
  transportProvider: (_options$transportPro = options === null || options === void 0 ? void 0 : options.transportProvider) !== null && _options$transportPro !== void 0 ? _options$transportPro : defaultConfig.transportProvider
@@ -189,17 +193,21 @@ export const createFlexibleStorage = async options => {
189
193
  return storage;
190
194
  };
191
195
  export const createEventsStorage = async overrides => {
192
- let eventsStorage = overrides === null || overrides === void 0 ? void 0 : overrides.storageProvider;
193
-
194
- if (!eventsStorage || !(await eventsStorage.isEnabled())) {
195
- eventsStorage = new LocalStorage();
196
-
197
- if (!(await eventsStorage.isEnabled())) {
198
- eventsStorage = new MemoryStorage();
196
+ const hasStorageProviderProperty = overrides && Object.prototype.hasOwnProperty.call(overrides, 'storageProvider'); // If storageProperty is explicitly undefined like `{ storageProperty: undefined }`
197
+ // then storageProvider is undefined
198
+ // If storageProvider is implicitly undefined like `{ }`
199
+ // then storageProvider is LocalStorage
200
+ // Otherwise storageProvider is overriden
201
+
202
+ if (!hasStorageProviderProperty || overrides.storageProvider) {
203
+ for (const storage of [overrides === null || overrides === void 0 ? void 0 : overrides.storageProvider, new LocalStorage()]) {
204
+ if (storage && (await storage.isEnabled())) {
205
+ return storage;
206
+ }
199
207
  }
200
208
  }
201
209
 
202
- return eventsStorage;
210
+ return undefined;
203
211
  };
204
212
  export const createDeviceId = (idFromCookies, idFromOptions, idFromQueryParams) => {
205
213
  return idFromOptions || idFromQueryParams || idFromCookies || UUID();
@@ -1 +1 @@
1
- {"version":3,"names":["Config","MemoryStorage","UUID","CookieStorage","FetchTransport","LocalStorage","getCookieName","getQueryParams","SessionManager","getDefaultConfig","cookieStorage","cookieExpiration","cookieSameSite","cookieSecure","disableCookies","domain","sessionManager","sessionTimeout","storageProvider","trackingOptions","city","country","carrier","deviceManufacturer","deviceModel","dma","ipAddress","language","osName","osVersion","platform","region","versionName","transportProvider","ReactNativeConfig","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","cookies","get","queryParams","load","createDeviceId","createEventsStorage","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","expirationDays","sameSite","secure","eventsStorage","idFromCookies","idFromOptions","idFromQueryParams","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 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 { 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 ?? new FetchTransport(),\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 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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"}
1
+ {"version":3,"names":["Config","MemoryStorage","UUID","CookieStorage","FetchTransport","LocalStorage","getCookieName","getQueryParams","SessionManager","getDefaultConfig","cookieStorage","cookieExpiration","cookieSameSite","cookieSecure","disableCookies","domain","sessionManager","sessionTimeout","storageProvider","trackingOptions","city","country","carrier","deviceManufacturer","deviceModel","dma","ipAddress","language","osName","osVersion","platform","region","versionName","transportProvider","ReactNativeConfig","constructor","apiKey","userId","options","defaultConfig","flushIntervalMillis","flushMaxRetries","flushQueueSize","appVersion","deviceId","lastEventTime","optOut","Boolean","partnerId","sessionId","getDeviceId","setDeviceId","getUserId","setUserId","getSessionId","setSessionId","getOptOut","setOptOut","getLastEventTime","setLastEventTime","useReactNativeConfig","getTopLevelDomain","createCookieStorage","cookieName","cookies","get","queryParams","load","createDeviceId","createEventsStorage","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","expirationDays","sameSite","secure","hasStorageProviderProperty","Object","prototype","hasOwnProperty","call","undefined","idFromCookies","idFromOptions","idFromQueryParams","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 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 { 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 flushIntervalMillis: 1000,\n flushMaxRetries: 5,\n flushQueueSize: 30,\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 ?? new FetchTransport(),\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[]> | undefined> => {\n const hasStorageProviderProperty = overrides && Object.prototype.hasOwnProperty.call(overrides, 'storageProvider');\n // If storageProperty is explicitly undefined like `{ storageProperty: undefined }`\n // then storageProvider is undefined\n // If storageProvider is implicitly undefined like `{ }`\n // then storageProvider is LocalStorage\n // Otherwise storageProvider is overriden\n if (!hasStorageProviderProperty || overrides.storageProvider) {\n for (const storage of [overrides?.storageProvider, new LocalStorage<Event[]>()]) {\n if (storage && (await storage.isEnabled())) {\n return storage;\n }\n }\n }\n return undefined;\n};\n\nexport const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {\n return idFromOptions || idFromQueryParams || idFromCookies || UUID();\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":";;AASA,SAASA,MAAT,EAAiBC,aAAjB,EAAgCC,IAAhC,QAA4C,2BAA5C;AAEA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,cAAT,QAA+B,oBAA/B;AACA,SAASC,YAAT,QAA6B,yBAA7B;AACA,SAASC,aAAT,QAA8B,qBAA9B;AACA,SAASC,cAAT,QAA+B,sBAA/B;AACA,SAASC,cAAT,QAA+B,mBAA/B;AAEA,OAAO,MAAMC,gBAAgB,GAAG,MAAM;EACpC,MAAMC,aAAa,GAAG,IAAIT,aAAJ,EAAtB;EACA,OAAO;IACLU,gBAAgB,EAAE,GADb;IAELC,cAAc,EAAE,KAFX;IAGLC,YAAY,EAAE,KAHT;IAILH,aAJK;IAKLI,cAAc,EAAE,KALX;IAMLC,MAAM,EAAE,EANH;IAOLC,cAAc,EAAE,IAAIR,cAAJ,CAAmBE,aAAnB,EAAkC,EAAlC,CAPX;IAQLO,cAAc,EAAE,KAAK,EAAL,GAAU,IARrB;IASLC,eAAe,EAAE,IAAIjB,aAAJ,EATZ;IAULkB,eAAe,EAAE;MACfC,IAAI,EAAE,IADS;MAEfC,OAAO,EAAE,IAFM;MAGfC,OAAO,EAAE,IAHM;MAIfC,kBAAkB,EAAE,IAJL;MAKfC,WAAW,EAAE,IALE;MAMfC,GAAG,EAAE,IANU;MAOfC,SAAS,EAAE,IAPI;MAQfC,QAAQ,EAAE,IARK;MASfC,MAAM,EAAE,IATO;MAUfC,SAAS,EAAE,IAVI;MAWfC,QAAQ,EAAE,IAXK;MAYfC,MAAM,EAAE,IAZO;MAafC,WAAW,EAAE;IAbE,CAVZ;IAyBLC,iBAAiB,EAAE,IAAI7B,cAAJ;EAzBd,CAAP;AA2BD,CA7BM;AA+BP,OAAO,MAAM8B,iBAAN,SAAgClC,MAAhC,CAAqE;EAa1EmC,WAAW,CAACC,MAAD,EAAiBC,MAAjB,EAAkCC,OAAlC,EAAgE;IAAA;;IACzE,MAAMC,aAAa,GAAG9B,gBAAgB,EAAtC;IACA,MAAM;MACJ+B,mBAAmB,EAAE,IADjB;MAEJC,eAAe,EAAE,CAFb;MAGJC,cAAc,EAAE,EAHZ;MAIJ,GAAGJ,OAJC;MAKJF,MALI;MAMJlB,eAAe,2BAAEoB,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEpB,eAAX,yEAA8BqB,aAAa,CAACrB,eANvD;MAOJe,iBAAiB,2BAAEK,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEL,iBAAX,yEAAgCM,aAAa,CAACN;IAP3D,CAAN;;IAFyE;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAWzE,KAAKvB,aAAL,4BAAqB4B,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAE5B,aAA9B,yEAA+C6B,aAAa,CAAC7B,aAA7D;IACA,KAAKM,cAAL,4BAAsBsB,OAAtB,aAAsBA,OAAtB,uBAAsBA,OAAO,CAAEtB,cAA/B,yEAAiDuB,aAAa,CAACvB,cAA/D;IACA,KAAKC,cAAL,4BAAsBqB,OAAtB,aAAsBA,OAAtB,uBAAsBA,OAAO,CAAErB,cAA/B,yEAAiDsB,aAAa,CAACtB,cAA/D;IAEA,KAAK0B,UAAL,GAAkBL,OAAlB,aAAkBA,OAAlB,uBAAkBA,OAAO,CAAEK,UAA3B;IACA,KAAKhC,gBAAL,4BAAwB2B,OAAxB,aAAwBA,OAAxB,uBAAwBA,OAAO,CAAE3B,gBAAjC,yEAAqD4B,aAAa,CAAC5B,gBAAnE;IACA,KAAKC,cAAL,4BAAsB0B,OAAtB,aAAsBA,OAAtB,uBAAsBA,OAAO,CAAE1B,cAA/B,yEAAiD2B,aAAa,CAAC3B,cAA/D;IACA,KAAKC,YAAL,4BAAoByB,OAApB,aAAoBA,OAApB,uBAAoBA,OAAO,CAAEzB,YAA7B,yEAA6C0B,aAAa,CAAC1B,YAA3D;IACA,KAAK+B,QAAL,GAAgBN,OAAhB,aAAgBA,OAAhB,uBAAgBA,OAAO,CAAEM,QAAzB;IACA,KAAK9B,cAAL,4BAAsBwB,OAAtB,aAAsBA,OAAtB,uBAAsBA,OAAO,CAAExB,cAA/B,yEAAiDyB,aAAa,CAACzB,cAA/D;IACA,KAAKC,MAAL,sBAAcuB,OAAd,aAAcA,OAAd,uBAAcA,OAAO,CAAEvB,MAAvB,6DAAiCwB,aAAa,CAACxB,MAA/C;IACA,KAAK8B,aAAL,0BAAqB,KAAKA,aAA1B,qEAA2CP,OAA3C,aAA2CA,OAA3C,uBAA2CA,OAAO,CAAEO,aAApD;IACA,KAAKC,MAAL,GAAcC,OAAO,CAACT,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEQ,MAAV,CAArB;IACA,KAAKE,SAAL,GAAiBV,OAAjB,aAAiBA,OAAjB,uBAAiBA,OAAO,CAAEU,SAA1B;IACA,KAAKC,SAAL,GAAiBX,OAAjB,aAAiBA,OAAjB,uBAAiBA,OAAO,CAAEW,SAA1B;IACA,KAAK9B,eAAL,4BAAuBmB,OAAvB,aAAuBA,OAAvB,uBAAuBA,OAAO,CAAEnB,eAAhC,yEAAmDoB,aAAa,CAACpB,eAAjE;IACA,KAAKkB,MAAL,GAAcA,MAAd;EACD;;EAEW,IAARO,QAAQ,GAAG;IACb,OAAO,KAAK5B,cAAL,CAAoBkC,WAApB,EAAP;EACD;;EAEW,IAARN,QAAQ,CAACA,QAAD,EAA+B;IACzC,KAAK5B,cAAL,CAAoBmC,WAApB,CAAgCP,QAAhC;EACD;;EAES,IAANP,MAAM,GAAG;IACX,OAAO,KAAKrB,cAAL,CAAoBoC,SAApB,EAAP;EACD;;EAES,IAANf,MAAM,CAACA,MAAD,EAA6B;IACrC,KAAKrB,cAAL,CAAoBqC,SAApB,CAA8BhB,MAA9B;EACD;;EAEY,IAATY,SAAS,GAAG;IACd,OAAO,KAAKjC,cAAL,CAAoBsC,YAApB,EAAP;EACD;;EAEY,IAATL,SAAS,CAACA,SAAD,EAAgC;IAC3C,KAAKjC,cAAL,CAAoBuC,YAApB,CAAiCN,SAAjC;EACD;;EAES,IAANH,MAAM,GAAG;IACX,OAAO,KAAK9B,cAAL,CAAoBwC,SAApB,EAAP;EACD;;EAES,IAANV,MAAM,CAACA,MAAD,EAAkB;IAAA;;IAC1B,6BAAK9B,cAAL,8EAAqByC,SAArB,CAA+BV,OAAO,CAACD,MAAD,CAAtC;EACD;;EAEgB,IAAbD,aAAa,GAAG;IAClB,OAAO,KAAK7B,cAAL,CAAoB0C,gBAApB,EAAP;EACD;;EAEgB,IAAbb,aAAa,CAACA,aAAD,EAAoC;IACnD,KAAK7B,cAAL,CAAoB2C,gBAApB,CAAqCd,aAArC;EACD;;AAjFyE;AAoF5E,OAAO,MAAMe,oBAAoB,GAAG,OAClCxB,MADkC,EAElCC,MAFkC,EAGlCC,OAHkC,KAIF;EAAA;;EAChC,MAAMC,aAAa,GAAG9B,gBAAgB,EAAtC;EACA,MAAMM,MAAM,uBAAGuB,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEvB,MAAZ,+DAAuB,MAAM8C,iBAAiB,EAA1D;EACA,MAAMnD,aAAa,GAAG,MAAMoD,mBAAmB,CAAC,EAAE,GAAGxB,OAAL;IAAcvB;EAAd,CAAD,CAA/C;EACA,MAAMgD,UAAU,GAAGzD,aAAa,CAAC8B,MAAD,CAAhC;EACA,MAAM4B,OAAO,GAAG,MAAMtD,aAAa,CAACuD,GAAd,CAAkBF,UAAlB,CAAtB;EACA,MAAMG,WAAW,GAAG3D,cAAc,EAAlC;EACA,MAAMS,cAAc,GAAG,MAAM,IAAIR,cAAJ,CAAmBE,aAAnB,EAAkC0B,MAAlC,EAA0C+B,IAA1C,EAA7B;EAEA,OAAO,IAAIjC,iBAAJ,CAAsBE,MAAtB,EAA8BC,MAA9B,aAA8BA,MAA9B,cAA8BA,MAA9B,GAAwC2B,OAAxC,aAAwCA,OAAxC,uBAAwCA,OAAO,CAAE3B,MAAjD,EAAyD,EAC9D,GAAGC,OAD2D;IAE9D5B,aAF8D;IAG9DM,cAH8D;IAI9D4B,QAAQ,EAAEwB,cAAc,CAACJ,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEpB,QAAV,EAAoBN,OAApB,aAAoBA,OAApB,uBAAoBA,OAAO,CAAEM,QAA7B,EAAuCsB,WAAW,CAACtB,QAAnD,CAJsC;IAK9D7B,MAL8D;IAM9D+B,MAAM,qBAAER,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEQ,MAAX,6DAAqBC,OAAO,CAACiB,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAElB,MAAV,CAN4B;IAO9DG,SAAS,qDAAG,MAAMvC,aAAa,CAACuD,GAAd,CAAkBF,UAAlB,CAAT,2DAAE,uBAAuCd,SAAzC,yEAAsDX,OAAtD,aAAsDA,OAAtD,uBAAsDA,OAAO,CAAEW,SAPV;IAQ9D/B,eAAe,EAAE,MAAMmD,mBAAmB,CAAC/B,OAAD,CARoB;IAS9DnB,eAAe,EAAE,EAAE,GAAGoB,aAAa,CAACpB,eAAnB;MAAoC,IAAGmB,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEnB,eAAZ;IAApC,CAT6C;IAU9Dc,iBAAiB,4BAAEK,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEL,iBAAX,2EAAgC,IAAI7B,cAAJ;EAVa,CAAzD,CAAP;AAYD,CAzBM;AA2BP,OAAO,MAAM0D,mBAAmB,GAAG,gBACjCQ,SADiC,EAGC;EAAA,IADlCC,UACkC,uEADrB9D,gBAAgB,EACK;EAClC,MAAM6B,OAAO,GAAG,EAAE,GAAGiC,UAAL;IAAiB,GAAGD;EAApB,CAAhB;EACA,MAAM5D,aAAa,GAAG4D,SAAH,aAAGA,SAAH,uBAAGA,SAAS,CAAE5D,aAAjC;;EACA,IAAI,CAACA,aAAD,IAAkB,EAAE,MAAMA,aAAa,CAAC8D,SAAd,EAAR,CAAtB,EAA0D;IACxD,OAAOC,qBAAqB,CAAcnC,OAAd,CAA5B;EACD;;EACD,OAAO5B,aAAP;AACD,CAVM;AAYP,OAAO,MAAM+D,qBAAqB,GAAG,MAAUnC,OAAV,IAA+D;EAClG,IAAIoC,OAAmB,GAAG,IAAIvE,aAAJ,CAAkB;IAC1CY,MAAM,EAAEuB,OAAO,CAACvB,MAD0B;IAE1C4D,cAAc,EAAErC,OAAO,CAAC3B,gBAFkB;IAG1CiE,QAAQ,EAAEtC,OAAO,CAAC1B,cAHwB;IAI1CiE,MAAM,EAAEvC,OAAO,CAACzB;EAJ0B,CAAlB,CAA1B;;EAMA,IAAIyB,OAAO,CAACxB,cAAR,IAA0B,EAAE,MAAM4D,OAAO,CAACF,SAAR,EAAR,CAA9B,EAA4D;IAC1DE,OAAO,GAAG,IAAIrE,YAAJ,EAAV;;IACA,IAAI,EAAE,MAAMqE,OAAO,CAACF,SAAR,EAAR,CAAJ,EAAkC;MAChCE,OAAO,GAAG,IAAIzE,aAAJ,EAAV;IACD;EACF;;EACD,OAAOyE,OAAP;AACD,CAdM;AAgBP,OAAO,MAAML,mBAAmB,GAAG,MAAOC,SAAP,IAAiF;EAClH,MAAMQ,0BAA0B,GAAGR,SAAS,IAAIS,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCZ,SAArC,EAAgD,iBAAhD,CAAhD,CADkH,CAElH;EACA;EACA;EACA;EACA;;EACA,IAAI,CAACQ,0BAAD,IAA+BR,SAAS,CAACpD,eAA7C,EAA8D;IAC5D,KAAK,MAAMwD,OAAX,IAAsB,CAACJ,SAAD,aAACA,SAAD,uBAACA,SAAS,CAAEpD,eAAZ,EAA6B,IAAIb,YAAJ,EAA7B,CAAtB,EAAiF;MAC/E,IAAIqE,OAAO,KAAK,MAAMA,OAAO,CAACF,SAAR,EAAX,CAAX,EAA4C;QAC1C,OAAOE,OAAP;MACD;IACF;EACF;;EACD,OAAOS,SAAP;AACD,CAfM;AAiBP,OAAO,MAAMf,cAAc,GAAG,CAACgB,aAAD,EAAyBC,aAAzB,EAAiDC,iBAAjD,KAAgF;EAC5G,OAAOD,aAAa,IAAIC,iBAAjB,IAAsCF,aAAtC,IAAuDlF,IAAI,EAAlE;AACD,CAFM;AAIP,OAAO,MAAM2D,iBAAiB,GAAG,MAAO0B,GAAP,IAAwB;EACvD,IAAI,EAAE,MAAM,IAAIpF,aAAJ,GAA4BqE,SAA5B,EAAR,KAAqD,CAACe,GAAD,IAAQ,OAAOC,QAAP,KAAoB,WAArF,EAAmG;IACjG,OAAO,EAAP;EACD;;EAED,MAAMC,IAAI,GAAGF,GAAH,aAAGA,GAAH,cAAGA,GAAH,GAAUC,QAAQ,CAACE,QAA7B;EACA,MAAMC,KAAK,GAAGF,IAAI,CAACG,KAAL,CAAW,GAAX,CAAd;EACA,MAAMC,MAAM,GAAG,EAAf;EACA,MAAMC,UAAU,GAAG,aAAnB;;EAEA,KAAK,IAAIC,CAAC,GAAGJ,KAAK,CAACK,MAAN,GAAe,CAA5B,EAA+BD,CAAC,IAAI,CAApC,EAAuC,EAAEA,CAAzC,EAA4C;IAC1CF,MAAM,CAACI,IAAP,CAAYN,KAAK,CAACO,KAAN,CAAYH,CAAZ,EAAeI,IAAf,CAAoB,GAApB,CAAZ;EACD;;EACD,KAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAACG,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;IACtC,MAAMhF,MAAM,GAAG8E,MAAM,CAACE,CAAD,CAArB;IACA,MAAMzD,OAAO,GAAG;MAAEvB,MAAM,EAAE,MAAMA;IAAhB,CAAhB;IACA,MAAM2D,OAAO,GAAG,IAAIvE,aAAJ,CAA0BmC,OAA1B,CAAhB;IACA,MAAMoC,OAAO,CAAC0B,GAAR,CAAYN,UAAZ,EAAwB,CAAxB,CAAN;IACA,MAAMO,KAAK,GAAG,MAAM3B,OAAO,CAACT,GAAR,CAAY6B,UAAZ,CAApB;;IACA,IAAIO,KAAJ,EAAW;MACT,MAAM3B,OAAO,CAAC4B,MAAR,CAAeR,UAAf,CAAN;MACA,OAAO,MAAM/E,MAAb;IACD;EACF;;EAED,OAAO,EAAP;AACD,CA1BM"}
@@ -1,5 +1,7 @@
1
- export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setUserId, track } from './react-native-client';
2
- export { Revenue, Identify } from '@amplitude/analytics-core';
3
- import * as _Types from '@amplitude/analytics-types';
4
- export { _Types as Types };
1
+ export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, reset, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setUserId, track } from './react-native-client';
2
+ export { Revenue, Identify } from '@amplitude/analytics-core'; // Hack - react-native apps have trouble with:
3
+ // export * as Types from '@amplitude/analytics-types
4
+
5
+ import * as Types from '@amplitude/analytics-types';
6
+ export { Types };
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["add","flush","getDeviceId","getSessionId","getUserId","groupIdentify","identify","init","logEvent","remove","revenue","setDeviceId","setGroup","setOptOut","setSessionId","setUserId","track","Revenue","Identify","Types"],"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 setUserId,\n track,\n} from './react-native-client';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport * as Types from '@amplitude/analytics-types';\n"],"mappings":"AAAA,SACEA,GADF,EAEEC,KAFF,EAGEC,WAHF,EAIEC,YAJF,EAKEC,SALF,EAMEC,aANF,EAOEC,QAPF,EAQEC,IARF,EASEC,QATF,EAUEC,MAVF,EAWEC,OAXF,EAYEC,WAZF,EAaEC,QAbF,EAcEC,SAdF,EAeEC,YAfF,EAgBEC,SAhBF,EAiBEC,KAjBF,QAkBO,uBAlBP;AAmBA,SAASC,OAAT,EAAkBC,QAAlB,QAAkC,2BAAlC;wBACuB,4B;mBAAXC,K"}
1
+ {"version":3,"names":["add","flush","getDeviceId","getSessionId","getUserId","groupIdentify","identify","init","logEvent","remove","reset","revenue","setDeviceId","setGroup","setOptOut","setSessionId","setUserId","track","Revenue","Identify","Types"],"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 reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setUserId,\n track,\n} from './react-native-client';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n// Hack - react-native apps have trouble with:\n// export * as Types from '@amplitude/analytics-types\nimport * as Types from '@amplitude/analytics-types';\nexport { Types };\n"],"mappings":"AAAA,SACEA,GADF,EAEEC,KAFF,EAGEC,WAHF,EAIEC,YAJF,EAKEC,SALF,EAMEC,aANF,EAOEC,QAPF,EAQEC,IARF,EASEC,QATF,EAUEC,MAVF,EAWEC,KAXF,EAYEC,OAZF,EAaEC,WAbF,EAcEC,QAdF,EAeEC,SAfF,EAgBEC,YAhBF,EAiBEC,SAjBF,EAkBEC,KAlBF,QAmBO,uBAnBP;AAoBA,SAASC,OAAT,EAAkBC,QAAlB,QAAkC,2BAAlC,C,CACA;AACA;;AACA,OAAO,KAAKC,KAAZ,MAAuB,4BAAvB;AACA,SAASA,KAAT"}
@@ -15,7 +15,7 @@ export class IdentityEventSender {
15
15
  const userProperties = context.user_properties;
16
16
 
17
17
  if (userProperties) {
18
- this.identityStore.editIdentity().setUserProperties(userProperties).commit();
18
+ this.identityStore.editIdentity().updateUserProperties(userProperties).commit();
19
19
  }
20
20
 
21
21
  return context;
@@ -1 +1 @@
1
- {"version":3,"names":["PluginType","getAnalyticsConnector","IdentityEventSender","BEFORE","identityStore","execute","context","userProperties","user_properties","editIdentity","setUserProperties","commit","setup","_","Promise","resolve","undefined"],"sources":["identity.ts"],"sourcesContent":["import { BeforePlugin, PluginType, Event, Config } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../utils/analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n name = 'identity';\n type = PluginType.BEFORE as const;\n\n identityStore = getAnalyticsConnector().identityStore;\n\n async execute(context: Event): Promise<Event> {\n const userProperties = context.user_properties as Record<string, any>;\n if (userProperties) {\n this.identityStore.editIdentity().setUserProperties(userProperties).commit();\n }\n return context;\n }\n\n setup(_: Config): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n"],"mappings":";;AAAA,SAAuBA,UAAvB,QAAwD,4BAAxD;AACA,SAASC,qBAAT,QAAsC,8BAAtC;AAEA,OAAO,MAAMC,mBAAN,CAAkD;EAAA;IAAA,8BAChD,UADgD;;IAAA,8BAEhDF,UAAU,CAACG,MAFqC;;IAAA,uCAIvCF,qBAAqB,GAAGG,aAJe;EAAA;;EAM1C,MAAPC,OAAO,CAACC,OAAD,EAAiC;IAC5C,MAAMC,cAAc,GAAGD,OAAO,CAACE,eAA/B;;IACA,IAAID,cAAJ,EAAoB;MAClB,KAAKH,aAAL,CAAmBK,YAAnB,GAAkCC,iBAAlC,CAAoDH,cAApD,EAAoEI,MAApE;IACD;;IACD,OAAOL,OAAP;EACD;;EAEDM,KAAK,CAACC,CAAD,EAAgC;IACnC,OAAOC,OAAO,CAACC,OAAR,CAAgBC,SAAhB,CAAP;EACD;;AAhBsD"}
1
+ {"version":3,"names":["PluginType","getAnalyticsConnector","IdentityEventSender","BEFORE","identityStore","execute","context","userProperties","user_properties","editIdentity","updateUserProperties","commit","setup","_","Promise","resolve","undefined"],"sources":["identity.ts"],"sourcesContent":["import { BeforePlugin, PluginType, Event, Config } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../utils/analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n name = 'identity';\n type = PluginType.BEFORE as const;\n\n identityStore = getAnalyticsConnector().identityStore;\n\n async execute(context: Event): Promise<Event> {\n const userProperties = context.user_properties as Record<string, any>;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return context;\n }\n\n setup(_: Config): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n"],"mappings":";;AAAA,SAAuBA,UAAvB,QAAwD,4BAAxD;AACA,SAASC,qBAAT,QAAsC,8BAAtC;AAEA,OAAO,MAAMC,mBAAN,CAAkD;EAAA;IAAA,8BAChD,UADgD;;IAAA,8BAEhDF,UAAU,CAACG,MAFqC;;IAAA,uCAIvCF,qBAAqB,GAAGG,aAJe;EAAA;;EAM1C,MAAPC,OAAO,CAACC,OAAD,EAAiC;IAC5C,MAAMC,cAAc,GAAGD,OAAO,CAACE,eAA/B;;IACA,IAAID,cAAJ,EAAoB;MAClB,KAAKH,aAAL,CAAmBK,YAAnB,GAAkCC,oBAAlC,CAAuDH,cAAvD,EAAuEI,MAAvE;IACD;;IACD,OAAOL,OAAP;EACD;;EAEDM,KAAK,CAACC,CAAD,EAAgC;IACnC,OAAOC,OAAO,CAACC,OAAR,CAAgBC,SAAhB,CAAP;EACD;;AAhBsD"}
@@ -19,7 +19,7 @@ export class AmplitudeReactNative extends AmplitudeCore {
19
19
  optOut: (_options$optOut = options === null || options === void 0 ? void 0 : options.optOut) !== null && _options$optOut !== void 0 ? _options$optOut : oldCookies.optOut,
20
20
  lastEventTime: oldCookies.lastEventTime
21
21
  });
22
- await super.init(undefined, undefined, reactNativeOptions); // Step 3: Manage session
22
+ await super._init(reactNativeOptions); // Step 3: Manage session
23
23
 
24
24
  let isNewSession = false;
25
25
 
@@ -43,7 +43,15 @@ export class AmplitudeReactNative extends AmplitudeCore {
43
43
 
44
44
  await this.add(new Context());
45
45
  await this.add(new IdentityEventSender());
46
- await this.add(new Destination()); // Step 5: Track attributions
46
+ await this.add(new Destination()); // Step 5: Set timeline ready for processing events
47
+ // Send existing events, which might be collected by track before init
48
+
49
+ this.timeline.isReady = true;
50
+
51
+ if (!this.config.optOut) {
52
+ this.timeline.scheduleApply(0);
53
+ } // Step 6: Track attributions
54
+
47
55
 
48
56
  await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession);
49
57
  }
@@ -93,6 +101,11 @@ export class AmplitudeReactNative extends AmplitudeCore {
93
101
  this.setDeviceId(deviceId);
94
102
  }
95
103
 
104
+ reset() {
105
+ this.setUserId(undefined);
106
+ this.regenerateDeviceId();
107
+ }
108
+
96
109
  getSessionId() {
97
110
  return this.config.sessionId;
98
111
  }
@@ -258,7 +271,7 @@ export const setDeviceId = client.setDeviceId.bind(client);
258
271
  /**
259
272
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
260
273
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
261
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
274
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
262
275
  *
263
276
  * ```typescript
264
277
  * regenerateDeviceId();
@@ -266,6 +279,19 @@ export const setDeviceId = client.setDeviceId.bind(client);
266
279
  */
267
280
 
268
281
  export const regenerateDeviceId = client.regenerateDeviceId.bind(client);
282
+ /**
283
+ * reset is a shortcut to anonymize users after they log out, by:
284
+ * - setting userId to `undefined`
285
+ * - regenerating a new random deviceId
286
+ *
287
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
288
+ *
289
+ * ```typescript
290
+ * reset();
291
+ * ```
292
+ */
293
+
294
+ export const reset = client.reset.bind(client);
269
295
  /**
270
296
  * Returns current session ID.
271
297
  *
@@ -1 +1 @@
1
- {"version":3,"names":["AmplitudeCore","Destination","returnWrapper","Context","useReactNativeConfig","createDeviceId","createFlexibleStorage","parseOldCookies","CampaignTracker","isNative","IdentityEventSender","getAnalyticsConnector","AmplitudeReactNative","init","apiKey","userId","options","oldCookies","reactNativeOptions","deviceId","sessionId","optOut","lastEventTime","undefined","isNewSession","config","Date","now","sessionTimeout","connector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","runAttributionStrategy","attribution","attributionConfig","bind","onNewCampaign","setSessionId","storage","campaignTracker","send","getUserId","setUserId","editIdentity","commit","getDeviceId","setDeviceId","regenerateDeviceId","getSessionId","setOptOut","client","remove","logEvent","identify","groupIdentify","setGroup","revenue","flush"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { isNative } from './utils/platform';\nimport { IdentityEventSender } from './plugins/identity';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\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 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 // 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 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 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 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\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 * 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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"}
1
+ {"version":3,"names":["AmplitudeCore","Destination","returnWrapper","Context","useReactNativeConfig","createDeviceId","createFlexibleStorage","parseOldCookies","CampaignTracker","isNative","IdentityEventSender","getAnalyticsConnector","AmplitudeReactNative","init","apiKey","userId","options","oldCookies","reactNativeOptions","deviceId","sessionId","optOut","lastEventTime","_init","isNewSession","config","Date","now","sessionTimeout","connector","eventBridge","setEventReceiver","event","track","eventType","eventProperties","identityStore","setIdentity","add","timeline","isReady","scheduleApply","runAttributionStrategy","attribution","attributionConfig","bind","onNewCampaign","setSessionId","storage","campaignTracker","send","getUserId","setUserId","editIdentity","commit","getDeviceId","setDeviceId","regenerateDeviceId","reset","undefined","getSessionId","setOptOut","client","remove","logEvent","identify","groupIdentify","setGroup","revenue","flush"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { isNative } from './utils/platform';\nimport { IdentityEventSender } from './plugins/identity';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\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(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 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 // 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?: 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 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 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 regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n reset() {\n this.setUserId(undefined);\n this.regenerateDeviceId();\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\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 `undefined` 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 * reset is a shortcut to anonymize users after they log out, by:\n * - setting userId to `undefined`\n * - regenerating a new random deviceId\n *\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * reset();\n * ```\n */\nexport const reset = client.reset.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 * 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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"}
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.0.1-dev.9';
1
+ export const VERSION = '0.2.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.0.1-dev.9';\n"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,aAAhB"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.2.0';\n"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,OAAhB"}
@@ -55,7 +55,6 @@ export declare class CampaignTracker implements ICampaignTracker {
55
55
  android_id?: string | undefined;
56
56
  language?: string | undefined;
57
57
  ip?: string | undefined;
58
- uuid?: string | undefined;
59
58
  price?: number | undefined;
60
59
  quantity?: number | undefined;
61
60
  revenue?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"campaign-tracker.d.ts","sourceRoot":"","sources":["../../../src/attribution/campaign-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,cAAc,IAAI,eAAe,EACjC,eAAe,IAAI,gBAAgB,EACnC,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,4BAA4B,CAAC;AAKpC,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAE/C,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAiB3D,aAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ;IAe7D,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,sBAAsB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIjD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BhC,IAAI,CAAC,YAAY,EAAE,OAAO;CAejC"}
1
+ {"version":3,"file":"campaign-tracker.d.ts","sourceRoot":"","sources":["../../../src/attribution/campaign-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,cAAc,IAAI,eAAe,EACjC,eAAe,IAAI,gBAAgB,EACnC,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,4BAA4B,CAAC;AAKpC,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAE/C,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAiB3D,aAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ;IAe7D,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,sBAAsB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIjD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BhC,IAAI,CAAC,YAAY,EAAE,OAAO;CAejC"}
@@ -82,7 +82,7 @@ export declare const createCookieStorage: (overrides?: ReactNativeOptions | unde
82
82
  transportProvider: FetchTransport;
83
83
  }) => Promise<Storage<UserSession>>;
84
84
  export declare const createFlexibleStorage: <T>(options: ReactNativeOptions) => Promise<Storage<T>>;
85
- export declare const createEventsStorage: (overrides?: ReactNativeOptions | undefined) => Promise<Storage<Event[]>>;
85
+ export declare const createEventsStorage: (overrides?: ReactNativeOptions | undefined) => Promise<Storage<Event[]> | undefined>;
86
86
  export declare const createDeviceId: (idFromCookies?: string | undefined, idFromOptions?: string | undefined, idFromQueryParams?: string | undefined) => string;
87
87
  export declare const getTopLevelDomain: (url?: string | undefined) => Promise<string>;
88
88
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,IAAI,kBAAkB,EACvC,OAAO,EACP,eAAe,EACf,WAAW,EACX,cAAc,IAAI,eAAe,EAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAQ,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B5B,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,MAAO,YAAW,kBAAkB;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,eAAe,CAAC;gBAEpB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IA2BzE,IAAI,QAAQ,IAIW,MAAM,GAAG,SAAS,CAFxC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAExC;IAED,IAAI,MAAM,IAIS,MAAM,GAAG,SAAS,CAFpC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAEpC;IAED,IAAI,SAAS,IAIY,MAAM,GAAG,SAAS,CAF1C;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAE1C;IAED,IAAI,MAAM,IAIS,OAAO,CAFzB;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAEzB;IAED,IAAI,aAAa,IAIgB,MAAM,GAAG,SAAS,CAFlD;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAElD;CACF;AAED,eAAO,MAAM,oBAAoB,WACvB,MAAM,4EAGb,QAAQ,kBAAkB,CAqB5B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;MAG7B,QAAQ,QAAQ,WAAW,CAAC,CAO9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,eAAsB,kBAAkB,wBAczE,CAAC;AAEF,eAAO,MAAM,mBAAmB,kDAA2C,QAAQ,QAAQ,KAAK,EAAE,CAAC,CASlG,CAAC;AAEF,eAAO,MAAM,cAAc,4HAE1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,+CA0B7B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,IAAI,kBAAkB,EACvC,OAAO,EACP,eAAe,EACf,WAAW,EACX,cAAc,IAAI,eAAe,EAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAQ,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B5B,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,MAAO,YAAW,kBAAkB;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,eAAe,CAAC;gBAEpB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IA8BzE,IAAI,QAAQ,IAIW,MAAM,GAAG,SAAS,CAFxC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAExC;IAED,IAAI,MAAM,IAIS,MAAM,GAAG,SAAS,CAFpC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAEpC;IAED,IAAI,SAAS,IAIY,MAAM,GAAG,SAAS,CAF1C;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAE1C;IAED,IAAI,MAAM,IAIS,OAAO,CAFzB;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAEzB;IAED,IAAI,aAAa,IAIgB,MAAM,GAAG,SAAS,CAFlD;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAElD;CACF;AAED,eAAO,MAAM,oBAAoB,WACvB,MAAM,4EAGb,QAAQ,kBAAkB,CAqB5B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;MAG7B,QAAQ,QAAQ,WAAW,CAAC,CAO9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,eAAsB,kBAAkB,wBAczE,CAAC;AAEF,eAAO,MAAM,mBAAmB,kDAA2C,QAAQ,QAAQ,KAAK,EAAE,CAAC,GAAG,SAAS,CAe9G,CAAC;AAEF,eAAO,MAAM,cAAc,4HAE1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,+CA0B7B,CAAC"}
@@ -1,4 +1,5 @@
1
- export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setUserId, track, } from './react-native-client';
1
+ export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, reset, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setUserId, track, } from './react-native-client';
2
2
  export { Revenue, Identify } from '@amplitude/analytics-core';
3
- export * as Types from '@amplitude/analytics-types';
3
+ import * as Types from '@amplitude/analytics-types';
4
+ export { Types };
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,KAAK,GACN,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,KAAK,GACN,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -8,6 +8,7 @@ export declare class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfi
8
8
  getDeviceId(): string | undefined;
9
9
  setDeviceId(deviceId: string): void;
10
10
  regenerateDeviceId(): void;
11
+ reset(): void;
11
12
  getSessionId(): number | undefined;
12
13
  setSessionId(sessionId: number): void;
13
14
  setOptOut(optOut: boolean): void;
@@ -151,13 +152,25 @@ export declare const setDeviceId: (deviceId: string) => void;
151
152
  /**
152
153
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
153
154
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
154
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
155
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
155
156
  *
156
157
  * ```typescript
157
158
  * regenerateDeviceId();
158
159
  * ```
159
160
  */
160
161
  export declare const regenerateDeviceId: () => void;
162
+ /**
163
+ * reset is a shortcut to anonymize users after they log out, by:
164
+ * - setting userId to `undefined`
165
+ * - regenerating a new random deviceId
166
+ *
167
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
168
+ *
169
+ * ```typescript
170
+ * reset();
171
+ * ```
172
+ */
173
+ export declare const reset: () => void;
161
174
  /**
162
175
  * Returns current session ID.
163
176
  *
@@ -1 +1 @@
1
- {"version":3,"file":"react-native-client.d.ts","sourceRoot":"","sources":["../../src/react-native-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,MAAM,2BAA2B,CAAC;AACtF,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,4BAA4B,CAAC;AASpC,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,4BAA4B;IA8CjG,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,6BAA6B,EAAE,YAAY,UAAQ;IAkBpG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAUpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAU5B,kBAAkB;IAKlB,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;CAG1B;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,iMAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,sTAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,sTAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,uPAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,wSAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,iKAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,qPAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WA1KF,MAAM,GAAG,SAAS,SA0KgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aAhLA,MAAM,SAgL4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA3LC,MAAM,SA2L4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WApMF,OAAO,SAoM2B,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
1
+ {"version":3,"file":"react-native-client.d.ts","sourceRoot":"","sources":["../../src/react-native-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,MAAM,2BAA2B,CAAC;AACtF,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,4BAA4B,CAAC;AASpC,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,4BAA4B;IAqDjG,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,6BAA6B,EAAE,YAAY,UAAQ;IAkBpG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAUpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAU5B,kBAAkB;IAKlB,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;CAG1B;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,iMAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,sTAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,sTAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,uPAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,wSAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,iKAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,qPAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WA/KF,MAAM,GAAG,SAAS,SA+KgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aArLA,MAAM,SAqL4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,YAA4B,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cAxMC,MAAM,SAwM4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WAjNF,OAAO,SAiN2B,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.1-dev.9";
1
+ export declare const VERSION = "0.2.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,gBAAgB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/analytics-react-native",
3
- "version": "0.0.1-dev.9",
3
+ "version": "0.2.0",
4
4
  "description": "Official React Native SDK",
5
5
  "keywords": [
6
6
  "analytics",
@@ -24,7 +24,8 @@
24
24
  "url": "git+https://github.com/amplitude/Amplitude-TypeScript.git"
25
25
  },
26
26
  "scripts": {
27
- "build": "yarn version-file && bob build",
27
+ "build": "bob build",
28
+ "clean": "rimraf node_modules lib coverage",
28
29
  "fix": "yarn fix:eslint & yarn fix:prettier",
29
30
  "fix:eslint": "eslint '{src,test}/**/*.ts' --fix",
30
31
  "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"",
@@ -35,10 +36,9 @@
35
36
  "test:web": "jest --setupFiles './test/mock/setup-web.ts'",
36
37
  "test:mobile": "jest --setupFiles './test/mock/setup-mobile.ts'",
37
38
  "typecheck": "tsc -p ./tsconfig.json",
38
- "version": "yarn build",
39
+ "version": "yarn version-file && yarn build",
39
40
  "version-file": "node -p \"'export const VERSION = \\'' + require('./package.json').version + '\\';'\" > src/version.ts",
40
41
  "typescript": "tsc --noEmit",
41
- "prepare": "yarn version-file && bob build",
42
42
  "example": "yarn --cwd example",
43
43
  "pods": "cd example && pod-install --quiet"
44
44
  },
@@ -58,11 +58,11 @@
58
58
  },
59
59
  "dependencies": {
60
60
  "@amplitude/analytics-connector": "1.4.4",
61
- "@amplitude/analytics-core": "^0.6.1",
62
- "@amplitude/analytics-types": "^0.5.1",
61
+ "@amplitude/analytics-core": "^0.6.4",
62
+ "@amplitude/analytics-types": "^0.6.1",
63
63
  "@amplitude/ua-parser-js": "^0.7.31",
64
- "tslib": "^2.3.1",
65
- "@react-native-async-storage/async-storage": "^1.17.7"
64
+ "@react-native-async-storage/async-storage": "^1.17.7",
65
+ "tslib": "^2.3.1"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@types/react": "^16.9.19",
@@ -88,5 +88,6 @@
88
88
  }
89
89
  ]
90
90
  ]
91
- }
91
+ },
92
+ "gitHead": "617299ff3c624cade6e02cc44e82314a15498fc5"
92
93
  }
package/src/config.ts CHANGED
@@ -63,6 +63,9 @@ export class ReactNativeConfig extends Config implements IReactNativeConfig {
63
63
  constructor(apiKey: string, userId?: string, options?: ReactNativeOptions) {
64
64
  const defaultConfig = getDefaultConfig();
65
65
  super({
66
+ flushIntervalMillis: 1000,
67
+ flushMaxRetries: 5,
68
+ flushQueueSize: 30,
66
69
  ...options,
67
70
  apiKey,
68
71
  storageProvider: options?.storageProvider ?? defaultConfig.storageProvider,
@@ -183,15 +186,21 @@ export const createFlexibleStorage = async <T>(options: ReactNativeOptions): Pro
183
186
  return storage;
184
187
  };
185
188
 
186
- export const createEventsStorage = async (overrides?: ReactNativeOptions): Promise<Storage<Event[]>> => {
187
- let eventsStorage = overrides?.storageProvider;
188
- if (!eventsStorage || !(await eventsStorage.isEnabled())) {
189
- eventsStorage = new LocalStorage();
190
- if (!(await eventsStorage.isEnabled())) {
191
- eventsStorage = new MemoryStorage();
189
+ export const createEventsStorage = async (overrides?: ReactNativeOptions): Promise<Storage<Event[]> | undefined> => {
190
+ const hasStorageProviderProperty = overrides && Object.prototype.hasOwnProperty.call(overrides, 'storageProvider');
191
+ // If storageProperty is explicitly undefined like `{ storageProperty: undefined }`
192
+ // then storageProvider is undefined
193
+ // If storageProvider is implicitly undefined like `{ }`
194
+ // then storageProvider is LocalStorage
195
+ // Otherwise storageProvider is overriden
196
+ if (!hasStorageProviderProperty || overrides.storageProvider) {
197
+ for (const storage of [overrides?.storageProvider, new LocalStorage<Event[]>()]) {
198
+ if (storage && (await storage.isEnabled())) {
199
+ return storage;
200
+ }
192
201
  }
193
202
  }
194
- return eventsStorage;
203
+ return undefined;
195
204
  };
196
205
 
197
206
  export const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ export {
9
9
  init,
10
10
  logEvent,
11
11
  remove,
12
+ reset,
12
13
  revenue,
13
14
  setDeviceId,
14
15
  setGroup,
@@ -18,4 +19,7 @@ export {
18
19
  track,
19
20
  } from './react-native-client';
20
21
  export { Revenue, Identify } from '@amplitude/analytics-core';
21
- export * as Types from '@amplitude/analytics-types';
22
+ // Hack - react-native apps have trouble with:
23
+ // export * as Types from '@amplitude/analytics-types
24
+ import * as Types from '@amplitude/analytics-types';
25
+ export { Types };
@@ -10,7 +10,7 @@ export class IdentityEventSender implements BeforePlugin {
10
10
  async execute(context: Event): Promise<Event> {
11
11
  const userProperties = context.user_properties as Record<string, any>;
12
12
  if (userProperties) {
13
- this.identityStore.editIdentity().setUserProperties(userProperties).commit();
13
+ this.identityStore.editIdentity().updateUserProperties(userProperties).commit();
14
14
  }
15
15
  return context;
16
16
  }
@@ -27,7 +27,7 @@ export class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {
27
27
  optOut: options?.optOut ?? oldCookies.optOut,
28
28
  lastEventTime: oldCookies.lastEventTime,
29
29
  });
30
- await super.init(undefined, undefined, reactNativeOptions);
30
+ await super._init(reactNativeOptions);
31
31
 
32
32
  // Step 3: Manage session
33
33
  let isNewSession = false;
@@ -57,7 +57,14 @@ export class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {
57
57
  await this.add(new IdentityEventSender());
58
58
  await this.add(new Destination());
59
59
 
60
- // Step 5: Track attributions
60
+ // Step 5: Set timeline ready for processing events
61
+ // Send existing events, which might be collected by track before init
62
+ this.timeline.isReady = true;
63
+ if (!this.config.optOut) {
64
+ this.timeline.scheduleApply(0);
65
+ }
66
+
67
+ // Step 6: Track attributions
61
68
  await this.runAttributionStrategy(options?.attribution, isNewSession);
62
69
  }
63
70
 
@@ -112,6 +119,11 @@ export class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {
112
119
  this.setDeviceId(deviceId);
113
120
  }
114
121
 
122
+ reset() {
123
+ this.setUserId(undefined);
124
+ this.regenerateDeviceId();
125
+ }
126
+
115
127
  getSessionId() {
116
128
  return this.config.sessionId;
117
129
  }
@@ -278,7 +290,7 @@ export const setDeviceId = client.setDeviceId.bind(client);
278
290
  /**
279
291
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
280
292
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
281
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
293
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
282
294
  *
283
295
  * ```typescript
284
296
  * regenerateDeviceId();
@@ -286,6 +298,19 @@ export const setDeviceId = client.setDeviceId.bind(client);
286
298
  */
287
299
  export const regenerateDeviceId = client.regenerateDeviceId.bind(client);
288
300
 
301
+ /**
302
+ * reset is a shortcut to anonymize users after they log out, by:
303
+ * - setting userId to `undefined`
304
+ * - regenerating a new random deviceId
305
+ *
306
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
307
+ *
308
+ * ```typescript
309
+ * reset();
310
+ * ```
311
+ */
312
+ export const reset = client.reset.bind(client);
313
+
289
314
  /**
290
315
  * Returns current session ID.
291
316
  *
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.0.1-dev.9';
1
+ export const VERSION = '0.2.0';