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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +0 -0
  2. package/amplitude-react-native.podspec +21 -0
  3. package/android/build.gradle +61 -0
  4. package/android/gradle.properties +3 -0
  5. package/android/src/main/AndroidManifest.xml +4 -0
  6. package/android/src/main/java/com/amplitude/reactnative/AmplitudeReactNativeModule.kt +36 -0
  7. package/android/src/main/java/com/amplitude/reactnative/AmplitudeReactNativePackage.java +28 -0
  8. package/android/src/main/java/com/amplitude/reactnative/AndroidContextProvider.kt +415 -0
  9. package/android/src/main/java/com/amplitude/reactnative/AndroidLogger.kt +56 -0
  10. package/android/src/main/java/com/amplitude/reactnative/Utils.kt +34 -0
  11. package/ios/AmplitudeReactNative-Bridging-Header.h +5 -0
  12. package/ios/AmplitudeReactNative.m +7 -0
  13. package/ios/AmplitudeReactNative.swift +29 -0
  14. package/ios/AmplitudeReactNative.xcodeproj/project.pbxproj +293 -0
  15. package/ios/AppleContextProvider.swift +219 -0
  16. package/lib/commonjs/attribution/campaign-parser.js +74 -0
  17. package/lib/commonjs/attribution/campaign-parser.js.map +1 -0
  18. package/lib/commonjs/attribution/campaign-tracker.js +133 -0
  19. package/lib/commonjs/attribution/campaign-tracker.js.map +1 -0
  20. package/lib/commonjs/attribution/constants.js +47 -0
  21. package/lib/commonjs/attribution/constants.js.map +1 -0
  22. package/lib/commonjs/config.js +257 -0
  23. package/lib/commonjs/config.js.map +1 -0
  24. package/lib/commonjs/constants.js +31 -0
  25. package/lib/commonjs/constants.js.map +1 -0
  26. package/lib/commonjs/cookie-migration/index.js +74 -0
  27. package/lib/commonjs/cookie-migration/index.js.map +1 -0
  28. package/lib/commonjs/index.js +141 -0
  29. package/lib/commonjs/index.js.map +1 -0
  30. package/lib/commonjs/plugins/context.js +136 -0
  31. package/lib/commonjs/plugins/context.js.map +1 -0
  32. package/lib/commonjs/react-native-client.js +362 -0
  33. package/lib/commonjs/react-native-client.js.map +1 -0
  34. package/lib/commonjs/session-manager.js +114 -0
  35. package/lib/commonjs/session-manager.js.map +1 -0
  36. package/lib/commonjs/storage/cookie.js +124 -0
  37. package/lib/commonjs/storage/cookie.js.map +1 -0
  38. package/lib/commonjs/storage/local-storage.js +79 -0
  39. package/lib/commonjs/storage/local-storage.js.map +1 -0
  40. package/lib/commonjs/storage/utm-cookie.js +42 -0
  41. package/lib/commonjs/storage/utm-cookie.js.map +1 -0
  42. package/lib/commonjs/transports/fetch.js +34 -0
  43. package/lib/commonjs/transports/fetch.js.map +1 -0
  44. package/lib/commonjs/transports/send-beacon.js +43 -0
  45. package/lib/commonjs/transports/send-beacon.js.map +1 -0
  46. package/lib/commonjs/transports/xhr.js +54 -0
  47. package/lib/commonjs/transports/xhr.js.map +1 -0
  48. package/lib/commonjs/typings/browser-snippet.d.js +6 -0
  49. package/lib/commonjs/typings/browser-snippet.d.js.map +1 -0
  50. package/lib/commonjs/typings/ua-parser.d.js +2 -0
  51. package/lib/commonjs/typings/ua-parser.d.js.map +1 -0
  52. package/lib/commonjs/utils/cookie-name.js +23 -0
  53. package/lib/commonjs/utils/cookie-name.js.map +1 -0
  54. package/lib/commonjs/utils/language.js +18 -0
  55. package/lib/commonjs/utils/language.js.map +1 -0
  56. package/lib/commonjs/utils/platform.js +21 -0
  57. package/lib/commonjs/utils/platform.js.map +1 -0
  58. package/lib/commonjs/utils/query-params.js +36 -0
  59. package/lib/commonjs/utils/query-params.js.map +1 -0
  60. package/lib/commonjs/utils/snippet-helper.js +56 -0
  61. package/lib/commonjs/utils/snippet-helper.js.map +1 -0
  62. package/lib/commonjs/version.js +9 -0
  63. package/lib/commonjs/version.js.map +1 -0
  64. package/lib/module/attribution/campaign-parser.js +62 -0
  65. package/lib/module/attribution/campaign-parser.js.map +1 -0
  66. package/lib/module/attribution/campaign-tracker.js +120 -0
  67. package/lib/module/attribution/campaign-tracker.js.map +1 -0
  68. package/lib/module/attribution/constants.js +26 -0
  69. package/lib/module/attribution/constants.js.map +1 -0
  70. package/lib/module/config.js +217 -0
  71. package/lib/module/config.js.map +1 -0
  72. package/lib/module/constants.js +13 -0
  73. package/lib/module/constants.js.map +1 -0
  74. package/lib/module/cookie-migration/index.js +56 -0
  75. package/lib/module/cookie-migration/index.js.map +1 -0
  76. package/lib/module/index.js +6 -0
  77. package/lib/module/index.js.map +1 -0
  78. package/lib/module/plugins/context.js +118 -0
  79. package/lib/module/plugins/context.js.map +1 -0
  80. package/lib/module/react-native-client.js +329 -0
  81. package/lib/module/react-native-client.js.map +1 -0
  82. package/lib/module/session-manager.js +104 -0
  83. package/lib/module/session-manager.js.map +1 -0
  84. package/lib/module/storage/cookie.js +114 -0
  85. package/lib/module/storage/cookie.js.map +1 -0
  86. package/lib/module/storage/local-storage.js +67 -0
  87. package/lib/module/storage/local-storage.js.map +1 -0
  88. package/lib/module/storage/utm-cookie.js +32 -0
  89. package/lib/module/storage/utm-cookie.js.map +1 -0
  90. package/lib/module/transports/fetch.js +24 -0
  91. package/lib/module/transports/fetch.js.map +1 -0
  92. package/lib/module/transports/send-beacon.js +33 -0
  93. package/lib/module/transports/send-beacon.js.map +1 -0
  94. package/lib/module/transports/xhr.js +44 -0
  95. package/lib/module/transports/xhr.js.map +1 -0
  96. package/lib/module/typings/browser-snippet.d.js +2 -0
  97. package/lib/module/typings/browser-snippet.d.js.map +1 -0
  98. package/lib/module/typings/ua-parser.d.js +2 -0
  99. package/lib/module/typings/ua-parser.d.js.map +1 -0
  100. package/lib/module/utils/cookie-name.js +10 -0
  101. package/lib/module/utils/cookie-name.js.map +1 -0
  102. package/lib/module/utils/language.js +9 -0
  103. package/lib/module/utils/language.js.map +1 -0
  104. package/lib/module/utils/platform.js +8 -0
  105. package/lib/module/utils/platform.js.map +1 -0
  106. package/lib/module/utils/query-params.js +26 -0
  107. package/lib/module/utils/query-params.js.map +1 -0
  108. package/lib/module/utils/snippet-helper.js +41 -0
  109. package/lib/module/utils/snippet-helper.js.map +1 -0
  110. package/lib/module/version.js +2 -0
  111. package/lib/module/version.js.map +1 -0
  112. package/lib/typescript/attribution/campaign-parser.d.ts +10 -0
  113. package/lib/typescript/attribution/campaign-parser.d.ts.map +1 -0
  114. package/lib/typescript/attribution/campaign-tracker.d.ts +72 -0
  115. package/lib/typescript/attribution/campaign-tracker.d.ts.map +1 -0
  116. package/lib/typescript/attribution/constants.d.ts +17 -0
  117. package/lib/typescript/attribution/constants.d.ts.map +1 -0
  118. package/lib/typescript/config.d.ts +90 -0
  119. package/lib/typescript/config.d.ts.map +1 -0
  120. package/lib/typescript/constants.d.ts +13 -0
  121. package/lib/typescript/constants.d.ts.map +1 -0
  122. package/lib/typescript/cookie-migration/index.d.ts +5 -0
  123. package/lib/typescript/cookie-migration/index.d.ts.map +1 -0
  124. package/lib/typescript/index.d.ts +6 -0
  125. package/lib/typescript/index.d.ts.map +1 -0
  126. package/lib/typescript/plugins/context.d.ts +31 -0
  127. package/lib/typescript/plugins/context.d.ts.map +1 -0
  128. package/lib/typescript/react-native-client.d.ts +209 -0
  129. package/lib/typescript/react-native-client.d.ts.map +1 -0
  130. package/lib/typescript/session-manager.d.ts +28 -0
  131. package/lib/typescript/session-manager.d.ts.map +1 -0
  132. package/lib/typescript/storage/cookie.d.ts +12 -0
  133. package/lib/typescript/storage/cookie.d.ts.map +1 -0
  134. package/lib/typescript/storage/local-storage.d.ts +10 -0
  135. package/lib/typescript/storage/local-storage.d.ts.map +1 -0
  136. package/lib/typescript/storage/utm-cookie.d.ts +6 -0
  137. package/lib/typescript/storage/utm-cookie.d.ts.map +1 -0
  138. package/lib/typescript/transports/fetch.d.ts +6 -0
  139. package/lib/typescript/transports/fetch.d.ts.map +1 -0
  140. package/lib/typescript/transports/send-beacon.d.ts +6 -0
  141. package/lib/typescript/transports/send-beacon.d.ts.map +1 -0
  142. package/lib/typescript/transports/xhr.d.ts +7 -0
  143. package/lib/typescript/transports/xhr.d.ts.map +1 -0
  144. package/lib/typescript/utils/cookie-name.d.ts +3 -0
  145. package/lib/typescript/utils/cookie-name.d.ts.map +1 -0
  146. package/lib/typescript/utils/language.d.ts +2 -0
  147. package/lib/typescript/utils/language.d.ts.map +1 -0
  148. package/lib/typescript/utils/platform.d.ts +3 -0
  149. package/lib/typescript/utils/platform.d.ts.map +1 -0
  150. package/lib/typescript/utils/query-params.d.ts +2 -0
  151. package/lib/typescript/utils/query-params.d.ts.map +1 -0
  152. package/lib/typescript/utils/snippet-helper.d.ts +16 -0
  153. package/lib/typescript/utils/snippet-helper.d.ts.map +1 -0
  154. package/lib/typescript/version.d.ts +2 -0
  155. package/lib/typescript/version.d.ts.map +1 -0
  156. package/package.json +93 -0
  157. package/src/attribution/campaign-parser.ts +78 -0
  158. package/src/attribution/campaign-tracker.ts +112 -0
  159. package/src/attribution/constants.ts +32 -0
  160. package/src/config.ts +210 -0
  161. package/src/constants.ts +14 -0
  162. package/src/cookie-migration/index.ts +54 -0
  163. package/src/index.ts +23 -0
  164. package/src/plugins/context.ts +106 -0
  165. package/src/react-native-client.ts +349 -0
  166. package/src/session-manager.ts +81 -0
  167. package/src/storage/cookie.ts +95 -0
  168. package/src/storage/local-storage.ts +67 -0
  169. package/src/storage/utm-cookie.ts +27 -0
  170. package/src/transports/fetch.ts +23 -0
  171. package/src/transports/send-beacon.ts +34 -0
  172. package/src/transports/xhr.ts +36 -0
  173. package/src/typings/browser-snippet.d.ts +7 -0
  174. package/src/typings/ua-parser.d.ts +4 -0
  175. package/src/utils/cookie-name.ts +9 -0
  176. package/src/utils/language.ts +7 -0
  177. package/src/utils/platform.ts +9 -0
  178. package/src/utils/query-params.ts +21 -0
  179. package/src/utils/snippet-helper.ts +35 -0
  180. package/src/version.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TransportType","Config","MemoryStorage","UUID","CookieStorage","FetchTransport","LocalStorage","getCookieName","getQueryParams","XHRTransport","SendBeaconTransport","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","createCookieStorage","cookieName","cookies","get","queryParams","load","createDeviceId","createEventsStorage","createTransport","transport","overrides","baseConfig","isEnabled","createFlexibleStorage","storage","expirationDays","sameSite","secure","eventsStorage","idFromCookies","idFromOptions","idFromQueryParams","XHR","SendBeacon"],"sources":["config.ts"],"sourcesContent":["import {\n Event,\n ReactNativeOptions,\n ReactNativeConfig as IReactNativeConfig,\n Storage,\n TrackingOptions,\n TransportType,\n UserSession,\n SessionManager as ISessionManager,\n} from '@amplitude/analytics-types';\nimport { Config, MemoryStorage, UUID } from '@amplitude/analytics-core';\n\nimport { CookieStorage } from './storage/cookie';\nimport { FetchTransport } from './transports/fetch';\nimport { LocalStorage } from './storage/local-storage';\nimport { getCookieName } from './utils/cookie-name';\nimport { getQueryParams } from './utils/query-params';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { SessionManager } from './session-manager';\n\nexport const getDefaultConfig = () => {\n const cookieStorage = new MemoryStorage<UserSession>();\n return {\n cookieExpiration: 365,\n cookieSameSite: 'Lax',\n cookieSecure: false,\n cookieStorage,\n disableCookies: false,\n domain: '',\n sessionManager: new SessionManager(cookieStorage, ''),\n sessionTimeout: 30 * 60 * 1000,\n storageProvider: new MemoryStorage<Event[]>(),\n trackingOptions: {\n city: true,\n country: true,\n carrier: true,\n deviceManufacturer: true,\n deviceModel: true,\n dma: true,\n ipAddress: true,\n language: true,\n osName: true,\n osVersion: true,\n platform: true,\n region: true,\n versionName: true,\n },\n transportProvider: new FetchTransport(),\n };\n};\n\nexport class ReactNativeConfig extends Config implements IReactNativeConfig {\n appVersion?: string;\n cookieExpiration: number;\n cookieSameSite: string;\n cookieSecure: boolean;\n cookieStorage: Storage<UserSession>;\n disableCookies: boolean;\n domain: string;\n partnerId?: string;\n sessionTimeout: number;\n trackingOptions: TrackingOptions;\n sessionManager: ISessionManager;\n\n constructor(apiKey: string, userId?: string, options?: ReactNativeOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n ...options,\n apiKey,\n storageProvider: options?.storageProvider ?? defaultConfig.storageProvider,\n transportProvider: options?.transportProvider ?? defaultConfig.transportProvider,\n });\n this.cookieStorage = options?.cookieStorage ?? defaultConfig.cookieStorage;\n this.sessionManager = options?.sessionManager ?? defaultConfig.sessionManager;\n this.sessionTimeout = options?.sessionTimeout ?? defaultConfig.sessionTimeout;\n\n this.appVersion = options?.appVersion;\n this.cookieExpiration = options?.cookieExpiration ?? defaultConfig.cookieExpiration;\n this.cookieSameSite = options?.cookieSameSite ?? defaultConfig.cookieSameSite;\n this.cookieSecure = options?.cookieSecure ?? defaultConfig.cookieSecure;\n this.deviceId = options?.deviceId;\n this.disableCookies = options?.disableCookies ?? defaultConfig.disableCookies;\n this.domain = options?.domain ?? defaultConfig.domain;\n this.lastEventTime = this.lastEventTime ?? options?.lastEventTime;\n this.optOut = Boolean(options?.optOut);\n this.partnerId = options?.partnerId;\n this.sessionId = options?.sessionId;\n this.trackingOptions = options?.trackingOptions ?? defaultConfig.trackingOptions;\n this.userId = userId;\n }\n\n get deviceId() {\n return this.sessionManager.getDeviceId();\n }\n\n set deviceId(deviceId: string | undefined) {\n this.sessionManager.setDeviceId(deviceId);\n }\n\n get userId() {\n return this.sessionManager.getUserId();\n }\n\n set userId(userId: string | undefined) {\n this.sessionManager.setUserId(userId);\n }\n\n get sessionId() {\n return this.sessionManager.getSessionId();\n }\n\n set sessionId(sessionId: number | undefined) {\n this.sessionManager.setSessionId(sessionId);\n }\n\n get optOut() {\n return this.sessionManager.getOptOut();\n }\n\n set optOut(optOut: boolean) {\n this.sessionManager?.setOptOut(Boolean(optOut));\n }\n\n get lastEventTime() {\n return this.sessionManager.getLastEventTime();\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n this.sessionManager.setLastEventTime(lastEventTime);\n }\n}\n\nexport const useReactNativeConfig = async (\n apiKey: string,\n userId?: string,\n options?: ReactNativeOptions,\n): Promise<IReactNativeConfig> => {\n const defaultConfig = getDefaultConfig();\n const cookieStorage = await createCookieStorage(options);\n const cookieName = getCookieName(apiKey);\n const cookies = await cookieStorage.get(cookieName);\n const queryParams = getQueryParams();\n const sessionManager = await new SessionManager(cookieStorage, apiKey).load();\n\n return new ReactNativeConfig(apiKey, userId ?? cookies?.userId, {\n ...options,\n cookieStorage,\n sessionManager,\n deviceId: createDeviceId(cookies?.deviceId, options?.deviceId, queryParams.deviceId),\n optOut: options?.optOut ?? Boolean(cookies?.optOut),\n sessionId: (await cookieStorage.get(cookieName))?.sessionId ?? options?.sessionId,\n storageProvider: await createEventsStorage(options),\n trackingOptions: { ...defaultConfig.trackingOptions, ...options?.trackingOptions },\n transportProvider: options?.transportProvider ?? createTransport(options?.transport),\n });\n};\n\nexport const createCookieStorage = async (\n overrides?: ReactNativeOptions,\n baseConfig = getDefaultConfig(),\n): Promise<Storage<UserSession>> => {\n const options = { ...baseConfig, ...overrides };\n const cookieStorage = overrides?.cookieStorage;\n if (!cookieStorage || !(await cookieStorage.isEnabled())) {\n return createFlexibleStorage<UserSession>(options);\n }\n return cookieStorage;\n};\n\nexport const createFlexibleStorage = async <T>(options: ReactNativeOptions): Promise<Storage<T>> => {\n let storage: Storage<T> = new CookieStorage({\n domain: options.domain,\n expirationDays: options.cookieExpiration,\n sameSite: options.cookieSameSite,\n secure: options.cookieSecure,\n });\n if (options.disableCookies || !(await storage.isEnabled())) {\n storage = new LocalStorage();\n if (!(await storage.isEnabled())) {\n storage = new MemoryStorage();\n }\n }\n return storage;\n};\n\nexport const createEventsStorage = async (overrides?: ReactNativeOptions): Promise<Storage<Event[]>> => {\n let eventsStorage = overrides?.storageProvider;\n if (!eventsStorage || !(await eventsStorage.isEnabled())) {\n eventsStorage = new LocalStorage();\n if (!(await eventsStorage.isEnabled())) {\n eventsStorage = new MemoryStorage();\n }\n }\n return eventsStorage;\n};\n\nexport const createDeviceId = (idFromCookies?: string, idFromOptions?: string, idFromQueryParams?: string) => {\n return idFromOptions || idFromQueryParams || idFromCookies || UUID();\n};\n\nexport const createTransport = (transport?: TransportType) => {\n if (transport === TransportType.XHR) {\n return new XHRTransport();\n }\n if (transport === TransportType.SendBeacon) {\n return new SendBeaconTransport();\n }\n return getDefaultConfig().transportProvider;\n};\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const UTM_SOURCE = 'utm_source';
2
+ export const UTM_MEDIUM = 'utm_medium';
3
+ export const UTM_CAMPAIGN = 'utm_campaign';
4
+ export const UTM_TERM = 'utm_term';
5
+ export const UTM_CONTENT = 'utm_content';
6
+ export const UTMZ_SOURCE = 'utmcsr';
7
+ export const UTMZ_MEDIUM = 'utmcmd';
8
+ export const UTMZ_CAMPAIGN = 'utmccn';
9
+ export const UTMZ_TERM = 'utmctr';
10
+ export const UTMZ_CONTENT = 'utmcct';
11
+ export const GCLID = 'gclid';
12
+ export const FBCLID = 'fbclid';
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UTM_SOURCE","UTM_MEDIUM","UTM_CAMPAIGN","UTM_TERM","UTM_CONTENT","UTMZ_SOURCE","UTMZ_MEDIUM","UTMZ_CAMPAIGN","UTMZ_TERM","UTMZ_CONTENT","GCLID","FBCLID"],"sources":["constants.ts"],"sourcesContent":["export const UTM_SOURCE = 'utm_source';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_TERM = 'utm_term';\nexport const UTM_CONTENT = 'utm_content';\n\nexport const UTMZ_SOURCE = 'utmcsr';\nexport const UTMZ_MEDIUM = 'utmcmd';\nexport const UTMZ_CAMPAIGN = 'utmccn';\nexport const UTMZ_TERM = 'utmctr';\nexport const UTMZ_CONTENT = 'utmcct';\n\nexport const GCLID = 'gclid';\nexport const FBCLID = 'fbclid';\n"],"mappings":"AAAA,OAAO,MAAMA,UAAU,GAAG,YAAnB;AACP,OAAO,MAAMC,UAAU,GAAG,YAAnB;AACP,OAAO,MAAMC,YAAY,GAAG,cAArB;AACP,OAAO,MAAMC,QAAQ,GAAG,UAAjB;AACP,OAAO,MAAMC,WAAW,GAAG,aAApB;AAEP,OAAO,MAAMC,WAAW,GAAG,QAApB;AACP,OAAO,MAAMC,WAAW,GAAG,QAApB;AACP,OAAO,MAAMC,aAAa,GAAG,QAAtB;AACP,OAAO,MAAMC,SAAS,GAAG,QAAlB;AACP,OAAO,MAAMC,YAAY,GAAG,QAArB;AAEP,OAAO,MAAMC,KAAK,GAAG,OAAd;AACP,OAAO,MAAMC,MAAM,GAAG,QAAf"}
@@ -0,0 +1,56 @@
1
+ import { getOldCookieName } from '../utils/cookie-name';
2
+ import { LocalStorage } from '../storage/local-storage';
3
+ import { CookieStorage } from '../storage/cookie';
4
+ export const parseOldCookies = async (apiKey, options) => {
5
+ let storage = new CookieStorage();
6
+
7
+ if (!(await storage.isEnabled()) || options !== null && options !== void 0 && options.disableCookies) {
8
+ storage = new LocalStorage();
9
+ }
10
+
11
+ if (!(await storage.isEnabled())) {
12
+ return {
13
+ optOut: false
14
+ };
15
+ }
16
+
17
+ const oldCookieName = getOldCookieName(apiKey);
18
+ const cookies = await storage.getRaw(oldCookieName);
19
+
20
+ if (!cookies) {
21
+ return {
22
+ optOut: false
23
+ };
24
+ }
25
+
26
+ await storage.remove(oldCookieName);
27
+ const [deviceId, userId, optOut, sessionId, lastEventTime] = cookies.split('.');
28
+ return {
29
+ deviceId,
30
+ userId: decode(userId),
31
+ sessionId: parseTime(sessionId),
32
+ lastEventTime: parseTime(lastEventTime),
33
+ optOut: Boolean(optOut)
34
+ };
35
+ };
36
+ export const parseTime = num => {
37
+ const integer = parseInt(num, 32);
38
+
39
+ if (isNaN(integer)) {
40
+ return undefined;
41
+ }
42
+
43
+ return integer;
44
+ };
45
+ export const decode = value => {
46
+ if (!atob || !escape || !value) {
47
+ return undefined;
48
+ }
49
+
50
+ try {
51
+ return decodeURIComponent(escape(atob(value)));
52
+ } catch {
53
+ return undefined;
54
+ }
55
+ };
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getOldCookieName","LocalStorage","CookieStorage","parseOldCookies","apiKey","options","storage","isEnabled","disableCookies","optOut","oldCookieName","cookies","getRaw","remove","deviceId","userId","sessionId","lastEventTime","split","decode","parseTime","Boolean","num","integer","parseInt","isNaN","undefined","value","atob","escape","decodeURIComponent"],"sources":["index.ts"],"sourcesContent":["import { BrowserOptions, Storage, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '../utils/cookie-name';\nimport { LocalStorage } from '../storage/local-storage';\nimport { CookieStorage } from '../storage/cookie';\n\nexport const parseOldCookies = async (apiKey: string, options?: BrowserOptions): Promise<UserSession> => {\n let storage: Storage<string> = new CookieStorage<string>();\n if (!(await storage.isEnabled()) || options?.disableCookies) {\n storage = new LocalStorage<string>();\n }\n if (!(await storage.isEnabled())) {\n return {\n optOut: false,\n };\n }\n\n const oldCookieName = getOldCookieName(apiKey);\n const cookies = await storage.getRaw(oldCookieName);\n\n if (!cookies) {\n return {\n optOut: false,\n };\n }\n\n await storage.remove(oldCookieName);\n const [deviceId, userId, optOut, sessionId, lastEventTime] = cookies.split('.');\n return {\n deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n };\n};\n\nexport const parseTime = (num: string) => {\n const integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return undefined;\n }\n};\n"],"mappings":"AACA,SAASA,gBAAT,QAAiC,sBAAjC;AACA,SAASC,YAAT,QAA6B,0BAA7B;AACA,SAASC,aAAT,QAA8B,mBAA9B;AAEA,OAAO,MAAMC,eAAe,GAAG,OAAOC,MAAP,EAAuBC,OAAvB,KAA0E;EACvG,IAAIC,OAAwB,GAAG,IAAIJ,aAAJ,EAA/B;;EACA,IAAI,EAAE,MAAMI,OAAO,CAACC,SAAR,EAAR,KAAgCF,OAAhC,aAAgCA,OAAhC,eAAgCA,OAAO,CAAEG,cAA7C,EAA6D;IAC3DF,OAAO,GAAG,IAAIL,YAAJ,EAAV;EACD;;EACD,IAAI,EAAE,MAAMK,OAAO,CAACC,SAAR,EAAR,CAAJ,EAAkC;IAChC,OAAO;MACLE,MAAM,EAAE;IADH,CAAP;EAGD;;EAED,MAAMC,aAAa,GAAGV,gBAAgB,CAACI,MAAD,CAAtC;EACA,MAAMO,OAAO,GAAG,MAAML,OAAO,CAACM,MAAR,CAAeF,aAAf,CAAtB;;EAEA,IAAI,CAACC,OAAL,EAAc;IACZ,OAAO;MACLF,MAAM,EAAE;IADH,CAAP;EAGD;;EAED,MAAMH,OAAO,CAACO,MAAR,CAAeH,aAAf,CAAN;EACA,MAAM,CAACI,QAAD,EAAWC,MAAX,EAAmBN,MAAnB,EAA2BO,SAA3B,EAAsCC,aAAtC,IAAuDN,OAAO,CAACO,KAAR,CAAc,GAAd,CAA7D;EACA,OAAO;IACLJ,QADK;IAELC,MAAM,EAAEI,MAAM,CAACJ,MAAD,CAFT;IAGLC,SAAS,EAAEI,SAAS,CAACJ,SAAD,CAHf;IAILC,aAAa,EAAEG,SAAS,CAACH,aAAD,CAJnB;IAKLR,MAAM,EAAEY,OAAO,CAACZ,MAAD;EALV,CAAP;AAOD,CA7BM;AA+BP,OAAO,MAAMW,SAAS,GAAIE,GAAD,IAAiB;EACxC,MAAMC,OAAO,GAAGC,QAAQ,CAACF,GAAD,EAAM,EAAN,CAAxB;;EACA,IAAIG,KAAK,CAACF,OAAD,CAAT,EAAoB;IAClB,OAAOG,SAAP;EACD;;EACD,OAAOH,OAAP;AACD,CANM;AAQP,OAAO,MAAMJ,MAAM,GAAIQ,KAAD,IAAwC;EAC5D,IAAI,CAACC,IAAD,IAAS,CAACC,MAAV,IAAoB,CAACF,KAAzB,EAAgC;IAC9B,OAAOD,SAAP;EACD;;EACD,IAAI;IACF,OAAOI,kBAAkB,CAACD,MAAM,CAACD,IAAI,CAACD,KAAD,CAAL,CAAP,CAAzB;EACD,CAFD,CAEE,MAAM;IACN,OAAOD,SAAP;EACD;AACF,CATM"}
@@ -0,0 +1,6 @@
1
+ export { add, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setTransport, setUserId, track } from './react-native-client';
2
+ export { runQueuedFunctions } from './utils/snippet-helper';
3
+ export { Revenue, Identify } from '@amplitude/analytics-core';
4
+ import * as Types from '@amplitude/analytics-types';
5
+ export { Types };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["add","getDeviceId","getSessionId","getUserId","groupIdentify","identify","init","logEvent","remove","revenue","setDeviceId","setGroup","setOptOut","setSessionId","setTransport","setUserId","track","runQueuedFunctions","Revenue","Identify","Types"],"sources":["index.ts"],"sourcesContent":["export {\n add,\n getDeviceId,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} from './react-native-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nimport * as Types from '@amplitude/analytics-types';\nexport { Types };\n"],"mappings":"AAAA,SACEA,GADF,EAEEC,WAFF,EAGEC,YAHF,EAIEC,SAJF,EAKEC,aALF,EAMEC,QANF,EAOEC,IAPF,EAQEC,QARF,EASEC,MATF,EAUEC,OAVF,EAWEC,WAXF,EAYEC,QAZF,EAaEC,SAbF,EAcEC,YAdF,EAeEC,YAfF,EAgBEC,SAhBF,EAiBEC,KAjBF,QAkBO,uBAlBP;AAmBA,SAASC,kBAAT,QAAmC,wBAAnC;AACA,SAASC,OAAT,EAAkBC,QAAlB,QAAkC,2BAAlC;AACA,OAAO,KAAKC,KAAZ,MAAuB,4BAAvB;AACA,SAASA,KAAT"}
@@ -0,0 +1,118 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import { PluginType } from '@amplitude/analytics-types';
4
+ import UAParser from '@amplitude/ua-parser-js';
5
+ import { UUID } from '@amplitude/analytics-core';
6
+ import { getLanguage } from '../utils/language';
7
+ import { VERSION } from '../version';
8
+ import { NativeModules } from 'react-native';
9
+ const BROWSER_PLATFORM = 'Web';
10
+ const IP_ADDRESS = '$remote';
11
+ export class Context {
12
+ // this.config is defined in setup() which will always be called first
13
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
14
+ // @ts-ignore
15
+ constructor() {
16
+ _defineProperty(this, "name", 'context');
17
+
18
+ _defineProperty(this, "type", PluginType.BEFORE);
19
+
20
+ _defineProperty(this, "config", void 0);
21
+
22
+ _defineProperty(this, "eventId", 0);
23
+
24
+ _defineProperty(this, "uaResult", void 0);
25
+
26
+ _defineProperty(this, "nativeModule", NativeModules.AmplitudeReactNative);
27
+
28
+ _defineProperty(this, "library", `amplitude-ts/${VERSION}`);
29
+
30
+ let agent;
31
+ /* istanbul ignore else */
32
+
33
+ if (typeof navigator !== 'undefined') {
34
+ agent = navigator.userAgent;
35
+ }
36
+
37
+ this.uaResult = new UAParser(agent).getResult();
38
+ }
39
+
40
+ setup(config) {
41
+ this.config = config;
42
+ return Promise.resolve(undefined);
43
+ }
44
+
45
+ async execute(context) {
46
+ var _this$nativeModule;
47
+
48
+ /**
49
+ * Manages user session triggered by new events
50
+ */
51
+ if (!this.isSessionValid()) {
52
+ // Creates new session
53
+ this.config.sessionId = Date.now();
54
+ } // else use previously creates session
55
+ // Updates last event time to extend time-based session
56
+
57
+
58
+ this.config.lastEventTime = Date.now();
59
+ const time = new Date().getTime();
60
+ const nativeContext = await ((_this$nativeModule = this.nativeModule) === null || _this$nativeModule === void 0 ? void 0 : _this$nativeModule.getApplicationContext());
61
+ const appVersion = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.version) || this.config.appVersion;
62
+ const platform = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.platform) || BROWSER_PLATFORM;
63
+ const osName = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.os_name) || this.uaResult.browser.name;
64
+ const osVersion = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.os_version) || this.uaResult.browser.version;
65
+ const deviceVendor = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.device_manufacturer) || this.uaResult.device.vendor;
66
+ const deviceModel = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.device_model) || this.uaResult.device.model || this.uaResult.os.name;
67
+ const language = (nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.language) || getLanguage();
68
+ const carrier = nativeContext === null || nativeContext === void 0 ? void 0 : nativeContext.carrier;
69
+ const event = {
70
+ user_id: this.config.userId,
71
+ device_id: this.config.deviceId,
72
+ session_id: this.config.sessionId,
73
+ time,
74
+ ...(this.config.appVersion && {
75
+ app_version: appVersion
76
+ }),
77
+ ...(this.config.trackingOptions.platform && {
78
+ platform: platform
79
+ }),
80
+ ...(this.config.trackingOptions.osName && {
81
+ os_name: osName
82
+ }),
83
+ ...(this.config.trackingOptions.osVersion && {
84
+ os_version: osVersion
85
+ }),
86
+ ...(this.config.trackingOptions.deviceManufacturer && {
87
+ device_manufacturer: deviceVendor
88
+ }),
89
+ ...(this.config.trackingOptions.deviceModel && {
90
+ device_model: deviceModel
91
+ }),
92
+ ...(this.config.trackingOptions.language && {
93
+ language: language
94
+ }),
95
+ ...(this.config.trackingOptions.carrier && {
96
+ carrier: carrier
97
+ }),
98
+ ...(this.config.trackingOptions.ipAddress && {
99
+ ip: IP_ADDRESS
100
+ }),
101
+ insert_id: UUID(),
102
+ partner_id: this.config.partnerId,
103
+ plan: this.config.plan,
104
+ ...context,
105
+ event_id: this.eventId++,
106
+ library: this.library
107
+ };
108
+ return event;
109
+ }
110
+
111
+ isSessionValid() {
112
+ const lastEventTime = this.config.lastEventTime || Date.now();
113
+ const timeSinceLastEvent = Date.now() - lastEventTime;
114
+ return timeSinceLastEvent < this.config.sessionTimeout;
115
+ }
116
+
117
+ }
118
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PluginType","UAParser","UUID","getLanguage","VERSION","NativeModules","BROWSER_PLATFORM","IP_ADDRESS","Context","constructor","BEFORE","AmplitudeReactNative","agent","navigator","userAgent","uaResult","getResult","setup","config","Promise","resolve","undefined","execute","context","isSessionValid","sessionId","Date","now","lastEventTime","time","getTime","nativeContext","nativeModule","getApplicationContext","appVersion","version","platform","osName","os_name","browser","name","osVersion","os_version","deviceVendor","device_manufacturer","device","vendor","deviceModel","device_model","model","os","language","carrier","event","user_id","userId","device_id","deviceId","session_id","app_version","trackingOptions","deviceManufacturer","ipAddress","ip","insert_id","partner_id","partnerId","plan","event_id","eventId","library","timeSinceLastEvent","sessionTimeout"],"sources":["context.ts"],"sourcesContent":["import { BeforePlugin, ReactNativeConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '../utils/language';\nimport { VERSION } from '../version';\nimport { NativeModules } from 'react-native';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\n\ntype NativeContext = {\n version: string;\n platform: string;\n language: string;\n os_name: string;\n os_version: string;\n device_brand: string;\n device_manufacturer: string;\n device_model: string;\n carrier: string;\n};\n\nexport interface AmplitudeReactNative {\n getApplicationContext(): Promise<NativeContext>;\n}\n\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: ReactNativeConfig;\n eventId = 0;\n uaResult: UAParser.IResult;\n nativeModule: AmplitudeReactNative | undefined = NativeModules.AmplitudeReactNative as\n | AmplitudeReactNative\n | undefined;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).getResult();\n }\n\n setup(config: ReactNativeConfig): Promise<undefined> {\n this.config = config;\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n /**\n * Manages user session triggered by new events\n */\n if (!this.isSessionValid()) {\n // Creates new session\n this.config.sessionId = Date.now();\n } // else use previously creates session\n // Updates last event time to extend time-based session\n this.config.lastEventTime = Date.now();\n const time = new Date().getTime();\n const nativeContext = await this.nativeModule?.getApplicationContext();\n const appVersion = nativeContext?.version || this.config.appVersion;\n const platform = nativeContext?.platform || BROWSER_PLATFORM;\n const osName = nativeContext?.os_name || this.uaResult.browser.name;\n const osVersion = nativeContext?.os_version || this.uaResult.browser.version;\n const deviceVendor = nativeContext?.device_manufacturer || this.uaResult.device.vendor;\n const deviceModel = nativeContext?.device_model || this.uaResult.device.model || this.uaResult.os.name;\n const language = nativeContext?.language || getLanguage();\n const carrier = nativeContext?.carrier;\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: appVersion }),\n ...(this.config.trackingOptions.platform && { platform: platform }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: language }),\n ...(this.config.trackingOptions.carrier && { carrier: carrier }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...context,\n event_id: this.eventId++,\n library: this.library,\n };\n return event;\n }\n\n isSessionValid() {\n const lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = Date.now() - lastEventTime;\n return timeSinceLastEvent < this.config.sessionTimeout;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';
2
+ import { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';
3
+ import { Context } from './plugins/context';
4
+ import { useReactNativeConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';
5
+ import { parseOldCookies } from './cookie-migration';
6
+ import { CampaignTracker } from './attribution/campaign-tracker';
7
+ export class AmplitudeReactNative extends AmplitudeCore {
8
+ async init(apiKey, userId, options) {
9
+ var _oldCookies$deviceId, _oldCookies$sessionId, _options$optOut;
10
+
11
+ // Step 1: Read cookies stored by old SDK
12
+ const oldCookies = await parseOldCookies(apiKey, options); // Step 2: Create react native config
13
+
14
+ const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, { ...options,
15
+ deviceId: (_oldCookies$deviceId = oldCookies.deviceId) !== null && _oldCookies$deviceId !== void 0 ? _oldCookies$deviceId : options === null || options === void 0 ? void 0 : options.deviceId,
16
+ sessionId: (_oldCookies$sessionId = oldCookies.sessionId) !== null && _oldCookies$sessionId !== void 0 ? _oldCookies$sessionId : options === null || options === void 0 ? void 0 : options.sessionId,
17
+ optOut: (_options$optOut = options === null || options === void 0 ? void 0 : options.optOut) !== null && _options$optOut !== void 0 ? _options$optOut : oldCookies.optOut,
18
+ lastEventTime: oldCookies.lastEventTime
19
+ });
20
+ await super.init(undefined, undefined, reactNativeOptions); // Step 3: Manage session
21
+
22
+ let isNewSession = false;
23
+
24
+ if (!this.config.sessionId || this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout) {
25
+ // Either
26
+ // 1) No previous session; or
27
+ // 2) Previous session expired
28
+ this.config.sessionId = Date.now();
29
+ isNewSession = true;
30
+ } // Step 4: Install plugins
31
+ // Do not track any events before this
32
+
33
+
34
+ await this.add(new Context());
35
+ await this.add(new Destination()); // Step 5: Track attributions
36
+
37
+ await this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession);
38
+ }
39
+
40
+ async runAttributionStrategy(attributionConfig) {
41
+ let isNewSession = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
42
+ const track = this.track.bind(this);
43
+ const onNewCampaign = this.setSessionId.bind(this, Date.now());
44
+ const storage = await createFlexibleStorage(this.config);
45
+ const campaignTracker = new CampaignTracker(this.config.apiKey, { ...attributionConfig,
46
+ storage,
47
+ track,
48
+ onNewCampaign
49
+ });
50
+ await campaignTracker.send(isNewSession);
51
+ }
52
+
53
+ getUserId() {
54
+ return this.config.userId;
55
+ }
56
+
57
+ setUserId(userId) {
58
+ this.config.userId = userId;
59
+ }
60
+
61
+ getDeviceId() {
62
+ return this.config.deviceId;
63
+ }
64
+
65
+ setDeviceId(deviceId) {
66
+ this.config.deviceId = deviceId;
67
+ }
68
+
69
+ regenerateDeviceId() {
70
+ const deviceId = createDeviceId();
71
+ this.setDeviceId(deviceId);
72
+ }
73
+
74
+ getSessionId() {
75
+ return this.config.sessionId;
76
+ }
77
+
78
+ setSessionId(sessionId) {
79
+ this.config.sessionId = sessionId;
80
+ }
81
+
82
+ setOptOut(optOut) {
83
+ this.config.optOut = optOut;
84
+ }
85
+
86
+ setTransport(transport) {
87
+ this.config.transportProvider = createTransport(transport);
88
+ }
89
+
90
+ identify(identify, eventOptions) {
91
+ if (isInstanceProxy(identify)) {
92
+ const queue = identify._q;
93
+ identify._q = [];
94
+ identify = convertProxyObjectToRealObject(new Identify(), queue);
95
+ }
96
+
97
+ return super.identify(identify, eventOptions);
98
+ }
99
+
100
+ groupIdentify(groupType, groupName, identify, eventOptions) {
101
+ if (isInstanceProxy(identify)) {
102
+ const queue = identify._q;
103
+ identify._q = [];
104
+ identify = convertProxyObjectToRealObject(new Identify(), queue);
105
+ }
106
+
107
+ return super.groupIdentify(groupType, groupName, identify, eventOptions);
108
+ }
109
+
110
+ revenue(revenue, eventOptions) {
111
+ if (isInstanceProxy(revenue)) {
112
+ const queue = revenue._q;
113
+ revenue._q = [];
114
+ revenue = convertProxyObjectToRealObject(new Revenue(), queue);
115
+ }
116
+
117
+ return super.revenue(revenue, eventOptions);
118
+ }
119
+
120
+ }
121
+ const client = new AmplitudeReactNative();
122
+ /**
123
+ * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.
124
+ * This method must be called before any other operations.
125
+ *
126
+ * ```typescript
127
+ * await init(API_KEY, USER_ID, options).promise;
128
+ * ```
129
+ */
130
+
131
+ export const init = returnWrapper(client.init.bind(client));
132
+ /**
133
+ * Adds a new plugin.
134
+ *
135
+ * ```typescript
136
+ * const plugin = {...};
137
+ * amplitude.add(plugin);
138
+ * ```
139
+ */
140
+
141
+ export const add = returnWrapper(client.add.bind(client));
142
+ /**
143
+ * Removes a plugin.
144
+ *
145
+ * ```typescript
146
+ * amplitude.remove('myPlugin');
147
+ * ```
148
+ */
149
+
150
+ export const remove = returnWrapper(client.remove.bind(client));
151
+ /**
152
+ * Tracks user-defined event, with specified type, optional event properties and optional overwrites.
153
+ *
154
+ * ```typescript
155
+ * // event tracking with event type only
156
+ * track('Page Load');
157
+ *
158
+ * // event tracking with event type and additional event properties
159
+ * track('Page Load', { loadTime: 1000 });
160
+ *
161
+ * // event tracking with event type, additional event properties, and overwritten event options
162
+ * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });
163
+ *
164
+ * // alternatively, this tracking method is awaitable
165
+ * const result = await track('Page Load').promise;
166
+ * console.log(result.event); // {...}
167
+ * console.log(result.code); // 200
168
+ * console.log(result.message); // "Event tracked successfully"
169
+ * ```
170
+ */
171
+
172
+ export const track = returnWrapper(client.track.bind(client));
173
+ /**
174
+ * Alias for track()
175
+ */
176
+
177
+ export const logEvent = returnWrapper(client.logEvent.bind(client));
178
+ /**
179
+ * Sends an identify event containing user property operations
180
+ *
181
+ * ```typescript
182
+ * const id = new Identify();
183
+ * id.set('colors', ['rose', 'gold']);
184
+ * identify(id);
185
+ *
186
+ * // alternatively, this tracking method is awaitable
187
+ * const result = await identify(id).promise;
188
+ * console.log(result.event); // {...}
189
+ * console.log(result.code); // 200
190
+ * console.log(result.message); // "Event tracked successfully"
191
+ * ```
192
+ */
193
+
194
+ export const identify = returnWrapper(client.identify.bind(client));
195
+ /**
196
+ * Sends a group identify event containing group property operations.
197
+ *
198
+ * ```typescript
199
+ * const id = new Identify();
200
+ * id.set('skills', ['js', 'ts']);
201
+ * const groupType = 'org';
202
+ * const groupName = 'engineering';
203
+ * groupIdentify(groupType, groupName, id);
204
+ *
205
+ * // alternatively, this tracking method is awaitable
206
+ * const result = await groupIdentify(groupType, groupName, id).promise;
207
+ * console.log(result.event); // {...}
208
+ * console.log(result.code); // 200
209
+ * console.log(result.message); // "Event tracked successfully"
210
+ * ```
211
+ */
212
+
213
+ export const groupIdentify = returnWrapper(client.groupIdentify.bind(client));
214
+ export const setGroup = returnWrapper(client.setGroup.bind(client));
215
+ /**
216
+ * Sends a revenue event containing revenue property operations.
217
+ *
218
+ * ```typescript
219
+ * const rev = new Revenue();
220
+ * rev.setRevenue(100);
221
+ * revenue(rev);
222
+ *
223
+ * // alternatively, this tracking method is awaitable
224
+ * const result = await revenue(rev).promise;
225
+ * console.log(result.event); // {...}
226
+ * console.log(result.code); // 200
227
+ * console.log(result.message); // "Event tracked successfully"
228
+ * ```
229
+ */
230
+
231
+ export const revenue = returnWrapper(client.revenue.bind(client));
232
+ /**
233
+ * Returns current user ID.
234
+ *
235
+ * ```typescript
236
+ * const userId = getUserId();
237
+ * ```
238
+ */
239
+
240
+ export const getUserId = client.getUserId.bind(client);
241
+ /**
242
+ * Sets a new user ID.
243
+ *
244
+ * ```typescript
245
+ * setUserId('userId');
246
+ * ```
247
+ */
248
+
249
+ export const setUserId = client.setUserId.bind(client);
250
+ /**
251
+ * Returns current device ID.
252
+ *
253
+ * ```typescript
254
+ * const deviceId = getDeviceId();
255
+ * ```
256
+ */
257
+
258
+ export const getDeviceId = client.getDeviceId.bind(client);
259
+ /**
260
+ * Sets a new device ID.
261
+ * When setting a custom device ID, make sure the value is sufficiently unique.
262
+ * A uuid is recommended.
263
+ *
264
+ * ```typescript
265
+ * setDeviceId('deviceId');
266
+ * ```
267
+ */
268
+
269
+ export const setDeviceId = client.setDeviceId.bind(client);
270
+ /**
271
+ * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
272
+ * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
273
+ * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
274
+ *
275
+ * ```typescript
276
+ * regenerateDeviceId();
277
+ * ```
278
+ */
279
+
280
+ export const regenerateDeviceId = client.regenerateDeviceId.bind(client);
281
+ /**
282
+ * Returns current session ID.
283
+ *
284
+ * ```typescript
285
+ * const sessionId = getSessionId();
286
+ * ```
287
+ */
288
+
289
+ export const getSessionId = client.getSessionId.bind(client);
290
+ /**
291
+ * Sets a new session ID.
292
+ * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).
293
+ *
294
+ * ```typescript
295
+ * setSessionId(Date.now());
296
+ * ```
297
+ */
298
+
299
+ export const setSessionId = client.setSessionId.bind(client);
300
+ /**
301
+ * Sets a new optOut config value. This toggles event tracking on/off.
302
+ *
303
+ *```typescript
304
+ * // Stops tracking
305
+ * setOptOut(true);
306
+ *
307
+ * // Starts/resumes tracking
308
+ * setOptOut(false);
309
+ * ```
310
+ */
311
+
312
+ export const setOptOut = client.setOptOut.bind(client);
313
+ /**
314
+ * Sets the network transport type for events.
315
+ *
316
+ * ```typescript
317
+ * // Use Fetch API
318
+ * setTransport('fetch');
319
+ *
320
+ * // Use XMLHttpRequest API
321
+ * setTransport('xhr');
322
+ *
323
+ * // Use navigator.sendBeacon API
324
+ * setTransport('beacon');
325
+ * ```
326
+ */
327
+
328
+ export const setTransport = client.setTransport.bind(client);
329
+ //# sourceMappingURL=react-native-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AmplitudeCore","Destination","Identify","Revenue","returnWrapper","convertProxyObjectToRealObject","isInstanceProxy","Context","useReactNativeConfig","createTransport","createDeviceId","createFlexibleStorage","parseOldCookies","CampaignTracker","AmplitudeReactNative","init","apiKey","userId","options","oldCookies","reactNativeOptions","deviceId","sessionId","optOut","lastEventTime","undefined","isNewSession","config","Date","now","sessionTimeout","add","runAttributionStrategy","attribution","attributionConfig","track","bind","onNewCampaign","setSessionId","storage","campaignTracker","send","getUserId","setUserId","getDeviceId","setDeviceId","regenerateDeviceId","getSessionId","setOptOut","setTransport","transport","transportProvider","identify","eventOptions","queue","_q","groupIdentify","groupType","groupName","revenue","client","remove","logEvent","setGroup"],"sources":["react-native-client.ts"],"sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n ReactNativeConfig,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n ReactNativeOptions,\n AdditionalReactNativeOptions,\n AttributionReactNativeOptions,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useReactNativeConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\n\nexport class AmplitudeReactNative extends AmplitudeCore<ReactNativeConfig> {\n async init(apiKey: string, userId?: string, options?: ReactNativeOptions & AdditionalReactNativeOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create react native config\n const reactNativeOptions = await useReactNativeConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super.init(undefined, undefined, reactNativeOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.config.sessionId = Date.now();\n isNewSession = true;\n }\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 5: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionReactNativeOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n}\n\nconst client = new AmplitudeReactNative();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n"],"mappings":"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"}