flowgrid-sdk 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +224 -250
  2. package/dist/237.flowgrid.min.js +2 -0
  3. package/dist/237.flowgrid.min.js.map +1 -0
  4. package/dist/546.flowgrid.min.js +3 -0
  5. package/dist/546.flowgrid.min.js.LICENSE.txt +14 -0
  6. package/dist/546.flowgrid.min.js.map +1 -0
  7. package/dist/EXAMPLE.d.ts +1 -0
  8. package/dist/EXAMPLE.js +55 -0
  9. package/dist/EXAMPLE.js.map +1 -0
  10. package/dist/browser.d.ts +46 -103
  11. package/dist/browser.js +102 -0
  12. package/dist/browser.js.map +1 -0
  13. package/dist/flowgrid.min.js +1 -1
  14. package/dist/flowgrid.min.js.map +1 -1
  15. package/dist/index.d.ts +7 -8
  16. package/dist/index.js +64 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/client/transport.d.ts +14 -4
  19. package/dist/lib/client/transport.js +432 -0
  20. package/dist/lib/client/transport.js.map +1 -0
  21. package/dist/lib/consent/index.d.ts +0 -5
  22. package/dist/lib/consent/index.js +32 -0
  23. package/dist/lib/consent/index.js.map +1 -0
  24. package/dist/lib/consent/manager.js +336 -0
  25. package/dist/lib/consent/manager.js.map +1 -0
  26. package/dist/lib/consent/types.d.ts +3 -20
  27. package/dist/lib/consent/types.js +10 -0
  28. package/dist/lib/consent/types.js.map +1 -0
  29. package/dist/lib/features/analytics/attribution.d.ts +6 -47
  30. package/dist/lib/features/analytics/attribution.js +181 -0
  31. package/dist/lib/features/analytics/attribution.js.map +1 -0
  32. package/dist/lib/features/analytics/events.d.ts +1 -28
  33. package/dist/lib/features/analytics/events.js +256 -0
  34. package/dist/lib/features/analytics/events.js.map +1 -0
  35. package/dist/lib/features/analytics/funnels.js +260 -0
  36. package/dist/lib/features/analytics/funnels.js.map +1 -0
  37. package/dist/lib/features/analytics/heatmaps.d.ts +12 -19
  38. package/dist/lib/features/analytics/heatmaps.js +258 -0
  39. package/dist/lib/features/analytics/heatmaps.js.map +1 -0
  40. package/dist/lib/features/analytics/identify.d.ts +1 -21
  41. package/dist/lib/features/analytics/identify.js +213 -0
  42. package/dist/lib/features/analytics/identify.js.map +1 -0
  43. package/dist/lib/features/analytics/index.d.ts +2 -0
  44. package/dist/lib/features/analytics/index.js +15 -0
  45. package/dist/lib/features/analytics/index.js.map +1 -0
  46. package/dist/lib/features/analytics/page-views.d.ts +13 -30
  47. package/dist/lib/features/analytics/page-views.js +268 -0
  48. package/dist/lib/features/analytics/page-views.js.map +1 -0
  49. package/dist/lib/features/analytics/performance.d.ts +18 -24
  50. package/dist/lib/features/analytics/performance.js +232 -0
  51. package/dist/lib/features/analytics/performance.js.map +1 -0
  52. package/dist/lib/features/analytics/replay.d.ts +170 -0
  53. package/dist/lib/features/analytics/replay.js +381 -0
  54. package/dist/lib/features/analytics/replay.js.map +1 -0
  55. package/dist/lib/features/analytics/retention.d.ts +1 -76
  56. package/dist/lib/features/analytics/retention.js +135 -0
  57. package/dist/lib/features/analytics/retention.js.map +1 -0
  58. package/dist/lib/features/analytics/sessions.d.ts +12 -37
  59. package/dist/lib/features/analytics/sessions.js +213 -0
  60. package/dist/lib/features/analytics/sessions.js.map +1 -0
  61. package/dist/lib/features/core/activation.d.ts +1 -24
  62. package/dist/lib/features/core/activation.js +175 -0
  63. package/dist/lib/features/core/activation.js.map +1 -0
  64. package/dist/lib/features/core/experiment.d.ts +53 -21
  65. package/dist/lib/features/core/experiment.js +554 -0
  66. package/dist/lib/features/core/experiment.js.map +1 -0
  67. package/dist/lib/features/core/index.js +9 -0
  68. package/dist/lib/features/core/index.js.map +1 -0
  69. package/dist/lib/features/core/track-feature.d.ts +1 -8
  70. package/dist/lib/features/core/track-feature.js +119 -0
  71. package/dist/lib/features/core/track-feature.js.map +1 -0
  72. package/dist/lib/features/core/track-prompt.d.ts +5 -8
  73. package/dist/lib/features/core/track-prompt.js +181 -0
  74. package/dist/lib/features/core/track-prompt.js.map +1 -0
  75. package/dist/lib/features/ecommerce/cart.d.ts +1 -24
  76. package/dist/lib/features/ecommerce/cart.js +244 -0
  77. package/dist/lib/features/ecommerce/cart.js.map +1 -0
  78. package/dist/lib/features/ecommerce/checkout.d.ts +1 -28
  79. package/dist/lib/features/ecommerce/checkout.js +254 -0
  80. package/dist/lib/features/ecommerce/checkout.js.map +1 -0
  81. package/dist/lib/features/ecommerce/index.d.ts +0 -2
  82. package/dist/lib/features/ecommerce/index.js +15 -0
  83. package/dist/lib/features/ecommerce/index.js.map +1 -0
  84. package/dist/lib/features/ecommerce/ltv.d.ts +1 -69
  85. package/dist/lib/features/ecommerce/ltv.js +114 -0
  86. package/dist/lib/features/ecommerce/ltv.js.map +1 -0
  87. package/dist/lib/features/ecommerce/products.d.ts +1 -33
  88. package/dist/lib/features/ecommerce/products.js +223 -0
  89. package/dist/lib/features/ecommerce/products.js.map +1 -0
  90. package/dist/lib/features/ecommerce/promotions.d.ts +1 -30
  91. package/dist/lib/features/ecommerce/promotions.js +197 -0
  92. package/dist/lib/features/ecommerce/promotions.js.map +1 -0
  93. package/dist/lib/features/ecommerce/purchases.d.ts +1 -48
  94. package/dist/lib/features/ecommerce/purchases.js +193 -0
  95. package/dist/lib/features/ecommerce/purchases.js.map +1 -0
  96. package/dist/lib/features/ecommerce/refunds.d.ts +1 -27
  97. package/dist/lib/features/ecommerce/refunds.js +195 -0
  98. package/dist/lib/features/ecommerce/refunds.js.map +1 -0
  99. package/dist/lib/features/ecommerce/search.d.ts +1 -24
  100. package/dist/lib/features/ecommerce/search.js +156 -0
  101. package/dist/lib/features/ecommerce/search.js.map +1 -0
  102. package/dist/lib/features/ecommerce/subscriptions.d.ts +1 -28
  103. package/dist/lib/features/ecommerce/subscriptions.js +207 -0
  104. package/dist/lib/features/ecommerce/subscriptions.js.map +1 -0
  105. package/dist/lib/features/ecommerce/wishlist.d.ts +1 -28
  106. package/dist/lib/features/ecommerce/wishlist.js +186 -0
  107. package/dist/lib/features/ecommerce/wishlist.js.map +1 -0
  108. package/dist/lib/features/enterprise/acquisition.d.ts +2 -57
  109. package/dist/lib/features/enterprise/acquisition.js +166 -0
  110. package/dist/lib/features/enterprise/acquisition.js.map +1 -0
  111. package/dist/lib/features/enterprise/alerts.d.ts +1 -37
  112. package/dist/lib/features/enterprise/alerts.js +246 -0
  113. package/dist/lib/features/enterprise/alerts.js.map +1 -0
  114. package/dist/lib/features/enterprise/churn.d.ts +1 -42
  115. package/dist/lib/features/enterprise/churn.js +175 -0
  116. package/dist/lib/features/enterprise/churn.js.map +1 -0
  117. package/dist/lib/features/enterprise/cohorts.d.ts +1 -37
  118. package/dist/lib/features/enterprise/cohorts.js +201 -0
  119. package/dist/lib/features/enterprise/cohorts.js.map +1 -0
  120. package/dist/lib/features/enterprise/engagement.d.ts +40 -46
  121. package/dist/lib/features/enterprise/engagement.js +335 -0
  122. package/dist/lib/features/enterprise/engagement.js.map +1 -0
  123. package/dist/lib/features/enterprise/forecasting.d.ts +0 -50
  124. package/dist/lib/features/enterprise/forecasting.js +232 -0
  125. package/dist/lib/features/enterprise/forecasting.js.map +1 -0
  126. package/dist/lib/features/enterprise/index.d.ts +1 -1
  127. package/dist/lib/features/enterprise/index.js +76 -0
  128. package/dist/lib/features/enterprise/index.js.map +1 -0
  129. package/dist/lib/features/enterprise/monetization.d.ts +1 -60
  130. package/dist/lib/features/enterprise/monetization.js +146 -0
  131. package/dist/lib/features/enterprise/monetization.js.map +1 -0
  132. package/dist/lib/features/enterprise/multi-path-funnels.d.ts +1 -17
  133. package/dist/lib/features/enterprise/multi-path-funnels.js +205 -0
  134. package/dist/lib/features/enterprise/multi-path-funnels.js.map +1 -0
  135. package/dist/lib/features/enterprise/paths.d.ts +1 -56
  136. package/dist/lib/features/enterprise/paths.js +149 -0
  137. package/dist/lib/features/enterprise/paths.js.map +1 -0
  138. package/dist/lib/features/enterprise/security.d.ts +8 -57
  139. package/dist/lib/features/enterprise/security.js +202 -0
  140. package/dist/lib/features/enterprise/security.js.map +1 -0
  141. package/dist/lib/features/enterprise/support.d.ts +3 -42
  142. package/dist/lib/features/enterprise/support.js +162 -0
  143. package/dist/lib/features/enterprise/support.js.map +1 -0
  144. package/dist/lib/flowgrid.d.ts +278 -0
  145. package/dist/lib/flowgrid.js +323 -0
  146. package/dist/lib/flowgrid.js.map +1 -0
  147. package/dist/lib/frameworks/index.d.ts +13 -6
  148. package/dist/lib/frameworks/index.js +18 -0
  149. package/dist/lib/frameworks/index.js.map +1 -0
  150. package/dist/lib/frameworks/nextjs/client.js +355 -0
  151. package/dist/lib/frameworks/nextjs/client.js.map +1 -0
  152. package/dist/lib/frameworks/nextjs/index.js +31 -0
  153. package/dist/lib/frameworks/nextjs/index.js.map +1 -0
  154. package/dist/lib/frameworks/nextjs/server.js +259 -0
  155. package/dist/lib/frameworks/nextjs/server.js.map +1 -0
  156. package/dist/lib/frameworks/node/index.js +391 -0
  157. package/dist/lib/frameworks/node/index.js.map +1 -0
  158. package/dist/lib/frameworks/nuxt/index.js +288 -0
  159. package/dist/lib/frameworks/nuxt/index.js.map +1 -0
  160. package/dist/lib/frameworks/react/CookieBanner.js +166 -0
  161. package/dist/lib/frameworks/react/CookieBanner.js.map +1 -0
  162. package/dist/lib/frameworks/react/index.js +271 -0
  163. package/dist/lib/frameworks/react/index.js.map +1 -0
  164. package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
  165. package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
  166. package/dist/lib/frameworks/vue/index.js +390 -0
  167. package/dist/lib/frameworks/vue/index.js.map +1 -0
  168. package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
  169. package/dist/lib/tracking/analytics/attribution.js +18 -0
  170. package/dist/lib/tracking/analytics/attribution.js.map +1 -0
  171. package/dist/lib/tracking/analytics/events.d.ts +26 -0
  172. package/dist/lib/tracking/analytics/events.js +30 -0
  173. package/dist/lib/tracking/analytics/events.js.map +1 -0
  174. package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
  175. package/dist/lib/tracking/analytics/funnels.js +22 -0
  176. package/dist/lib/tracking/analytics/funnels.js.map +1 -0
  177. package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
  178. package/dist/lib/tracking/analytics/heatmaps.js +22 -0
  179. package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
  180. package/dist/lib/tracking/analytics/identify.d.ts +16 -0
  181. package/dist/lib/tracking/analytics/identify.js +22 -0
  182. package/dist/lib/tracking/analytics/identify.js.map +1 -0
  183. package/dist/lib/tracking/analytics/index.d.ts +10 -0
  184. package/dist/lib/tracking/analytics/index.js +11 -0
  185. package/dist/lib/tracking/analytics/index.js.map +1 -0
  186. package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
  187. package/dist/lib/tracking/analytics/page-views.js +50 -0
  188. package/dist/lib/tracking/analytics/page-views.js.map +1 -0
  189. package/dist/lib/tracking/analytics/performance.d.ts +22 -0
  190. package/dist/lib/tracking/analytics/performance.js +22 -0
  191. package/dist/lib/tracking/analytics/performance.js.map +1 -0
  192. package/dist/lib/tracking/analytics/replay.d.ts +34 -0
  193. package/dist/lib/tracking/analytics/replay.js +46 -0
  194. package/dist/lib/tracking/analytics/replay.js.map +1 -0
  195. package/dist/lib/tracking/analytics/retention.d.ts +10 -0
  196. package/dist/lib/tracking/analytics/retention.js +10 -0
  197. package/dist/lib/tracking/analytics/retention.js.map +1 -0
  198. package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
  199. package/dist/lib/tracking/analytics/sessions.js +26 -0
  200. package/dist/lib/tracking/analytics/sessions.js.map +1 -0
  201. package/dist/lib/tracking/core/activation.d.ts +23 -0
  202. package/dist/lib/tracking/core/activation.js +33 -0
  203. package/dist/lib/tracking/core/activation.js.map +1 -0
  204. package/dist/lib/tracking/core/experiment.d.ts +122 -0
  205. package/dist/lib/tracking/core/experiment.js +150 -0
  206. package/dist/lib/tracking/core/experiment.js.map +1 -0
  207. package/dist/lib/tracking/core/feature.d.ts +13 -0
  208. package/dist/lib/tracking/core/feature.js +14 -0
  209. package/dist/lib/tracking/core/feature.js.map +1 -0
  210. package/dist/lib/tracking/core/index.d.ts +4 -0
  211. package/dist/lib/tracking/core/index.js +5 -0
  212. package/dist/lib/tracking/core/index.js.map +1 -0
  213. package/dist/lib/tracking/core/prompt.d.ts +18 -0
  214. package/dist/lib/tracking/core/prompt.js +26 -0
  215. package/dist/lib/tracking/core/prompt.js.map +1 -0
  216. package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
  217. package/dist/lib/tracking/ecommerce/cart.js +22 -0
  218. package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
  219. package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
  220. package/dist/lib/tracking/ecommerce/checkout.js +22 -0
  221. package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
  222. package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
  223. package/dist/lib/tracking/ecommerce/index.js +11 -0
  224. package/dist/lib/tracking/ecommerce/index.js.map +1 -0
  225. package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
  226. package/dist/lib/tracking/ecommerce/ltv.js +14 -0
  227. package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
  228. package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
  229. package/dist/lib/tracking/ecommerce/products.js +18 -0
  230. package/dist/lib/tracking/ecommerce/products.js.map +1 -0
  231. package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
  232. package/dist/lib/tracking/ecommerce/promotions.js +25 -0
  233. package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
  234. package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
  235. package/dist/lib/tracking/ecommerce/purchases.js +10 -0
  236. package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
  237. package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
  238. package/dist/lib/tracking/ecommerce/refunds.js +22 -0
  239. package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
  240. package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
  241. package/dist/lib/tracking/ecommerce/search.js +22 -0
  242. package/dist/lib/tracking/ecommerce/search.js.map +1 -0
  243. package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
  244. package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
  245. package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
  246. package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
  247. package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
  248. package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
  249. package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
  250. package/dist/lib/tracking/enterprise/acquisition.js +22 -0
  251. package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
  252. package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
  253. package/dist/lib/tracking/enterprise/alerts.js +30 -0
  254. package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
  255. package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
  256. package/dist/lib/tracking/enterprise/churn.js +22 -0
  257. package/dist/lib/tracking/enterprise/churn.js.map +1 -0
  258. package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
  259. package/dist/lib/tracking/enterprise/cohorts.js +18 -0
  260. package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
  261. package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
  262. package/dist/lib/tracking/enterprise/engagement.js +44 -0
  263. package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
  264. package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
  265. package/dist/lib/tracking/enterprise/forecasting.js +22 -0
  266. package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
  267. package/dist/lib/tracking/enterprise/index.d.ts +11 -0
  268. package/dist/lib/tracking/enterprise/index.js +12 -0
  269. package/dist/lib/tracking/enterprise/index.js.map +1 -0
  270. package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
  271. package/dist/lib/tracking/enterprise/monetization.js +10 -0
  272. package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
  273. package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
  274. package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
  275. package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
  276. package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
  277. package/dist/lib/tracking/enterprise/paths.js +18 -0
  278. package/dist/lib/tracking/enterprise/paths.js.map +1 -0
  279. package/dist/lib/tracking/enterprise/security.d.ts +28 -0
  280. package/dist/lib/tracking/enterprise/security.js +26 -0
  281. package/dist/lib/tracking/enterprise/security.js.map +1 -0
  282. package/dist/lib/tracking/enterprise/support.d.ts +25 -0
  283. package/dist/lib/tracking/enterprise/support.js +22 -0
  284. package/dist/lib/tracking/enterprise/support.js.map +1 -0
  285. package/dist/lib/tracking/index.d.ts +4 -0
  286. package/dist/lib/tracking/index.js +5 -0
  287. package/dist/lib/tracking/index.js.map +1 -0
  288. package/dist/lib/types/analytics.d.ts +10 -2
  289. package/dist/lib/types/analytics.js +6 -0
  290. package/dist/lib/types/analytics.js.map +1 -0
  291. package/dist/lib/types/common.js +6 -0
  292. package/dist/lib/types/common.js.map +1 -0
  293. package/dist/lib/types/ecommerce.js +6 -0
  294. package/dist/lib/types/ecommerce.js.map +1 -0
  295. package/dist/lib/types/index.js +8 -0
  296. package/dist/lib/types/index.js.map +1 -0
  297. package/dist/lib/utils/browser.d.ts +16 -0
  298. package/dist/lib/utils/browser.js +32 -0
  299. package/dist/lib/utils/browser.js.map +1 -0
  300. package/dist/lib/utils/identity.js +346 -0
  301. package/dist/lib/utils/identity.js.map +1 -0
  302. package/dist/lib/utils/storage.js +105 -0
  303. package/dist/lib/utils/storage.js.map +1 -0
  304. package/dist/umd/237.index.js +2 -0
  305. package/dist/umd/237.index.js.map +1 -0
  306. package/dist/umd/546.index.js +3 -0
  307. package/dist/umd/546.index.js.LICENSE.txt +14 -0
  308. package/dist/umd/546.index.js.map +1 -0
  309. package/dist/umd/index.js +2 -0
  310. package/dist/umd/index.js.map +1 -0
  311. package/package.json +27 -80
  312. package/dist/lib/features/ecommerce/inventory.d.ts +0 -219
@@ -31,7 +31,7 @@ export type FeatureType = "engagement" | "cohorts" | "churn" | "monetization" |
31
31
  *
32
32
  * @example
33
33
  * ```ts
34
- * const client = new FlowGridTransport("web_123", "api.flowgrid.com", "sk_live_xxx");
34
+ * const client = new FlowGridTransport("web_123", "https://core.flow-grid.xyz", "sk_live_xxx");
35
35
  * ```
36
36
  */
37
37
  export declare class FlowGridTransport {
@@ -43,8 +43,8 @@ export declare class FlowGridTransport {
43
43
  /**
44
44
  * Base API endpoint.
45
45
  * Example values:
46
- * - "api.flowgrid.com"
47
- * - "https://api.flowgrid.com"
46
+ * - "core.flow-grid.xyz"
47
+ * - "https://core.flow-grid.xyz"
48
48
  *
49
49
  * Protocol is normalized automatically.
50
50
  */
@@ -53,7 +53,7 @@ export declare class FlowGridTransport {
53
53
  * Private API key used for authenticating requests.
54
54
  * Sent as a Bearer token in the Authorization header.
55
55
  */
56
- private apiKey;
56
+ protected apiKey: string;
57
57
  /**
58
58
  * Visitor ID for cross-session visitor tracking.
59
59
  * Persisted per-visitor (cookie/localStorage) and sent with every event.
@@ -107,6 +107,16 @@ export declare class FlowGridTransport {
107
107
  * Fire-and-forget event via sendBeacon. Used for page unload events.
108
108
  */
109
109
  sendViaBeacon(eventName: string, properties?: Record<string, any>): boolean;
110
+ /**
111
+ * POST a large opaque payload to a dedicated SDK endpoint, bypassing the
112
+ * 10KB validator. Used by session replay (`call=replay_chunk`) where each
113
+ * batch of rrweb events can be hundreds of kilobytes.
114
+ *
115
+ * Falls back to `navigator.sendBeacon` on `pagehide` / final flush.
116
+ */
117
+ protected postRaw(callType: string, body: Record<string, unknown>, options?: {
118
+ useBeacon?: boolean;
119
+ }): Promise<void>;
110
120
  private bufferEvent;
111
121
  private drainEventBuffer;
112
122
  /**
@@ -0,0 +1,432 @@
1
+ /**
2
+ * FlowGridTransport — Unified transport layer for Flowgrid SDK.
3
+ *
4
+ * @description
5
+ * Provides a secure, validated RPC-style transport layer used by all SDK modules.
6
+ * Handles:
7
+ * - Input validation
8
+ * - Payload size enforcement
9
+ * - Timeout handling
10
+ * - Retry logic (network failures only)
11
+ * - Authorization headers
12
+ * - Feature-scoped endpoint routing
13
+ *
14
+ * This class is designed to be extended by higher-level modules
15
+ * (e.g., Analytics, Experiments, Engagement, Cohorts).
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const client = new FlowGridTransport("web_123", "https://core.flow-grid.xyz", "sk_live_xxx");
20
+ * ```
21
+ */
22
+ export class FlowGridTransport {
23
+ /**
24
+ * Creates a new FlowGridTransport instance.
25
+ *
26
+ * @param webId - Unique identifier for the web property.
27
+ * @param endpoint - API base endpoint.
28
+ * @param apiKey - Private API key for authentication.
29
+ * @param visitorId - Optional visitor ID for cross-session tracking.
30
+ *
31
+ * @throws {Error} If required parameters are missing.
32
+ */
33
+ constructor(webId, endpoint, apiKey, visitorId, identityManager, config) {
34
+ if (!webId?.trim() || !endpoint?.trim()) {
35
+ throw new Error("SDK init failed: webId and endpoint are required.");
36
+ }
37
+ this.webId = webId.trim();
38
+ this.endpoint = this.normalizeEndpoint(endpoint);
39
+ this.apiKey = apiKey;
40
+ this.identityManager = identityManager;
41
+ this.visitorId = visitorId ?? '';
42
+ this.transportConfig = {
43
+ botDetection: config?.botDetection ?? 'block',
44
+ respectDNT: config?.respectDNT ?? true,
45
+ sampleRate: config?.sampleRate ?? 1.0,
46
+ };
47
+ // Drain buffered events from previous failed attempts
48
+ this.drainEventBuffer();
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // CONSENT API
52
+ // ---------------------------------------------------------------------------
53
+ static setConsent(consent) {
54
+ Object.assign(FlowGridTransport.consent, consent);
55
+ }
56
+ static hasConsent(category) {
57
+ return FlowGridTransport.consent[category] ?? false;
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // BOT DETECTION
61
+ // ---------------------------------------------------------------------------
62
+ static isLikelyBot() {
63
+ if (typeof navigator === 'undefined')
64
+ return false;
65
+ if (navigator.webdriver)
66
+ return true;
67
+ if (/bot|crawl|spider|headless|phantom|puppeteer/i.test(navigator.userAgent))
68
+ return true;
69
+ return false;
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // DNT / GPC CHECK
73
+ // ---------------------------------------------------------------------------
74
+ isDNTEnabled() {
75
+ if (typeof navigator === 'undefined')
76
+ return false;
77
+ if (navigator.globalPrivacyControl)
78
+ return true;
79
+ if (navigator.doNotTrack === '1')
80
+ return true;
81
+ return false;
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // DEVICE ENRICHMENT
85
+ // ---------------------------------------------------------------------------
86
+ static getDeviceContext() {
87
+ if (typeof window === 'undefined' || typeof navigator === 'undefined')
88
+ return {};
89
+ return {
90
+ _screen_width: window.screen?.width,
91
+ _screen_height: window.screen?.height,
92
+ _device_type: /Mobi|Android/i.test(navigator.userAgent) ? 'mobile' : 'desktop',
93
+ _language: navigator.language,
94
+ };
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // SENDBACON FALLBACK
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * Fire-and-forget event via sendBeacon. Used for page unload events.
101
+ */
102
+ sendViaBeacon(eventName, properties = {}) {
103
+ if (typeof navigator === 'undefined' || typeof navigator.sendBeacon !== 'function')
104
+ return false;
105
+ const resolvedVisitorId = this.identityManager
106
+ ? this.identityManager.getVisitorId()
107
+ : (this.visitorId ?? '');
108
+ const callType = properties.type || 'event';
109
+ const url = `${this.endpoint}/api/v1/sdk/functions?call=${encodeURIComponent(callType)}`;
110
+ const payload = JSON.stringify({
111
+ web_id: this.webId,
112
+ visitor_id: resolvedVisitorId,
113
+ event_name: eventName,
114
+ properties: { ...properties, ...FlowGridTransport.getDeviceContext() },
115
+ });
116
+ return navigator.sendBeacon(url, new Blob([payload], { type: 'application/json' }));
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // RAW LARGE-PAYLOAD POST (session replay chunks, etc.)
120
+ // ---------------------------------------------------------------------------
121
+ /**
122
+ * POST a large opaque payload to a dedicated SDK endpoint, bypassing the
123
+ * 10KB validator. Used by session replay (`call=replay_chunk`) where each
124
+ * batch of rrweb events can be hundreds of kilobytes.
125
+ *
126
+ * Falls back to `navigator.sendBeacon` on `pagehide` / final flush.
127
+ */
128
+ async postRaw(callType, body, options = {}) {
129
+ if (FlowGridTransport.consent.analytics === false)
130
+ return;
131
+ if (this.transportConfig.respectDNT !== false && this.isDNTEnabled())
132
+ return;
133
+ const url = `${this.endpoint}/api/v1/sdk/functions?call=${encodeURIComponent(callType)}`;
134
+ const resolvedVisitorId = this.identityManager
135
+ ? this.identityManager.getVisitorId()
136
+ : (this.visitorId ?? '');
137
+ const payload = JSON.stringify({
138
+ web_id: this.webId,
139
+ visitor_id: resolvedVisitorId,
140
+ ...body,
141
+ });
142
+ if (options.useBeacon && typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function') {
143
+ navigator.sendBeacon(url, new Blob([payload], { type: 'application/json' }));
144
+ return;
145
+ }
146
+ try {
147
+ await fetch(url, {
148
+ method: 'POST',
149
+ headers: {
150
+ 'Content-Type': 'application/json',
151
+ 'Authorization': `Bearer ${this.apiKey}`,
152
+ },
153
+ body: payload,
154
+ keepalive: true,
155
+ });
156
+ }
157
+ catch {
158
+ // swallow — replay is best-effort
159
+ }
160
+ }
161
+ // ---------------------------------------------------------------------------
162
+ // EVENT BUFFER (localStorage persistence)
163
+ // ---------------------------------------------------------------------------
164
+ bufferEvent(url, method, body) {
165
+ if (typeof localStorage === 'undefined')
166
+ return;
167
+ try {
168
+ const raw = localStorage.getItem(FlowGridTransport.EVENT_BUFFER_KEY);
169
+ const buffer = raw ? JSON.parse(raw) : [];
170
+ if (buffer.length >= FlowGridTransport.MAX_BUFFER_EVENTS)
171
+ return;
172
+ const serialized = JSON.stringify([...buffer, { url, method, body }]);
173
+ if (new TextEncoder().encode(serialized).length > FlowGridTransport.MAX_BUFFER_SIZE)
174
+ return;
175
+ buffer.push({ url, method, body });
176
+ localStorage.setItem(FlowGridTransport.EVENT_BUFFER_KEY, JSON.stringify(buffer));
177
+ }
178
+ catch { /* storage unavailable */ }
179
+ }
180
+ drainEventBuffer() {
181
+ if (typeof localStorage === 'undefined')
182
+ return;
183
+ try {
184
+ const raw = localStorage.getItem(FlowGridTransport.EVENT_BUFFER_KEY);
185
+ if (!raw)
186
+ return;
187
+ const buffer = JSON.parse(raw);
188
+ localStorage.removeItem(FlowGridTransport.EVENT_BUFFER_KEY);
189
+ for (const evt of buffer) {
190
+ // Best-effort replay; don't await
191
+ fetch(evt.url, {
192
+ method: evt.method,
193
+ headers: {
194
+ 'Content-Type': 'application/json',
195
+ 'Authorization': `Bearer ${this.apiKey}`,
196
+ },
197
+ body: evt.body,
198
+ }).catch(() => { });
199
+ }
200
+ }
201
+ catch { /* storage unavailable */ }
202
+ }
203
+ /**
204
+ * Core RPC transport method for standard SDK calls.
205
+ *
206
+ * @template T Expected JSON response type.
207
+ *
208
+ * @param eventName - Logical event or function name.
209
+ * @param properties - Arbitrary event payload properties.
210
+ * @param method - HTTP method ("GET", "POST", "PATCH").
211
+ *
212
+ * @returns Promise resolving to typed response.
213
+ */
214
+ async init(eventName, properties = {}, method = "POST") {
215
+ // Consent gate
216
+ if (!FlowGridTransport.hasConsent('analytics')) {
217
+ return {};
218
+ }
219
+ // DNT / GPC gate
220
+ if (this.transportConfig.respectDNT && this.isDNTEnabled()) {
221
+ return {};
222
+ }
223
+ // Bot detection
224
+ if (this.transportConfig.botDetection === 'block' && FlowGridTransport.isLikelyBot()) {
225
+ return {};
226
+ }
227
+ this.validateInput(eventName, properties);
228
+ // Bot tagging
229
+ if (this.transportConfig.botDetection === 'tag' && FlowGridTransport.isLikelyBot()) {
230
+ properties = { ...properties, _bot: true };
231
+ }
232
+ // Auto device enrichment
233
+ const enriched = { ...FlowGridTransport.getDeviceContext(), ...properties };
234
+ const callType = enriched.type || "event";
235
+ const url = `${this.endpoint}/api/v1/sdk/functions?call=${encodeURIComponent(callType)}`;
236
+ const resolvedVisitorId = this.identityManager
237
+ ? this.identityManager.getVisitorId()
238
+ : (this.visitorId ?? '');
239
+ const body = JSON.stringify({
240
+ web_id: this.webId,
241
+ visitor_id: resolvedVisitorId,
242
+ event_name: eventName,
243
+ properties: enriched,
244
+ });
245
+ return this.executeRequest(url, method, method === "GET" ? undefined : body);
246
+ }
247
+ /**
248
+ * Feature-scoped RPC transport method.
249
+ * Routes to the SDK API endpoint with a feature type qualifier.
250
+ *
251
+ * @param eventName - Name of the event to track.
252
+ * @param properties - Additional properties to send (must include type).
253
+ */
254
+ async initFeature(eventName, properties) {
255
+ this.validateInput(eventName, properties);
256
+ if (!properties.type) {
257
+ throw new Error('Feature events must include a type property');
258
+ }
259
+ const url = `${this.endpoint}/api/v1/sdk/functions?call=${encodeURIComponent(properties.type)}`;
260
+ const resolvedVisitorId = this.identityManager
261
+ ? this.identityManager.getVisitorId()
262
+ : (this.visitorId ?? '');
263
+ const body = JSON.stringify({
264
+ web_id: this.webId,
265
+ visitor_id: resolvedVisitorId,
266
+ event_name: eventName,
267
+ properties,
268
+ });
269
+ return this.executeRequest(url, "POST", body);
270
+ }
271
+ /**
272
+ * Executes HTTP request with timeout and retry handling.
273
+ *
274
+ * @template T Expected response type.
275
+ *
276
+ * @param url - Fully constructed request URL.
277
+ * @param method - HTTP method.
278
+ * @param body - Optional JSON body (POST/PATCH only).
279
+ * @param extraHeaders - Additional headers to include.
280
+ *
281
+ * @throws {Error} On timeout, network failure, or non-OK HTTP status.
282
+ */
283
+ async executeRequest(url, method, body, extraHeaders) {
284
+ let attempt = 0;
285
+ while (true) {
286
+ const controller = new AbortController();
287
+ const timeoutId = setTimeout(() => controller.abort(), FlowGridTransport.TIMEOUT_MS);
288
+ try {
289
+ const res = await fetch(url, {
290
+ method,
291
+ headers: {
292
+ "Content-Type": "application/json",
293
+ "Authorization": `Bearer ${this.apiKey}`,
294
+ ...extraHeaders,
295
+ },
296
+ body,
297
+ signal: controller.signal,
298
+ });
299
+ clearTimeout(timeoutId);
300
+ // Retry on 5xx (server transient errors)
301
+ if (res.status >= 500 && attempt < FlowGridTransport.MAX_RETRIES) {
302
+ attempt++;
303
+ await this.backoff(attempt);
304
+ continue;
305
+ }
306
+ if (!res.ok) {
307
+ const text = await this.safeRead(res);
308
+ throw new Error(`SDK request failed (${res.status} ${res.statusText}) ${text}`);
309
+ }
310
+ return await res.json();
311
+ }
312
+ catch (error) {
313
+ clearTimeout(timeoutId);
314
+ const isNetworkError = error instanceof Error &&
315
+ (error.name === "AbortError" || error.message.includes("fetch"));
316
+ if (isNetworkError && attempt < FlowGridTransport.MAX_RETRIES) {
317
+ attempt++;
318
+ await this.backoff(attempt);
319
+ continue;
320
+ }
321
+ // Final failure — try sendBeacon, then buffer to localStorage
322
+ if (attempt >= FlowGridTransport.MAX_RETRIES) {
323
+ const beaconSent = body && typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function'
324
+ ? navigator.sendBeacon(url, new Blob([body], { type: 'application/json' }))
325
+ : false;
326
+ if (!beaconSent) {
327
+ this.bufferEvent(url, method, body);
328
+ }
329
+ }
330
+ if (error instanceof Error && error.name === "AbortError") {
331
+ throw new Error("SDK request timed out");
332
+ }
333
+ throw error;
334
+ }
335
+ }
336
+ }
337
+ /**
338
+ * Exponential backoff: 1s, 2s, 4s ...
339
+ */
340
+ backoff(attempt) {
341
+ const ms = Math.pow(2, attempt - 1) * 1000;
342
+ return new Promise(resolve => setTimeout(resolve, ms));
343
+ }
344
+ /**
345
+ * Validates event name and payload.
346
+ *
347
+ * @param eventName - Event identifier.
348
+ * @param properties - Associated event properties.
349
+ *
350
+ * @throws {Error} If validation fails.
351
+ */
352
+ validateInput(eventName, properties) {
353
+ if (!eventName || typeof eventName !== "string" || !eventName.trim()) {
354
+ throw new Error("Event name must be a non-empty string");
355
+ }
356
+ if (eventName.length > 100) {
357
+ throw new Error("Event name must be less than 100 characters");
358
+ }
359
+ let serialized;
360
+ try {
361
+ serialized = JSON.stringify({
362
+ web_id: this.webId,
363
+ visitor_id: this.visitorId ?? '',
364
+ event_name: eventName,
365
+ properties,
366
+ });
367
+ }
368
+ catch {
369
+ throw new Error("Properties must be JSON serializable");
370
+ }
371
+ if (new TextEncoder().encode(serialized).length > FlowGridTransport.MAX_PAYLOAD_SIZE) {
372
+ throw new Error("Event payload too large (max 10KB)");
373
+ }
374
+ const sensitiveKeys = ["password", "token", "secret", "apikey", "authorization"];
375
+ const lower = serialized.toLowerCase();
376
+ for (const key of sensitiveKeys) {
377
+ if (lower.includes(key)) {
378
+ console.warn(`SDK Warning: Properties may contain sensitive data (${key}).`);
379
+ }
380
+ }
381
+ }
382
+ /**
383
+ * Normalizes endpoint input.
384
+ * Ensures protocol is present and removes trailing slashes.
385
+ *
386
+ * @param endpoint - Raw endpoint string.
387
+ * @returns Normalized endpoint URL.
388
+ */
389
+ normalizeEndpoint(endpoint) {
390
+ let clean = endpoint.trim();
391
+ if (!clean.startsWith("http://") && !clean.startsWith("https://")) {
392
+ clean = `https://${clean}`;
393
+ }
394
+ return clean.replace(/\/+$/, "");
395
+ }
396
+ /**
397
+ * Safely reads response text without throwing.
398
+ *
399
+ * @param res - Fetch Response object.
400
+ * @returns Response text or empty string.
401
+ */
402
+ async safeRead(res) {
403
+ try {
404
+ return await res.text();
405
+ }
406
+ catch {
407
+ return "";
408
+ }
409
+ }
410
+ }
411
+ /**
412
+ * Maximum allowed payload size (in bytes).
413
+ * Prevents oversized event submissions.
414
+ */
415
+ FlowGridTransport.MAX_PAYLOAD_SIZE = 10000; // 10KB
416
+ /**
417
+ * Maximum time (ms) before request is aborted.
418
+ */
419
+ FlowGridTransport.TIMEOUT_MS = 10000;
420
+ /**
421
+ * Maximum retry attempts for network-level failures and 5xx server errors.
422
+ */
423
+ FlowGridTransport.MAX_RETRIES = 3;
424
+ /** Max events to persist in localStorage buffer */
425
+ FlowGridTransport.MAX_BUFFER_EVENTS = 100;
426
+ /** Max buffer size in bytes */
427
+ FlowGridTransport.MAX_BUFFER_SIZE = 50000; // 50KB
428
+ /** localStorage key for failed event buffer */
429
+ FlowGridTransport.EVENT_BUFFER_KEY = 'fg_event_buffer';
430
+ /** Consent state */
431
+ FlowGridTransport.consent = { analytics: true, marketing: true };
432
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/lib/client/transport.ts"],"names":[],"mappings":"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"}
@@ -26,11 +26,6 @@
26
26
  * }
27
27
  * ```
28
28
  *
29
- * ## Framework Components
30
- *
31
- * - **React / Next.js**: `import { CookieBanner } from 'flowgrid-sdk/react'`
32
- * - **Vue / Nuxt**: `import { CookieBanner } from 'flowgrid-sdk/vue'`
33
- *
34
29
  * @see {@link ConsentManager} for the core API.
35
30
  */
36
31
  export { ConsentManager } from './manager';
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @fileoverview FlowGrid Consent Management Module
3
+ * @module consent
4
+ *
5
+ * @description
6
+ * Cookie consent management for GDPR, CCPA, and ePrivacy compliance.
7
+ * Provides a framework-agnostic {@link ConsentManager} and types for
8
+ * building customisable cookie banner components.
9
+ *
10
+ * ## Quick Start
11
+ *
12
+ * ```ts
13
+ * import { ConsentManager, FlowGridTransport } from 'flowgrid-sdk';
14
+ *
15
+ * const consent = new ConsentManager({
16
+ * onChange: (prefs) => {
17
+ * FlowGridTransport.setConsent({
18
+ * analytics: prefs.analytics,
19
+ * marketing: prefs.marketing,
20
+ * });
21
+ * },
22
+ * });
23
+ *
24
+ * if (!consent.hasConsented()) {
25
+ * // Show your cookie banner
26
+ * }
27
+ * ```
28
+ *
29
+ * @see {@link ConsentManager} for the core API.
30
+ */
31
+ export { ConsentManager } from './manager';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/consent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}