@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
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@customerio/cdp-analytics-browser",
3
+ "version": "0.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/customerio/cdp-analytics-js",
7
+ "directory": "packages/browser"
8
+ },
9
+ "license": "MIT",
10
+ "main": "./dist/cjs/index.js",
11
+ "module": "./dist/pkg/index.js",
12
+ "types": "./dist/types/index.d.ts",
13
+ "browser": {
14
+ "./dist/cjs/node": "./dist/cjs/node/node.browser.js",
15
+ "./dist/cjs/node.js": "./dist/cjs/node/node.browser.js",
16
+ "./dist/pkg/node": "./dist/pkg/node/node.browser.js",
17
+ "./dist/pkg/node.js": "./dist/pkg/node/node.browser.js"
18
+ },
19
+ "files": [
20
+ "dist/",
21
+ "src/",
22
+ "!**/__tests__/**",
23
+ "!**/tester/**"
24
+ ],
25
+ "sideEffects": false,
26
+ "scripts": {
27
+ "build-prep": "sh scripts/build-prep.sh",
28
+ "version": "yarn run build-prep && git add src/generated/version.ts",
29
+ "umd": "webpack",
30
+ "eslint": "yarn run -T eslint",
31
+ "tsc": "yarn run -T tsc",
32
+ "jest": "yarn run -T jest",
33
+ "concurrently": "yarn run -T concurrently",
34
+ "watch": "yarn concurrently 'NODE_ENV=production WATCH=true yarn umd --watch' 'yarn pkg --watch'",
35
+ "build": "yarn clean && yarn build-prep && yarn concurrently 'NODE_ENV=production yarn umd' 'yarn pkg' 'yarn cjs'",
36
+ "release:cdn": "yarn run -T browser+deps build && NODE_ENV=production bash scripts/release.sh && NODE_ENV=stage bash scripts/release.sh",
37
+ "pkg": "yarn tsc -p tsconfig.build.json",
38
+ "cjs": "yarn tsc -p tsconfig.build.json --outDir ./dist/cjs --module commonjs",
39
+ "clean": "rm -rf dist",
40
+ "lint": "yarn concurrently 'yarn:eslint .' 'yarn:tsc --noEmit'",
41
+ "test": "yarn jest"
42
+ },
43
+ "size-limit": [
44
+ {
45
+ "path": "dist/umd/index.js",
46
+ "limit": "28.0 KB"
47
+ }
48
+ ],
49
+ "dependencies": {
50
+ "@customerio/cdp-analytics-core": "0.0.2",
51
+ "@lukeed/uuid": "^2.0.0",
52
+ "@segment/analytics.js-video-plugins": "^0.2.1",
53
+ "@segment/facade": "^3.4.9",
54
+ "@segment/tsub": "1.0.1",
55
+ "dset": "^3.1.2",
56
+ "js-cookie": "3.0.1",
57
+ "node-fetch": "^2.6.7",
58
+ "spark-md5": "^3.0.1",
59
+ "tslib": "^2.4.1",
60
+ "unfetch": "^4.1.0"
61
+ },
62
+ "devDependencies": {
63
+ "@internal/config": "0.0.0",
64
+ "@segment/analytics.js-integration": "^3.3.3",
65
+ "@segment/analytics.js-integration-amplitude": "^3.3.3",
66
+ "@size-limit/preset-big-lib": "^7.0.8",
67
+ "@types/flat": "^5.0.1",
68
+ "@types/fs-extra": "^9.0.2",
69
+ "@types/jest-dev-server": "^5.0.0",
70
+ "@types/jquery": "^3.5.4",
71
+ "@types/js-cookie": "3.0.1",
72
+ "@types/jsdom": "^16.2.14",
73
+ "@types/mime": "^2.0.3",
74
+ "@types/node": "^12.12.14",
75
+ "@types/serve-handler": "^6.1.0",
76
+ "@types/spark-md5": "^3.0.2",
77
+ "aws-sdk": "^2.814.0",
78
+ "circular-dependency-plugin": "^5.2.2",
79
+ "compression-webpack-plugin": "^8.0.1",
80
+ "execa": "^4.1.0",
81
+ "flat": "^5.0.2",
82
+ "fs-extra": "^9.0.1",
83
+ "jest-dev-server": "^6.0.3",
84
+ "jest-environment-jsdom": "^28.1.1",
85
+ "jquery": "^3.5.1",
86
+ "jsdom": "^19.0.0",
87
+ "lighthouse": "^9.6.3",
88
+ "log-update": "^4.0.0",
89
+ "micro-memoize": "^4.0.9",
90
+ "mime": "^2.4.6",
91
+ "node-gyp": "^9.0.0",
92
+ "playwright": "^1.28.1",
93
+ "serve-handler": "^6.1.3",
94
+ "size-limit": "^7.0.8",
95
+ "terser-webpack-plugin": "^5.1.4",
96
+ "ts-loader": "^9.1.1",
97
+ "ts-node": "^10.8.0",
98
+ "webpack": "^5.36.1",
99
+ "webpack-bundle-analyzer": "^4.4.2",
100
+ "webpack-cli": "^4.8.0"
101
+ },
102
+ "packageManager": "yarn@3.2.1"
103
+ }
@@ -0,0 +1,19 @@
1
+ import { getCDN, setGlobalCDNUrl } from '../lib/parse-cdn'
2
+ import { setVersionType } from '../plugins/customerio/normalize'
3
+
4
+ if (process.env.ASSET_PATH) {
5
+ if (process.env.ASSET_PATH === '/dist/umd/') {
6
+ // @ts-ignore
7
+ __webpack_public_path__ = '/dist/umd/'
8
+ } else {
9
+ const cdn = getCDN()
10
+ setGlobalCDNUrl(cdn) // preserving original behavior -- TODO: neccessary?
11
+
12
+ // @ts-ignore
13
+ __webpack_public_path__ = cdn + '/analytics-next/bundles/'
14
+ }
15
+ }
16
+
17
+ setVersionType('web')
18
+
19
+ export * from '.'
@@ -0,0 +1,397 @@
1
+ import { getProcessEnv } from '../lib/get-process-env'
2
+ import { getCDN, setGlobalCDNUrl } from '../lib/parse-cdn'
3
+
4
+ import { fetch } from '../lib/fetch'
5
+ import { Analytics, AnalyticsSettings, InitOptions } from '../core/analytics'
6
+ import { Context } from '../core/context'
7
+ import { Plan } from '../core/events'
8
+ import { Plugin } from '../core/plugin'
9
+ import { MetricsOptions } from '../core/stats/remote-metrics'
10
+ import { mergedOptions } from '../lib/merged-options'
11
+ import { createDeferred } from '../lib/create-deferred'
12
+ import { pageEnrichment } from '../plugins/page-enrichment'
13
+ import { remoteLoader, RemotePlugin } from '../plugins/remote-loader'
14
+ import type { RoutingRule } from '../plugins/routing-middleware'
15
+ import { customerio, CustomerioSettings } from '../plugins/customerio'
16
+ import { validation } from '../plugins/validation'
17
+ import {
18
+ AnalyticsBuffered,
19
+ PreInitMethodCallBuffer,
20
+ flushAnalyticsCallsInNewTask,
21
+ flushAddSourceMiddleware,
22
+ flushSetAnonymousID,
23
+ flushOn,
24
+ } from '../core/buffer'
25
+ import { popSnippetWindowBuffer } from '../core/buffer/snippet'
26
+ import { ClassicIntegrationSource } from '../plugins/ajs-destination/types'
27
+ import { attachInspector } from '../core/inspector'
28
+ import { Stats } from '../core/stats'
29
+
30
+ export interface LegacyIntegrationConfiguration {
31
+ /* @deprecated - This does not indicate browser types anymore */
32
+ type?: string
33
+
34
+ versionSettings?: {
35
+ version?: string
36
+ override?: string
37
+ componentTypes?: Array<'browser' | 'android' | 'ios' | 'server'>
38
+ }
39
+
40
+ bundlingStatus?: string
41
+
42
+ // Customer.io specific
43
+ retryQueue?: boolean
44
+
45
+ // any extra unknown settings
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ [key: string]: any
48
+ }
49
+
50
+ export interface LegacySettings {
51
+ integrations: {
52
+ [name: string]: LegacyIntegrationConfiguration
53
+ }
54
+
55
+ middlewareSettings?: {
56
+ routingRules: RoutingRule[]
57
+ }
58
+
59
+ enabledMiddleware?: Record<string, boolean>
60
+ metrics?: MetricsOptions
61
+
62
+ plan?: Plan
63
+
64
+ legacyVideoPluginsEnabled?: boolean
65
+
66
+ remotePlugins?: RemotePlugin[]
67
+ }
68
+
69
+ export interface AnalyticsBrowserSettings extends AnalyticsSettings {
70
+ /**
71
+ * The settings for the Customer.io Source.
72
+ * If provided, `AnalyticsBrowser` will not fetch remote settings
73
+ * for the source.
74
+ */
75
+ cdnSettings?: LegacySettings & Record<string, unknown>
76
+ /**
77
+ * If provided, will override the default CDN for this application.
78
+ */
79
+ cdnURL?: string
80
+ }
81
+
82
+ export function loadLegacySettings(
83
+ writeKey: string,
84
+ cdnURL?: string
85
+ ): Promise<LegacySettings> {
86
+ const baseUrl = cdnURL ?? getCDN()
87
+
88
+ return fetch(`${baseUrl}/v1/projects/${writeKey}/settings`)
89
+ .then((res) => {
90
+ if (!res.ok) {
91
+ return res.text().then((errorResponseMessage) => {
92
+ throw new Error(errorResponseMessage)
93
+ })
94
+ }
95
+ return res.json()
96
+ })
97
+ .catch((err) => {
98
+ console.error(err.message)
99
+ throw err
100
+ })
101
+ }
102
+
103
+ function hasLegacyDestinations(settings: LegacySettings): boolean {
104
+ return (
105
+ getProcessEnv().NODE_ENV !== 'test' &&
106
+ // just one integration means customerio
107
+ Object.keys(settings.integrations).length > 1
108
+ )
109
+ }
110
+
111
+ function hasTsubMiddleware(settings: LegacySettings): boolean {
112
+ return (
113
+ getProcessEnv().NODE_ENV !== 'test' &&
114
+ (settings.middlewareSettings?.routingRules?.length ?? 0) > 0
115
+ )
116
+ }
117
+
118
+ /**
119
+ * With AJS classic, we allow users to call setAnonymousId before the library initialization.
120
+ * This is important because some of the destinations will use the anonymousId during the initialization,
121
+ * and if we set anonId afterwards, that wouldn’t impact the destination.
122
+ *
123
+ * Also Ensures events can be registered before library initialization.
124
+ * This is important so users can register to 'initialize' and any events that may fire early during setup.
125
+ */
126
+ function flushPreBuffer(
127
+ analytics: Analytics,
128
+ buffer: PreInitMethodCallBuffer
129
+ ): void {
130
+ buffer.push(...popSnippetWindowBuffer())
131
+ flushSetAnonymousID(analytics, buffer)
132
+ flushOn(analytics, buffer)
133
+ }
134
+
135
+ /**
136
+ * Finish flushing buffer and cleanup.
137
+ */
138
+ async function flushFinalBuffer(
139
+ analytics: Analytics,
140
+ buffer: PreInitMethodCallBuffer
141
+ ): Promise<void> {
142
+ // Call popSnippetWindowBuffer before each flush task since there may be
143
+ // analytics calls during async function calls.
144
+ buffer.push(...popSnippetWindowBuffer())
145
+ await flushAddSourceMiddleware(analytics, buffer)
146
+ buffer.push(...popSnippetWindowBuffer())
147
+ flushAnalyticsCallsInNewTask(analytics, buffer)
148
+ // Clear buffer, just in case analytics is loaded twice; we don't want to fire events off again.
149
+ buffer.clear()
150
+ }
151
+
152
+ async function registerPlugins(
153
+ legacySettings: LegacySettings,
154
+ analytics: Analytics,
155
+ opts: InitOptions,
156
+ options: InitOptions,
157
+ plugins: Plugin[],
158
+ legacyIntegrationSources: ClassicIntegrationSource[]
159
+ ): Promise<Context> {
160
+ const tsubMiddleware = hasTsubMiddleware(legacySettings)
161
+ ? await import(
162
+ /* webpackChunkName: "tsub-middleware" */ '../plugins/routing-middleware'
163
+ ).then((mod) => {
164
+ return mod.tsubMiddleware(
165
+ legacySettings.middlewareSettings!.routingRules
166
+ )
167
+ })
168
+ : undefined
169
+
170
+ const legacyDestinations =
171
+ hasLegacyDestinations(legacySettings) || legacyIntegrationSources.length > 0
172
+ ? await import(
173
+ /* webpackChunkName: "ajs-destination" */ '../plugins/ajs-destination'
174
+ ).then((mod) => {
175
+ return mod.ajsDestinations(
176
+ legacySettings,
177
+ analytics.integrations,
178
+ opts,
179
+ tsubMiddleware,
180
+ legacyIntegrationSources
181
+ )
182
+ })
183
+ : []
184
+
185
+ if (legacySettings.legacyVideoPluginsEnabled) {
186
+ await import(
187
+ /* webpackChunkName: "legacyVideos" */ '../plugins/legacy-video-plugins'
188
+ ).then((mod) => {
189
+ return mod.loadLegacyVideoPlugins(analytics)
190
+ })
191
+ }
192
+
193
+ const schemaFilter = opts.plan?.track
194
+ ? await import(
195
+ /* webpackChunkName: "schemaFilter" */ '../plugins/schema-filter'
196
+ ).then((mod) => {
197
+ return mod.schemaFilter(opts.plan?.track, legacySettings)
198
+ })
199
+ : undefined
200
+
201
+ const mergedSettings = mergedOptions(legacySettings, options)
202
+ const remotePlugins = await remoteLoader(
203
+ legacySettings,
204
+ analytics.integrations,
205
+ mergedSettings,
206
+ options.obfuscate,
207
+ tsubMiddleware
208
+ ).catch(() => [])
209
+
210
+ const toRegister = [
211
+ validation,
212
+ pageEnrichment,
213
+ ...plugins,
214
+ ...legacyDestinations,
215
+ ...remotePlugins,
216
+ ]
217
+
218
+ if (schemaFilter) {
219
+ toRegister.push(schemaFilter)
220
+ }
221
+
222
+ const shouldIgnore =
223
+ (opts.integrations?.All === false &&
224
+ !opts.integrations['Customer.io Data Pipelines']) ||
225
+ (opts.integrations &&
226
+ opts.integrations['Customer.io Data Pipelines'] === false)
227
+
228
+ if (!shouldIgnore) {
229
+ toRegister.push(
230
+ customerio(
231
+ analytics,
232
+ mergedSettings['Customer.io Data Pipelines'] as CustomerioSettings,
233
+ legacySettings.integrations
234
+ )
235
+ )
236
+ }
237
+
238
+ const ctx = await analytics.register(...toRegister)
239
+
240
+ if (
241
+ Object.entries(legacySettings.enabledMiddleware ?? {}).some(
242
+ ([, enabled]) => enabled
243
+ )
244
+ ) {
245
+ await import(
246
+ /* webpackChunkName: "remoteMiddleware" */ '../plugins/remote-middleware'
247
+ ).then(async ({ remoteMiddlewares }) => {
248
+ const middleware = await remoteMiddlewares(
249
+ ctx,
250
+ legacySettings,
251
+ options.obfuscate
252
+ )
253
+ const promises = middleware.map((mdw) =>
254
+ analytics.addSourceMiddleware(mdw)
255
+ )
256
+ return Promise.all(promises)
257
+ })
258
+ }
259
+
260
+ return ctx
261
+ }
262
+
263
+ async function loadAnalytics(
264
+ settings: AnalyticsBrowserSettings,
265
+ options: InitOptions = {},
266
+ preInitBuffer: PreInitMethodCallBuffer
267
+ ): Promise<[Analytics, Context]> {
268
+ // this is an ugly side-effect, but it's for the benefits of the plugins that get their cdn via getCDN()
269
+ if (settings.cdnURL) setGlobalCDNUrl(settings.cdnURL)
270
+
271
+ const legacySettings =
272
+ settings.cdnSettings ??
273
+ (await loadLegacySettings(settings.writeKey, settings.cdnURL))
274
+
275
+ const retryQueue: boolean =
276
+ legacySettings.integrations['Customer.io Data Pipelines']?.retryQueue ??
277
+ true
278
+
279
+ const opts: InitOptions = { retryQueue, ...options }
280
+ const analytics = new Analytics(settings, opts)
281
+
282
+ attachInspector(analytics)
283
+
284
+ const plugins = settings.plugins ?? []
285
+ const classicIntegrations = settings.classicIntegrations ?? []
286
+ Stats.initRemoteMetrics(legacySettings.metrics)
287
+
288
+ // needs to be flushed before plugins are registered
289
+ flushPreBuffer(analytics, preInitBuffer)
290
+
291
+ const ctx = await registerPlugins(
292
+ legacySettings,
293
+ analytics,
294
+ opts,
295
+ options,
296
+ plugins,
297
+ classicIntegrations
298
+ )
299
+
300
+ const search = window.location.search ?? ''
301
+ const hash = window.location.hash ?? ''
302
+
303
+ const term = search.length ? search : hash.replace(/(?=#).*(?=\?)/, '')
304
+
305
+ if (term.includes('ajs_')) {
306
+ await analytics.queryString(term).catch(console.error)
307
+ }
308
+
309
+ analytics.initialized = true
310
+ analytics.emit('initialize', settings, options)
311
+
312
+ if (options.initialPageview) {
313
+ analytics.page().catch(console.error)
314
+ }
315
+
316
+ await flushFinalBuffer(analytics, preInitBuffer)
317
+
318
+ return [analytics, ctx]
319
+ }
320
+
321
+ /**
322
+ * The public browser interface for Customer.io Data Pipelines
323
+ *
324
+ * @example
325
+ * ```ts
326
+ * export const analytics = new AnalyticsBrowser()
327
+ * analytics.load({ writeKey: 'foo' })
328
+ */
329
+ export class AnalyticsBrowser extends AnalyticsBuffered {
330
+ private _resolveLoadStart: (
331
+ settings: AnalyticsBrowserSettings,
332
+ options: InitOptions
333
+ ) => void
334
+
335
+ constructor() {
336
+ const { promise: loadStart, resolve: resolveLoadStart } =
337
+ createDeferred<Parameters<AnalyticsBrowser['load']>>()
338
+
339
+ super((buffer) =>
340
+ loadStart.then(([settings, options]) =>
341
+ loadAnalytics(settings, options, buffer)
342
+ )
343
+ )
344
+
345
+ this._resolveLoadStart = (settings, options) =>
346
+ resolveLoadStart([settings, options])
347
+ }
348
+
349
+ /**
350
+ * Fully initialize an analytics instance, including:
351
+ *
352
+ * * Fetching settings from the CDN (by default).
353
+ * * Fetching all remote destinations configured by the user (if applicable).
354
+ * * Flushing buffered analytics events.
355
+ * * Loading all middleware.
356
+ *
357
+ * Note:️ This method should only be called *once* in your application.
358
+ *
359
+ * @example
360
+ * ```ts
361
+ * export const analytics = new AnalyticsBrowser()
362
+ * analytics.load({ writeKey: 'foo' })
363
+ * ```
364
+ */
365
+ load(
366
+ settings: AnalyticsBrowserSettings,
367
+ options: InitOptions = {}
368
+ ): AnalyticsBrowser {
369
+ this._resolveLoadStart(settings, options)
370
+ return this
371
+ }
372
+
373
+ /**
374
+ * Instantiates an object exposing Analytics methods.
375
+ *
376
+ * @example
377
+ * ```ts
378
+ * const ajs = AnalyticsBrowser.load({ writeKey: '<YOUR_WRITE_KEY>' })
379
+ *
380
+ * ajs.track("foo")
381
+ * ...
382
+ * ```
383
+ */
384
+ static load(
385
+ settings: AnalyticsBrowserSettings,
386
+ options: InitOptions = {}
387
+ ): AnalyticsBrowser {
388
+ return new AnalyticsBrowser().load(settings, options)
389
+ }
390
+
391
+ static standalone(
392
+ writeKey: string,
393
+ options?: InitOptions
394
+ ): Promise<Analytics> {
395
+ return AnalyticsBrowser.load({ writeKey }, options).then((res) => res[0])
396
+ }
397
+ }
@@ -0,0 +1,74 @@
1
+ import { Analytics, InitOptions } from '../core/analytics'
2
+ import { AnalyticsBrowser } from '.'
3
+ import { embeddedWriteKey } from '../lib/embedded-write-key'
4
+
5
+ export interface AnalyticsSnippet extends AnalyticsStandalone {
6
+ load: (writeKey: string, options?: InitOptions) => void
7
+ }
8
+
9
+ export interface AnalyticsStandalone extends Analytics {
10
+ _loadOptions?: InitOptions
11
+ _writeKey?: string
12
+ _cdn?: string
13
+ }
14
+
15
+ declare global {
16
+ interface Window {
17
+ analytics: AnalyticsSnippet
18
+ }
19
+ }
20
+
21
+ function getWriteKey(): string | undefined {
22
+ if (embeddedWriteKey()) {
23
+ return embeddedWriteKey()
24
+ }
25
+
26
+ if (window.analytics._writeKey) {
27
+ return window.analytics._writeKey
28
+ }
29
+
30
+ const regex = /http.*\/analytics\.js\/v1\/([^/]*)(\/platform)?\/analytics.*/
31
+ const scripts = Array.prototype.slice.call(
32
+ document.querySelectorAll('script')
33
+ )
34
+ let writeKey: string | undefined = undefined
35
+
36
+ for (const s of scripts) {
37
+ const src = s.getAttribute('src') ?? ''
38
+ const result = regex.exec(src)
39
+
40
+ if (result && result[1]) {
41
+ writeKey = result[1]
42
+ break
43
+ }
44
+ }
45
+
46
+ if (!writeKey && document.currentScript) {
47
+ const script = document.currentScript as HTMLScriptElement
48
+ const src = script.src
49
+
50
+ const result = regex.exec(src)
51
+
52
+ if (result && result[1]) {
53
+ writeKey = result[1]
54
+ }
55
+ }
56
+
57
+ return writeKey
58
+ }
59
+
60
+ export async function install(): Promise<void> {
61
+ const writeKey = getWriteKey()
62
+ const options = window.analytics?._loadOptions ?? {}
63
+ if (!writeKey) {
64
+ console.error(
65
+ 'Failed to load Write Key. Make sure to use the latest version of the snippet, which can be found in your source settings.'
66
+ )
67
+ return
68
+ }
69
+
70
+ window.analytics = (await AnalyticsBrowser.standalone(
71
+ writeKey,
72
+ options
73
+ )) as AnalyticsSnippet
74
+ }
@@ -0,0 +1,78 @@
1
+ /* eslint-disable @typescript-eslint/no-floating-promises */
2
+ import { getCDN, setGlobalCDNUrl } from '../lib/parse-cdn'
3
+ import { setVersionType } from '../plugins/customerio/normalize'
4
+
5
+ if (process.env.ASSET_PATH) {
6
+ if (process.env.ASSET_PATH === '/dist/umd/') {
7
+ // @ts-ignore
8
+ __webpack_public_path__ = '/dist/umd/'
9
+ } else {
10
+ const cdn = getCDN()
11
+ setGlobalCDNUrl(cdn)
12
+
13
+ // @ts-ignore
14
+ __webpack_public_path__ = cdn
15
+ ? cdn + '/v1/analytics-js/'
16
+ : 'https://cdp.customer.io/v1/analytics-js/'
17
+ }
18
+ }
19
+
20
+ setVersionType('web')
21
+
22
+ import { install } from './standalone-analytics'
23
+ import '../lib/csp-detection'
24
+ import { shouldPolyfill } from '../lib/browser-polyfill'
25
+ import { RemoteMetrics } from '../core/stats/remote-metrics'
26
+ import { embeddedWriteKey } from '../lib/embedded-write-key'
27
+ import { onCSPError } from '../lib/csp-detection'
28
+
29
+ function onError(err?: unknown) {
30
+ console.error('[analytics.js]', 'Failed to load Analytics.js', err)
31
+
32
+ new RemoteMetrics().increment('analytics_js.invoke.error', [
33
+ 'type:initialization',
34
+ ...(err instanceof Error
35
+ ? [`message:${err?.message}`, `name:${err?.name}`]
36
+ : []),
37
+ `wk:${embeddedWriteKey()}`,
38
+ ])
39
+ }
40
+
41
+ document.addEventListener('securitypolicyviolation', (e) => {
42
+ onCSPError(e).catch(console.error)
43
+ })
44
+
45
+ /**
46
+ * Attempts to run a promise and catch both sync and async errors.
47
+ **/
48
+ async function attempt<T>(promise: () => Promise<T>) {
49
+ try {
50
+ const result = await promise()
51
+ return result
52
+ } catch (err) {
53
+ onError(err)
54
+ }
55
+ }
56
+
57
+ if (shouldPolyfill()) {
58
+ // load polyfills in order to get AJS to work with old browsers
59
+ const script = document.createElement('script')
60
+ script.setAttribute(
61
+ 'src',
62
+ 'https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js'
63
+ )
64
+
65
+ if (document.readyState === 'loading') {
66
+ document.addEventListener('DOMContentLoaded', () =>
67
+ document.body.appendChild(script)
68
+ )
69
+ } else {
70
+ document.body.appendChild(script)
71
+ }
72
+
73
+ script.onload = function (): void {
74
+ attempt(install)
75
+ }
76
+ } else {
77
+ attempt(install)
78
+ }