@customerio/cdp-analytics-browser 0.0.1

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 (516) hide show
  1. package/LICENSE.MD +22 -0
  2. package/README.md +21 -0
  3. package/dist/cjs/browser/browser-umd.js +20 -0
  4. package/dist/cjs/browser/browser-umd.js.map +1 -0
  5. package/dist/cjs/browser/index.js +310 -0
  6. package/dist/cjs/browser/index.js.map +1 -0
  7. package/dist/cjs/browser/standalone-analytics.js +60 -0
  8. package/dist/cjs/browser/standalone-analytics.js.map +1 -0
  9. package/dist/cjs/browser/standalone.js +83 -0
  10. package/dist/cjs/browser/standalone.js.map +1 -0
  11. package/dist/cjs/core/analytics/index.js +544 -0
  12. package/dist/cjs/core/analytics/index.js.map +1 -0
  13. package/dist/cjs/core/analytics/interfaces.js +3 -0
  14. package/dist/cjs/core/analytics/interfaces.js.map +1 -0
  15. package/dist/cjs/core/arguments-resolver/index.js +106 -0
  16. package/dist/cjs/core/arguments-resolver/index.js.map +1 -0
  17. package/dist/cjs/core/auto-track.js +108 -0
  18. package/dist/cjs/core/auto-track.js.map +1 -0
  19. package/dist/cjs/core/buffer/index.js +237 -0
  20. package/dist/cjs/core/buffer/index.js.map +1 -0
  21. package/dist/cjs/core/buffer/snippet.js +30 -0
  22. package/dist/cjs/core/buffer/snippet.js.map +1 -0
  23. package/dist/cjs/core/callback/index.js +7 -0
  24. package/dist/cjs/core/callback/index.js.map +1 -0
  25. package/dist/cjs/core/connection/index.js +16 -0
  26. package/dist/cjs/core/connection/index.js.map +1 -0
  27. package/dist/cjs/core/context/index.js +19 -0
  28. package/dist/cjs/core/context/index.js.map +1 -0
  29. package/dist/cjs/core/environment/index.js +12 -0
  30. package/dist/cjs/core/environment/index.js.map +1 -0
  31. package/dist/cjs/core/events/index.js +134 -0
  32. package/dist/cjs/core/events/index.js.map +1 -0
  33. package/dist/cjs/core/events/interfaces.js +3 -0
  34. package/dist/cjs/core/events/interfaces.js.map +1 -0
  35. package/dist/cjs/core/inspector/index.js +14 -0
  36. package/dist/cjs/core/inspector/index.js.map +1 -0
  37. package/dist/cjs/core/plugin/index.js +3 -0
  38. package/dist/cjs/core/plugin/index.js.map +1 -0
  39. package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js +20 -0
  40. package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
  41. package/dist/cjs/core/query-string/index.js +48 -0
  42. package/dist/cjs/core/query-string/index.js.map +1 -0
  43. package/dist/cjs/core/query-string/pickPrefix.js +20 -0
  44. package/dist/cjs/core/query-string/pickPrefix.js.map +1 -0
  45. package/dist/cjs/core/queue/event-queue.js +15 -0
  46. package/dist/cjs/core/queue/event-queue.js.map +1 -0
  47. package/dist/cjs/core/stats/index.js +23 -0
  48. package/dist/cjs/core/stats/index.js.map +1 -0
  49. package/dist/cjs/core/stats/remote-metrics.js +107 -0
  50. package/dist/cjs/core/stats/remote-metrics.js.map +1 -0
  51. package/dist/cjs/core/user/index.js +422 -0
  52. package/dist/cjs/core/user/index.js.map +1 -0
  53. package/dist/cjs/core/user/tld.js +64 -0
  54. package/dist/cjs/core/user/tld.js.map +1 -0
  55. package/dist/cjs/generated/version.js +6 -0
  56. package/dist/cjs/generated/version.js.map +1 -0
  57. package/dist/cjs/index.js +11 -0
  58. package/dist/cjs/index.js.map +1 -0
  59. package/dist/cjs/lib/bind-all.js +17 -0
  60. package/dist/cjs/lib/bind-all.js.map +1 -0
  61. package/dist/cjs/lib/browser-polyfill.js +22 -0
  62. package/dist/cjs/lib/browser-polyfill.js.map +1 -0
  63. package/dist/cjs/lib/create-deferred.js +21 -0
  64. package/dist/cjs/lib/create-deferred.js.map +1 -0
  65. package/dist/cjs/lib/csp-detection.js +33 -0
  66. package/dist/cjs/lib/csp-detection.js.map +1 -0
  67. package/dist/cjs/lib/embedded-write-key.js +22 -0
  68. package/dist/cjs/lib/embedded-write-key.js.map +1 -0
  69. package/dist/cjs/lib/fetch.js +19 -0
  70. package/dist/cjs/lib/fetch.js.map +1 -0
  71. package/dist/cjs/lib/get-global.js +21 -0
  72. package/dist/cjs/lib/get-global.js.map +1 -0
  73. package/dist/cjs/lib/get-process-env.js +15 -0
  74. package/dist/cjs/lib/get-process-env.js.map +1 -0
  75. package/dist/cjs/lib/group-by.js +28 -0
  76. package/dist/cjs/lib/group-by.js.map +1 -0
  77. package/dist/cjs/lib/is-plan-event-enabled.js +20 -0
  78. package/dist/cjs/lib/is-plan-event-enabled.js.map +1 -0
  79. package/dist/cjs/lib/is-thenable.js +15 -0
  80. package/dist/cjs/lib/is-thenable.js.map +1 -0
  81. package/dist/cjs/lib/load-script.js +56 -0
  82. package/dist/cjs/lib/load-script.js.map +1 -0
  83. package/dist/cjs/lib/merged-options.js +31 -0
  84. package/dist/cjs/lib/merged-options.js.map +1 -0
  85. package/dist/cjs/lib/on-page-leave.js +35 -0
  86. package/dist/cjs/lib/on-page-leave.js.map +1 -0
  87. package/dist/cjs/lib/p-while.js +25 -0
  88. package/dist/cjs/lib/p-while.js.map +1 -0
  89. package/dist/cjs/lib/parse-cdn.js +79 -0
  90. package/dist/cjs/lib/parse-cdn.js.map +1 -0
  91. package/dist/cjs/lib/priority-queue/backoff.js +10 -0
  92. package/dist/cjs/lib/priority-queue/backoff.js.map +1 -0
  93. package/dist/cjs/lib/priority-queue/index.js +7 -0
  94. package/dist/cjs/lib/priority-queue/index.js.map +1 -0
  95. package/dist/cjs/lib/priority-queue/persisted.js +108 -0
  96. package/dist/cjs/lib/priority-queue/persisted.js.map +1 -0
  97. package/dist/cjs/lib/sleep.js +10 -0
  98. package/dist/cjs/lib/sleep.js.map +1 -0
  99. package/dist/cjs/lib/to-facade.js +32 -0
  100. package/dist/cjs/lib/to-facade.js.map +1 -0
  101. package/dist/cjs/node/index.js +43 -0
  102. package/dist/cjs/node/index.js.map +1 -0
  103. package/dist/cjs/node/node.browser.js +13 -0
  104. package/dist/cjs/node/node.browser.js.map +1 -0
  105. package/dist/cjs/plugins/ajs-destination/index.js +345 -0
  106. package/dist/cjs/plugins/ajs-destination/index.js.map +1 -0
  107. package/dist/cjs/plugins/ajs-destination/loader.js +110 -0
  108. package/dist/cjs/plugins/ajs-destination/loader.js.map +1 -0
  109. package/dist/cjs/plugins/ajs-destination/types.js +3 -0
  110. package/dist/cjs/plugins/ajs-destination/types.js.map +1 -0
  111. package/dist/cjs/plugins/ajs-destination/utils.js +23 -0
  112. package/dist/cjs/plugins/ajs-destination/utils.js.map +1 -0
  113. package/dist/cjs/plugins/analytics-node/index.js +65 -0
  114. package/dist/cjs/plugins/analytics-node/index.js.map +1 -0
  115. package/dist/cjs/plugins/customerio/batched-dispatcher.js +102 -0
  116. package/dist/cjs/plugins/customerio/batched-dispatcher.js.map +1 -0
  117. package/dist/cjs/plugins/customerio/fetch-dispatcher.js +18 -0
  118. package/dist/cjs/plugins/customerio/fetch-dispatcher.js.map +1 -0
  119. package/dist/cjs/plugins/customerio/index.js +97 -0
  120. package/dist/cjs/plugins/customerio/index.js.map +1 -0
  121. package/dist/cjs/plugins/customerio/normalize.js +176 -0
  122. package/dist/cjs/plugins/customerio/normalize.js.map +1 -0
  123. package/dist/cjs/plugins/customerio/schedule-flush.js +76 -0
  124. package/dist/cjs/plugins/customerio/schedule-flush.js.map +1 -0
  125. package/dist/cjs/plugins/legacy-video-plugins/index.js +25 -0
  126. package/dist/cjs/plugins/legacy-video-plugins/index.js.map +1 -0
  127. package/dist/cjs/plugins/middleware/index.js +124 -0
  128. package/dist/cjs/plugins/middleware/index.js.map +1 -0
  129. package/dist/cjs/plugins/page-enrichment/index.js +98 -0
  130. package/dist/cjs/plugins/page-enrichment/index.js.map +1 -0
  131. package/dist/cjs/plugins/remote-loader/index.js +211 -0
  132. package/dist/cjs/plugins/remote-loader/index.js.map +1 -0
  133. package/dist/cjs/plugins/remote-middleware/index.js +70 -0
  134. package/dist/cjs/plugins/remote-middleware/index.js.map +1 -0
  135. package/dist/cjs/plugins/routing-middleware/index.js +26 -0
  136. package/dist/cjs/plugins/routing-middleware/index.js.map +1 -0
  137. package/dist/cjs/plugins/schema-filter/index.js +67 -0
  138. package/dist/cjs/plugins/schema-filter/index.js.map +1 -0
  139. package/dist/cjs/plugins/validation/index.js +70 -0
  140. package/dist/cjs/plugins/validation/index.js.map +1 -0
  141. package/dist/pkg/browser/browser-umd.js +17 -0
  142. package/dist/pkg/browser/browser-umd.js.map +1 -0
  143. package/dist/pkg/browser/index.js +306 -0
  144. package/dist/pkg/browser/index.js.map +1 -0
  145. package/dist/pkg/browser/standalone-analytics.js +56 -0
  146. package/dist/pkg/browser/standalone-analytics.js.map +1 -0
  147. package/dist/pkg/browser/standalone.js +81 -0
  148. package/dist/pkg/browser/standalone.js.map +1 -0
  149. package/dist/pkg/core/analytics/index.js +541 -0
  150. package/dist/pkg/core/analytics/index.js.map +1 -0
  151. package/dist/pkg/core/analytics/interfaces.js +2 -0
  152. package/dist/pkg/core/analytics/interfaces.js.map +1 -0
  153. package/dist/pkg/core/arguments-resolver/index.js +99 -0
  154. package/dist/pkg/core/arguments-resolver/index.js.map +1 -0
  155. package/dist/pkg/core/auto-track.js +103 -0
  156. package/dist/pkg/core/auto-track.js.map +1 -0
  157. package/dist/pkg/core/buffer/index.js +231 -0
  158. package/dist/pkg/core/buffer/index.js.map +1 -0
  159. package/dist/pkg/core/buffer/snippet.js +25 -0
  160. package/dist/pkg/core/buffer/snippet.js.map +1 -0
  161. package/dist/pkg/core/callback/index.js +2 -0
  162. package/dist/pkg/core/callback/index.js.map +1 -0
  163. package/dist/pkg/core/connection/index.js +11 -0
  164. package/dist/pkg/core/connection/index.js.map +1 -0
  165. package/dist/pkg/core/context/index.js +16 -0
  166. package/dist/pkg/core/context/index.js.map +1 -0
  167. package/dist/pkg/core/environment/index.js +7 -0
  168. package/dist/pkg/core/environment/index.js.map +1 -0
  169. package/dist/pkg/core/events/index.js +131 -0
  170. package/dist/pkg/core/events/index.js.map +1 -0
  171. package/dist/pkg/core/events/interfaces.js +2 -0
  172. package/dist/pkg/core/events/interfaces.js.map +1 -0
  173. package/dist/pkg/core/inspector/index.js +10 -0
  174. package/dist/pkg/core/inspector/index.js.map +1 -0
  175. package/dist/pkg/core/plugin/index.js +2 -0
  176. package/dist/pkg/core/plugin/index.js.map +1 -0
  177. package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js +16 -0
  178. package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
  179. package/dist/pkg/core/query-string/index.js +44 -0
  180. package/dist/pkg/core/query-string/index.js.map +1 -0
  181. package/dist/pkg/core/query-string/pickPrefix.js +16 -0
  182. package/dist/pkg/core/query-string/pickPrefix.js.map +1 -0
  183. package/dist/pkg/core/queue/event-queue.js +12 -0
  184. package/dist/pkg/core/queue/event-queue.js.map +1 -0
  185. package/dist/pkg/core/stats/index.js +20 -0
  186. package/dist/pkg/core/stats/index.js.map +1 -0
  187. package/dist/pkg/core/stats/remote-metrics.js +104 -0
  188. package/dist/pkg/core/stats/remote-metrics.js.map +1 -0
  189. package/dist/pkg/core/user/index.js +418 -0
  190. package/dist/pkg/core/user/index.js.map +1 -0
  191. package/dist/pkg/core/user/tld.js +59 -0
  192. package/dist/pkg/core/user/tld.js.map +1 -0
  193. package/dist/pkg/generated/version.js +3 -0
  194. package/dist/pkg/generated/version.js.map +1 -0
  195. package/dist/pkg/index.js +8 -0
  196. package/dist/pkg/index.js.map +1 -0
  197. package/dist/pkg/lib/bind-all.js +14 -0
  198. package/dist/pkg/lib/bind-all.js.map +1 -0
  199. package/dist/pkg/lib/browser-polyfill.js +18 -0
  200. package/dist/pkg/lib/browser-polyfill.js.map +1 -0
  201. package/dist/pkg/lib/create-deferred.js +17 -0
  202. package/dist/pkg/lib/create-deferred.js.map +1 -0
  203. package/dist/pkg/lib/csp-detection.js +29 -0
  204. package/dist/pkg/lib/csp-detection.js.map +1 -0
  205. package/dist/pkg/lib/embedded-write-key.js +18 -0
  206. package/dist/pkg/lib/embedded-write-key.js.map +1 -0
  207. package/dist/pkg/lib/fetch.js +14 -0
  208. package/dist/pkg/lib/fetch.js.map +1 -0
  209. package/dist/pkg/lib/get-global.js +17 -0
  210. package/dist/pkg/lib/get-global.js.map +1 -0
  211. package/dist/pkg/lib/get-process-env.js +11 -0
  212. package/dist/pkg/lib/get-process-env.js.map +1 -0
  213. package/dist/pkg/lib/group-by.js +24 -0
  214. package/dist/pkg/lib/group-by.js.map +1 -0
  215. package/dist/pkg/lib/is-plan-event-enabled.js +16 -0
  216. package/dist/pkg/lib/is-plan-event-enabled.js.map +1 -0
  217. package/dist/pkg/lib/is-thenable.js +11 -0
  218. package/dist/pkg/lib/is-thenable.js.map +1 -0
  219. package/dist/pkg/lib/load-script.js +51 -0
  220. package/dist/pkg/lib/load-script.js.map +1 -0
  221. package/dist/pkg/lib/merged-options.js +27 -0
  222. package/dist/pkg/lib/merged-options.js.map +1 -0
  223. package/dist/pkg/lib/on-page-leave.js +31 -0
  224. package/dist/pkg/lib/on-page-leave.js.map +1 -0
  225. package/dist/pkg/lib/p-while.js +21 -0
  226. package/dist/pkg/lib/p-while.js.map +1 -0
  227. package/dist/pkg/lib/parse-cdn.js +72 -0
  228. package/dist/pkg/lib/parse-cdn.js.map +1 -0
  229. package/dist/pkg/lib/priority-queue/backoff.js +6 -0
  230. package/dist/pkg/lib/priority-queue/backoff.js.map +1 -0
  231. package/dist/pkg/lib/priority-queue/index.js +3 -0
  232. package/dist/pkg/lib/priority-queue/index.js.map +1 -0
  233. package/dist/pkg/lib/priority-queue/persisted.js +105 -0
  234. package/dist/pkg/lib/priority-queue/persisted.js.map +1 -0
  235. package/dist/pkg/lib/sleep.js +6 -0
  236. package/dist/pkg/lib/sleep.js.map +1 -0
  237. package/dist/pkg/lib/to-facade.js +28 -0
  238. package/dist/pkg/lib/to-facade.js.map +1 -0
  239. package/dist/pkg/node/index.js +40 -0
  240. package/dist/pkg/node/index.js.map +1 -0
  241. package/dist/pkg/node/node.browser.js +10 -0
  242. package/dist/pkg/node/node.browser.js.map +1 -0
  243. package/dist/pkg/plugins/ajs-destination/index.js +341 -0
  244. package/dist/pkg/plugins/ajs-destination/index.js.map +1 -0
  245. package/dist/pkg/plugins/ajs-destination/loader.js +102 -0
  246. package/dist/pkg/plugins/ajs-destination/loader.js.map +1 -0
  247. package/dist/pkg/plugins/ajs-destination/types.js +2 -0
  248. package/dist/pkg/plugins/ajs-destination/types.js.map +1 -0
  249. package/dist/pkg/plugins/ajs-destination/utils.js +18 -0
  250. package/dist/pkg/plugins/ajs-destination/utils.js.map +1 -0
  251. package/dist/pkg/plugins/analytics-node/index.js +60 -0
  252. package/dist/pkg/plugins/analytics-node/index.js.map +1 -0
  253. package/dist/pkg/plugins/customerio/batched-dispatcher.js +99 -0
  254. package/dist/pkg/plugins/customerio/batched-dispatcher.js.map +1 -0
  255. package/dist/pkg/plugins/customerio/fetch-dispatcher.js +15 -0
  256. package/dist/pkg/plugins/customerio/fetch-dispatcher.js.map +1 -0
  257. package/dist/pkg/plugins/customerio/index.js +93 -0
  258. package/dist/pkg/plugins/customerio/index.js.map +1 -0
  259. package/dist/pkg/plugins/customerio/normalize.js +168 -0
  260. package/dist/pkg/plugins/customerio/normalize.js.map +1 -0
  261. package/dist/pkg/plugins/customerio/schedule-flush.js +72 -0
  262. package/dist/pkg/plugins/customerio/schedule-flush.js.map +1 -0
  263. package/dist/pkg/plugins/legacy-video-plugins/index.js +25 -0
  264. package/dist/pkg/plugins/legacy-video-plugins/index.js.map +1 -0
  265. package/dist/pkg/plugins/middleware/index.js +119 -0
  266. package/dist/pkg/plugins/middleware/index.js.map +1 -0
  267. package/dist/pkg/plugins/page-enrichment/index.js +93 -0
  268. package/dist/pkg/plugins/page-enrichment/index.js.map +1 -0
  269. package/dist/pkg/plugins/remote-loader/index.js +207 -0
  270. package/dist/pkg/plugins/remote-loader/index.js.map +1 -0
  271. package/dist/pkg/plugins/remote-middleware/index.js +66 -0
  272. package/dist/pkg/plugins/remote-middleware/index.js.map +1 -0
  273. package/dist/pkg/plugins/routing-middleware/index.js +21 -0
  274. package/dist/pkg/plugins/routing-middleware/index.js.map +1 -0
  275. package/dist/pkg/plugins/schema-filter/index.js +63 -0
  276. package/dist/pkg/plugins/schema-filter/index.js.map +1 -0
  277. package/dist/pkg/plugins/validation/index.js +63 -0
  278. package/dist/pkg/plugins/validation/index.js.map +1 -0
  279. package/dist/types/browser/browser-umd.d.ts +2 -0
  280. package/dist/types/browser/browser-umd.d.ts.map +1 -0
  281. package/dist/types/browser/index.d.ts +86 -0
  282. package/dist/types/browser/index.d.ts.map +1 -0
  283. package/dist/types/browser/standalone-analytics.d.ts +16 -0
  284. package/dist/types/browser/standalone-analytics.d.ts.map +1 -0
  285. package/dist/types/browser/standalone.d.ts +2 -0
  286. package/dist/types/browser/standalone.d.ts.map +1 -0
  287. package/dist/types/core/analytics/index.d.ts +116 -0
  288. package/dist/types/core/analytics/index.d.ts.map +1 -0
  289. package/dist/types/core/analytics/interfaces.d.ts +77 -0
  290. package/dist/types/core/analytics/interfaces.d.ts.map +1 -0
  291. package/dist/types/core/arguments-resolver/index.d.ts +34 -0
  292. package/dist/types/core/arguments-resolver/index.d.ts.map +1 -0
  293. package/dist/types/core/auto-track.d.ts +10 -0
  294. package/dist/types/core/auto-track.d.ts.map +1 -0
  295. package/dist/types/core/buffer/index.d.ts +86 -0
  296. package/dist/types/core/buffer/index.d.ts.map +1 -0
  297. package/dist/types/core/buffer/snippet.d.ts +10 -0
  298. package/dist/types/core/buffer/snippet.d.ts.map +1 -0
  299. package/dist/types/core/callback/index.d.ts +2 -0
  300. package/dist/types/core/callback/index.d.ts.map +1 -0
  301. package/dist/types/core/connection/index.d.ts +3 -0
  302. package/dist/types/core/connection/index.d.ts.map +1 -0
  303. package/dist/types/core/context/index.d.ts +9 -0
  304. package/dist/types/core/context/index.d.ts.map +1 -0
  305. package/dist/types/core/environment/index.d.ts +3 -0
  306. package/dist/types/core/environment/index.d.ts.map +1 -0
  307. package/dist/types/core/events/index.d.ts +21 -0
  308. package/dist/types/core/events/index.d.ts.map +1 -0
  309. package/dist/types/core/events/interfaces.d.ts +9 -0
  310. package/dist/types/core/events/interfaces.d.ts.map +1 -0
  311. package/dist/types/core/inspector/index.d.ts +3 -0
  312. package/dist/types/core/inspector/index.d.ts.map +1 -0
  313. package/dist/types/core/plugin/index.d.ts +11 -0
  314. package/dist/types/core/plugin/index.d.ts.map +1 -0
  315. package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts +9 -0
  316. package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts.map +1 -0
  317. package/dist/types/core/query-string/index.d.ts +7 -0
  318. package/dist/types/core/query-string/index.d.ts.map +1 -0
  319. package/dist/types/core/query-string/pickPrefix.d.ts +9 -0
  320. package/dist/types/core/query-string/pickPrefix.d.ts.map +1 -0
  321. package/dist/types/core/queue/event-queue.d.ts +8 -0
  322. package/dist/types/core/queue/event-queue.d.ts.map +1 -0
  323. package/dist/types/core/stats/index.d.ts +7 -0
  324. package/dist/types/core/stats/index.d.ts.map +1 -0
  325. package/dist/types/core/stats/remote-metrics.d.ts +29 -0
  326. package/dist/types/core/stats/remote-metrics.d.ts.map +1 -0
  327. package/dist/types/core/user/index.d.ts +128 -0
  328. package/dist/types/core/user/index.d.ts.map +1 -0
  329. package/dist/types/core/user/tld.d.ts +2 -0
  330. package/dist/types/core/user/tld.d.ts.map +1 -0
  331. package/dist/types/generated/version.d.ts +2 -0
  332. package/dist/types/generated/version.d.ts.map +1 -0
  333. package/dist/types/index.d.ts +9 -0
  334. package/dist/types/index.d.ts.map +1 -0
  335. package/dist/types/lib/bind-all.d.ts +4 -0
  336. package/dist/types/lib/bind-all.d.ts.map +1 -0
  337. package/dist/types/lib/browser-polyfill.d.ts +2 -0
  338. package/dist/types/lib/browser-polyfill.d.ts.map +1 -0
  339. package/dist/types/lib/create-deferred.d.ts +9 -0
  340. package/dist/types/lib/create-deferred.d.ts.map +1 -0
  341. package/dist/types/lib/csp-detection.d.ts +4 -0
  342. package/dist/types/lib/csp-detection.d.ts.map +1 -0
  343. package/dist/types/lib/embedded-write-key.d.ts +7 -0
  344. package/dist/types/lib/embedded-write-key.d.ts.map +1 -0
  345. package/dist/types/lib/fetch.d.ts +5 -0
  346. package/dist/types/lib/fetch.d.ts.map +1 -0
  347. package/dist/types/lib/get-global.d.ts +2 -0
  348. package/dist/types/lib/get-global.d.ts.map +1 -0
  349. package/dist/types/lib/get-process-env.d.ts +8 -0
  350. package/dist/types/lib/get-process-env.d.ts.map +1 -0
  351. package/dist/types/lib/group-by.d.ts +4 -0
  352. package/dist/types/lib/group-by.d.ts.map +1 -0
  353. package/dist/types/lib/is-plan-event-enabled.d.ts +9 -0
  354. package/dist/types/lib/is-plan-event-enabled.d.ts.map +1 -0
  355. package/dist/types/lib/is-thenable.d.ts +6 -0
  356. package/dist/types/lib/is-thenable.d.ts.map +1 -0
  357. package/dist/types/lib/load-script.d.ts +3 -0
  358. package/dist/types/lib/load-script.d.ts.map +1 -0
  359. package/dist/types/lib/merged-options.d.ts +13 -0
  360. package/dist/types/lib/merged-options.d.ts.map +1 -0
  361. package/dist/types/lib/on-page-leave.d.ts +11 -0
  362. package/dist/types/lib/on-page-leave.d.ts.map +1 -0
  363. package/dist/types/lib/p-while.d.ts +2 -0
  364. package/dist/types/lib/p-while.d.ts.map +1 -0
  365. package/dist/types/lib/parse-cdn.d.ts +10 -0
  366. package/dist/types/lib/parse-cdn.d.ts.map +1 -0
  367. package/dist/types/lib/priority-queue/backoff.d.ts +13 -0
  368. package/dist/types/lib/priority-queue/backoff.d.ts.map +1 -0
  369. package/dist/types/lib/priority-queue/index.d.ts +3 -0
  370. package/dist/types/lib/priority-queue/index.d.ts.map +1 -0
  371. package/dist/types/lib/priority-queue/persisted.d.ts +6 -0
  372. package/dist/types/lib/priority-queue/persisted.d.ts.map +1 -0
  373. package/dist/types/lib/sleep.d.ts +2 -0
  374. package/dist/types/lib/sleep.d.ts.map +1 -0
  375. package/dist/types/lib/to-facade.d.ts +7 -0
  376. package/dist/types/lib/to-facade.d.ts.map +1 -0
  377. package/dist/types/node/index.d.ts +8 -0
  378. package/dist/types/node/index.d.ts.map +1 -0
  379. package/dist/types/node/node.browser.d.ts +4 -0
  380. package/dist/types/node/node.browser.d.ts.map +1 -0
  381. package/dist/types/plugins/ajs-destination/index.d.ts +42 -0
  382. package/dist/types/plugins/ajs-destination/index.d.ts.map +1 -0
  383. package/dist/types/plugins/ajs-destination/loader.d.ts +12 -0
  384. package/dist/types/plugins/ajs-destination/loader.d.ts.map +1 -0
  385. package/dist/types/plugins/ajs-destination/types.d.ts +36 -0
  386. package/dist/types/plugins/ajs-destination/types.d.ts.map +1 -0
  387. package/dist/types/plugins/ajs-destination/utils.d.ts +5 -0
  388. package/dist/types/plugins/ajs-destination/utils.d.ts.map +1 -0
  389. package/dist/types/plugins/analytics-node/index.d.ts +12 -0
  390. package/dist/types/plugins/analytics-node/index.d.ts.map +1 -0
  391. package/dist/types/plugins/customerio/batched-dispatcher.d.ts +8 -0
  392. package/dist/types/plugins/customerio/batched-dispatcher.d.ts.map +1 -0
  393. package/dist/types/plugins/customerio/fetch-dispatcher.d.ts +8 -0
  394. package/dist/types/plugins/customerio/fetch-dispatcher.d.ts.map +1 -0
  395. package/dist/types/plugins/customerio/index.d.ts +26 -0
  396. package/dist/types/plugins/customerio/index.d.ts.map +1 -0
  397. package/dist/types/plugins/customerio/normalize.d.ts +12 -0
  398. package/dist/types/plugins/customerio/normalize.d.ts.map +1 -0
  399. package/dist/types/plugins/customerio/schedule-flush.d.ts +5 -0
  400. package/dist/types/plugins/customerio/schedule-flush.d.ts.map +1 -0
  401. package/dist/types/plugins/legacy-video-plugins/index.d.ts +3 -0
  402. package/dist/types/plugins/legacy-video-plugins/index.d.ts.map +1 -0
  403. package/dist/types/plugins/middleware/index.d.ts +18 -0
  404. package/dist/types/plugins/middleware/index.d.ts.map +1 -0
  405. package/dist/types/plugins/page-enrichment/index.d.ts +21 -0
  406. package/dist/types/plugins/page-enrichment/index.d.ts.map +1 -0
  407. package/dist/types/plugins/remote-loader/index.d.ts +43 -0
  408. package/dist/types/plugins/remote-loader/index.d.ts.map +1 -0
  409. package/dist/types/plugins/remote-middleware/index.d.ts +5 -0
  410. package/dist/types/plugins/remote-middleware/index.d.ts.map +1 -0
  411. package/dist/types/plugins/routing-middleware/index.d.ts +13 -0
  412. package/dist/types/plugins/routing-middleware/index.d.ts.map +1 -0
  413. package/dist/types/plugins/schema-filter/index.d.ts +5 -0
  414. package/dist/types/plugins/schema-filter/index.d.ts.map +1 -0
  415. package/dist/types/plugins/validation/index.d.ts +7 -0
  416. package/dist/types/plugins/validation/index.d.ts.map +1 -0
  417. package/dist/umd/799.bundle.f804d7b881cf284fbd56.js +1 -0
  418. package/dist/umd/799.bundle.f804d7b881cf284fbd56.js.gz +0 -0
  419. package/dist/umd/870.bundle.e0b7bfa4797bb87217c9.js +1 -0
  420. package/dist/umd/870.bundle.e0b7bfa4797bb87217c9.js.gz +0 -0
  421. package/dist/umd/ajs-destination.bundle.847bf422720e5616c9d5.js +1 -0
  422. package/dist/umd/ajs-destination.bundle.847bf422720e5616c9d5.js.gz +0 -0
  423. package/dist/umd/auto-track.bundle.758629f7a47544af2d44.js +1 -0
  424. package/dist/umd/auto-track.bundle.758629f7a47544af2d44.js.gz +0 -0
  425. package/dist/umd/index.js +1 -0
  426. package/dist/umd/index.js.gz +0 -0
  427. package/dist/umd/legacyVideos.bundle.d7ac356ab28fab36e111.js +1 -0
  428. package/dist/umd/legacyVideos.bundle.d7ac356ab28fab36e111.js.gz +0 -0
  429. package/dist/umd/queryString.bundle.913501e40ce64ef92884.js +1 -0
  430. package/dist/umd/queryString.bundle.913501e40ce64ef92884.js.gz +0 -0
  431. package/dist/umd/remoteMiddleware.bundle.3bc569811c4c2c93d90c.js +1 -0
  432. package/dist/umd/remoteMiddleware.bundle.3bc569811c4c2c93d90c.js.gz +0 -0
  433. package/dist/umd/schemaFilter.bundle.bb8180ae95843c8f138e.js +1 -0
  434. package/dist/umd/schemaFilter.bundle.bb8180ae95843c8f138e.js.gz +0 -0
  435. package/dist/umd/standalone.js +1 -0
  436. package/dist/umd/standalone.js.gz +0 -0
  437. package/dist/umd/tsub-middleware.bundle.af0f402084ddd2b605cc.js +1 -0
  438. package/dist/umd/tsub-middleware.bundle.af0f402084ddd2b605cc.js.gz +0 -0
  439. package/package.json +103 -0
  440. package/src/browser/browser-umd.ts +19 -0
  441. package/src/browser/index.ts +397 -0
  442. package/src/browser/standalone-analytics.ts +74 -0
  443. package/src/browser/standalone.ts +78 -0
  444. package/src/core/analytics/index.ts +567 -0
  445. package/src/core/analytics/interfaces.ts +100 -0
  446. package/src/core/arguments-resolver/index.ts +166 -0
  447. package/src/core/auto-track.ts +152 -0
  448. package/src/core/buffer/index.ts +289 -0
  449. package/src/core/buffer/snippet.ts +43 -0
  450. package/src/core/callback/index.ts +1 -0
  451. package/src/core/connection/index.ts +13 -0
  452. package/src/core/context/index.ts +21 -0
  453. package/src/core/environment/index.ts +7 -0
  454. package/src/core/events/index.ts +254 -0
  455. package/src/core/events/interfaces.ts +36 -0
  456. package/src/core/inspector/index.ts +14 -0
  457. package/src/core/plugin/index.ts +12 -0
  458. package/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
  459. package/src/core/query-string/index.ts +64 -0
  460. package/src/core/query-string/pickPrefix.ts +20 -0
  461. package/src/core/queue/event-queue.ts +11 -0
  462. package/src/core/stats/index.ts +15 -0
  463. package/src/core/stats/remote-metrics.ts +137 -0
  464. package/src/core/user/index.ts +534 -0
  465. package/src/core/user/tld.ts +65 -0
  466. package/src/generated/version.ts +2 -0
  467. package/src/index.ts +10 -0
  468. package/src/lib/bind-all.ts +19 -0
  469. package/src/lib/browser-polyfill.ts +23 -0
  470. package/src/lib/create-deferred.ts +16 -0
  471. package/src/lib/csp-detection.ts +26 -0
  472. package/src/lib/embedded-write-key.ts +24 -0
  473. package/src/lib/fetch.ts +10 -0
  474. package/src/lib/get-global.ts +16 -0
  475. package/src/lib/get-process-env.ts +11 -0
  476. package/src/lib/group-by.ts +30 -0
  477. package/src/lib/is-plan-event-enabled.ts +20 -0
  478. package/src/lib/is-thenable.ts +9 -0
  479. package/src/lib/load-script.ts +66 -0
  480. package/src/lib/merged-options.ts +46 -0
  481. package/src/lib/on-page-leave.ts +29 -0
  482. package/src/lib/p-while.ts +12 -0
  483. package/src/lib/parse-cdn.ts +85 -0
  484. package/src/lib/priority-queue/backoff.ts +24 -0
  485. package/src/lib/priority-queue/index.ts +6 -0
  486. package/src/lib/priority-queue/persisted.ts +127 -0
  487. package/src/lib/sleep.ts +4 -0
  488. package/src/lib/to-facade.ts +53 -0
  489. package/src/node/index.ts +36 -0
  490. package/src/node/node.browser.ts +7 -0
  491. package/src/plugins/ajs-destination/index.ts +388 -0
  492. package/src/plugins/ajs-destination/loader.ts +127 -0
  493. package/src/plugins/ajs-destination/types.ts +44 -0
  494. package/src/plugins/ajs-destination/utils.ts +34 -0
  495. package/src/plugins/analytics-node/index.ts +64 -0
  496. package/src/plugins/customerio/batched-dispatcher.ts +115 -0
  497. package/src/plugins/customerio/fetch-dispatcher.ts +24 -0
  498. package/src/plugins/customerio/index.ts +142 -0
  499. package/src/plugins/customerio/normalize.ts +223 -0
  500. package/src/plugins/customerio/schedule-flush.ts +58 -0
  501. package/src/plugins/legacy-video-plugins/index.ts +16 -0
  502. package/src/plugins/middleware/index.ts +131 -0
  503. package/src/plugins/page-enrichment/index.ts +127 -0
  504. package/src/plugins/remote-loader/index.ts +240 -0
  505. package/src/plugins/remote-middleware/index.ts +44 -0
  506. package/src/plugins/routing-middleware/index.ts +37 -0
  507. package/src/plugins/schema-filter/index.ts +90 -0
  508. package/src/plugins/validation/index.ts +80 -0
  509. package/src/test-helpers/browser-storage.ts +72 -0
  510. package/src/test-helpers/factories.ts +18 -0
  511. package/src/test-helpers/fetch-parse.ts +8 -0
  512. package/src/test-helpers/fixtures/cdn-settings.ts +299 -0
  513. package/src/test-helpers/fixtures/classic-destination.ts +25 -0
  514. package/src/test-helpers/fixtures/create-fetch-method.ts +24 -0
  515. package/src/test-helpers/test-writekeys.ts +5 -0
  516. package/src/test-helpers/type-assertions.ts +11 -0
@@ -0,0 +1,534 @@
1
+ import { v4 as uuid } from '@lukeed/uuid'
2
+ import jar from 'js-cookie'
3
+ import { Traits } from '../events'
4
+ import { tld } from './tld'
5
+ import autoBind from '../../lib/bind-all'
6
+
7
+ export type ID = string | null | undefined
8
+
9
+ export interface UserOptions {
10
+ /**
11
+ * Disables storing any data about the user.
12
+ */
13
+ disable?: boolean
14
+ localStorageFallbackDisabled?: boolean
15
+ persist?: boolean
16
+
17
+ cookie?: {
18
+ key?: string
19
+ oldKey?: string
20
+ }
21
+
22
+ localStorage?: {
23
+ key: string
24
+ }
25
+ }
26
+
27
+ const defaults = {
28
+ persist: true,
29
+ cookie: {
30
+ key: 'ajs_user_id',
31
+ oldKey: 'ajs_user',
32
+ },
33
+ localStorage: {
34
+ key: 'ajs_user_traits',
35
+ },
36
+ }
37
+
38
+ export type StoreType = 'cookie' | 'localStorage' | 'memory'
39
+
40
+ type StorageObject = Record<string, unknown>
41
+
42
+ class Store {
43
+ private cache: Record<string, unknown> = {}
44
+
45
+ get<T>(key: string): T | null {
46
+ return this.cache[key] as T | null
47
+ }
48
+
49
+ set<T>(key: string, value: T | null): void {
50
+ this.cache[key] = value
51
+ }
52
+
53
+ remove(key: string): void {
54
+ delete this.cache[key]
55
+ }
56
+ get type(): StoreType {
57
+ return 'memory'
58
+ }
59
+ }
60
+
61
+ const ONE_YEAR = 365
62
+
63
+ export class Cookie extends Store {
64
+ static available(): boolean {
65
+ let cookieEnabled = window.navigator.cookieEnabled
66
+
67
+ if (!cookieEnabled) {
68
+ jar.set('ajs:cookies', 'test')
69
+ cookieEnabled = document.cookie.includes('ajs:cookies')
70
+ jar.remove('ajs:cookies')
71
+ }
72
+
73
+ return cookieEnabled
74
+ }
75
+
76
+ static get defaults(): CookieOptions {
77
+ return {
78
+ maxage: ONE_YEAR,
79
+ domain: tld(window.location.href),
80
+ path: '/',
81
+ sameSite: 'Lax',
82
+ }
83
+ }
84
+
85
+ private options: Required<CookieOptions>
86
+
87
+ constructor(options: CookieOptions = Cookie.defaults) {
88
+ super()
89
+ this.options = {
90
+ ...Cookie.defaults,
91
+ ...options,
92
+ } as Required<CookieOptions>
93
+ }
94
+
95
+ private opts(): jar.CookieAttributes {
96
+ return {
97
+ sameSite: this.options.sameSite as jar.CookieAttributes['sameSite'],
98
+ expires: this.options.maxage,
99
+ domain: this.options.domain,
100
+ path: this.options.path,
101
+ secure: this.options.secure,
102
+ }
103
+ }
104
+
105
+ get<T>(key: string): T | null {
106
+ try {
107
+ const value = jar.get(key)
108
+
109
+ if (!value) {
110
+ return null
111
+ }
112
+
113
+ try {
114
+ return JSON.parse(value)
115
+ } catch (e) {
116
+ return value as unknown as T
117
+ }
118
+ } catch (e) {
119
+ return null
120
+ }
121
+ }
122
+
123
+ set<T>(key: string, value: T): void {
124
+ if (typeof value === 'string') {
125
+ jar.set(key, value, this.opts())
126
+ } else if (value === null) {
127
+ jar.remove(key, this.opts())
128
+ } else {
129
+ jar.set(key, JSON.stringify(value), this.opts())
130
+ }
131
+ }
132
+
133
+ remove(key: string): void {
134
+ return jar.remove(key, this.opts())
135
+ }
136
+
137
+ get type(): StoreType {
138
+ return 'cookie'
139
+ }
140
+ }
141
+
142
+ const localStorageWarning = (key: string, state: 'full' | 'unavailable') => {
143
+ console.warn(`Unable to access ${key}, localStorage may be ${state}`)
144
+ }
145
+
146
+ export class LocalStorage extends Store {
147
+ static available(): boolean {
148
+ const test = 'test'
149
+ try {
150
+ localStorage.setItem(test, test)
151
+ localStorage.removeItem(test)
152
+ return true
153
+ } catch (e) {
154
+ return false
155
+ }
156
+ }
157
+
158
+ get<T>(key: string): T | null {
159
+ try {
160
+ const val = localStorage.getItem(key)
161
+ if (val === null) {
162
+ return null
163
+ }
164
+ try {
165
+ return JSON.parse(val)
166
+ } catch (e) {
167
+ return val as any as T
168
+ }
169
+ } catch (err) {
170
+ localStorageWarning(key, 'unavailable')
171
+ return null
172
+ }
173
+ }
174
+
175
+ set<T>(key: string, value: T): void {
176
+ try {
177
+ localStorage.setItem(key, JSON.stringify(value))
178
+ } catch {
179
+ localStorageWarning(key, 'full')
180
+ }
181
+ }
182
+
183
+ remove(key: string): void {
184
+ try {
185
+ return localStorage.removeItem(key)
186
+ } catch (err) {
187
+ localStorageWarning(key, 'unavailable')
188
+ }
189
+ }
190
+
191
+ get type(): StoreType {
192
+ return 'localStorage'
193
+ }
194
+ }
195
+
196
+ export interface CookieOptions {
197
+ maxage?: number
198
+ domain?: string
199
+ path?: string
200
+ secure?: boolean
201
+ sameSite?: string
202
+ }
203
+
204
+ export class UniversalStorage<Data extends StorageObject = StorageObject> {
205
+ private enabledStores: StoreType[]
206
+ private storageOptions: StorageOptions
207
+
208
+ constructor(stores: StoreType[], storageOptions: StorageOptions) {
209
+ this.storageOptions = storageOptions
210
+ this.enabledStores = stores
211
+ }
212
+
213
+ private getStores(storeTypes: StoreType[] | undefined): Store[] {
214
+ const stores: Store[] = []
215
+ this.enabledStores
216
+ .filter((i) => !storeTypes || storeTypes?.includes(i))
217
+ .forEach((storeType) => {
218
+ const storage = this.storageOptions[storeType]
219
+ if (storage !== undefined) {
220
+ stores.push(storage)
221
+ }
222
+ })
223
+
224
+ return stores
225
+ }
226
+
227
+ /*
228
+ This is to support few scenarios where:
229
+ - value exist in one of the stores ( as a result of other stores being cleared from browser ) and we want to resync them
230
+ - read values in AJS 1.0 format ( for customers after 1.0 --> 2.0 migration ) and then re-write them in AJS 2.0 format
231
+ */
232
+
233
+ /**
234
+ * get value for the key from the stores. it will pick the first value found in the stores, and then sync the value to all the stores
235
+ * if the found value is a number, it will be converted to a string. this is to support legacy behavior that existed in AJS 1.0
236
+ * @param key key for the value to be retrieved
237
+ * @param storeTypes optional array of store types to be used for performing get and sync
238
+ * @returns value for the key or null if not found
239
+ */
240
+ public getAndSync<K extends keyof Data>(
241
+ key: K,
242
+ storeTypes?: StoreType[]
243
+ ): Data[K] | null {
244
+ const val = this.get(key, storeTypes)
245
+
246
+ // legacy behavior, getAndSync can change the type of a value from number to string (AJS 1.0 stores numerical values as a number)
247
+ const coercedValue = (typeof val === 'number' ? val.toString() : val) as
248
+ | Data[K]
249
+ | null
250
+
251
+ this.set(key, coercedValue, storeTypes)
252
+
253
+ return coercedValue
254
+ }
255
+
256
+ /**
257
+ * get value for the key from the stores. it will return the first value found in the stores
258
+ * @param key key for the value to be retrieved
259
+ * @param storeTypes optional array of store types to be used for retrieving the value
260
+ * @returns value for the key or null if not found
261
+ */
262
+ public get<K extends keyof Data>(
263
+ key: K,
264
+ storeTypes?: StoreType[]
265
+ ): Data[K] | null {
266
+ let val = null
267
+
268
+ for (const store of this.getStores(storeTypes)) {
269
+ val = store.get<Data[K]>(key)
270
+ if (val) {
271
+ return val
272
+ }
273
+ }
274
+ return null
275
+ }
276
+
277
+ /**
278
+ * it will set the value for the key in all the stores
279
+ * @param key key for the value to be stored
280
+ * @param value value to be stored
281
+ * @param storeTypes optional array of store types to be used for storing the value
282
+ * @returns value that was stored
283
+ */
284
+ public set<K extends keyof Data>(
285
+ key: K,
286
+ value: Data[K] | null,
287
+ storeTypes?: StoreType[]
288
+ ): void {
289
+ for (const store of this.getStores(storeTypes)) {
290
+ store.set(key, value)
291
+ }
292
+ }
293
+
294
+ /**
295
+ * remove the value for the key from all the stores
296
+ * @param key key for the value to be removed
297
+ * @param storeTypes optional array of store types to be used for removing the value
298
+ */
299
+ public clear<K extends keyof Data>(key: K, storeTypes?: StoreType[]): void {
300
+ for (const store of this.getStores(storeTypes)) {
301
+ store.remove(key)
302
+ }
303
+ }
304
+ }
305
+
306
+ type StorageOptions = {
307
+ cookie: Cookie | undefined
308
+ localStorage: LocalStorage | undefined
309
+ memory: Store
310
+ }
311
+
312
+ export function getAvailableStorageOptions(
313
+ cookieOptions?: CookieOptions
314
+ ): StorageOptions {
315
+ return {
316
+ cookie: Cookie.available() ? new Cookie(cookieOptions) : undefined,
317
+ localStorage: LocalStorage.available() ? new LocalStorage() : undefined,
318
+ memory: new Store(),
319
+ }
320
+ }
321
+
322
+ export class User {
323
+ static defaults = defaults
324
+
325
+ private idKey: string
326
+ private traitsKey: string
327
+ private anonKey: string
328
+ private cookieOptions?: CookieOptions
329
+
330
+ private legacyUserStore: UniversalStorage<{
331
+ [k: string]:
332
+ | {
333
+ id?: string
334
+ traits?: Traits
335
+ }
336
+ | string
337
+ }>
338
+ private traitsStore: UniversalStorage<{
339
+ [k: string]: Traits
340
+ }>
341
+
342
+ private identityStore: UniversalStorage<{
343
+ [k: string]: string
344
+ }>
345
+
346
+ options: UserOptions = {}
347
+
348
+ constructor(options: UserOptions = defaults, cookieOptions?: CookieOptions) {
349
+ this.options = options
350
+ this.cookieOptions = cookieOptions
351
+
352
+ this.idKey = options.cookie?.key ?? defaults.cookie.key
353
+ this.traitsKey = options.localStorage?.key ?? defaults.localStorage.key
354
+ this.anonKey = 'ajs_anonymous_id'
355
+
356
+ const isDisabled = options.disable === true
357
+ const shouldPersist = options.persist !== false
358
+
359
+ let defaultStorageTargets: StoreType[] = isDisabled
360
+ ? []
361
+ : shouldPersist
362
+ ? ['localStorage', 'cookie', 'memory']
363
+ : ['memory']
364
+
365
+ const storageOptions = getAvailableStorageOptions(cookieOptions)
366
+
367
+ if (options.localStorageFallbackDisabled) {
368
+ defaultStorageTargets = defaultStorageTargets.filter(
369
+ (t) => t !== 'localStorage'
370
+ )
371
+ }
372
+
373
+ this.identityStore = new UniversalStorage(
374
+ defaultStorageTargets,
375
+ storageOptions
376
+ )
377
+
378
+ // using only cookies for legacy user store
379
+ this.legacyUserStore = new UniversalStorage(
380
+ defaultStorageTargets.filter(
381
+ (t) => t !== 'localStorage' && t !== 'memory'
382
+ ),
383
+ storageOptions
384
+ )
385
+
386
+ // using only localStorage / memory for traits store
387
+ this.traitsStore = new UniversalStorage(
388
+ defaultStorageTargets.filter((t) => t !== 'cookie'),
389
+ storageOptions
390
+ )
391
+
392
+ const legacyUser = this.legacyUserStore.get(defaults.cookie.oldKey)
393
+ if (legacyUser && typeof legacyUser === 'object') {
394
+ legacyUser.id && this.id(legacyUser.id)
395
+ legacyUser.traits && this.traits(legacyUser.traits)
396
+ }
397
+ autoBind(this)
398
+ }
399
+
400
+ id = (id?: ID): ID => {
401
+ if (this.options.disable) {
402
+ return null
403
+ }
404
+
405
+ const prevId = this.identityStore.getAndSync(this.idKey)
406
+
407
+ if (id !== undefined) {
408
+ this.identityStore.set(this.idKey, id)
409
+
410
+ const changingIdentity = id !== prevId && prevId !== null && id !== null
411
+ if (changingIdentity) {
412
+ this.anonymousId(null)
413
+ }
414
+ }
415
+
416
+ const retId = this.identityStore.getAndSync(this.idKey)
417
+ if (retId) return retId
418
+
419
+ const retLeg = this.legacyUserStore.get(defaults.cookie.oldKey)
420
+ return retLeg ? (typeof retLeg === 'object' ? retLeg.id : retLeg) : null
421
+ }
422
+
423
+ private legacySIO(): [string, string] | null {
424
+ const val = this.legacyUserStore.get('_sio') as string
425
+ if (!val) {
426
+ return null
427
+ }
428
+ const [anon, user] = val.split('----')
429
+ return [anon, user]
430
+ }
431
+
432
+ anonymousId = (id?: ID): ID => {
433
+ if (this.options.disable) {
434
+ return null
435
+ }
436
+
437
+ if (id === undefined) {
438
+ const val =
439
+ this.identityStore.getAndSync(this.anonKey) ?? this.legacySIO()?.[0]
440
+
441
+ if (val) {
442
+ return val
443
+ }
444
+ }
445
+
446
+ if (id === null) {
447
+ this.identityStore.set(this.anonKey, null)
448
+ return this.identityStore.getAndSync(this.anonKey)
449
+ }
450
+
451
+ this.identityStore.set(this.anonKey, id ?? uuid())
452
+ return this.identityStore.getAndSync(this.anonKey)
453
+ }
454
+
455
+ traits = (traits?: Traits | null): Traits | undefined => {
456
+ if (this.options.disable) {
457
+ return
458
+ }
459
+
460
+ if (traits === null) {
461
+ traits = {}
462
+ }
463
+
464
+ if (traits) {
465
+ this.traitsStore.set(this.traitsKey, traits ?? {})
466
+ }
467
+
468
+ return this.traitsStore.get(this.traitsKey) ?? {}
469
+ }
470
+
471
+ identify(id?: ID, traits?: Traits): void {
472
+ if (this.options.disable) {
473
+ return
474
+ }
475
+
476
+ traits = traits ?? {}
477
+ const currentId = this.id()
478
+
479
+ if (currentId === null || currentId === id) {
480
+ traits = {
481
+ ...this.traits(),
482
+ ...traits,
483
+ }
484
+ }
485
+
486
+ if (id) {
487
+ this.id(id)
488
+ }
489
+
490
+ this.traits(traits)
491
+ }
492
+
493
+ logout(): void {
494
+ this.anonymousId(null)
495
+ this.id(null)
496
+ this.traits({})
497
+ }
498
+
499
+ reset(): void {
500
+ this.logout()
501
+ this.identityStore.clear(this.idKey)
502
+ this.identityStore.clear(this.anonKey)
503
+ this.traitsStore.clear(this.traitsKey)
504
+ }
505
+
506
+ load(): User {
507
+ return new User(this.options, this.cookieOptions)
508
+ }
509
+
510
+ save(): boolean {
511
+ return true
512
+ }
513
+ }
514
+
515
+ const groupDefaults: UserOptions = {
516
+ persist: true,
517
+ cookie: {
518
+ key: 'ajs_group_id',
519
+ },
520
+ localStorage: {
521
+ key: 'ajs_group_properties',
522
+ },
523
+ }
524
+
525
+ export class Group extends User {
526
+ constructor(options: UserOptions = groupDefaults, cookie?: CookieOptions) {
527
+ super(options, cookie)
528
+ autoBind(this)
529
+ }
530
+
531
+ anonymousId = (_id?: ID): ID => {
532
+ return undefined
533
+ }
534
+ }
@@ -0,0 +1,65 @@
1
+ import cookie from 'js-cookie'
2
+
3
+ /**
4
+ * Levels returns all levels of the given url.
5
+ *
6
+ * @param {string} url
7
+ * @return {Array}
8
+ * @api public
9
+ */
10
+ function levels(url: URL): string[] {
11
+ const host = url.hostname
12
+ const parts = host.split('.')
13
+ const last = parts[parts.length - 1]
14
+ const levels: string[] = []
15
+
16
+ // Ip address.
17
+ if (parts.length === 4 && parseInt(last, 10) > 0) {
18
+ return levels
19
+ }
20
+
21
+ // Localhost.
22
+ if (parts.length <= 1) {
23
+ return levels
24
+ }
25
+
26
+ // Create levels.
27
+ for (let i = parts.length - 2; i >= 0; --i) {
28
+ levels.push(parts.slice(i).join('.'))
29
+ }
30
+
31
+ return levels
32
+ }
33
+
34
+ function parseUrl(url: string): URL | undefined {
35
+ try {
36
+ return new URL(url)
37
+ } catch {
38
+ return
39
+ }
40
+ }
41
+
42
+ export function tld(url: string): string | undefined {
43
+ const parsedUrl = parseUrl(url)
44
+ if (!parsedUrl) return
45
+
46
+ const lvls = levels(parsedUrl)
47
+
48
+ // Lookup the real top level one.
49
+ for (let i = 0; i < lvls.length; ++i) {
50
+ const cname = '__tld__'
51
+ const domain = lvls[i]
52
+ const opts = { domain: '.' + domain }
53
+
54
+ try {
55
+ // cookie access throw an error if the library is ran inside a sandboxed environment (e.g. sandboxed iframe)
56
+ cookie.set(cname, '1', opts)
57
+ if (cookie.get(cname)) {
58
+ cookie.remove(cname, opts)
59
+ return domain
60
+ }
61
+ } catch (_) {
62
+ return
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,2 @@
1
+ // This file is generated.
2
+ export const version = '0.0.1'
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from './core/analytics'
2
+ export * from './browser'
3
+ export * from './node'
4
+
5
+ export * from './core/context'
6
+ export * from './core/events'
7
+ export * from './core/plugin'
8
+ export * from './core/user'
9
+
10
+ export type { AnalyticsSnippet } from './browser/standalone-analytics'
@@ -0,0 +1,19 @@
1
+ export default function bindAll<
2
+ ObjType extends { [key: string]: any },
3
+ KeyType extends keyof ObjType
4
+ >(obj: ObjType): ObjType {
5
+ const proto = obj.constructor.prototype
6
+ for (const key of Object.getOwnPropertyNames(proto)) {
7
+ if (key !== 'constructor') {
8
+ const desc = Object.getOwnPropertyDescriptor(
9
+ obj.constructor.prototype,
10
+ key
11
+ )
12
+ if (!!desc && typeof desc.value === 'function') {
13
+ obj[key as KeyType] = obj[key].bind(obj)
14
+ }
15
+ }
16
+ }
17
+
18
+ return obj
19
+ }
@@ -0,0 +1,23 @@
1
+ export function shouldPolyfill(): boolean {
2
+ const browserVersionCompatList: { [browser: string]: number } = {
3
+ Firefox: 46,
4
+ Edge: 13,
5
+ }
6
+
7
+ // Unfortunately IE doesn't follow the same pattern as other browsers, so we
8
+ // need to check `isIE11` differently.
9
+ // @ts-expect-error
10
+ const isIE11 = !!window.MSInputMethodContext && !!document.documentMode
11
+
12
+ const userAgent = navigator.userAgent.split(' ')
13
+ const [browser, version] = userAgent[userAgent.length - 1].split('/')
14
+
15
+ return (
16
+ isIE11 ||
17
+ (browserVersionCompatList[browser] !== undefined &&
18
+ browserVersionCompatList[browser] >= parseInt(version))
19
+ )
20
+ }
21
+
22
+ // appName = Netscape IE / Edge
23
+ // edge 13 Edge/13... same as FF
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Return a promise that can be externally resolved
3
+ */
4
+ export const createDeferred = <T>() => {
5
+ let resolve!: (value: T | PromiseLike<T>) => void
6
+ let reject!: (reason: any) => void
7
+ const promise = new Promise<T>((_resolve, _reject) => {
8
+ resolve = _resolve
9
+ reject = _reject
10
+ })
11
+ return {
12
+ resolve,
13
+ reject,
14
+ promise,
15
+ }
16
+ }
@@ -0,0 +1,26 @@
1
+ import { loadScript } from './load-script'
2
+ import { getLegacyAJSPath } from './parse-cdn'
3
+
4
+ let ajsIdentifiedCSP = false
5
+
6
+ export async function onCSPError(
7
+ e: SecurityPolicyViolationEvent & { disposition?: 'enforce' | 'report' }
8
+ ): Promise<void> {
9
+ if (e.disposition === 'report') {
10
+ return
11
+ }
12
+
13
+ if (!e.blockedURI.includes('cdp.customer.io') || ajsIdentifiedCSP) {
14
+ return
15
+ }
16
+
17
+ ajsIdentifiedCSP = true
18
+
19
+ console.warn(
20
+ 'Your CSP policy is missing permissions required in order to run Analytics.js 2.0'
21
+ )
22
+ console.warn('Reverting to Analytics.js 1.0')
23
+
24
+ const classicPath = getLegacyAJSPath()
25
+ await loadScript(classicPath)
26
+ }