@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.
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/lib/commonjs/config.js +17 -9
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/index.js +8 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/plugins/identity.js +1 -1
- package/lib/commonjs/plugins/identity.js.map +1 -1
- package/lib/commonjs/react-native-client.js +32 -5
- package/lib/commonjs/react-native-client.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/config.js +17 -9
- package/lib/module/config.js.map +1 -1
- package/lib/module/index.js +6 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/plugins/identity.js +1 -1
- package/lib/module/plugins/identity.js.map +1 -1
- package/lib/module/react-native-client.js +29 -3
- package/lib/module/react-native-client.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/attribution/campaign-tracker.d.ts +0 -1
- package/lib/typescript/attribution/campaign-tracker.d.ts.map +1 -1
- package/lib/typescript/config.d.ts +1 -1
- package/lib/typescript/config.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/react-native-client.d.ts +14 -1
- package/lib/typescript/react-native-client.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/lib/typescript/version.d.ts.map +1 -1
- package/package.json +10 -9
- package/src/config.ts +16 -7
- package/src/index.ts +5 -1
- package/src/plugins/identity.ts +1 -1
- package/src/react-native-client.ts +28 -3
- 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
|
package/lib/commonjs/config.js
CHANGED
|
@@ -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({
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
|
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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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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
|
|
132
|
+
var Types = _interopRequireWildcard(require("@amplitude/analytics-types"));
|
|
127
133
|
|
|
128
|
-
exports.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';\
|
|
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().
|
|
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","
|
|
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.
|
|
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:
|
|
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 `
|
|
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.
|
|
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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"}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.0
|
|
1
|
+
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["export const VERSION = '0.2.0';\n"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAG,OAAhB"}
|
package/lib/module/config.js
CHANGED
|
@@ -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({
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
|
210
|
+
return undefined;
|
|
203
211
|
};
|
|
204
212
|
export const createDeviceId = (idFromCookies, idFromOptions, idFromQueryParams) => {
|
|
205
213
|
return idFromOptions || idFromQueryParams || idFromCookies || UUID();
|
package/lib/module/config.js.map
CHANGED
|
@@ -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":"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"}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
-
|
|
4
|
-
|
|
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
|
package/lib/module/index.js.map
CHANGED
|
@@ -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';\
|
|
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().
|
|
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","
|
|
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.
|
|
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:
|
|
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 `
|
|
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":"AAAA,SAASA,aAAT,EAAwBC,WAAxB,EAAqCC,aAArC,QAA0D,2BAA1D;AAQA,SAASC,OAAT,QAAwB,mBAAxB;AACA,SAASC,oBAAT,EAA+BC,cAA/B,EAA+CC,qBAA/C,QAA4E,UAA5E;AACA,SAASC,eAAT,QAAgC,oBAAhC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,SAASC,mBAAT,QAAoC,oBAApC;AACA,SAASC,qBAAT,QAAsC,6BAAtC;AAEA,OAAO,MAAMC,oBAAN,SAAmCZ,aAAnC,CAAoE;EAC/D,MAAJa,IAAI,CAACC,MAAD,EAAiBC,MAAjB,EAAkCC,OAAlC,EAA+F;IAAA;;IACvG;IACA,MAAMC,UAAU,GAAG,MAAMV,eAAe,CAACO,MAAD,EAASE,OAAT,CAAxC,CAFuG,CAIvG;;IACA,MAAME,kBAAkB,GAAG,MAAMd,oBAAoB,CAACU,MAAD,EAASC,MAAM,IAAIE,UAAU,CAACF,MAA9B,EAAsC,EACzF,GAAGC,OADsF;MAEzFG,QAAQ,0BAAEF,UAAU,CAACE,QAAb,uEAAyBH,OAAzB,aAAyBA,OAAzB,uBAAyBA,OAAO,CAAEG,QAF+C;MAGzFC,SAAS,2BAAEH,UAAU,CAACG,SAAb,yEAA0BJ,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEI,SAH6C;MAIzFC,MAAM,qBAAEL,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEK,MAAX,6DAAqBJ,UAAU,CAACI,MAJmD;MAKzFC,aAAa,EAAEL,UAAU,CAACK;IAL+D,CAAtC,CAArD;IAOA,MAAM,MAAMC,KAAN,CAAYL,kBAAZ,CAAN,CAZuG,CAcvG;;IACA,IAAIM,YAAY,GAAG,KAAnB;;IACA,IACE,CAAC,KAAKC,MAAL,CAAYL,SAAb,IACC,KAAKK,MAAL,CAAYH,aAAZ,IAA6BI,IAAI,CAACC,GAAL,KAAa,KAAKF,MAAL,CAAYH,aAAzB,GAAyC,KAAKG,MAAL,CAAYG,cAFrF,EAGE;MACA;MACA;MACA;MACA,KAAKH,MAAL,CAAYL,SAAZ,GAAwBM,IAAI,CAACC,GAAL,EAAxB;MACAH,YAAY,GAAG,IAAf;IACD;;IAED,MAAMK,SAAS,GAAGlB,qBAAqB,EAAvC;IACAkB,SAAS,CAACC,WAAV,CAAsBC,gBAAtB,CAAwCC,KAAD,IAAW;MAChD,KAAK,KAAKC,KAAL,CAAWD,KAAK,CAACE,SAAjB,EAA4BF,KAAK,CAACG,eAAlC,CAAL;IACD,CAFD;IAGAN,SAAS,CAACO,aAAV,CAAwBC,WAAxB,CAAoC;MAClCtB,MAAM,EAAE,KAAKU,MAAL,CAAYV,MADc;MAElCI,QAAQ,EAAE,KAAKM,MAAL,CAAYN;IAFY,CAApC,EA/BuG,CAoCvG;IACA;;IACA,MAAM,KAAKmB,GAAL,CAAS,IAAInC,OAAJ,EAAT,CAAN;IACA,MAAM,KAAKmC,GAAL,CAAS,IAAI5B,mBAAJ,EAAT,CAAN;IACA,MAAM,KAAK4B,GAAL,CAAS,IAAIrC,WAAJ,EAAT,CAAN,CAxCuG,CA0CvG;IACA;;IACA,KAAKsC,QAAL,CAAcC,OAAd,GAAwB,IAAxB;;IACA,IAAI,CAAC,KAAKf,MAAL,CAAYJ,MAAjB,EAAyB;MACvB,KAAKkB,QAAL,CAAcE,aAAd,CAA4B,CAA5B;IACD,CA/CsG,CAiDvG;;;IACA,MAAM,KAAKC,sBAAL,CAA4B1B,OAA5B,aAA4BA,OAA5B,uBAA4BA,OAAO,CAAE2B,WAArC,EAAkDnB,YAAlD,CAAN;EACD;;EAE2B,MAAtBkB,sBAAsB,CAACE,iBAAD,EAA0E;IAAA,IAAtBpB,YAAsB,uEAAP,KAAO;;IACpG,IAAIf,QAAQ,EAAZ,EAAgB;MACd;IACD;;IACD,MAAMwB,KAAK,GAAG,KAAKA,KAAL,CAAWY,IAAX,CAAgB,IAAhB,CAAd;IACA,MAAMC,aAAa,GAAG,KAAKC,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,EAA6BnB,IAAI,CAACC,GAAL,EAA7B,CAAtB;IAEA,MAAMqB,OAAO,GAAG,MAAM1C,qBAAqB,CAAW,KAAKmB,MAAhB,CAA3C;IACA,MAAMwB,eAAe,GAAG,IAAIzC,eAAJ,CAAoB,KAAKiB,MAAL,CAAYX,MAAhC,EAAwC,EAC9D,GAAG8B,iBAD2D;MAE9DI,OAF8D;MAG9Df,KAH8D;MAI9Da;IAJ8D,CAAxC,CAAxB;IAOA,MAAMG,eAAe,CAACC,IAAhB,CAAqB1B,YAArB,CAAN;EACD;;EAED2B,SAAS,GAAG;IACV,OAAO,KAAK1B,MAAL,CAAYV,MAAnB;EACD;;EAEDqC,SAAS,CAACrC,MAAD,EAA6B;IACpC,KAAKU,MAAL,CAAYV,MAAZ,GAAqBA,MAArB;IACAJ,qBAAqB,GAClByB,aADH,CACiBiB,YADjB,GAEE;IACA;IAHF,CAIGD,SAJH,CAIarC,MAJb,EAKGuC,MALH;EAMD;;EAEDC,WAAW,GAAG;IACZ,OAAO,KAAK9B,MAAL,CAAYN,QAAnB;EACD;;EAEDqC,WAAW,CAACrC,QAAD,EAAmB;IAC5B,KAAKM,MAAL,CAAYN,QAAZ,GAAuBA,QAAvB;IACAR,qBAAqB,GAClByB,aADH,CACiBiB,YADjB,GAEE;IACA;IAHF,CAIGG,WAJH,CAIerC,QAJf,EAKGmC,MALH;EAMD;;EAEDG,kBAAkB,GAAG;IACnB,MAAMtC,QAAQ,GAAGd,cAAc,EAA/B;IACA,KAAKmD,WAAL,CAAiBrC,QAAjB;EACD;;EAEDuC,KAAK,GAAG;IACN,KAAKN,SAAL,CAAeO,SAAf;IACA,KAAKF,kBAAL;EACD;;EAEDG,YAAY,GAAG;IACb,OAAO,KAAKnC,MAAL,CAAYL,SAAnB;EACD;;EAED2B,YAAY,CAAC3B,SAAD,EAAoB;IAC9B,KAAKK,MAAL,CAAYL,SAAZ,GAAwBA,SAAxB;EACD;;EAEDyC,SAAS,CAACxC,MAAD,EAAkB;IACzB,KAAKI,MAAL,CAAYJ,MAAZ,GAAqBA,MAArB;EACD;;AAxHwE;AA2H3E,MAAMyC,MAAM,GAAG,IAAIlD,oBAAJ,EAAf;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,IAAI,GAAGX,aAAa,CAAC4D,MAAM,CAACjD,IAAP,CAAYgC,IAAZ,CAAiBiB,MAAjB,CAAD,CAA1B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMxB,GAAG,GAAGpC,aAAa,CAAC4D,MAAM,CAACxB,GAAP,CAAWO,IAAX,CAAgBiB,MAAhB,CAAD,CAAzB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,MAAM,GAAG7D,aAAa,CAAC4D,MAAM,CAACC,MAAP,CAAclB,IAAd,CAAmBiB,MAAnB,CAAD,CAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAM7B,KAAK,GAAG/B,aAAa,CAAC4D,MAAM,CAAC7B,KAAP,CAAaY,IAAb,CAAkBiB,MAAlB,CAAD,CAA3B;AAEP;AACA;AACA;;AACA,OAAO,MAAME,QAAQ,GAAG9D,aAAa,CAAC4D,MAAM,CAACE,QAAP,CAAgBnB,IAAhB,CAAqBiB,MAArB,CAAD,CAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMG,QAAQ,GAAG/D,aAAa,CAAC4D,MAAM,CAACG,QAAP,CAAgBpB,IAAhB,CAAqBiB,MAArB,CAAD,CAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMI,aAAa,GAAGhE,aAAa,CAAC4D,MAAM,CAACI,aAAP,CAAqBrB,IAArB,CAA0BiB,MAA1B,CAAD,CAAnC;AACP,OAAO,MAAMK,QAAQ,GAAGjE,aAAa,CAAC4D,MAAM,CAACK,QAAP,CAAgBtB,IAAhB,CAAqBiB,MAArB,CAAD,CAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMM,OAAO,GAAGlE,aAAa,CAAC4D,MAAM,CAACM,OAAP,CAAevB,IAAf,CAAoBiB,MAApB,CAAD,CAA7B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMX,SAAS,GAAGW,MAAM,CAACX,SAAP,CAAiBN,IAAjB,CAAsBiB,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMV,SAAS,GAAGU,MAAM,CAACV,SAAP,CAAiBP,IAAjB,CAAsBiB,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMP,WAAW,GAAGO,MAAM,CAACP,WAAP,CAAmBV,IAAnB,CAAwBiB,MAAxB,CAApB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMN,WAAW,GAAGM,MAAM,CAACN,WAAP,CAAmBX,IAAnB,CAAwBiB,MAAxB,CAApB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAML,kBAAkB,GAAGK,MAAM,CAACL,kBAAP,CAA0BZ,IAA1B,CAA+BiB,MAA/B,CAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMJ,KAAK,GAAGI,MAAM,CAACJ,KAAP,CAAab,IAAb,CAAkBiB,MAAlB,CAAd;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMF,YAAY,GAAGE,MAAM,CAACF,YAAP,CAAoBf,IAApB,CAAyBiB,MAAzB,CAArB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMf,YAAY,GAAGe,MAAM,CAACf,YAAP,CAAoBF,IAApB,CAAyBiB,MAAzB,CAArB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMD,SAAS,GAAGC,MAAM,CAACD,SAAP,CAAiBhB,IAAjB,CAAsBiB,MAAtB,CAAlB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMO,KAAK,GAAGnE,aAAa,CAAC4D,MAAM,CAACO,KAAP,CAAaxB,IAAb,CAAkBiB,MAAlB,CAAD,CAA3B"}
|
package/lib/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '0.0
|
|
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
|
+
{"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
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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 `
|
|
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;
|
|
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
|
+
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,
|
|
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
|
|
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": "
|
|
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.
|
|
62
|
-
"@amplitude/analytics-types": "^0.
|
|
61
|
+
"@amplitude/analytics-core": "^0.6.4",
|
|
62
|
+
"@amplitude/analytics-types": "^0.6.1",
|
|
63
63
|
"@amplitude/ua-parser-js": "^0.7.31",
|
|
64
|
-
"
|
|
65
|
-
"
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
|
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
|
-
|
|
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 };
|
package/src/plugins/identity.ts
CHANGED
|
@@ -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().
|
|
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.
|
|
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:
|
|
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 `
|
|
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
|
+
export const VERSION = '0.2.0';
|