@customerio/cdp-analytics-browser 0.0.0-test-oidc

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 (561) hide show
  1. package/LICENSE.MD +22 -0
  2. package/README.md +36 -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 +334 -0
  6. package/dist/cjs/browser/index.js.map +1 -0
  7. package/dist/cjs/browser/standalone-analytics.js +62 -0
  8. package/dist/cjs/browser/standalone-analytics.js.map +1 -0
  9. package/dist/cjs/browser/standalone-interface.js +3 -0
  10. package/dist/cjs/browser/standalone-interface.js.map +1 -0
  11. package/dist/cjs/browser/standalone.js +90 -0
  12. package/dist/cjs/browser/standalone.js.map +1 -0
  13. package/dist/cjs/core/analytics/index.js +545 -0
  14. package/dist/cjs/core/analytics/index.js.map +1 -0
  15. package/dist/cjs/core/analytics/interfaces.js +3 -0
  16. package/dist/cjs/core/analytics/interfaces.js.map +1 -0
  17. package/dist/cjs/core/arguments-resolver/index.js +106 -0
  18. package/dist/cjs/core/arguments-resolver/index.js.map +1 -0
  19. package/dist/cjs/core/auto-track.js +108 -0
  20. package/dist/cjs/core/auto-track.js.map +1 -0
  21. package/dist/cjs/core/buffer/index.js +237 -0
  22. package/dist/cjs/core/buffer/index.js.map +1 -0
  23. package/dist/cjs/core/buffer/snippet.js +32 -0
  24. package/dist/cjs/core/buffer/snippet.js.map +1 -0
  25. package/dist/cjs/core/callback/index.js +7 -0
  26. package/dist/cjs/core/callback/index.js.map +1 -0
  27. package/dist/cjs/core/connection/index.js +16 -0
  28. package/dist/cjs/core/connection/index.js.map +1 -0
  29. package/dist/cjs/core/context/index.js +19 -0
  30. package/dist/cjs/core/context/index.js.map +1 -0
  31. package/dist/cjs/core/environment/index.js +12 -0
  32. package/dist/cjs/core/environment/index.js.map +1 -0
  33. package/dist/cjs/core/events/index.js +134 -0
  34. package/dist/cjs/core/events/index.js.map +1 -0
  35. package/dist/cjs/core/events/interfaces.js +3 -0
  36. package/dist/cjs/core/events/interfaces.js.map +1 -0
  37. package/dist/cjs/core/inspector/index.js +14 -0
  38. package/dist/cjs/core/inspector/index.js.map +1 -0
  39. package/dist/cjs/core/plugin/index.js +3 -0
  40. package/dist/cjs/core/plugin/index.js.map +1 -0
  41. package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js +20 -0
  42. package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
  43. package/dist/cjs/core/query-string/index.js +48 -0
  44. package/dist/cjs/core/query-string/index.js.map +1 -0
  45. package/dist/cjs/core/query-string/pickPrefix.js +20 -0
  46. package/dist/cjs/core/query-string/pickPrefix.js.map +1 -0
  47. package/dist/cjs/core/queue/event-queue.js +15 -0
  48. package/dist/cjs/core/queue/event-queue.js.map +1 -0
  49. package/dist/cjs/core/stats/index.js +23 -0
  50. package/dist/cjs/core/stats/index.js.map +1 -0
  51. package/dist/cjs/core/stats/remote-metrics.js +107 -0
  52. package/dist/cjs/core/stats/remote-metrics.js.map +1 -0
  53. package/dist/cjs/core/user/index.js +422 -0
  54. package/dist/cjs/core/user/index.js.map +1 -0
  55. package/dist/cjs/core/user/tld.js +64 -0
  56. package/dist/cjs/core/user/tld.js.map +1 -0
  57. package/dist/cjs/generated/version.js +6 -0
  58. package/dist/cjs/generated/version.js.map +1 -0
  59. package/dist/cjs/index.js +15 -0
  60. package/dist/cjs/index.js.map +1 -0
  61. package/dist/cjs/lib/bind-all.js +17 -0
  62. package/dist/cjs/lib/bind-all.js.map +1 -0
  63. package/dist/cjs/lib/browser-polyfill.js +22 -0
  64. package/dist/cjs/lib/browser-polyfill.js.map +1 -0
  65. package/dist/cjs/lib/create-deferred.js +21 -0
  66. package/dist/cjs/lib/create-deferred.js.map +1 -0
  67. package/dist/cjs/lib/csp-detection.js +33 -0
  68. package/dist/cjs/lib/csp-detection.js.map +1 -0
  69. package/dist/cjs/lib/embedded-write-key.js +22 -0
  70. package/dist/cjs/lib/embedded-write-key.js.map +1 -0
  71. package/dist/cjs/lib/fetch.js +19 -0
  72. package/dist/cjs/lib/fetch.js.map +1 -0
  73. package/dist/cjs/lib/get-global.js +21 -0
  74. package/dist/cjs/lib/get-global.js.map +1 -0
  75. package/dist/cjs/lib/get-process-env.js +15 -0
  76. package/dist/cjs/lib/get-process-env.js.map +1 -0
  77. package/dist/cjs/lib/global-analytics-helper.js +34 -0
  78. package/dist/cjs/lib/global-analytics-helper.js.map +1 -0
  79. package/dist/cjs/lib/group-by.js +28 -0
  80. package/dist/cjs/lib/group-by.js.map +1 -0
  81. package/dist/cjs/lib/is-plan-event-enabled.js +20 -0
  82. package/dist/cjs/lib/is-plan-event-enabled.js.map +1 -0
  83. package/dist/cjs/lib/is-thenable.js +15 -0
  84. package/dist/cjs/lib/is-thenable.js.map +1 -0
  85. package/dist/cjs/lib/load-script.js +56 -0
  86. package/dist/cjs/lib/load-script.js.map +1 -0
  87. package/dist/cjs/lib/merged-options.js +31 -0
  88. package/dist/cjs/lib/merged-options.js.map +1 -0
  89. package/dist/cjs/lib/on-page-leave.js +35 -0
  90. package/dist/cjs/lib/on-page-leave.js.map +1 -0
  91. package/dist/cjs/lib/p-while.js +25 -0
  92. package/dist/cjs/lib/p-while.js.map +1 -0
  93. package/dist/cjs/lib/parse-cdn.js +86 -0
  94. package/dist/cjs/lib/parse-cdn.js.map +1 -0
  95. package/dist/cjs/lib/priority-queue/backoff.js +10 -0
  96. package/dist/cjs/lib/priority-queue/backoff.js.map +1 -0
  97. package/dist/cjs/lib/priority-queue/index.js +7 -0
  98. package/dist/cjs/lib/priority-queue/index.js.map +1 -0
  99. package/dist/cjs/lib/priority-queue/persisted.js +108 -0
  100. package/dist/cjs/lib/priority-queue/persisted.js.map +1 -0
  101. package/dist/cjs/lib/sleep.js +10 -0
  102. package/dist/cjs/lib/sleep.js.map +1 -0
  103. package/dist/cjs/lib/to-facade.js +32 -0
  104. package/dist/cjs/lib/to-facade.js.map +1 -0
  105. package/dist/cjs/node/index.js +43 -0
  106. package/dist/cjs/node/index.js.map +1 -0
  107. package/dist/cjs/node/node.browser.js +13 -0
  108. package/dist/cjs/node/node.browser.js.map +1 -0
  109. package/dist/cjs/plugins/ajs-destination/index.js +345 -0
  110. package/dist/cjs/plugins/ajs-destination/index.js.map +1 -0
  111. package/dist/cjs/plugins/ajs-destination/loader.js +110 -0
  112. package/dist/cjs/plugins/ajs-destination/loader.js.map +1 -0
  113. package/dist/cjs/plugins/ajs-destination/types.js +3 -0
  114. package/dist/cjs/plugins/ajs-destination/types.js.map +1 -0
  115. package/dist/cjs/plugins/ajs-destination/utils.js +23 -0
  116. package/dist/cjs/plugins/ajs-destination/utils.js.map +1 -0
  117. package/dist/cjs/plugins/analytics-node/index.js +65 -0
  118. package/dist/cjs/plugins/analytics-node/index.js.map +1 -0
  119. package/dist/cjs/plugins/customerio/batched-dispatcher.js +102 -0
  120. package/dist/cjs/plugins/customerio/batched-dispatcher.js.map +1 -0
  121. package/dist/cjs/plugins/customerio/fetch-dispatcher.js +18 -0
  122. package/dist/cjs/plugins/customerio/fetch-dispatcher.js.map +1 -0
  123. package/dist/cjs/plugins/customerio/index.js +98 -0
  124. package/dist/cjs/plugins/customerio/index.js.map +1 -0
  125. package/dist/cjs/plugins/customerio/normalize.js +176 -0
  126. package/dist/cjs/plugins/customerio/normalize.js.map +1 -0
  127. package/dist/cjs/plugins/customerio/schedule-flush.js +76 -0
  128. package/dist/cjs/plugins/customerio/schedule-flush.js.map +1 -0
  129. package/dist/cjs/plugins/in-app-plugin/events.js +41 -0
  130. package/dist/cjs/plugins/in-app-plugin/events.js.map +1 -0
  131. package/dist/cjs/plugins/in-app-plugin/index.js +237 -0
  132. package/dist/cjs/plugins/in-app-plugin/index.js.map +1 -0
  133. package/dist/cjs/plugins/legacy-video-plugins/index.js +25 -0
  134. package/dist/cjs/plugins/legacy-video-plugins/index.js.map +1 -0
  135. package/dist/cjs/plugins/middleware/index.js +124 -0
  136. package/dist/cjs/plugins/middleware/index.js.map +1 -0
  137. package/dist/cjs/plugins/page-enrichment/index.js +98 -0
  138. package/dist/cjs/plugins/page-enrichment/index.js.map +1 -0
  139. package/dist/cjs/plugins/remote-loader/index.js +211 -0
  140. package/dist/cjs/plugins/remote-loader/index.js.map +1 -0
  141. package/dist/cjs/plugins/remote-middleware/index.js +70 -0
  142. package/dist/cjs/plugins/remote-middleware/index.js.map +1 -0
  143. package/dist/cjs/plugins/routing-middleware/index.js +27 -0
  144. package/dist/cjs/plugins/routing-middleware/index.js.map +1 -0
  145. package/dist/cjs/plugins/schema-filter/index.js +67 -0
  146. package/dist/cjs/plugins/schema-filter/index.js.map +1 -0
  147. package/dist/cjs/plugins/validation/index.js +70 -0
  148. package/dist/cjs/plugins/validation/index.js.map +1 -0
  149. package/dist/cjs/vendor/tsub/tsub.js +645 -0
  150. package/dist/cjs/vendor/tsub/tsub.js.map +1 -0
  151. package/dist/cjs/vendor/tsub/types.js +3 -0
  152. package/dist/cjs/vendor/tsub/types.js.map +1 -0
  153. package/dist/pkg/browser/browser-umd.js +17 -0
  154. package/dist/pkg/browser/browser-umd.js.map +1 -0
  155. package/dist/pkg/browser/index.js +330 -0
  156. package/dist/pkg/browser/index.js.map +1 -0
  157. package/dist/pkg/browser/standalone-analytics.js +58 -0
  158. package/dist/pkg/browser/standalone-analytics.js.map +1 -0
  159. package/dist/pkg/browser/standalone-interface.js +2 -0
  160. package/dist/pkg/browser/standalone-interface.js.map +1 -0
  161. package/dist/pkg/browser/standalone.js +88 -0
  162. package/dist/pkg/browser/standalone.js.map +1 -0
  163. package/dist/pkg/core/analytics/index.js +542 -0
  164. package/dist/pkg/core/analytics/index.js.map +1 -0
  165. package/dist/pkg/core/analytics/interfaces.js +2 -0
  166. package/dist/pkg/core/analytics/interfaces.js.map +1 -0
  167. package/dist/pkg/core/arguments-resolver/index.js +99 -0
  168. package/dist/pkg/core/arguments-resolver/index.js.map +1 -0
  169. package/dist/pkg/core/auto-track.js +103 -0
  170. package/dist/pkg/core/auto-track.js.map +1 -0
  171. package/dist/pkg/core/buffer/index.js +231 -0
  172. package/dist/pkg/core/buffer/index.js.map +1 -0
  173. package/dist/pkg/core/buffer/snippet.js +27 -0
  174. package/dist/pkg/core/buffer/snippet.js.map +1 -0
  175. package/dist/pkg/core/callback/index.js +2 -0
  176. package/dist/pkg/core/callback/index.js.map +1 -0
  177. package/dist/pkg/core/connection/index.js +11 -0
  178. package/dist/pkg/core/connection/index.js.map +1 -0
  179. package/dist/pkg/core/context/index.js +16 -0
  180. package/dist/pkg/core/context/index.js.map +1 -0
  181. package/dist/pkg/core/environment/index.js +7 -0
  182. package/dist/pkg/core/environment/index.js.map +1 -0
  183. package/dist/pkg/core/events/index.js +131 -0
  184. package/dist/pkg/core/events/index.js.map +1 -0
  185. package/dist/pkg/core/events/interfaces.js +2 -0
  186. package/dist/pkg/core/events/interfaces.js.map +1 -0
  187. package/dist/pkg/core/inspector/index.js +10 -0
  188. package/dist/pkg/core/inspector/index.js.map +1 -0
  189. package/dist/pkg/core/plugin/index.js +2 -0
  190. package/dist/pkg/core/plugin/index.js.map +1 -0
  191. package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js +16 -0
  192. package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
  193. package/dist/pkg/core/query-string/index.js +44 -0
  194. package/dist/pkg/core/query-string/index.js.map +1 -0
  195. package/dist/pkg/core/query-string/pickPrefix.js +16 -0
  196. package/dist/pkg/core/query-string/pickPrefix.js.map +1 -0
  197. package/dist/pkg/core/queue/event-queue.js +12 -0
  198. package/dist/pkg/core/queue/event-queue.js.map +1 -0
  199. package/dist/pkg/core/stats/index.js +20 -0
  200. package/dist/pkg/core/stats/index.js.map +1 -0
  201. package/dist/pkg/core/stats/remote-metrics.js +104 -0
  202. package/dist/pkg/core/stats/remote-metrics.js.map +1 -0
  203. package/dist/pkg/core/user/index.js +418 -0
  204. package/dist/pkg/core/user/index.js.map +1 -0
  205. package/dist/pkg/core/user/tld.js +59 -0
  206. package/dist/pkg/core/user/tld.js.map +1 -0
  207. package/dist/pkg/generated/version.js +3 -0
  208. package/dist/pkg/generated/version.js.map +1 -0
  209. package/dist/pkg/index.js +10 -0
  210. package/dist/pkg/index.js.map +1 -0
  211. package/dist/pkg/lib/bind-all.js +14 -0
  212. package/dist/pkg/lib/bind-all.js.map +1 -0
  213. package/dist/pkg/lib/browser-polyfill.js +18 -0
  214. package/dist/pkg/lib/browser-polyfill.js.map +1 -0
  215. package/dist/pkg/lib/create-deferred.js +17 -0
  216. package/dist/pkg/lib/create-deferred.js.map +1 -0
  217. package/dist/pkg/lib/csp-detection.js +29 -0
  218. package/dist/pkg/lib/csp-detection.js.map +1 -0
  219. package/dist/pkg/lib/embedded-write-key.js +18 -0
  220. package/dist/pkg/lib/embedded-write-key.js.map +1 -0
  221. package/dist/pkg/lib/fetch.js +14 -0
  222. package/dist/pkg/lib/fetch.js.map +1 -0
  223. package/dist/pkg/lib/get-global.js +17 -0
  224. package/dist/pkg/lib/get-global.js.map +1 -0
  225. package/dist/pkg/lib/get-process-env.js +11 -0
  226. package/dist/pkg/lib/get-process-env.js.map +1 -0
  227. package/dist/pkg/lib/global-analytics-helper.js +28 -0
  228. package/dist/pkg/lib/global-analytics-helper.js.map +1 -0
  229. package/dist/pkg/lib/group-by.js +24 -0
  230. package/dist/pkg/lib/group-by.js.map +1 -0
  231. package/dist/pkg/lib/is-plan-event-enabled.js +16 -0
  232. package/dist/pkg/lib/is-plan-event-enabled.js.map +1 -0
  233. package/dist/pkg/lib/is-thenable.js +11 -0
  234. package/dist/pkg/lib/is-thenable.js.map +1 -0
  235. package/dist/pkg/lib/load-script.js +51 -0
  236. package/dist/pkg/lib/load-script.js.map +1 -0
  237. package/dist/pkg/lib/merged-options.js +27 -0
  238. package/dist/pkg/lib/merged-options.js.map +1 -0
  239. package/dist/pkg/lib/on-page-leave.js +31 -0
  240. package/dist/pkg/lib/on-page-leave.js.map +1 -0
  241. package/dist/pkg/lib/p-while.js +21 -0
  242. package/dist/pkg/lib/p-while.js.map +1 -0
  243. package/dist/pkg/lib/parse-cdn.js +79 -0
  244. package/dist/pkg/lib/parse-cdn.js.map +1 -0
  245. package/dist/pkg/lib/priority-queue/backoff.js +6 -0
  246. package/dist/pkg/lib/priority-queue/backoff.js.map +1 -0
  247. package/dist/pkg/lib/priority-queue/index.js +3 -0
  248. package/dist/pkg/lib/priority-queue/index.js.map +1 -0
  249. package/dist/pkg/lib/priority-queue/persisted.js +105 -0
  250. package/dist/pkg/lib/priority-queue/persisted.js.map +1 -0
  251. package/dist/pkg/lib/sleep.js +6 -0
  252. package/dist/pkg/lib/sleep.js.map +1 -0
  253. package/dist/pkg/lib/to-facade.js +28 -0
  254. package/dist/pkg/lib/to-facade.js.map +1 -0
  255. package/dist/pkg/node/index.js +40 -0
  256. package/dist/pkg/node/index.js.map +1 -0
  257. package/dist/pkg/node/node.browser.js +10 -0
  258. package/dist/pkg/node/node.browser.js.map +1 -0
  259. package/dist/pkg/plugins/ajs-destination/index.js +341 -0
  260. package/dist/pkg/plugins/ajs-destination/index.js.map +1 -0
  261. package/dist/pkg/plugins/ajs-destination/loader.js +102 -0
  262. package/dist/pkg/plugins/ajs-destination/loader.js.map +1 -0
  263. package/dist/pkg/plugins/ajs-destination/types.js +2 -0
  264. package/dist/pkg/plugins/ajs-destination/types.js.map +1 -0
  265. package/dist/pkg/plugins/ajs-destination/utils.js +18 -0
  266. package/dist/pkg/plugins/ajs-destination/utils.js.map +1 -0
  267. package/dist/pkg/plugins/analytics-node/index.js +60 -0
  268. package/dist/pkg/plugins/analytics-node/index.js.map +1 -0
  269. package/dist/pkg/plugins/customerio/batched-dispatcher.js +99 -0
  270. package/dist/pkg/plugins/customerio/batched-dispatcher.js.map +1 -0
  271. package/dist/pkg/plugins/customerio/fetch-dispatcher.js +15 -0
  272. package/dist/pkg/plugins/customerio/fetch-dispatcher.js.map +1 -0
  273. package/dist/pkg/plugins/customerio/index.js +94 -0
  274. package/dist/pkg/plugins/customerio/index.js.map +1 -0
  275. package/dist/pkg/plugins/customerio/normalize.js +168 -0
  276. package/dist/pkg/plugins/customerio/normalize.js.map +1 -0
  277. package/dist/pkg/plugins/customerio/schedule-flush.js +72 -0
  278. package/dist/pkg/plugins/customerio/schedule-flush.js.map +1 -0
  279. package/dist/pkg/plugins/in-app-plugin/events.js +36 -0
  280. package/dist/pkg/plugins/in-app-plugin/events.js.map +1 -0
  281. package/dist/pkg/plugins/in-app-plugin/index.js +233 -0
  282. package/dist/pkg/plugins/in-app-plugin/index.js.map +1 -0
  283. package/dist/pkg/plugins/legacy-video-plugins/index.js +25 -0
  284. package/dist/pkg/plugins/legacy-video-plugins/index.js.map +1 -0
  285. package/dist/pkg/plugins/middleware/index.js +119 -0
  286. package/dist/pkg/plugins/middleware/index.js.map +1 -0
  287. package/dist/pkg/plugins/page-enrichment/index.js +93 -0
  288. package/dist/pkg/plugins/page-enrichment/index.js.map +1 -0
  289. package/dist/pkg/plugins/remote-loader/index.js +207 -0
  290. package/dist/pkg/plugins/remote-loader/index.js.map +1 -0
  291. package/dist/pkg/plugins/remote-middleware/index.js +66 -0
  292. package/dist/pkg/plugins/remote-middleware/index.js.map +1 -0
  293. package/dist/pkg/plugins/routing-middleware/index.js +22 -0
  294. package/dist/pkg/plugins/routing-middleware/index.js.map +1 -0
  295. package/dist/pkg/plugins/schema-filter/index.js +63 -0
  296. package/dist/pkg/plugins/schema-filter/index.js.map +1 -0
  297. package/dist/pkg/plugins/validation/index.js +63 -0
  298. package/dist/pkg/plugins/validation/index.js.map +1 -0
  299. package/dist/pkg/vendor/tsub/tsub.js +645 -0
  300. package/dist/pkg/vendor/tsub/tsub.js.map +1 -0
  301. package/dist/pkg/vendor/tsub/types.js +2 -0
  302. package/dist/pkg/vendor/tsub/types.js.map +1 -0
  303. package/dist/types/browser/browser-umd.d.ts +2 -0
  304. package/dist/types/browser/browser-umd.d.ts.map +1 -0
  305. package/dist/types/browser/index.d.ts +86 -0
  306. package/dist/types/browser/index.d.ts.map +1 -0
  307. package/dist/types/browser/standalone-analytics.d.ts +2 -0
  308. package/dist/types/browser/standalone-analytics.d.ts.map +1 -0
  309. package/dist/types/browser/standalone-interface.d.ts +10 -0
  310. package/dist/types/browser/standalone-interface.d.ts.map +1 -0
  311. package/dist/types/browser/standalone.d.ts +2 -0
  312. package/dist/types/browser/standalone.d.ts.map +1 -0
  313. package/dist/types/core/analytics/index.d.ts +121 -0
  314. package/dist/types/core/analytics/index.d.ts.map +1 -0
  315. package/dist/types/core/analytics/interfaces.d.ts +77 -0
  316. package/dist/types/core/analytics/interfaces.d.ts.map +1 -0
  317. package/dist/types/core/arguments-resolver/index.d.ts +34 -0
  318. package/dist/types/core/arguments-resolver/index.d.ts.map +1 -0
  319. package/dist/types/core/auto-track.d.ts +10 -0
  320. package/dist/types/core/auto-track.d.ts.map +1 -0
  321. package/dist/types/core/buffer/index.d.ts +86 -0
  322. package/dist/types/core/buffer/index.d.ts.map +1 -0
  323. package/dist/types/core/buffer/snippet.d.ts +15 -0
  324. package/dist/types/core/buffer/snippet.d.ts.map +1 -0
  325. package/dist/types/core/callback/index.d.ts +2 -0
  326. package/dist/types/core/callback/index.d.ts.map +1 -0
  327. package/dist/types/core/connection/index.d.ts +3 -0
  328. package/dist/types/core/connection/index.d.ts.map +1 -0
  329. package/dist/types/core/context/index.d.ts +9 -0
  330. package/dist/types/core/context/index.d.ts.map +1 -0
  331. package/dist/types/core/environment/index.d.ts +3 -0
  332. package/dist/types/core/environment/index.d.ts.map +1 -0
  333. package/dist/types/core/events/index.d.ts +21 -0
  334. package/dist/types/core/events/index.d.ts.map +1 -0
  335. package/dist/types/core/events/interfaces.d.ts +9 -0
  336. package/dist/types/core/events/interfaces.d.ts.map +1 -0
  337. package/dist/types/core/inspector/index.d.ts +3 -0
  338. package/dist/types/core/inspector/index.d.ts.map +1 -0
  339. package/dist/types/core/plugin/index.d.ts +11 -0
  340. package/dist/types/core/plugin/index.d.ts.map +1 -0
  341. package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts +9 -0
  342. package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts.map +1 -0
  343. package/dist/types/core/query-string/index.d.ts +7 -0
  344. package/dist/types/core/query-string/index.d.ts.map +1 -0
  345. package/dist/types/core/query-string/pickPrefix.d.ts +9 -0
  346. package/dist/types/core/query-string/pickPrefix.d.ts.map +1 -0
  347. package/dist/types/core/queue/event-queue.d.ts +8 -0
  348. package/dist/types/core/queue/event-queue.d.ts.map +1 -0
  349. package/dist/types/core/stats/index.d.ts +7 -0
  350. package/dist/types/core/stats/index.d.ts.map +1 -0
  351. package/dist/types/core/stats/remote-metrics.d.ts +29 -0
  352. package/dist/types/core/stats/remote-metrics.d.ts.map +1 -0
  353. package/dist/types/core/user/index.d.ts +128 -0
  354. package/dist/types/core/user/index.d.ts.map +1 -0
  355. package/dist/types/core/user/tld.d.ts +2 -0
  356. package/dist/types/core/user/tld.d.ts.map +1 -0
  357. package/dist/types/generated/version.d.ts +2 -0
  358. package/dist/types/generated/version.d.ts.map +1 -0
  359. package/dist/types/index.d.ts +11 -0
  360. package/dist/types/index.d.ts.map +1 -0
  361. package/dist/types/lib/bind-all.d.ts +4 -0
  362. package/dist/types/lib/bind-all.d.ts.map +1 -0
  363. package/dist/types/lib/browser-polyfill.d.ts +2 -0
  364. package/dist/types/lib/browser-polyfill.d.ts.map +1 -0
  365. package/dist/types/lib/create-deferred.d.ts +9 -0
  366. package/dist/types/lib/create-deferred.d.ts.map +1 -0
  367. package/dist/types/lib/csp-detection.d.ts +4 -0
  368. package/dist/types/lib/csp-detection.d.ts.map +1 -0
  369. package/dist/types/lib/embedded-write-key.d.ts +7 -0
  370. package/dist/types/lib/embedded-write-key.d.ts.map +1 -0
  371. package/dist/types/lib/fetch.d.ts +5 -0
  372. package/dist/types/lib/fetch.d.ts.map +1 -0
  373. package/dist/types/lib/get-global.d.ts +2 -0
  374. package/dist/types/lib/get-global.d.ts.map +1 -0
  375. package/dist/types/lib/get-process-env.d.ts +8 -0
  376. package/dist/types/lib/get-process-env.d.ts.map +1 -0
  377. package/dist/types/lib/global-analytics-helper.d.ts +18 -0
  378. package/dist/types/lib/global-analytics-helper.d.ts.map +1 -0
  379. package/dist/types/lib/group-by.d.ts +4 -0
  380. package/dist/types/lib/group-by.d.ts.map +1 -0
  381. package/dist/types/lib/is-plan-event-enabled.d.ts +9 -0
  382. package/dist/types/lib/is-plan-event-enabled.d.ts.map +1 -0
  383. package/dist/types/lib/is-thenable.d.ts +6 -0
  384. package/dist/types/lib/is-thenable.d.ts.map +1 -0
  385. package/dist/types/lib/load-script.d.ts +3 -0
  386. package/dist/types/lib/load-script.d.ts.map +1 -0
  387. package/dist/types/lib/merged-options.d.ts +13 -0
  388. package/dist/types/lib/merged-options.d.ts.map +1 -0
  389. package/dist/types/lib/on-page-leave.d.ts +11 -0
  390. package/dist/types/lib/on-page-leave.d.ts.map +1 -0
  391. package/dist/types/lib/p-while.d.ts +2 -0
  392. package/dist/types/lib/p-while.d.ts.map +1 -0
  393. package/dist/types/lib/parse-cdn.d.ts +10 -0
  394. package/dist/types/lib/parse-cdn.d.ts.map +1 -0
  395. package/dist/types/lib/priority-queue/backoff.d.ts +13 -0
  396. package/dist/types/lib/priority-queue/backoff.d.ts.map +1 -0
  397. package/dist/types/lib/priority-queue/index.d.ts +3 -0
  398. package/dist/types/lib/priority-queue/index.d.ts.map +1 -0
  399. package/dist/types/lib/priority-queue/persisted.d.ts +6 -0
  400. package/dist/types/lib/priority-queue/persisted.d.ts.map +1 -0
  401. package/dist/types/lib/sleep.d.ts +2 -0
  402. package/dist/types/lib/sleep.d.ts.map +1 -0
  403. package/dist/types/lib/to-facade.d.ts +7 -0
  404. package/dist/types/lib/to-facade.d.ts.map +1 -0
  405. package/dist/types/node/index.d.ts +8 -0
  406. package/dist/types/node/index.d.ts.map +1 -0
  407. package/dist/types/node/node.browser.d.ts +4 -0
  408. package/dist/types/node/node.browser.d.ts.map +1 -0
  409. package/dist/types/plugins/ajs-destination/index.d.ts +42 -0
  410. package/dist/types/plugins/ajs-destination/index.d.ts.map +1 -0
  411. package/dist/types/plugins/ajs-destination/loader.d.ts +12 -0
  412. package/dist/types/plugins/ajs-destination/loader.d.ts.map +1 -0
  413. package/dist/types/plugins/ajs-destination/types.d.ts +36 -0
  414. package/dist/types/plugins/ajs-destination/types.d.ts.map +1 -0
  415. package/dist/types/plugins/ajs-destination/utils.d.ts +5 -0
  416. package/dist/types/plugins/ajs-destination/utils.d.ts.map +1 -0
  417. package/dist/types/plugins/analytics-node/index.d.ts +12 -0
  418. package/dist/types/plugins/analytics-node/index.d.ts.map +1 -0
  419. package/dist/types/plugins/customerio/batched-dispatcher.d.ts +8 -0
  420. package/dist/types/plugins/customerio/batched-dispatcher.d.ts.map +1 -0
  421. package/dist/types/plugins/customerio/fetch-dispatcher.d.ts +8 -0
  422. package/dist/types/plugins/customerio/fetch-dispatcher.d.ts.map +1 -0
  423. package/dist/types/plugins/customerio/index.d.ts +26 -0
  424. package/dist/types/plugins/customerio/index.d.ts.map +1 -0
  425. package/dist/types/plugins/customerio/normalize.d.ts +12 -0
  426. package/dist/types/plugins/customerio/normalize.d.ts.map +1 -0
  427. package/dist/types/plugins/customerio/schedule-flush.d.ts +5 -0
  428. package/dist/types/plugins/customerio/schedule-flush.d.ts.map +1 -0
  429. package/dist/types/plugins/in-app-plugin/events.d.ts +19 -0
  430. package/dist/types/plugins/in-app-plugin/events.d.ts.map +1 -0
  431. package/dist/types/plugins/in-app-plugin/index.d.ts +12 -0
  432. package/dist/types/plugins/in-app-plugin/index.d.ts.map +1 -0
  433. package/dist/types/plugins/legacy-video-plugins/index.d.ts +3 -0
  434. package/dist/types/plugins/legacy-video-plugins/index.d.ts.map +1 -0
  435. package/dist/types/plugins/middleware/index.d.ts +18 -0
  436. package/dist/types/plugins/middleware/index.d.ts.map +1 -0
  437. package/dist/types/plugins/page-enrichment/index.d.ts +21 -0
  438. package/dist/types/plugins/page-enrichment/index.d.ts.map +1 -0
  439. package/dist/types/plugins/remote-loader/index.d.ts +43 -0
  440. package/dist/types/plugins/remote-loader/index.d.ts.map +1 -0
  441. package/dist/types/plugins/remote-middleware/index.d.ts +5 -0
  442. package/dist/types/plugins/remote-middleware/index.d.ts.map +1 -0
  443. package/dist/types/plugins/routing-middleware/index.d.ts +13 -0
  444. package/dist/types/plugins/routing-middleware/index.d.ts.map +1 -0
  445. package/dist/types/plugins/schema-filter/index.d.ts +5 -0
  446. package/dist/types/plugins/schema-filter/index.d.ts.map +1 -0
  447. package/dist/types/plugins/validation/index.d.ts +7 -0
  448. package/dist/types/plugins/validation/index.d.ts.map +1 -0
  449. package/dist/types/vendor/tsub/tsub.d.ts +1 -0
  450. package/dist/types/vendor/tsub/tsub.d.ts.map +1 -0
  451. package/dist/types/vendor/tsub/types.d.ts +20 -0
  452. package/dist/types/vendor/tsub/types.d.ts.map +1 -0
  453. package/dist/umd/407.js +1 -0
  454. package/dist/umd/407.js.gz +0 -0
  455. package/dist/umd/852.js +1 -0
  456. package/dist/umd/852.js.gz +0 -0
  457. package/dist/umd/ajs-destination.js +1 -0
  458. package/dist/umd/ajs-destination.js.gz +0 -0
  459. package/dist/umd/auto-track.js +1 -0
  460. package/dist/umd/auto-track.js.gz +0 -0
  461. package/dist/umd/inAppPlugin.js +1 -0
  462. package/dist/umd/inAppPlugin.js.gz +0 -0
  463. package/dist/umd/index.js +1 -0
  464. package/dist/umd/index.js.gz +0 -0
  465. package/dist/umd/legacyVideos.js +1 -0
  466. package/dist/umd/legacyVideos.js.gz +0 -0
  467. package/dist/umd/queryString.js +1 -0
  468. package/dist/umd/queryString.js.gz +0 -0
  469. package/dist/umd/remoteMiddleware.js +1 -0
  470. package/dist/umd/remoteMiddleware.js.gz +0 -0
  471. package/dist/umd/schemaFilter.js +1 -0
  472. package/dist/umd/schemaFilter.js.gz +0 -0
  473. package/dist/umd/standalone.js +1 -0
  474. package/dist/umd/standalone.js.gz +0 -0
  475. package/dist/umd/tsub-middleware.js +1 -0
  476. package/dist/umd/tsub-middleware.js.gz +0 -0
  477. package/package.json +106 -0
  478. package/src/browser/browser-umd.ts +19 -0
  479. package/src/browser/index.ts +423 -0
  480. package/src/browser/standalone-analytics.ts +62 -0
  481. package/src/browser/standalone-interface.ts +11 -0
  482. package/src/browser/standalone.ts +90 -0
  483. package/src/core/analytics/index.ts +573 -0
  484. package/src/core/analytics/interfaces.ts +100 -0
  485. package/src/core/arguments-resolver/index.ts +166 -0
  486. package/src/core/auto-track.ts +152 -0
  487. package/src/core/buffer/index.ts +289 -0
  488. package/src/core/buffer/snippet.ts +46 -0
  489. package/src/core/callback/index.ts +1 -0
  490. package/src/core/connection/index.ts +13 -0
  491. package/src/core/context/index.ts +21 -0
  492. package/src/core/environment/index.ts +7 -0
  493. package/src/core/events/index.ts +254 -0
  494. package/src/core/events/interfaces.ts +36 -0
  495. package/src/core/inspector/index.ts +14 -0
  496. package/src/core/plugin/index.ts +12 -0
  497. package/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
  498. package/src/core/query-string/index.ts +64 -0
  499. package/src/core/query-string/pickPrefix.ts +20 -0
  500. package/src/core/queue/event-queue.ts +11 -0
  501. package/src/core/stats/index.ts +15 -0
  502. package/src/core/stats/remote-metrics.ts +137 -0
  503. package/src/core/user/index.ts +534 -0
  504. package/src/core/user/tld.ts +65 -0
  505. package/src/generated/version.ts +2 -0
  506. package/src/index.ts +12 -0
  507. package/src/lib/bind-all.ts +19 -0
  508. package/src/lib/browser-polyfill.ts +23 -0
  509. package/src/lib/create-deferred.ts +16 -0
  510. package/src/lib/csp-detection.ts +26 -0
  511. package/src/lib/embedded-write-key.ts +24 -0
  512. package/src/lib/fetch.ts +10 -0
  513. package/src/lib/get-global.ts +16 -0
  514. package/src/lib/get-process-env.ts +11 -0
  515. package/src/lib/global-analytics-helper.ts +31 -0
  516. package/src/lib/group-by.ts +30 -0
  517. package/src/lib/is-plan-event-enabled.ts +20 -0
  518. package/src/lib/is-thenable.ts +9 -0
  519. package/src/lib/load-script.ts +66 -0
  520. package/src/lib/merged-options.ts +46 -0
  521. package/src/lib/on-page-leave.ts +29 -0
  522. package/src/lib/p-while.ts +12 -0
  523. package/src/lib/parse-cdn.ts +93 -0
  524. package/src/lib/priority-queue/backoff.ts +24 -0
  525. package/src/lib/priority-queue/index.ts +6 -0
  526. package/src/lib/priority-queue/persisted.ts +127 -0
  527. package/src/lib/sleep.ts +4 -0
  528. package/src/lib/to-facade.ts +53 -0
  529. package/src/node/index.ts +36 -0
  530. package/src/node/node.browser.ts +7 -0
  531. package/src/plugins/ajs-destination/index.ts +388 -0
  532. package/src/plugins/ajs-destination/loader.ts +127 -0
  533. package/src/plugins/ajs-destination/types.ts +44 -0
  534. package/src/plugins/ajs-destination/utils.ts +34 -0
  535. package/src/plugins/analytics-node/index.ts +64 -0
  536. package/src/plugins/customerio/batched-dispatcher.ts +112 -0
  537. package/src/plugins/customerio/fetch-dispatcher.ts +24 -0
  538. package/src/plugins/customerio/index.ts +143 -0
  539. package/src/plugins/customerio/normalize.ts +223 -0
  540. package/src/plugins/customerio/schedule-flush.ts +58 -0
  541. package/src/plugins/in-app-plugin/events.ts +38 -0
  542. package/src/plugins/in-app-plugin/index.ts +241 -0
  543. package/src/plugins/legacy-video-plugins/index.ts +16 -0
  544. package/src/plugins/middleware/index.ts +131 -0
  545. package/src/plugins/page-enrichment/index.ts +127 -0
  546. package/src/plugins/remote-loader/index.ts +240 -0
  547. package/src/plugins/remote-middleware/index.ts +44 -0
  548. package/src/plugins/routing-middleware/index.ts +38 -0
  549. package/src/plugins/schema-filter/index.ts +90 -0
  550. package/src/plugins/validation/index.ts +80 -0
  551. package/src/test-helpers/browser-storage.ts +72 -0
  552. package/src/test-helpers/factories.ts +18 -0
  553. package/src/test-helpers/fetch-parse.ts +8 -0
  554. package/src/test-helpers/fixtures/cdn-settings.ts +299 -0
  555. package/src/test-helpers/fixtures/classic-destination.ts +25 -0
  556. package/src/test-helpers/fixtures/create-fetch-method.ts +24 -0
  557. package/src/test-helpers/test-writekeys.ts +5 -0
  558. package/src/test-helpers/type-assertions.ts +11 -0
  559. package/src/vendor/tsub/tsub.js.LICENSE.txt +53 -0
  560. package/src/vendor/tsub/tsub.ts +7 -0
  561. package/src/vendor/tsub/types.ts +19 -0
@@ -0,0 +1,423 @@
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
+ import { InAppPluginSettings } from '../plugins/in-app-plugin'
30
+ import { setGlobalAnalyticsKey } from '../lib/global-analytics-helper'
31
+
32
+ export interface LegacyIntegrationConfiguration {
33
+ /* @deprecated - This does not indicate browser types anymore */
34
+ type?: string
35
+
36
+ versionSettings?: {
37
+ version?: string
38
+ override?: string
39
+ componentTypes?: Array<'browser' | 'android' | 'ios' | 'server'>
40
+ }
41
+
42
+ bundlingStatus?: string
43
+
44
+ // Customer.io specific
45
+ retryQueue?: boolean
46
+
47
+ // any extra unknown settings
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ [key: string]: any
50
+ }
51
+
52
+ export interface LegacySettings {
53
+ integrations: {
54
+ [name: string]: LegacyIntegrationConfiguration
55
+ }
56
+
57
+ middlewareSettings?: {
58
+ routingRules: RoutingRule[]
59
+ }
60
+
61
+ enabledMiddleware?: Record<string, boolean>
62
+ metrics?: MetricsOptions
63
+
64
+ plan?: Plan
65
+
66
+ legacyVideoPluginsEnabled?: boolean
67
+
68
+ remotePlugins?: RemotePlugin[]
69
+ }
70
+
71
+ export interface AnalyticsBrowserSettings extends AnalyticsSettings {
72
+ /**
73
+ * The settings for the Customer.io Source.
74
+ * If provided, `AnalyticsBrowser` will not fetch remote settings
75
+ * for the source.
76
+ */
77
+ cdnSettings?: LegacySettings & Record<string, unknown>
78
+ /**
79
+ * If provided, will override the default CDN for this application.
80
+ */
81
+ cdnURL?: string
82
+ }
83
+
84
+ export function loadLegacySettings(
85
+ writeKey: string,
86
+ cdnURL?: string
87
+ ): Promise<LegacySettings> {
88
+ const baseUrl = cdnURL ?? getCDN()
89
+
90
+ return fetch(`${baseUrl}/v1/projects/${writeKey}/settings`)
91
+ .then((res) => {
92
+ if (!res.ok) {
93
+ return res.text().then((errorResponseMessage) => {
94
+ throw new Error(errorResponseMessage)
95
+ })
96
+ }
97
+ return res.json()
98
+ })
99
+ .catch((err) => {
100
+ console.error(err.message)
101
+ throw err
102
+ })
103
+ }
104
+
105
+ function hasLegacyDestinations(settings: LegacySettings): boolean {
106
+ return (
107
+ getProcessEnv().NODE_ENV !== 'test' &&
108
+ // just one integration means customerio
109
+ Object.keys(settings.integrations).length > 1
110
+ )
111
+ }
112
+
113
+ function hasTsubMiddleware(settings: LegacySettings): boolean {
114
+ return (
115
+ getProcessEnv().NODE_ENV !== 'test' &&
116
+ (settings.middlewareSettings?.routingRules?.length ?? 0) > 0
117
+ )
118
+ }
119
+
120
+ /**
121
+ * With AJS classic, we allow users to call setAnonymousId before the library initialization.
122
+ * This is important because some of the destinations will use the anonymousId during the initialization,
123
+ * and if we set anonId afterwards, that wouldn’t impact the destination.
124
+ *
125
+ * Also Ensures events can be registered before library initialization.
126
+ * This is important so users can register to 'initialize' and any events that may fire early during setup.
127
+ */
128
+ function flushPreBuffer(
129
+ analytics: Analytics,
130
+ buffer: PreInitMethodCallBuffer
131
+ ): void {
132
+ buffer.push(...popSnippetWindowBuffer())
133
+ flushSetAnonymousID(analytics, buffer)
134
+ flushOn(analytics, buffer)
135
+ }
136
+
137
+ /**
138
+ * Finish flushing buffer and cleanup.
139
+ */
140
+ async function flushFinalBuffer(
141
+ analytics: Analytics,
142
+ buffer: PreInitMethodCallBuffer
143
+ ): Promise<void> {
144
+ // Call popSnippetWindowBuffer before each flush task since there may be
145
+ // analytics calls during async function calls.
146
+ buffer.push(...popSnippetWindowBuffer())
147
+ await flushAddSourceMiddleware(analytics, buffer)
148
+ buffer.push(...popSnippetWindowBuffer())
149
+ flushAnalyticsCallsInNewTask(analytics, buffer)
150
+ // Clear buffer, just in case analytics is loaded twice; we don't want to fire events off again.
151
+ buffer.clear()
152
+ }
153
+
154
+ async function registerPlugins(
155
+ legacySettings: LegacySettings,
156
+ analytics: Analytics,
157
+ opts: InitOptions,
158
+ options: InitOptions,
159
+ plugins: Plugin[],
160
+ legacyIntegrationSources: ClassicIntegrationSource[]
161
+ ): Promise<Context> {
162
+ const tsubMiddleware = hasTsubMiddleware(legacySettings)
163
+ ? await import(
164
+ /* webpackChunkName: "tsub-middleware" */ '../plugins/routing-middleware'
165
+ ).then((mod) => {
166
+ return mod.tsubMiddleware(
167
+ legacySettings.middlewareSettings!.routingRules
168
+ )
169
+ })
170
+ : undefined
171
+
172
+ const legacyDestinations =
173
+ hasLegacyDestinations(legacySettings) || legacyIntegrationSources.length > 0
174
+ ? await import(
175
+ /* webpackChunkName: "ajs-destination" */ '../plugins/ajs-destination'
176
+ ).then((mod) => {
177
+ return mod.ajsDestinations(
178
+ legacySettings,
179
+ analytics.integrations,
180
+ opts,
181
+ tsubMiddleware,
182
+ legacyIntegrationSources
183
+ )
184
+ })
185
+ : []
186
+
187
+ if (legacySettings.legacyVideoPluginsEnabled) {
188
+ await import(
189
+ /* webpackChunkName: "legacyVideos" */ '../plugins/legacy-video-plugins'
190
+ ).then((mod) => {
191
+ return mod.loadLegacyVideoPlugins(analytics)
192
+ })
193
+ }
194
+
195
+ const schemaFilter = opts.plan?.track
196
+ ? await import(
197
+ /* webpackChunkName: "schemaFilter" */ '../plugins/schema-filter'
198
+ ).then((mod) => {
199
+ return mod.schemaFilter(opts.plan?.track, legacySettings)
200
+ })
201
+ : undefined
202
+
203
+ const mergedSettings = mergedOptions(legacySettings, options)
204
+ const remotePlugins = await remoteLoader(
205
+ legacySettings,
206
+ analytics.integrations,
207
+ mergedSettings,
208
+ options.obfuscate,
209
+ tsubMiddleware
210
+ ).catch(() => [])
211
+
212
+ const inAppPluginName = 'Customer.io In-App Plugin'
213
+ let inAppPluginSettings = mergedSettings[
214
+ inAppPluginName
215
+ ] as InAppPluginSettings
216
+ if (!inAppPluginSettings) {
217
+ inAppPluginSettings = options.integrations?.[
218
+ inAppPluginName
219
+ ] as InAppPluginSettings
220
+ }
221
+
222
+ const inAppPlugin = inAppPluginSettings
223
+ ? await import(
224
+ /* webpackChunkName: "inAppPlugin" */ '../plugins/in-app-plugin'
225
+ ).then((mod) => {
226
+ return mod.InAppPlugin(inAppPluginSettings)
227
+ })
228
+ : undefined
229
+
230
+ const toRegister = [
231
+ validation,
232
+ pageEnrichment,
233
+ ...plugins,
234
+ ...legacyDestinations,
235
+ ...remotePlugins,
236
+ ]
237
+
238
+ if (schemaFilter) {
239
+ toRegister.push(schemaFilter)
240
+ }
241
+
242
+ if (inAppPlugin) {
243
+ toRegister.push(inAppPlugin)
244
+ }
245
+
246
+ const shouldIgnore =
247
+ (opts.integrations?.All === false &&
248
+ !opts.integrations['Customer.io Data Pipelines']) ||
249
+ (opts.integrations &&
250
+ opts.integrations['Customer.io Data Pipelines'] === false)
251
+
252
+ if (!shouldIgnore) {
253
+ toRegister.push(
254
+ customerio(
255
+ analytics,
256
+ mergedSettings['Customer.io Data Pipelines'] as CustomerioSettings,
257
+ legacySettings.integrations
258
+ )
259
+ )
260
+ }
261
+
262
+ const ctx = await analytics.register(...toRegister)
263
+
264
+ if (
265
+ Object.entries(legacySettings.enabledMiddleware ?? {}).some(
266
+ ([, enabled]) => enabled
267
+ )
268
+ ) {
269
+ await import(
270
+ /* webpackChunkName: "remoteMiddleware" */ '../plugins/remote-middleware'
271
+ ).then(async ({ remoteMiddlewares }) => {
272
+ const middleware = await remoteMiddlewares(
273
+ ctx,
274
+ legacySettings,
275
+ options.obfuscate
276
+ )
277
+ const promises = middleware.map((mdw) =>
278
+ analytics.addSourceMiddleware(mdw)
279
+ )
280
+ return Promise.all(promises)
281
+ })
282
+ }
283
+
284
+ return ctx
285
+ }
286
+
287
+ async function loadAnalytics(
288
+ settings: AnalyticsBrowserSettings,
289
+ options: InitOptions = {},
290
+ preInitBuffer: PreInitMethodCallBuffer
291
+ ): Promise<[Analytics, Context]> {
292
+ if (options.globalAnalyticsKey)
293
+ setGlobalAnalyticsKey(options.globalAnalyticsKey)
294
+ // this is an ugly side-effect, but it's for the benefits of the plugins that get their cdn via getCDN()
295
+ if (settings.cdnURL) setGlobalCDNUrl(settings.cdnURL)
296
+
297
+ const legacySettings =
298
+ settings.cdnSettings ??
299
+ (await loadLegacySettings(settings.writeKey, settings.cdnURL))
300
+
301
+ const retryQueue: boolean =
302
+ legacySettings.integrations['Customer.io Data Pipelines']?.retryQueue ??
303
+ true
304
+
305
+ const opts: InitOptions = { retryQueue, ...options }
306
+ const analytics = new Analytics(settings, opts)
307
+
308
+ attachInspector(analytics)
309
+
310
+ const plugins = settings.plugins ?? []
311
+ const classicIntegrations = settings.classicIntegrations ?? []
312
+ Stats.initRemoteMetrics(legacySettings.metrics)
313
+
314
+ // needs to be flushed before plugins are registered
315
+ flushPreBuffer(analytics, preInitBuffer)
316
+
317
+ const ctx = await registerPlugins(
318
+ legacySettings,
319
+ analytics,
320
+ opts,
321
+ options,
322
+ plugins,
323
+ classicIntegrations
324
+ )
325
+
326
+ const search = window.location.search ?? ''
327
+ const hash = window.location.hash ?? ''
328
+
329
+ const term = search.length ? search : hash.replace(/(?=#).*(?=\?)/, '')
330
+
331
+ if (term.includes('ajs_')) {
332
+ await analytics.queryString(term).catch(console.error)
333
+ }
334
+
335
+ analytics.initialized = true
336
+ analytics.emit('initialize', settings, options)
337
+
338
+ if (options.initialPageview) {
339
+ analytics.page().catch(console.error)
340
+ }
341
+
342
+ await flushFinalBuffer(analytics, preInitBuffer)
343
+
344
+ return [analytics, ctx]
345
+ }
346
+
347
+ /**
348
+ * The public browser interface for Customer.io Data Pipelines
349
+ *
350
+ * @example
351
+ * ```ts
352
+ * export const analytics = new AnalyticsBrowser()
353
+ * analytics.load({ writeKey: 'foo' })
354
+ */
355
+ export class AnalyticsBrowser extends AnalyticsBuffered {
356
+ private _resolveLoadStart: (
357
+ settings: AnalyticsBrowserSettings,
358
+ options: InitOptions
359
+ ) => void
360
+
361
+ constructor() {
362
+ const { promise: loadStart, resolve: resolveLoadStart } =
363
+ createDeferred<Parameters<AnalyticsBrowser['load']>>()
364
+
365
+ super((buffer) =>
366
+ loadStart.then(([settings, options]) =>
367
+ loadAnalytics(settings, options, buffer)
368
+ )
369
+ )
370
+
371
+ this._resolveLoadStart = (settings, options) =>
372
+ resolveLoadStart([settings, options])
373
+ }
374
+
375
+ /**
376
+ * Fully initialize an analytics instance, including:
377
+ *
378
+ * * Fetching settings from the CDN (by default).
379
+ * * Fetching all remote destinations configured by the user (if applicable).
380
+ * * Flushing buffered analytics events.
381
+ * * Loading all middleware.
382
+ *
383
+ * Note:️ This method should only be called *once* in your application.
384
+ *
385
+ * @example
386
+ * ```ts
387
+ * export const analytics = new AnalyticsBrowser()
388
+ * analytics.load({ writeKey: 'foo' })
389
+ * ```
390
+ */
391
+ load(
392
+ settings: AnalyticsBrowserSettings,
393
+ options: InitOptions = {}
394
+ ): AnalyticsBrowser {
395
+ this._resolveLoadStart(settings, options)
396
+ return this
397
+ }
398
+
399
+ /**
400
+ * Instantiates an object exposing Analytics methods.
401
+ *
402
+ * @example
403
+ * ```ts
404
+ * const ajs = AnalyticsBrowser.load({ writeKey: '<YOUR_WRITE_KEY>' })
405
+ *
406
+ * ajs.track("foo")
407
+ * ...
408
+ * ```
409
+ */
410
+ static load(
411
+ settings: AnalyticsBrowserSettings,
412
+ options: InitOptions = {}
413
+ ): AnalyticsBrowser {
414
+ return new AnalyticsBrowser().load(settings, options)
415
+ }
416
+
417
+ static standalone(
418
+ writeKey: string,
419
+ options?: InitOptions
420
+ ): Promise<Analytics> {
421
+ return AnalyticsBrowser.load({ writeKey }, options).then((res) => res[0])
422
+ }
423
+ }
@@ -0,0 +1,62 @@
1
+ import { AnalyticsBrowser } from '.'
2
+ import { embeddedWriteKey } from '../lib/embedded-write-key'
3
+ import { AnalyticsSnippet } from './standalone-interface'
4
+ import {
5
+ getGlobalAnalytics,
6
+ setGlobalAnalytics,
7
+ } from '../lib/global-analytics-helper'
8
+
9
+ function getWriteKey(): string | undefined {
10
+ if (embeddedWriteKey()) {
11
+ return embeddedWriteKey()
12
+ }
13
+
14
+ const analytics = getGlobalAnalytics()
15
+ if (analytics?._writeKey) {
16
+ return analytics._writeKey
17
+ }
18
+
19
+ const regex = /http.*\/analytics\.js\/v1\/([^/]*)(\/platform)?\/analytics.*/
20
+ const scripts = Array.prototype.slice.call(
21
+ document.querySelectorAll('script')
22
+ )
23
+ let writeKey: string | undefined = undefined
24
+
25
+ for (const s of scripts) {
26
+ const src = s.getAttribute('src') ?? ''
27
+ const result = regex.exec(src)
28
+
29
+ if (result && result[1]) {
30
+ writeKey = result[1]
31
+ break
32
+ }
33
+ }
34
+
35
+ if (!writeKey && document.currentScript) {
36
+ const script = document.currentScript as HTMLScriptElement
37
+ const src = script.src
38
+
39
+ const result = regex.exec(src)
40
+
41
+ if (result && result[1]) {
42
+ writeKey = result[1]
43
+ }
44
+ }
45
+
46
+ return writeKey
47
+ }
48
+
49
+ export async function install(): Promise<void> {
50
+ const writeKey = getWriteKey()
51
+ const options = getGlobalAnalytics()?._loadOptions ?? {}
52
+ if (!writeKey) {
53
+ console.error(
54
+ 'Failed to load Write Key. Make sure to use the latest version of the snippet, which can be found in your source settings.'
55
+ )
56
+ return
57
+ }
58
+
59
+ setGlobalAnalytics(
60
+ (await AnalyticsBrowser.standalone(writeKey, options)) as AnalyticsSnippet
61
+ )
62
+ }
@@ -0,0 +1,11 @@
1
+ import { Analytics, InitOptions } from '../core/analytics'
2
+
3
+ export interface AnalyticsSnippet extends AnalyticsStandalone {
4
+ load: (writeKey: string, options?: InitOptions) => void
5
+ }
6
+
7
+ export interface AnalyticsStandalone extends Analytics {
8
+ _loadOptions?: InitOptions
9
+ _writeKey?: string
10
+ _cdn?: string
11
+ }
@@ -0,0 +1,90 @@
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
+ // The global analytics key must be set first so that subsequent calls to getCdn() fetch the CDN from the correct instance.
6
+ const globalAnalyticsKey = (
7
+ document.querySelector(
8
+ 'script[data-global-customerio-analytics-key]'
9
+ ) as HTMLScriptElement
10
+ )?.dataset.globalCustomerioAnalyticsKey
11
+
12
+ if (globalAnalyticsKey) {
13
+ setGlobalAnalyticsKey(globalAnalyticsKey)
14
+ }
15
+
16
+ if (process.env.ASSET_PATH) {
17
+ if (process.env.ASSET_PATH === '/dist/umd/') {
18
+ // @ts-ignore
19
+ __webpack_public_path__ = '/dist/umd/'
20
+ } else {
21
+ const cdn = getCDN()
22
+ setGlobalCDNUrl(cdn)
23
+
24
+ // @ts-ignore
25
+ __webpack_public_path__ = cdn
26
+ ? cdn + '/v1/analytics-js/'
27
+ : 'https://cdp.customer.io/v1/analytics-js/'
28
+ }
29
+ }
30
+
31
+ setVersionType('web')
32
+
33
+ import { install } from './standalone-analytics'
34
+ import '../lib/csp-detection'
35
+ import { shouldPolyfill } from '../lib/browser-polyfill'
36
+ import { RemoteMetrics } from '../core/stats/remote-metrics'
37
+ import { embeddedWriteKey } from '../lib/embedded-write-key'
38
+ import { onCSPError } from '../lib/csp-detection'
39
+ import { setGlobalAnalyticsKey } from '../lib/global-analytics-helper'
40
+
41
+ function onError(err?: unknown) {
42
+ console.error('[analytics.js]', 'Failed to load Analytics.js', err)
43
+
44
+ new RemoteMetrics().increment('analytics_js.invoke.error', [
45
+ 'type:initialization',
46
+ ...(err instanceof Error
47
+ ? [`message:${err?.message}`, `name:${err?.name}`]
48
+ : []),
49
+ `wk:${embeddedWriteKey()}`,
50
+ ])
51
+ }
52
+
53
+ document.addEventListener('securitypolicyviolation', (e) => {
54
+ onCSPError(e).catch(console.error)
55
+ })
56
+
57
+ /**
58
+ * Attempts to run a promise and catch both sync and async errors.
59
+ **/
60
+ async function attempt<T>(promise: () => Promise<T>) {
61
+ try {
62
+ const result = await promise()
63
+ return result
64
+ } catch (err) {
65
+ onError(err)
66
+ }
67
+ }
68
+
69
+ if (shouldPolyfill()) {
70
+ // load polyfills in order to get AJS to work with old browsers
71
+ const script = document.createElement('script')
72
+ script.setAttribute(
73
+ 'src',
74
+ 'https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js'
75
+ )
76
+
77
+ if (document.readyState === 'loading') {
78
+ document.addEventListener('DOMContentLoaded', () =>
79
+ document.body.appendChild(script)
80
+ )
81
+ } else {
82
+ document.body.appendChild(script)
83
+ }
84
+
85
+ script.onload = function (): void {
86
+ attempt(install)
87
+ }
88
+ } else {
89
+ attempt(install)
90
+ }