@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,567 @@
1
+ import {
2
+ AliasParams,
3
+ DispatchedEvent,
4
+ EventParams,
5
+ GroupParams,
6
+ PageParams,
7
+ resolveAliasArguments,
8
+ resolveArguments,
9
+ resolvePageArguments,
10
+ resolveUserArguments,
11
+ IdentifyParams,
12
+ } from '../arguments-resolver'
13
+ import type { FormArgs, LinkArgs } from '../auto-track'
14
+ import { isOffline } from '../connection'
15
+ import { Context } from '../context'
16
+ import { dispatch, Emitter } from '@customerio/cdp-analytics-core'
17
+ import {
18
+ Callback,
19
+ EventFactory,
20
+ Integrations,
21
+ Plan,
22
+ EventProperties,
23
+ CustomerioEvent,
24
+ } from '../events'
25
+ import type { Plugin } from '../plugin'
26
+ import { EventQueue } from '../queue/event-queue'
27
+ import {
28
+ CookieOptions,
29
+ getAvailableStorageOptions,
30
+ Group,
31
+ ID,
32
+ UniversalStorage,
33
+ User,
34
+ UserOptions,
35
+ } from '../user'
36
+ import autoBind from '../../lib/bind-all'
37
+ import { PersistedPriorityQueue } from '../../lib/priority-queue/persisted'
38
+ import type { LegacyDestination } from '../../plugins/ajs-destination'
39
+ import type {
40
+ LegacyIntegration,
41
+ ClassicIntegrationSource,
42
+ } from '../../plugins/ajs-destination/types'
43
+ import type {
44
+ DestinationMiddlewareFunction,
45
+ MiddlewareFunction,
46
+ } from '../../plugins/middleware'
47
+ import { version } from '../../generated/version'
48
+ import { PriorityQueue } from '../../lib/priority-queue'
49
+ import { getGlobal } from '../../lib/get-global'
50
+ import { AnalyticsClassic, AnalyticsCore } from './interfaces'
51
+
52
+ const deprecationWarning =
53
+ 'This is being deprecated and will be not be available in future releases of Analytics JS'
54
+
55
+ // reference any pre-existing "analytics" object so a user can restore the reference
56
+ const global: any = getGlobal()
57
+ const _analytics = global?.analytics
58
+
59
+ function createDefaultQueue(retryQueue = false, disablePersistance = false) {
60
+ const maxAttempts = retryQueue ? 4 : 1
61
+ const priorityQueue = disablePersistance
62
+ ? new PriorityQueue(maxAttempts, [])
63
+ : new PersistedPriorityQueue(maxAttempts, 'event-queue')
64
+ return new EventQueue(priorityQueue)
65
+ }
66
+
67
+ export interface AnalyticsSettings {
68
+ writeKey: string
69
+ timeout?: number
70
+ plugins?: Plugin[]
71
+ classicIntegrations?: ClassicIntegrationSource[]
72
+ }
73
+
74
+ export interface InitOptions {
75
+ /**
76
+ * Disables storing any data on the client-side via cookies or localstorage.
77
+ * Defaults to `false`.
78
+ *
79
+ */
80
+ disableClientPersistence?: boolean
81
+ /**
82
+ * Disables automatically converting ISO string event properties into Dates.
83
+ * ISO string to Date conversions occur right before sending events to a classic device mode integration,
84
+ * after any destination middleware have been ran.
85
+ * Defaults to `false`.
86
+ */
87
+ disableAutoISOConversion?: boolean
88
+ initialPageview?: boolean
89
+ cookie?: CookieOptions
90
+ user?: UserOptions
91
+ group?: UserOptions
92
+ integrations?: Integrations
93
+ plan?: Plan
94
+ retryQueue?: boolean
95
+ obfuscate?: boolean
96
+ /**
97
+ * Disables or sets constraints on processing of query string parameters
98
+ */
99
+ useQueryString?:
100
+ | boolean
101
+ | {
102
+ aid?: RegExp
103
+ uid?: RegExp
104
+ }
105
+ }
106
+
107
+ /* analytics-classic stubs */
108
+ function _stub(this: never) {
109
+ console.warn(deprecationWarning)
110
+ }
111
+
112
+ export class Analytics
113
+ extends Emitter
114
+ implements AnalyticsCore, AnalyticsClassic {
115
+ protected settings: AnalyticsSettings
116
+ private _user: User
117
+ private _group: Group
118
+ private eventFactory: EventFactory
119
+ private _debug = false
120
+ private _universalStorage: UniversalStorage<{
121
+ [k: string]: unknown
122
+ }>
123
+
124
+ initialized = false
125
+ integrations: Integrations
126
+ options: InitOptions
127
+ queue: EventQueue
128
+
129
+ constructor(
130
+ settings: AnalyticsSettings,
131
+ options?: InitOptions,
132
+ queue?: EventQueue,
133
+ user?: User,
134
+ group?: Group
135
+ ) {
136
+ super()
137
+ const cookieOptions = options?.cookie
138
+ const disablePersistance = options?.disableClientPersistence ?? false
139
+ this.settings = settings
140
+ this.settings.timeout = this.settings.timeout ?? 300
141
+ this.queue =
142
+ queue ?? createDefaultQueue(options?.retryQueue, disablePersistance)
143
+
144
+ this._universalStorage = new UniversalStorage(
145
+ disablePersistance ? ['memory'] : ['localStorage', 'cookie', 'memory'],
146
+ getAvailableStorageOptions(cookieOptions)
147
+ )
148
+
149
+ this._user =
150
+ user ??
151
+ new User(
152
+ disablePersistance
153
+ ? { ...options?.user, persist: false }
154
+ : options?.user,
155
+ cookieOptions
156
+ ).load()
157
+ this._group =
158
+ group ??
159
+ new Group(
160
+ disablePersistance
161
+ ? { ...options?.group, persist: false }
162
+ : options?.group,
163
+ cookieOptions
164
+ ).load()
165
+ this.eventFactory = new EventFactory(this._user)
166
+ this.integrations = options?.integrations ?? {}
167
+ this.options = options ?? {}
168
+
169
+ autoBind(this)
170
+ }
171
+
172
+ user = (): User => {
173
+ return this._user
174
+ }
175
+
176
+ get storage(): UniversalStorage {
177
+ return this._universalStorage
178
+ }
179
+
180
+ async track(...args: EventParams): Promise<DispatchedEvent> {
181
+ const [name, data, opts, cb] = resolveArguments(...args)
182
+
183
+ const CustomerioEvent = this.eventFactory.track(
184
+ name,
185
+ data as EventProperties,
186
+ opts,
187
+ this.integrations
188
+ )
189
+
190
+ return this._dispatch(CustomerioEvent, cb).then((ctx) => {
191
+ this.emit('track', name, ctx.event.properties, ctx.event.options)
192
+ return ctx
193
+ })
194
+ }
195
+
196
+ async page(...args: PageParams): Promise<DispatchedEvent> {
197
+ const [category, page, properties, options, callback] =
198
+ resolvePageArguments(...args)
199
+
200
+ const CustomerioEvent = this.eventFactory.page(
201
+ category,
202
+ page,
203
+ properties,
204
+ options,
205
+ this.integrations
206
+ )
207
+
208
+ return this._dispatch(CustomerioEvent, callback).then((ctx) => {
209
+ this.emit('page', category, page, ctx.event.properties, ctx.event.options)
210
+ return ctx
211
+ })
212
+ }
213
+
214
+ async identify(...args: IdentifyParams): Promise<DispatchedEvent> {
215
+ const [id, _traits, options, callback] = resolveUserArguments(this._user)(
216
+ ...args
217
+ )
218
+
219
+ this._user.identify(id, _traits)
220
+ const CustomerioEvent = this.eventFactory.identify(
221
+ this._user.id(),
222
+ this._user.traits(),
223
+ options,
224
+ this.integrations
225
+ )
226
+
227
+ return this._dispatch(CustomerioEvent, callback).then((ctx) => {
228
+ this.emit(
229
+ 'identify',
230
+ ctx.event.userId,
231
+ ctx.event.traits,
232
+ ctx.event.options
233
+ )
234
+ return ctx
235
+ })
236
+ }
237
+
238
+ group(): Group
239
+ group(...args: GroupParams): Promise<DispatchedEvent>
240
+ group(...args: GroupParams): Promise<DispatchedEvent> | Group {
241
+ if (args.length === 0) {
242
+ return this._group
243
+ }
244
+
245
+ const [id, _traits, options, callback] = resolveUserArguments(this._group)(
246
+ ...args
247
+ )
248
+
249
+ this._group.identify(id, _traits)
250
+ const groupId = this._group.id()
251
+ const groupTraits = this._group.traits()
252
+
253
+ const CustomerioEvent = this.eventFactory.group(
254
+ groupId,
255
+ groupTraits,
256
+ options,
257
+ this.integrations
258
+ )
259
+
260
+ return this._dispatch(CustomerioEvent, callback).then((ctx) => {
261
+ this.emit('group', ctx.event.groupId, ctx.event.traits, ctx.event.options)
262
+ return ctx
263
+ })
264
+ }
265
+
266
+ async alias(...args: AliasParams): Promise<DispatchedEvent> {
267
+ const [to, from, options, callback] = resolveAliasArguments(...args)
268
+ const CustomerioEvent = this.eventFactory.alias(
269
+ to,
270
+ from,
271
+ options,
272
+ this.integrations
273
+ )
274
+ return this._dispatch(CustomerioEvent, callback).then((ctx) => {
275
+ this.emit('alias', to, from, ctx.event.options)
276
+ return ctx
277
+ })
278
+ }
279
+
280
+ async screen(...args: PageParams): Promise<DispatchedEvent> {
281
+ const [category, page, properties, options, callback] =
282
+ resolvePageArguments(...args)
283
+
284
+ const CustomerioEvent = this.eventFactory.screen(
285
+ category,
286
+ page,
287
+ properties,
288
+ options,
289
+ this.integrations
290
+ )
291
+ return this._dispatch(CustomerioEvent, callback).then((ctx) => {
292
+ this.emit(
293
+ 'screen',
294
+ category,
295
+ page,
296
+ ctx.event.properties,
297
+ ctx.event.options
298
+ )
299
+ return ctx
300
+ })
301
+ }
302
+
303
+ async trackClick(...args: LinkArgs): Promise<Analytics> {
304
+ const autotrack = await import(
305
+ /* webpackChunkName: "auto-track" */ '../auto-track'
306
+ )
307
+ return autotrack.link.call(this, ...args)
308
+ }
309
+
310
+ async trackLink(...args: LinkArgs): Promise<Analytics> {
311
+ const autotrack = await import(
312
+ /* webpackChunkName: "auto-track" */ '../auto-track'
313
+ )
314
+ return autotrack.link.call(this, ...args)
315
+ }
316
+
317
+ async trackSubmit(...args: FormArgs): Promise<Analytics> {
318
+ const autotrack = await import(
319
+ /* webpackChunkName: "auto-track" */ '../auto-track'
320
+ )
321
+ return autotrack.form.call(this, ...args)
322
+ }
323
+
324
+ async trackForm(...args: FormArgs): Promise<Analytics> {
325
+ const autotrack = await import(
326
+ /* webpackChunkName: "auto-track" */ '../auto-track'
327
+ )
328
+ return autotrack.form.call(this, ...args)
329
+ }
330
+
331
+ async register(...plugins: Plugin[]): Promise<Context> {
332
+ const ctx = Context.system()
333
+
334
+ const registrations = plugins.map((xt) =>
335
+ this.queue.register(ctx, xt, this)
336
+ )
337
+ await Promise.all(registrations)
338
+
339
+ return ctx
340
+ }
341
+
342
+ async deregister(...plugins: string[]): Promise<Context> {
343
+ const ctx = Context.system()
344
+
345
+ const deregistrations = plugins.map((pl) => {
346
+ const plugin = this.queue.plugins.find((p) => p.name === pl)
347
+ if (plugin) {
348
+ return this.queue.deregister(ctx, plugin, this)
349
+ } else {
350
+ ctx.log('warn', `plugin ${pl} not found`)
351
+ }
352
+ })
353
+
354
+ await Promise.all(deregistrations)
355
+
356
+ return ctx
357
+ }
358
+
359
+ debug(toggle: boolean): Analytics {
360
+ // Make sure legacy ajs debug gets turned off if it was enabled before upgrading.
361
+ if (toggle === false && localStorage.getItem('debug')) {
362
+ localStorage.removeItem('debug')
363
+ }
364
+ this._debug = toggle
365
+ return this
366
+ }
367
+
368
+ reset(): void {
369
+ this._user.reset()
370
+ this._group.reset()
371
+ this.emit('reset')
372
+ }
373
+
374
+ timeout(timeout: number): void {
375
+ this.settings.timeout = timeout
376
+ }
377
+
378
+ private async _dispatch(
379
+ event: CustomerioEvent,
380
+ callback?: Callback
381
+ ): Promise<DispatchedEvent> {
382
+ const ctx = new Context(event)
383
+ if (isOffline() && !this.options.retryQueue) {
384
+ return ctx
385
+ }
386
+ return dispatch(ctx, this.queue, this, {
387
+ callback,
388
+ debug: this._debug,
389
+ timeout: this.settings.timeout,
390
+ })
391
+ }
392
+
393
+ async addSourceMiddleware(fn: MiddlewareFunction): Promise<Analytics> {
394
+ await this.queue.criticalTasks.run(async () => {
395
+ const { sourceMiddlewarePlugin } = await import(
396
+ /* webpackChunkName: "middleware" */ '../../plugins/middleware'
397
+ )
398
+
399
+ const integrations: Record<string, boolean> = {}
400
+ this.queue.plugins.forEach((plugin) => {
401
+ if (plugin.type === 'destination') {
402
+ return (integrations[plugin.name] = true)
403
+ }
404
+ })
405
+
406
+ const plugin = sourceMiddlewarePlugin(fn, integrations)
407
+ await this.register(plugin)
408
+ })
409
+
410
+ return this
411
+ }
412
+
413
+ /* TODO: This does not have to return a promise? */
414
+ addDestinationMiddleware(
415
+ integrationName: string,
416
+ ...middlewares: DestinationMiddlewareFunction[]
417
+ ): Promise<Analytics> {
418
+ const legacyDestinations = this.queue.plugins.filter(
419
+ (xt) => xt.name.toLowerCase() === integrationName.toLowerCase()
420
+ ) as LegacyDestination[]
421
+
422
+ legacyDestinations.forEach((destination) => {
423
+ destination.addMiddleware(...middlewares)
424
+ })
425
+ return Promise.resolve(this)
426
+ }
427
+
428
+ setAnonymousId(id?: string): ID {
429
+ return this._user.anonymousId(id)
430
+ }
431
+
432
+ async queryString(query: string): Promise<Context[]> {
433
+ if (this.options.useQueryString === false) {
434
+ return []
435
+ }
436
+
437
+ const { queryString } = await import(
438
+ /* webpackChunkName: "queryString" */ '../query-string'
439
+ )
440
+ return queryString(this, query)
441
+ }
442
+
443
+ /**
444
+ * @deprecated This function does not register a destination plugin.
445
+ *
446
+ * Instantiates a legacy Analytics.js destination.
447
+ *
448
+ * This function does not register the destination as an Analytics.JS plugin,
449
+ * all the it does it to invoke the factory function back.
450
+ */
451
+ use(legacyPluginFactory: (analytics: Analytics) => void): Analytics {
452
+ legacyPluginFactory(this)
453
+ return this
454
+ }
455
+
456
+ async ready(
457
+ callback: Function = (res: Promise<unknown>[]): Promise<unknown>[] => res
458
+ ): Promise<unknown> {
459
+ return Promise.all(
460
+ this.queue.plugins.map((i) => (i.ready ? i.ready() : Promise.resolve()))
461
+ ).then((res) => {
462
+ callback(res)
463
+ return res
464
+ })
465
+ }
466
+
467
+ // analytics-classic api
468
+
469
+ noConflict(): Analytics {
470
+ console.warn(deprecationWarning)
471
+ window.analytics = _analytics ?? this
472
+ return this
473
+ }
474
+
475
+ normalize(msg: CustomerioEvent): CustomerioEvent {
476
+ console.warn(deprecationWarning)
477
+ return this.eventFactory.normalize(msg)
478
+ }
479
+
480
+ get failedInitializations(): string[] {
481
+ console.warn(deprecationWarning)
482
+ return this.queue.failedInitializations
483
+ }
484
+
485
+ get VERSION(): string {
486
+ return version
487
+ }
488
+
489
+ /* @deprecated - noop */
490
+ async initialize(
491
+ _settings?: AnalyticsSettings,
492
+ _options?: InitOptions
493
+ ): Promise<Analytics> {
494
+ console.warn(deprecationWarning)
495
+ return Promise.resolve(this)
496
+ }
497
+
498
+ init = this.initialize.bind(this)
499
+
500
+ async pageview(url: string): Promise<Analytics> {
501
+ console.warn(deprecationWarning)
502
+ await this.page({ path: url })
503
+ return this
504
+ }
505
+
506
+ get plugins() {
507
+ console.warn(deprecationWarning)
508
+ // @ts-expect-error
509
+ return this._plugins ?? {}
510
+ }
511
+
512
+ get Integrations() {
513
+ console.warn(deprecationWarning)
514
+ const integrations = this.queue.plugins
515
+ .filter((plugin) => plugin.type === 'destination')
516
+ .reduce((acc, plugin) => {
517
+ const name = `${plugin.name
518
+ .toLowerCase()
519
+ .replace('.', '')
520
+ .split(' ')
521
+ .join('-')}Integration`
522
+
523
+ // @ts-expect-error
524
+ const integration = window[name] as
525
+ | (LegacyIntegration & { Integration?: LegacyIntegration })
526
+ | undefined
527
+
528
+ if (!integration) {
529
+ return acc
530
+ }
531
+
532
+ const nested = integration.Integration // hack - Google Analytics function resides in the "Integration" field
533
+ if (nested) {
534
+ acc[plugin.name] = nested
535
+ return acc
536
+ }
537
+
538
+ acc[plugin.name] = integration as LegacyIntegration
539
+ return acc
540
+ }, {} as Record<string, LegacyIntegration>)
541
+
542
+ return integrations
543
+ }
544
+
545
+ log = _stub
546
+ addIntegrationMiddleware = _stub
547
+ listeners = _stub
548
+ addEventListener = _stub
549
+ removeAllListeners = _stub
550
+ removeListener = _stub
551
+ removeEventListener = _stub
552
+ hasListeners = _stub
553
+ add = _stub
554
+ addIntegration = _stub
555
+
556
+ // snippet function
557
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
558
+ push(args: any[]) {
559
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
560
+ const an = this as any
561
+ const method = args.shift()
562
+ if (method) {
563
+ if (!an[method]) return
564
+ }
565
+ an[method].apply(this, args)
566
+ }
567
+ }
@@ -0,0 +1,100 @@
1
+ import type { Analytics, AnalyticsSettings, InitOptions } from '.'
2
+ import type { Plugin } from '../plugin'
3
+ import type {
4
+ EventParams,
5
+ DispatchedEvent,
6
+ PageParams,
7
+ IdentifyParams,
8
+ AliasParams,
9
+ GroupParams,
10
+ } from '../arguments-resolver'
11
+ import type { Context } from '../context'
12
+ import type { CustomerioEvent } from '../events'
13
+ import type { Group, User } from '../user'
14
+ import type { LegacyIntegration } from '../../plugins/ajs-destination/types'
15
+ import { CoreAnalytics } from '@customerio/cdp-analytics-core'
16
+
17
+ // we can define a contract because:
18
+ // - it gives us a neat place to put all our typedocs (they end up being inherited by the class that implements them).
19
+ // - it makes it easy to reason about what's being shared between browser and node
20
+
21
+ /**
22
+ * All of these methods are a no-op.
23
+ */
24
+ /** @deprecated */
25
+ interface AnalyticsClassicStubs {
26
+ /** @deprecated */
27
+ log(this: never): void
28
+ /** @deprecated */
29
+ addIntegrationMiddleware(this: never): void
30
+ /** @deprecated */
31
+ listeners(this: never): void
32
+ /** @deprecated */
33
+ addEventListener(this: never): void
34
+ /** @deprecated */
35
+ removeAllListeners(this: never): void
36
+ /** @deprecated */
37
+ removeListener(this: never): void
38
+ /** @deprecated */
39
+ removeEventListener(this: never): void
40
+ /** @deprecated */
41
+ hasListeners(this: never): void
42
+ /** @deprecated */
43
+ // This function is only used to add GA and Appcue, but these are already being added to Integrations by AJSN
44
+ addIntegration(this: never): void
45
+ /** @deprecated */
46
+ add(this: never): void
47
+ }
48
+
49
+ /** @deprecated */
50
+ export interface AnalyticsClassic extends AnalyticsClassicStubs {
51
+ /** @deprecated */
52
+ initialize(
53
+ settings?: AnalyticsSettings,
54
+ options?: InitOptions
55
+ ): Promise<Analytics>
56
+
57
+ /** @deprecated */
58
+ noConflict(): Analytics
59
+
60
+ /** @deprecated */
61
+ normalize(msg: CustomerioEvent): CustomerioEvent
62
+
63
+ /** @deprecated */
64
+ readonly failedInitializations: string[]
65
+
66
+ /** @deprecated */
67
+ pageview(url: string): Promise<Analytics>
68
+
69
+ /** @deprecated*/
70
+ readonly plugins: any
71
+
72
+ /** @deprecated */
73
+ readonly Integrations: Record<string, LegacyIntegration>
74
+ }
75
+
76
+ /**
77
+ * Interface implemented by concrete Analytics class (commonly accessible if you use "await" on AnalyticsBrowser.load())
78
+ */
79
+ export interface AnalyticsCore extends CoreAnalytics {
80
+ track(...args: EventParams): Promise<DispatchedEvent>
81
+ page(...args: PageParams): Promise<DispatchedEvent>
82
+ identify(...args: IdentifyParams): Promise<DispatchedEvent>
83
+ group(): Group
84
+ group(...args: GroupParams): Promise<DispatchedEvent>
85
+ alias(...args: AliasParams): Promise<DispatchedEvent>
86
+ screen(...args: PageParams): Promise<DispatchedEvent>
87
+ register(...plugins: Plugin[]): Promise<Context>
88
+ deregister(...plugins: string[]): Promise<Context>
89
+ user(): User
90
+ readonly VERSION: string
91
+ }
92
+
93
+ /**
94
+ * Interface implemented by AnalyticsBrowser (buffered version of analytics) (commonly accessible through AnalyticsBrowser.load())
95
+ */
96
+ export type AnalyticsBrowserCore = Omit<AnalyticsCore, 'group' | 'user'> & {
97
+ group(): Promise<Group>
98
+ group(...args: GroupParams): Promise<DispatchedEvent>
99
+ user(): Promise<User>
100
+ }