react-native-nitro-amplitude 0.1.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 (411) hide show
  1. package/.watchmanconfig +6 -0
  2. package/LICENSE +21 -0
  3. package/README.md +139 -0
  4. package/android/CMakeLists.txt +34 -0
  5. package/android/build.gradle +85 -0
  6. package/android/consumer-rules.pro +35 -0
  7. package/android/gradle.properties +4 -0
  8. package/android/src/main/cpp/AndroidAmplitudeAdapterCpp.cpp +126 -0
  9. package/android/src/main/cpp/AndroidAmplitudeAdapterCpp.hpp +48 -0
  10. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  11. package/android/src/main/java/com/nitroamplitude/AndroidAmplitudeAdapter.kt +147 -0
  12. package/android/src/main/java/com/nitroamplitude/NitroAmplitudePackage.kt +24 -0
  13. package/app.plugin.js +36 -0
  14. package/cpp/bindings/HybridAmplitudeContext.cpp +83 -0
  15. package/cpp/bindings/HybridAmplitudeContext.hpp +29 -0
  16. package/cpp/bindings/HybridAmplitudeStorage.cpp +163 -0
  17. package/cpp/bindings/HybridAmplitudeStorage.hpp +38 -0
  18. package/cpp/bindings/HybridAmplitudeWorker.cpp +162 -0
  19. package/cpp/bindings/HybridAmplitudeWorker.hpp +74 -0
  20. package/cpp/core/NativeAmplitudeAdapter.hpp +44 -0
  21. package/ios/IOSAmplitudeAdapterCpp.hpp +37 -0
  22. package/ios/IOSAmplitudeAdapterCpp.mm +155 -0
  23. package/lib/commonjs/AmplitudeContext.nitro.js +6 -0
  24. package/lib/commonjs/AmplitudeContext.nitro.js.map +1 -0
  25. package/lib/commonjs/AmplitudeStorage.nitro.js +6 -0
  26. package/lib/commonjs/AmplitudeStorage.nitro.js.map +1 -0
  27. package/lib/commonjs/AmplitudeWorker.nitro.js +6 -0
  28. package/lib/commonjs/AmplitudeWorker.nitro.js.map +1 -0
  29. package/lib/commonjs/analytics/campaign/campaign-tracker.js +105 -0
  30. package/lib/commonjs/analytics/campaign/campaign-tracker.js.map +1 -0
  31. package/lib/commonjs/analytics/campaign/types.js +6 -0
  32. package/lib/commonjs/analytics/campaign/types.js.map +1 -0
  33. package/lib/commonjs/analytics/config.js +283 -0
  34. package/lib/commonjs/analytics/config.js.map +1 -0
  35. package/lib/commonjs/analytics/cookie-migration/index.js +59 -0
  36. package/lib/commonjs/analytics/cookie-migration/index.js.map +1 -0
  37. package/lib/commonjs/analytics/index.js +95 -0
  38. package/lib/commonjs/analytics/index.js.map +1 -0
  39. package/lib/commonjs/analytics/migration/remnant-data-migration.js +177 -0
  40. package/lib/commonjs/analytics/migration/remnant-data-migration.js.map +1 -0
  41. package/lib/commonjs/analytics/nitro-transport.js +31 -0
  42. package/lib/commonjs/analytics/nitro-transport.js.map +1 -0
  43. package/lib/commonjs/analytics/plugins/context.js +140 -0
  44. package/lib/commonjs/analytics/plugins/context.js.map +1 -0
  45. package/lib/commonjs/analytics/react-native-client.js +352 -0
  46. package/lib/commonjs/analytics/react-native-client.js.map +1 -0
  47. package/lib/commonjs/analytics/storage/local-storage.js +73 -0
  48. package/lib/commonjs/analytics/storage/local-storage.js.map +1 -0
  49. package/lib/commonjs/analytics/types.js +175 -0
  50. package/lib/commonjs/analytics/types.js.map +1 -0
  51. package/lib/commonjs/analytics/typings/browser-snippet.d.js +6 -0
  52. package/lib/commonjs/analytics/typings/browser-snippet.d.js.map +1 -0
  53. package/lib/commonjs/analytics/typings/ua-parser.d.js +2 -0
  54. package/lib/commonjs/analytics/typings/ua-parser.d.js.map +1 -0
  55. package/lib/commonjs/analytics/utils/platform.js +16 -0
  56. package/lib/commonjs/analytics/utils/platform.js.map +1 -0
  57. package/lib/commonjs/analytics/version.js +8 -0
  58. package/lib/commonjs/analytics/version.js.map +1 -0
  59. package/lib/commonjs/experiment/experimentClient.js +792 -0
  60. package/lib/commonjs/experiment/experimentClient.js.map +1 -0
  61. package/lib/commonjs/experiment/factory.js +77 -0
  62. package/lib/commonjs/experiment/factory.js.map +1 -0
  63. package/lib/commonjs/experiment/gen/version.js +9 -0
  64. package/lib/commonjs/experiment/gen/version.js.map +1 -0
  65. package/lib/commonjs/experiment/index.js +143 -0
  66. package/lib/commonjs/experiment/index.js.map +1 -0
  67. package/lib/commonjs/experiment/integration/NativeExperimentReactNativeClient.js +11 -0
  68. package/lib/commonjs/experiment/integration/NativeExperimentReactNativeClient.js.map +1 -0
  69. package/lib/commonjs/experiment/integration/connector.js +67 -0
  70. package/lib/commonjs/experiment/integration/connector.js.map +1 -0
  71. package/lib/commonjs/experiment/integration/default.js +92 -0
  72. package/lib/commonjs/experiment/integration/default.js.map +1 -0
  73. package/lib/commonjs/experiment/logger/ampLogger.js +80 -0
  74. package/lib/commonjs/experiment/logger/ampLogger.js.map +1 -0
  75. package/lib/commonjs/experiment/logger/consoleLogger.js +60 -0
  76. package/lib/commonjs/experiment/logger/consoleLogger.js.map +1 -0
  77. package/lib/commonjs/experiment/storage/cache.js +197 -0
  78. package/lib/commonjs/experiment/storage/cache.js.map +1 -0
  79. package/lib/commonjs/experiment/storage/local-storage.js +25 -0
  80. package/lib/commonjs/experiment/storage/local-storage.js.map +1 -0
  81. package/lib/commonjs/experiment/stubClient.js +46 -0
  82. package/lib/commonjs/experiment/stubClient.js.map +1 -0
  83. package/lib/commonjs/experiment/transport/http.js +72 -0
  84. package/lib/commonjs/experiment/transport/http.js.map +1 -0
  85. package/lib/commonjs/experiment/types/client.js +6 -0
  86. package/lib/commonjs/experiment/types/client.js.map +1 -0
  87. package/lib/commonjs/experiment/types/config.js +67 -0
  88. package/lib/commonjs/experiment/types/config.js.map +1 -0
  89. package/lib/commonjs/experiment/types/exposure.js +2 -0
  90. package/lib/commonjs/experiment/types/exposure.js.map +1 -0
  91. package/lib/commonjs/experiment/types/logger.js +42 -0
  92. package/lib/commonjs/experiment/types/logger.js.map +1 -0
  93. package/lib/commonjs/experiment/types/source.js +54 -0
  94. package/lib/commonjs/experiment/types/source.js.map +1 -0
  95. package/lib/commonjs/experiment/types/storage.js +2 -0
  96. package/lib/commonjs/experiment/types/storage.js.map +1 -0
  97. package/lib/commonjs/experiment/types/transport.js +2 -0
  98. package/lib/commonjs/experiment/types/transport.js.map +1 -0
  99. package/lib/commonjs/experiment/types/user.js +2 -0
  100. package/lib/commonjs/experiment/types/user.js.map +1 -0
  101. package/lib/commonjs/experiment/types/variant.js +2 -0
  102. package/lib/commonjs/experiment/types/variant.js.map +1 -0
  103. package/lib/commonjs/experiment/util/backoff.js +54 -0
  104. package/lib/commonjs/experiment/util/backoff.js.map +1 -0
  105. package/lib/commonjs/experiment/util/base64.js +23 -0
  106. package/lib/commonjs/experiment/util/base64.js.map +1 -0
  107. package/lib/commonjs/experiment/util/convert.js +78 -0
  108. package/lib/commonjs/experiment/util/convert.js.map +1 -0
  109. package/lib/commonjs/experiment/util/index.js +25 -0
  110. package/lib/commonjs/experiment/util/index.js.map +1 -0
  111. package/lib/commonjs/experiment/util/platform.js +16 -0
  112. package/lib/commonjs/experiment/util/platform.js.map +1 -0
  113. package/lib/commonjs/experiment/util/randomstring.js +16 -0
  114. package/lib/commonjs/experiment/util/randomstring.js.map +1 -0
  115. package/lib/commonjs/experiment/util/userSessionExposureTracker.js +40 -0
  116. package/lib/commonjs/experiment/util/userSessionExposureTracker.js.map +1 -0
  117. package/lib/commonjs/index.js +298 -0
  118. package/lib/commonjs/index.js.map +1 -0
  119. package/lib/commonjs/index.web.js +22 -0
  120. package/lib/commonjs/index.web.js.map +1 -0
  121. package/lib/commonjs/native/context.js +43 -0
  122. package/lib/commonjs/native/context.js.map +1 -0
  123. package/lib/commonjs/native/http.js +62 -0
  124. package/lib/commonjs/native/http.js.map +1 -0
  125. package/lib/commonjs/native/hybrid.js +31 -0
  126. package/lib/commonjs/native/hybrid.js.map +1 -0
  127. package/lib/commonjs/native/storage.js +93 -0
  128. package/lib/commonjs/native/storage.js.map +1 -0
  129. package/lib/commonjs/package.json +1 -0
  130. package/lib/module/AmplitudeContext.nitro.js +4 -0
  131. package/lib/module/AmplitudeContext.nitro.js.map +1 -0
  132. package/lib/module/AmplitudeStorage.nitro.js +4 -0
  133. package/lib/module/AmplitudeStorage.nitro.js.map +1 -0
  134. package/lib/module/AmplitudeWorker.nitro.js +4 -0
  135. package/lib/module/AmplitudeWorker.nitro.js.map +1 -0
  136. package/lib/module/analytics/campaign/campaign-tracker.js +100 -0
  137. package/lib/module/analytics/campaign/campaign-tracker.js.map +1 -0
  138. package/lib/module/analytics/campaign/types.js +4 -0
  139. package/lib/module/analytics/campaign/types.js.map +1 -0
  140. package/lib/module/analytics/config.js +272 -0
  141. package/lib/module/analytics/config.js.map +1 -0
  142. package/lib/module/analytics/cookie-migration/index.js +51 -0
  143. package/lib/module/analytics/cookie-migration/index.js.map +1 -0
  144. package/lib/module/analytics/index.js +34 -0
  145. package/lib/module/analytics/index.js.map +1 -0
  146. package/lib/module/analytics/migration/remnant-data-migration.js +172 -0
  147. package/lib/module/analytics/migration/remnant-data-migration.js.map +1 -0
  148. package/lib/module/analytics/nitro-transport.js +26 -0
  149. package/lib/module/analytics/nitro-transport.js.map +1 -0
  150. package/lib/module/analytics/plugins/context.js +134 -0
  151. package/lib/module/analytics/plugins/context.js.map +1 -0
  152. package/lib/module/analytics/react-native-client.js +346 -0
  153. package/lib/module/analytics/react-native-client.js.map +1 -0
  154. package/lib/module/analytics/storage/local-storage.js +68 -0
  155. package/lib/module/analytics/storage/local-storage.js.map +1 -0
  156. package/lib/module/analytics/types.js +4 -0
  157. package/lib/module/analytics/types.js.map +1 -0
  158. package/lib/module/analytics/typings/browser-snippet.d.js +4 -0
  159. package/lib/module/analytics/typings/browser-snippet.d.js.map +1 -0
  160. package/lib/module/analytics/typings/ua-parser.d.js +2 -0
  161. package/lib/module/analytics/typings/ua-parser.d.js.map +1 -0
  162. package/lib/module/analytics/utils/platform.js +10 -0
  163. package/lib/module/analytics/utils/platform.js.map +1 -0
  164. package/lib/module/analytics/version.js +4 -0
  165. package/lib/module/analytics/version.js.map +1 -0
  166. package/lib/module/experiment/experimentClient.js +788 -0
  167. package/lib/module/experiment/experimentClient.js.map +1 -0
  168. package/lib/module/experiment/factory.js +73 -0
  169. package/lib/module/experiment/factory.js.map +1 -0
  170. package/lib/module/experiment/gen/version.js +5 -0
  171. package/lib/module/experiment/gen/version.js.map +1 -0
  172. package/lib/module/experiment/index.js +16 -0
  173. package/lib/module/experiment/index.js.map +1 -0
  174. package/lib/module/experiment/integration/NativeExperimentReactNativeClient.js +7 -0
  175. package/lib/module/experiment/integration/NativeExperimentReactNativeClient.js.map +1 -0
  176. package/lib/module/experiment/integration/connector.js +61 -0
  177. package/lib/module/experiment/integration/connector.js.map +1 -0
  178. package/lib/module/experiment/integration/default.js +87 -0
  179. package/lib/module/experiment/integration/default.js.map +1 -0
  180. package/lib/module/experiment/logger/ampLogger.js +76 -0
  181. package/lib/module/experiment/logger/ampLogger.js.map +1 -0
  182. package/lib/module/experiment/logger/consoleLogger.js +55 -0
  183. package/lib/module/experiment/logger/consoleLogger.js.map +1 -0
  184. package/lib/module/experiment/storage/cache.js +187 -0
  185. package/lib/module/experiment/storage/cache.js.map +1 -0
  186. package/lib/module/experiment/storage/local-storage.js +19 -0
  187. package/lib/module/experiment/storage/local-storage.js.map +1 -0
  188. package/lib/module/experiment/stubClient.js +41 -0
  189. package/lib/module/experiment/stubClient.js.map +1 -0
  190. package/lib/module/experiment/transport/http.js +66 -0
  191. package/lib/module/experiment/transport/http.js.map +1 -0
  192. package/lib/module/experiment/types/client.js +4 -0
  193. package/lib/module/experiment/types/client.js.map +1 -0
  194. package/lib/module/experiment/types/config.js +64 -0
  195. package/lib/module/experiment/types/config.js.map +1 -0
  196. package/lib/module/experiment/types/exposure.js +2 -0
  197. package/lib/module/experiment/types/exposure.js.map +1 -0
  198. package/lib/module/experiment/types/logger.js +39 -0
  199. package/lib/module/experiment/types/logger.js.map +1 -0
  200. package/lib/module/experiment/types/source.js +51 -0
  201. package/lib/module/experiment/types/source.js.map +1 -0
  202. package/lib/module/experiment/types/storage.js +2 -0
  203. package/lib/module/experiment/types/storage.js.map +1 -0
  204. package/lib/module/experiment/types/transport.js +2 -0
  205. package/lib/module/experiment/types/transport.js.map +1 -0
  206. package/lib/module/experiment/types/user.js +2 -0
  207. package/lib/module/experiment/types/user.js.map +1 -0
  208. package/lib/module/experiment/types/variant.js +2 -0
  209. package/lib/module/experiment/types/variant.js.map +1 -0
  210. package/lib/module/experiment/util/backoff.js +49 -0
  211. package/lib/module/experiment/util/backoff.js.map +1 -0
  212. package/lib/module/experiment/util/base64.js +16 -0
  213. package/lib/module/experiment/util/base64.js.map +1 -0
  214. package/lib/module/experiment/util/convert.js +71 -0
  215. package/lib/module/experiment/util/convert.js.map +1 -0
  216. package/lib/module/experiment/util/index.js +17 -0
  217. package/lib/module/experiment/util/index.js.map +1 -0
  218. package/lib/module/experiment/util/platform.js +10 -0
  219. package/lib/module/experiment/util/platform.js.map +1 -0
  220. package/lib/module/experiment/util/randomstring.js +11 -0
  221. package/lib/module/experiment/util/randomstring.js.map +1 -0
  222. package/lib/module/experiment/util/userSessionExposureTracker.js +35 -0
  223. package/lib/module/experiment/util/userSessionExposureTracker.js.map +1 -0
  224. package/lib/module/index.js +50 -0
  225. package/lib/module/index.js.map +1 -0
  226. package/lib/module/index.web.js +14 -0
  227. package/lib/module/index.web.js.map +1 -0
  228. package/lib/module/native/context.js +35 -0
  229. package/lib/module/native/context.js.map +1 -0
  230. package/lib/module/native/http.js +57 -0
  231. package/lib/module/native/http.js.map +1 -0
  232. package/lib/module/native/hybrid.js +24 -0
  233. package/lib/module/native/hybrid.js.map +1 -0
  234. package/lib/module/native/storage.js +86 -0
  235. package/lib/module/native/storage.js.map +1 -0
  236. package/lib/typescript/AmplitudeContext.nitro.d.ts +17 -0
  237. package/lib/typescript/AmplitudeContext.nitro.d.ts.map +1 -0
  238. package/lib/typescript/AmplitudeStorage.nitro.d.ts +17 -0
  239. package/lib/typescript/AmplitudeStorage.nitro.d.ts.map +1 -0
  240. package/lib/typescript/AmplitudeWorker.nitro.d.ts +11 -0
  241. package/lib/typescript/AmplitudeWorker.nitro.d.ts.map +1 -0
  242. package/lib/typescript/analytics/campaign/campaign-tracker.d.ts +85 -0
  243. package/lib/typescript/analytics/campaign/campaign-tracker.d.ts.map +1 -0
  244. package/lib/typescript/analytics/campaign/types.d.ts +11 -0
  245. package/lib/typescript/analytics/campaign/types.d.ts.map +1 -0
  246. package/lib/typescript/analytics/config.d.ts +68 -0
  247. package/lib/typescript/analytics/config.d.ts.map +1 -0
  248. package/lib/typescript/analytics/cookie-migration/index.d.ts +6 -0
  249. package/lib/typescript/analytics/cookie-migration/index.d.ts.map +1 -0
  250. package/lib/typescript/analytics/index.d.ts +7 -0
  251. package/lib/typescript/analytics/index.d.ts.map +1 -0
  252. package/lib/typescript/analytics/migration/remnant-data-migration.d.ts +20 -0
  253. package/lib/typescript/analytics/migration/remnant-data-migration.d.ts.map +1 -0
  254. package/lib/typescript/analytics/nitro-transport.d.ts +9 -0
  255. package/lib/typescript/analytics/nitro-transport.d.ts.map +1 -0
  256. package/lib/typescript/analytics/plugins/context.d.ts +14 -0
  257. package/lib/typescript/analytics/plugins/context.d.ts.map +1 -0
  258. package/lib/typescript/analytics/react-native-client.d.ts +55 -0
  259. package/lib/typescript/analytics/react-native-client.d.ts.map +1 -0
  260. package/lib/typescript/analytics/storage/local-storage.d.ts +14 -0
  261. package/lib/typescript/analytics/storage/local-storage.d.ts.map +1 -0
  262. package/lib/typescript/analytics/types.d.ts +2 -0
  263. package/lib/typescript/analytics/types.d.ts.map +1 -0
  264. package/lib/typescript/analytics/utils/platform.d.ts +3 -0
  265. package/lib/typescript/analytics/utils/platform.d.ts.map +1 -0
  266. package/lib/typescript/analytics/version.d.ts +2 -0
  267. package/lib/typescript/analytics/version.d.ts.map +1 -0
  268. package/lib/typescript/experiment/experimentClient.d.ts +234 -0
  269. package/lib/typescript/experiment/experimentClient.d.ts.map +1 -0
  270. package/lib/typescript/experiment/factory.d.ts +11 -0
  271. package/lib/typescript/experiment/factory.d.ts.map +1 -0
  272. package/lib/typescript/experiment/gen/version.d.ts +2 -0
  273. package/lib/typescript/experiment/gen/version.d.ts.map +1 -0
  274. package/lib/typescript/experiment/index.d.ts +15 -0
  275. package/lib/typescript/experiment/index.d.ts.map +1 -0
  276. package/lib/typescript/experiment/integration/NativeExperimentReactNativeClient.d.ts +16 -0
  277. package/lib/typescript/experiment/integration/NativeExperimentReactNativeClient.d.ts.map +1 -0
  278. package/lib/typescript/experiment/integration/connector.d.ts +16 -0
  279. package/lib/typescript/experiment/integration/connector.d.ts.map +1 -0
  280. package/lib/typescript/experiment/integration/default.d.ts +20 -0
  281. package/lib/typescript/experiment/integration/default.d.ts.map +1 -0
  282. package/lib/typescript/experiment/logger/ampLogger.d.ts +47 -0
  283. package/lib/typescript/experiment/logger/ampLogger.d.ts.map +1 -0
  284. package/lib/typescript/experiment/logger/consoleLogger.d.ts +40 -0
  285. package/lib/typescript/experiment/logger/consoleLogger.d.ts.map +1 -0
  286. package/lib/typescript/experiment/storage/cache.d.ts +35 -0
  287. package/lib/typescript/experiment/storage/cache.d.ts.map +1 -0
  288. package/lib/typescript/experiment/storage/local-storage.d.ts +11 -0
  289. package/lib/typescript/experiment/storage/local-storage.d.ts.map +1 -0
  290. package/lib/typescript/experiment/stubClient.d.ts +21 -0
  291. package/lib/typescript/experiment/stubClient.d.ts.map +1 -0
  292. package/lib/typescript/experiment/transport/http.d.ts +17 -0
  293. package/lib/typescript/experiment/transport/http.d.ts.map +1 -0
  294. package/lib/typescript/experiment/types/client.d.ts +36 -0
  295. package/lib/typescript/experiment/types/client.d.ts.map +1 -0
  296. package/lib/typescript/experiment/types/config.d.ts +164 -0
  297. package/lib/typescript/experiment/types/config.d.ts.map +1 -0
  298. package/lib/typescript/experiment/types/exposure.d.ts +107 -0
  299. package/lib/typescript/experiment/types/exposure.d.ts.map +1 -0
  300. package/lib/typescript/experiment/types/logger.d.ts +67 -0
  301. package/lib/typescript/experiment/types/logger.d.ts.map +1 -0
  302. package/lib/typescript/experiment/types/source.d.ts +43 -0
  303. package/lib/typescript/experiment/types/source.d.ts.map +1 -0
  304. package/lib/typescript/experiment/types/storage.d.ts +7 -0
  305. package/lib/typescript/experiment/types/storage.d.ts.map +1 -0
  306. package/lib/typescript/experiment/types/transport.d.ts +8 -0
  307. package/lib/typescript/experiment/types/transport.d.ts.map +1 -0
  308. package/lib/typescript/experiment/types/user.d.ts +106 -0
  309. package/lib/typescript/experiment/types/user.d.ts.map +1 -0
  310. package/lib/typescript/experiment/types/variant.d.ts +33 -0
  311. package/lib/typescript/experiment/types/variant.d.ts.map +1 -0
  312. package/lib/typescript/experiment/util/backoff.d.ts +14 -0
  313. package/lib/typescript/experiment/util/backoff.d.ts.map +1 -0
  314. package/lib/typescript/experiment/util/base64.d.ts +3 -0
  315. package/lib/typescript/experiment/util/base64.d.ts.map +1 -0
  316. package/lib/typescript/experiment/util/convert.d.ts +7 -0
  317. package/lib/typescript/experiment/util/convert.d.ts.map +1 -0
  318. package/lib/typescript/experiment/util/index.d.ts +6 -0
  319. package/lib/typescript/experiment/util/index.d.ts.map +1 -0
  320. package/lib/typescript/experiment/util/platform.d.ts +3 -0
  321. package/lib/typescript/experiment/util/platform.d.ts.map +1 -0
  322. package/lib/typescript/experiment/util/randomstring.d.ts +2 -0
  323. package/lib/typescript/experiment/util/randomstring.d.ts.map +1 -0
  324. package/lib/typescript/experiment/util/userSessionExposureTracker.d.ts +16 -0
  325. package/lib/typescript/experiment/util/userSessionExposureTracker.d.ts.map +1 -0
  326. package/lib/typescript/index.d.ts +31 -0
  327. package/lib/typescript/index.d.ts.map +1 -0
  328. package/lib/typescript/index.web.d.ts +12 -0
  329. package/lib/typescript/index.web.d.ts.map +1 -0
  330. package/lib/typescript/native/context.d.ts +29 -0
  331. package/lib/typescript/native/context.d.ts.map +1 -0
  332. package/lib/typescript/native/http.d.ts +6 -0
  333. package/lib/typescript/native/http.d.ts.map +1 -0
  334. package/lib/typescript/native/hybrid.d.ts +8 -0
  335. package/lib/typescript/native/hybrid.d.ts.map +1 -0
  336. package/lib/typescript/native/storage.d.ts +29 -0
  337. package/lib/typescript/native/storage.d.ts.map +1 -0
  338. package/nitro.json +33 -0
  339. package/nitrogen/generated/.gitattributes +1 -0
  340. package/nitrogen/generated/android/NitroAmplitude+autolinking.cmake +83 -0
  341. package/nitrogen/generated/android/NitroAmplitude+autolinking.gradle +27 -0
  342. package/nitrogen/generated/android/NitroAmplitudeOnLoad.cpp +69 -0
  343. package/nitrogen/generated/android/NitroAmplitudeOnLoad.hpp +34 -0
  344. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitroamplitude/NitroAmplitudeOnLoad.kt +35 -0
  345. package/nitrogen/generated/ios/NitroAmplitude+autolinking.rb +62 -0
  346. package/nitrogen/generated/ios/NitroAmplitude-Swift-Cxx-Bridge.cpp +17 -0
  347. package/nitrogen/generated/ios/NitroAmplitude-Swift-Cxx-Bridge.hpp +27 -0
  348. package/nitrogen/generated/ios/NitroAmplitude-Swift-Cxx-Umbrella.hpp +38 -0
  349. package/nitrogen/generated/ios/NitroAmplitudeAutolinking.mm +55 -0
  350. package/nitrogen/generated/ios/NitroAmplitudeAutolinking.swift +16 -0
  351. package/nitrogen/generated/shared/c++/HybridAmplitudeContextSpec.cpp +25 -0
  352. package/nitrogen/generated/shared/c++/HybridAmplitudeContextSpec.hpp +67 -0
  353. package/nitrogen/generated/shared/c++/HybridAmplitudeStorageSpec.cpp +30 -0
  354. package/nitrogen/generated/shared/c++/HybridAmplitudeStorageSpec.hpp +73 -0
  355. package/nitrogen/generated/shared/c++/HybridAmplitudeWorkerSpec.cpp +24 -0
  356. package/nitrogen/generated/shared/c++/HybridAmplitudeWorkerSpec.hpp +66 -0
  357. package/package.json +130 -0
  358. package/react-native-nitro-amplitude.podspec +36 -0
  359. package/src/AmplitudeContext.nitro.ts +21 -0
  360. package/src/AmplitudeStorage.nitro.ts +17 -0
  361. package/src/AmplitudeWorker.nitro.ts +25 -0
  362. package/src/analytics/campaign/campaign-tracker.ts +162 -0
  363. package/src/analytics/campaign/types.ts +18 -0
  364. package/src/analytics/config.ts +373 -0
  365. package/src/analytics/cookie-migration/index.ts +69 -0
  366. package/src/analytics/index.ts +36 -0
  367. package/src/analytics/migration/remnant-data-migration.ts +206 -0
  368. package/src/analytics/nitro-transport.ts +35 -0
  369. package/src/analytics/plugins/context.ts +166 -0
  370. package/src/analytics/react-native-client.ts +573 -0
  371. package/src/analytics/storage/local-storage.ts +76 -0
  372. package/src/analytics/types.ts +30 -0
  373. package/src/analytics/typings/browser-snippet.d.ts +7 -0
  374. package/src/analytics/typings/ua-parser.d.ts +4 -0
  375. package/src/analytics/utils/platform.ts +9 -0
  376. package/src/analytics/version.ts +1 -0
  377. package/src/experiment/experimentClient.ts +987 -0
  378. package/src/experiment/factory.ts +86 -0
  379. package/src/experiment/gen/version.ts +2 -0
  380. package/src/experiment/index.ts +14 -0
  381. package/src/experiment/integration/NativeExperimentReactNativeClient.ts +25 -0
  382. package/src/experiment/integration/connector.ts +82 -0
  383. package/src/experiment/integration/default.ts +107 -0
  384. package/src/experiment/logger/ampLogger.ts +76 -0
  385. package/src/experiment/logger/consoleLogger.ts +54 -0
  386. package/src/experiment/storage/cache.ts +271 -0
  387. package/src/experiment/storage/local-storage.ts +23 -0
  388. package/src/experiment/stubClient.ts +61 -0
  389. package/src/experiment/transport/http.ts +105 -0
  390. package/src/experiment/types/client.ts +38 -0
  391. package/src/experiment/types/config.ts +210 -0
  392. package/src/experiment/types/exposure.ts +107 -0
  393. package/src/experiment/types/logger.ts +71 -0
  394. package/src/experiment/types/source.ts +52 -0
  395. package/src/experiment/types/storage.ts +6 -0
  396. package/src/experiment/types/transport.ts +14 -0
  397. package/src/experiment/types/user.ts +132 -0
  398. package/src/experiment/types/variant.ts +36 -0
  399. package/src/experiment/util/backoff.ts +67 -0
  400. package/src/experiment/util/base64.ts +20 -0
  401. package/src/experiment/util/convert.ts +78 -0
  402. package/src/experiment/util/index.ts +23 -0
  403. package/src/experiment/util/platform.ts +9 -0
  404. package/src/experiment/util/randomstring.ts +12 -0
  405. package/src/experiment/util/userSessionExposureTracker.ts +47 -0
  406. package/src/index.ts +66 -0
  407. package/src/index.web.ts +19 -0
  408. package/src/native/context.ts +73 -0
  409. package/src/native/http.ts +77 -0
  410. package/src/native/hybrid.ts +32 -0
  411. package/src/native/storage.ts +107 -0
package/package.json ADDED
@@ -0,0 +1,130 @@
1
+ {
2
+ "name": "react-native-nitro-amplitude",
3
+ "version": "0.1.0",
4
+ "description": "High-performance Amplitude Analytics and Experiment SDK for React Native powered by Nitro Modules and C++: synchronous JSI storage, native device context, and background HTTP transport.",
5
+ "main": "lib/commonjs/index.js",
6
+ "module": "lib/module/index.js",
7
+ "types": "lib/typescript/index.d.ts",
8
+ "react-native": "src/index.ts",
9
+ "browser": "src/index.web.ts",
10
+ "source": "src/index.ts",
11
+ "app": "app.plugin.js",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./lib/typescript/index.d.ts",
15
+ "react-native": "./src/index.ts",
16
+ "browser": "./src/index.web.ts",
17
+ "default": "./lib/commonjs/index.js"
18
+ },
19
+ "./analytics": {
20
+ "types": "./lib/typescript/analytics/index.d.ts",
21
+ "react-native": "./src/analytics/index.ts",
22
+ "default": "./lib/commonjs/analytics/index.js"
23
+ },
24
+ "./experiment": {
25
+ "types": "./lib/typescript/experiment/index.d.ts",
26
+ "react-native": "./src/experiment/index.ts",
27
+ "default": "./lib/commonjs/experiment/index.js"
28
+ },
29
+ "./app.plugin": "./app.plugin.js",
30
+ "./app.plugin.js": "./app.plugin.js",
31
+ "./package.json": "./package.json"
32
+ },
33
+ "files": [
34
+ "src",
35
+ "lib",
36
+ "cpp",
37
+ "android",
38
+ "ios",
39
+ "nitrogen",
40
+ "nitro.json",
41
+ "*.podspec",
42
+ "app.plugin.js",
43
+ ".watchmanconfig",
44
+ "!**/__tests__",
45
+ "!**/__fixtures__",
46
+ "!**/__mocks__",
47
+ "!cpp/**/*Test.cpp",
48
+ "!cpp/build",
49
+ "!android/build",
50
+ "!android/.cxx",
51
+ "!scripts"
52
+ ],
53
+ "scripts": {
54
+ "build": "bob build",
55
+ "clean": "rimraf lib nitrogen/generated",
56
+ "codegen": "nitrogen --logLevel=\"debug\"",
57
+ "lint": "bunx eslint src --max-warnings=0",
58
+ "lint:fix": "bunx eslint src --max-warnings=0 --fix",
59
+ "lint:check": "bunx eslint src --max-warnings=0",
60
+ "format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\"",
61
+ "format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\"",
62
+ "typecheck": "tsc --noEmit",
63
+ "test:types": "tsc --noEmit -p tsconfig.types.json",
64
+ "test": "jest",
65
+ "test:coverage": "jest --coverage",
66
+ "benchmark": "node scripts/benchmark-check.js",
67
+ "test:cpp": "node scripts/test-cpp.js",
68
+ "check:pack": "node scripts/check-pack-contents.js",
69
+ "prepack": "node scripts/sync-package-docs.js prepare",
70
+ "postpack": "node scripts/sync-package-docs.js cleanup",
71
+ "prepublishOnly": "bun run clean && bun run codegen && bun run build && bun run test:types"
72
+ },
73
+ "keywords": [
74
+ "react-native",
75
+ "amplitude",
76
+ "analytics",
77
+ "experiment",
78
+ "feature-flags",
79
+ "a-b-testing",
80
+ "nitro",
81
+ "nitro-modules",
82
+ "jsi",
83
+ "expo",
84
+ "performance"
85
+ ],
86
+ "repository": {
87
+ "type": "git",
88
+ "url": "git+https://github.com/JoaoPauloCMarra/react-native-nitro-amplitude.git"
89
+ },
90
+ "author": "JoaoPauloCMarra",
91
+ "license": "MIT",
92
+ "bugs": {
93
+ "url": "https://github.com/JoaoPauloCMarra/react-native-nitro-amplitude/issues"
94
+ },
95
+ "homepage": "https://github.com/JoaoPauloCMarra/react-native-nitro-amplitude#readme",
96
+ "publishConfig": {
97
+ "registry": "https://registry.npmjs.org/"
98
+ },
99
+ "dependencies": {
100
+ "@amplitude/analytics-connector": "^1.6.4",
101
+ "@amplitude/analytics-core": "2.48.2",
102
+ "@amplitude/experiment-core": "^0.13.1",
103
+ "@amplitude/ua-parser-js": "^0.7.33",
104
+ "tslib": "^2.8.1",
105
+ "unfetch": "^4.2.0"
106
+ },
107
+ "devDependencies": {
108
+ "@react-native/babel-preset": "^0.85.3",
109
+ "@types/react": "~19.2.0"
110
+ },
111
+ "peerDependencies": {
112
+ "react": ">=18.2.0",
113
+ "react-native": ">=0.75.0",
114
+ "react-native-nitro-modules": ">=0.35.7"
115
+ },
116
+ "react-native-builder-bob": {
117
+ "source": "src",
118
+ "output": "lib",
119
+ "targets": [
120
+ "commonjs",
121
+ "module",
122
+ [
123
+ "typescript",
124
+ {
125
+ "tsc": "../../node_modules/.bin/tsc"
126
+ }
127
+ ]
128
+ ]
129
+ }
130
+ }
@@ -0,0 +1,36 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "react-native-nitro-amplitude"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => "13.0" }
14
+ s.source = { :git => "https://github.com/JoaoPauloCMarra/react-native-nitro-amplitude.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = [
17
+ "ios/**/*.{h,m,mm,swift}",
18
+ "cpp/**/*.{h,hpp,c,cpp}"
19
+ ]
20
+
21
+ s.pod_target_xcconfig = {
22
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
23
+ "CLANG_CXX_LIBRARY" => "libc++",
24
+ "HEADER_SEARCH_PATHS" => [
25
+ "\"$(PODS_TARGET_SRCROOT)/cpp/core\"",
26
+ "\"$(PODS_TARGET_SRCROOT)/cpp/bindings\"",
27
+ "\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/shared/c++\"",
28
+ "\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/ios\""
29
+ ].join(" ")
30
+ }
31
+
32
+ s.dependency "React-Core"
33
+
34
+ load 'nitrogen/generated/ios/NitroAmplitude+autolinking.rb'
35
+ add_nitrogen_files(s)
36
+ end
@@ -0,0 +1,21 @@
1
+ import { type HybridObject } from "react-native-nitro-modules";
2
+
3
+ export interface AmplitudeContext extends HybridObject<{
4
+ ios: "c++";
5
+ android: "c++";
6
+ }> {
7
+ /** Warm native device context caches off the UI-critical path. */
8
+ prefetch(): void;
9
+ /** Returns JSON-encoded application context for analytics/experiment targeting. */
10
+ getApplicationContextJson(optionsJson: string): string;
11
+ /** Returns JSON-encoded legacy SDK session data for migration. */
12
+ getLegacySessionDataJson(instanceName: string): string;
13
+ /** Returns JSON-encoded legacy queued events for migration. */
14
+ getLegacyEventsJson(instanceName: string, eventKind: string): string[];
15
+ /** Removes a migrated legacy event after successful upload. */
16
+ removeLegacyEvent(
17
+ instanceName: string,
18
+ eventKind: string,
19
+ eventId: number,
20
+ ): void;
21
+ }
@@ -0,0 +1,17 @@
1
+ import { type HybridObject } from "react-native-nitro-modules";
2
+
3
+ export interface AmplitudeStorage extends HybridObject<{
4
+ ios: "c++";
5
+ android: "c++";
6
+ }> {
7
+ set(key: string, value: string, persist: boolean): void;
8
+ get(key: string, persist: boolean): string | undefined;
9
+ remove(key: string, persist: boolean): void;
10
+ clear(persist: boolean): void;
11
+ has(key: string, persist: boolean): boolean;
12
+ getAllKeys(persist: boolean): string[];
13
+ getKeysByPrefix(prefix: string, persist: boolean): string[];
14
+ setBatch(keys: string[], values: string[], persist: boolean): void;
15
+ getBatch(keys: string[], persist: boolean): (string | undefined)[];
16
+ removeBatch(keys: string[], persist: boolean): void;
17
+ }
@@ -0,0 +1,25 @@
1
+ import { type HybridObject } from "react-native-nitro-modules";
2
+
3
+ export interface AmplitudeWorker extends HybridObject<{
4
+ ios: "c++";
5
+ android: "c++";
6
+ }> {
7
+ enqueue(
8
+ requestId: string,
9
+ url: string,
10
+ method: string,
11
+ headersJson: string,
12
+ body: string,
13
+ timeoutMillis: number,
14
+ ): void;
15
+ cancel(requestId: string): void;
16
+ addOnComplete(
17
+ callback: (
18
+ requestId: string,
19
+ statusCode: number,
20
+ body: string,
21
+ error: string,
22
+ ) => void,
23
+ ): () => void;
24
+ queueSize(): number;
25
+ }
@@ -0,0 +1,162 @@
1
+ import {
2
+ createIdentifyEvent,
3
+ Identify,
4
+ Storage,
5
+ Campaign,
6
+ CampaignParser as ICampaignParser,
7
+ BaseEvent,
8
+ getCookieName as getStorageKey,
9
+ BASE_CAMPAIGN,
10
+ EMPTY_VALUE,
11
+ MKTG,
12
+ CampaignParser,
13
+ } from "@amplitude/analytics-core";
14
+ import {
15
+ CampaignTracker as ICampaignTracker,
16
+ CampaignTrackFunction,
17
+ CampaignTrackerOptions,
18
+ } from "./types";
19
+
20
+ /**
21
+ * @deprecated
22
+ * Campaign tracker has mixed logic from built-in and plugin web attribution
23
+ * features. Do not add more features here. The plan moving foward is to consolidate logic
24
+ * in @amplitude/plugin-web-attribution-browser with backward compatibility.
25
+ */
26
+ export class CampaignTracker implements ICampaignTracker {
27
+ storage: Storage<Campaign>;
28
+ storageKey: string;
29
+ parser: ICampaignParser;
30
+ track: CampaignTrackFunction;
31
+ onNewCampaign: (campaign: Campaign) => unknown;
32
+
33
+ disabled: boolean;
34
+ trackNewCampaigns: boolean;
35
+ trackPageViews: boolean;
36
+ excludeReferrers: string[];
37
+ initialEmptyValue: string;
38
+
39
+ constructor(apiKey: string, options: CampaignTrackerOptions) {
40
+ this.storage = options.storage;
41
+ this.storageKey = getStorageKey(apiKey, MKTG);
42
+ this.parser = new CampaignParser();
43
+ this.track = options.track;
44
+ this.onNewCampaign = options.onNewCampaign;
45
+
46
+ this.disabled = Boolean(options.disabled);
47
+ this.trackNewCampaigns = Boolean(options.trackNewCampaigns);
48
+ this.trackPageViews = Boolean(options.trackPageViews);
49
+ this.excludeReferrers = options.excludeReferrers ?? [];
50
+ if (typeof location !== "undefined") {
51
+ this.excludeReferrers.unshift(location.hostname);
52
+ }
53
+ this.initialEmptyValue = options.initialEmptyValue ?? EMPTY_VALUE;
54
+ }
55
+
56
+ isNewCampaign(
57
+ current: Campaign,
58
+ previous: Campaign | undefined,
59
+ ignoreSubdomainInReferrer = false,
60
+ ) {
61
+ const { referrer, referring_domain, ...currentCampaign } = current;
62
+ const {
63
+ referrer: _previous_referrer,
64
+ referring_domain: prevReferringDomain,
65
+ ...previousCampaign
66
+ } = previous || {};
67
+
68
+ if (
69
+ current.referring_domain &&
70
+ this.excludeReferrers.includes(current.referring_domain)
71
+ ) {
72
+ return false;
73
+ }
74
+
75
+ const hasNewCampaign =
76
+ JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);
77
+ const hasNewDomain = ignoreSubdomainInReferrer
78
+ ? domainWithoutSubdomain(referring_domain || "") !==
79
+ domainWithoutSubdomain(prevReferringDomain || "")
80
+ : referring_domain !== prevReferringDomain;
81
+
82
+ return !previous || hasNewCampaign || hasNewDomain;
83
+ }
84
+
85
+ async saveCampaignToStorage(campaign: Campaign): Promise<void> {
86
+ await this.storage.set(this.storageKey, campaign);
87
+ }
88
+
89
+ async getCampaignFromStorage(): Promise<Campaign | undefined> {
90
+ return await this.storage.get(this.storageKey);
91
+ }
92
+
93
+ createCampaignEvent(campaign: Campaign) {
94
+ const campaignParameters: Campaign = {
95
+ // This object definition allows undefined keys to be iterated on
96
+ // in .reduce() to build indentify object
97
+ ...BASE_CAMPAIGN,
98
+ ...campaign,
99
+ };
100
+ const identifyEvent = Object.entries(campaignParameters).reduce(
101
+ (identify, [key, value]) => {
102
+ identify.setOnce(`initial_${key}`, value || this.initialEmptyValue);
103
+ if (value) {
104
+ return identify.set(key, value);
105
+ }
106
+ return identify.unset(key);
107
+ },
108
+ new Identify(),
109
+ );
110
+
111
+ const pageViewEvent: BaseEvent = {
112
+ event_type: "Page View",
113
+ event_properties: {
114
+ page_title:
115
+ /* istanbul ignore next */ (typeof document !== "undefined" &&
116
+ document.title) ||
117
+ "",
118
+ page_location:
119
+ /* istanbul ignore next */ (typeof location !== "undefined" &&
120
+ location.href) ||
121
+ "",
122
+ page_path:
123
+ /* istanbul ignore next */ (typeof location !== "undefined" &&
124
+ location.pathname) ||
125
+ "",
126
+ },
127
+ };
128
+ return {
129
+ ...createIdentifyEvent(identifyEvent),
130
+ ...(this.trackPageViews && pageViewEvent),
131
+ };
132
+ }
133
+
134
+ async send(isNewSession: boolean) {
135
+ if (this.disabled) {
136
+ return;
137
+ }
138
+ const currentCampaign = await this.parser.parse();
139
+ const previousCampaign = await this.getCampaignFromStorage();
140
+ if (!isNewSession) {
141
+ if (
142
+ !this.trackNewCampaigns ||
143
+ !this.isNewCampaign(currentCampaign, previousCampaign)
144
+ ) {
145
+ return;
146
+ }
147
+ this.onNewCampaign(currentCampaign);
148
+ }
149
+ await this.track(this.createCampaignEvent(currentCampaign));
150
+ await this.saveCampaignToStorage(currentCampaign);
151
+ }
152
+ }
153
+
154
+ const domainWithoutSubdomain = (domain: string) => {
155
+ const parts = domain.split(".");
156
+
157
+ if (parts.length <= 2) {
158
+ return domain;
159
+ }
160
+
161
+ return parts.slice(parts.length - 2, parts.length).join(".");
162
+ };
@@ -0,0 +1,18 @@
1
+ import {
2
+ Campaign,
3
+ ReactNativeAttributionOptions,
4
+ Storage,
5
+ BaseEvent,
6
+ } from "@amplitude/analytics-core";
7
+
8
+ export interface CampaignTrackerOptions extends ReactNativeAttributionOptions {
9
+ storage: Storage<Campaign>;
10
+ track: CampaignTrackFunction;
11
+ onNewCampaign: (campaign: Campaign) => unknown;
12
+ }
13
+
14
+ export interface CampaignTracker extends CampaignTrackerOptions {
15
+ send(force: boolean): Promise<void>;
16
+ }
17
+
18
+ export type CampaignTrackFunction = (event: BaseEvent) => Promise<unknown>;