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
@@ -0,0 +1,202 @@
1
+ /**
2
+ * @fileoverview Enterprise - Security & Compliance Analytics
3
+ * @module features/enterprise/security
4
+ *
5
+ * @description
6
+ * Track activity for security, privacy, and regulatory compliance.
7
+ * Monitor login attempts, role changes, and compliance events.
8
+ *
9
+ * @useCases
10
+ * - Track failed login attempts
11
+ * - Monitor role/permission changes
12
+ * - GDPR/CCPA compliance events
13
+ * - Audit logging
14
+ * - Security anomaly detection
15
+ *
16
+ * @metrics
17
+ * - Failed login rate
18
+ * - Suspicious activity count
19
+ * - Role change frequency
20
+ * - Data access patterns
21
+ * - Compliance event count
22
+ *
23
+ * @chartData
24
+ * - Line chart: Security events over time
25
+ * - Bar chart: Events by type
26
+ * - Table: Audit log
27
+ * - Heatmap: Access patterns
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const security = new SecurityAnalytics(webId, endpoint, apiKey);
32
+ *
33
+ * // Track login attempt
34
+ * await security.trackLoginAttempt({
35
+ * userId: 'user_123',
36
+ * success: false,
37
+ * reason: 'invalid_password'
38
+ * });
39
+ * ```
40
+ */
41
+ import { FlowGridTransport } from "../../client/transport";
42
+ // ============================================================================
43
+ // HELPER FUNCTIONS
44
+ // ============================================================================
45
+ /**
46
+ * Classify risk level from score.
47
+ */
48
+ export function classifyRiskLevel(score) {
49
+ if (score < 25)
50
+ return 'low';
51
+ if (score < 50)
52
+ return 'medium';
53
+ if (score < 75)
54
+ return 'high';
55
+ return 'critical';
56
+ }
57
+ /**
58
+ * Calculate failed login rate.
59
+ */
60
+ export function calculateFailedLoginRate(failed, total) {
61
+ if (total === 0)
62
+ return 0;
63
+ return Math.round((failed / total) * 10000) / 100;
64
+ }
65
+ /**
66
+ * Check if login pattern is suspicious.
67
+ */
68
+ export function isSuspiciousLoginPattern(failedAttempts, timeWindowMinutes, threshold = 5) {
69
+ return failedAttempts >= threshold && timeWindowMinutes <= 15;
70
+ }
71
+ /**
72
+ * Determine event severity.
73
+ */
74
+ export function determineEventSeverity(eventType, success) {
75
+ const criticalEvents = ['suspicious_activity'];
76
+ const highEvents = ['role_change', 'permission_change', 'data_deletion', 'api_key_revoked'];
77
+ const mediumEvents = ['login_failure', 'password_reset', 'data_export'];
78
+ if (criticalEvents.includes(eventType))
79
+ return 'critical';
80
+ if (highEvents.includes(eventType))
81
+ return 'high';
82
+ if (mediumEvents.includes(eventType))
83
+ return !success ? 'high' : 'medium';
84
+ return 'low';
85
+ }
86
+ // ============================================================================
87
+ // MAIN CLASS
88
+ // ============================================================================
89
+ /**
90
+ * Security and compliance analytics class.
91
+ */
92
+ export class SecurityAnalytics extends FlowGridTransport {
93
+ /**
94
+ * Track login attempt.
95
+ */
96
+ async trackLoginAttempt(config) {
97
+ const eventType = config.success ? 'login_success' : 'login_failure';
98
+ const severity = determineEventSeverity(eventType, config.success);
99
+ return await this.initFeature("security.login_attempt", {
100
+ type: "security",
101
+ ...config,
102
+ eventType,
103
+ severity,
104
+ timestamp: new Date().toISOString()
105
+ });
106
+ }
107
+ /**
108
+ * Track logout.
109
+ */
110
+ async trackLogout(userId, sessionId) {
111
+ return await this.initFeature("security.logout", {
112
+ type: "security",
113
+ userId,
114
+ sessionId,
115
+ eventType: 'logout',
116
+ timestamp: new Date().toISOString()
117
+ });
118
+ }
119
+ /**
120
+ * Track password change.
121
+ */
122
+ async trackPasswordChange(userId, forced = false) {
123
+ return await this.initFeature("security.password_change", {
124
+ type: "security",
125
+ userId,
126
+ forced,
127
+ eventType: 'password_change',
128
+ timestamp: new Date().toISOString()
129
+ });
130
+ }
131
+ /**
132
+ * Track role change.
133
+ */
134
+ async trackRoleChange(config) {
135
+ return await this.initFeature("security.role_change", {
136
+ type: "security",
137
+ ...config,
138
+ eventType: 'role_change',
139
+ timestamp: new Date().toISOString()
140
+ });
141
+ }
142
+ /**
143
+ * Track permission change.
144
+ */
145
+ async trackPermissionChange(config) {
146
+ return await this.initFeature("security.permission_change", {
147
+ type: "security",
148
+ ...config,
149
+ eventType: 'permission_change',
150
+ timestamp: new Date().toISOString()
151
+ });
152
+ }
153
+ /**
154
+ * Track data access.
155
+ */
156
+ async trackDataAccess(config) {
157
+ return await this.initFeature("security.data_access", {
158
+ type: "security",
159
+ ...config,
160
+ eventType: 'data_access',
161
+ timestamp: new Date().toISOString()
162
+ });
163
+ }
164
+ /**
165
+ * Track data export.
166
+ */
167
+ async trackDataExport(userId, resourceType, recordCount) {
168
+ return await this.initFeature("security.data_export", {
169
+ type: "security",
170
+ userId,
171
+ resourceType,
172
+ recordCount,
173
+ eventType: 'data_export',
174
+ timestamp: new Date().toISOString()
175
+ });
176
+ }
177
+ /**
178
+ * Track suspicious activity.
179
+ */
180
+ async trackSuspiciousActivity(userId, activityType, details) {
181
+ return await this.initFeature("security.suspicious_activity", {
182
+ type: "security",
183
+ userId,
184
+ activityType,
185
+ details,
186
+ eventType: 'suspicious_activity',
187
+ severity: 'critical',
188
+ timestamp: new Date().toISOString()
189
+ });
190
+ }
191
+ /**
192
+ * Track compliance event.
193
+ */
194
+ async trackComplianceEvent(config) {
195
+ return await this.initFeature("security.compliance_event", {
196
+ type: "security",
197
+ ...config,
198
+ timestamp: new Date().toISOString()
199
+ });
200
+ }
201
+ }
202
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/security.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@
40
40
  * ```
41
41
  */
42
42
  import { FlowGridTransport } from "../../client/transport";
43
- import { DateRangeFilter, TimeSeriesData, TimeGranularity } from "../../types";
43
+ import { DateRangeFilter } from "../../types";
44
44
  /**
45
45
  * Ticket priority levels.
46
46
  */
@@ -94,6 +94,8 @@ export interface TicketUpdateConfig {
94
94
  resolutionTimeMs?: number;
95
95
  /** Number of interactions */
96
96
  interactionCount?: number;
97
+ /** Custom properties */
98
+ properties?: Record<string, unknown>;
97
99
  }
98
100
  /**
99
101
  * CSAT tracking configuration.
@@ -285,45 +287,4 @@ export declare class SupportAnalytics extends FlowGridTransport {
285
287
  trackFeatureComplaint(config: FeatureComplaintConfig): Promise<{
286
288
  tracked: boolean;
287
289
  }>;
288
- /**
289
- * Get ticket analytics.
290
- */
291
- getAnalytics(filter?: SupportAnalyticsFilter): Promise<TicketAnalytics>;
292
- /**
293
- * Get support impact analysis.
294
- */
295
- getSupportImpact(filter?: DateRangeFilter): Promise<SupportImpactAnalysis>;
296
- /**
297
- * Get feature complaint summary.
298
- */
299
- getFeatureComplaints(featureId?: string, filter?: DateRangeFilter): Promise<FeatureComplaintSummary[]>;
300
- /**
301
- * Get agent performance.
302
- */
303
- getAgentPerformance(agentId?: string, filter?: DateRangeFilter): Promise<AgentPerformance[]>;
304
- /**
305
- * Get ticket trend.
306
- */
307
- getTicketTrend(filter?: SupportAnalyticsFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
308
- /**
309
- * Get CSAT trend.
310
- */
311
- getCSATTrend(filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
312
- /**
313
- * Get response time distribution.
314
- */
315
- getResponseTimeDistribution(filter?: DateRangeFilter): Promise<Array<{
316
- bucket: string;
317
- count: number;
318
- percentage: number;
319
- }>>;
320
- /**
321
- * Get user support history.
322
- */
323
- getUserSupportHistory(userId: string): Promise<{
324
- totalTickets: number;
325
- avgCSAT: number;
326
- categories: string[];
327
- lastTicketDate: string;
328
- }>;
329
290
  }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @fileoverview Enterprise - Customer Support & Experience Analytics
3
+ * @module features/enterprise/support
4
+ *
5
+ * @description
6
+ * Link support interactions to retention and conversion metrics.
7
+ * Track ticket volume, response times, and satisfaction scores.
8
+ *
9
+ * @useCases
10
+ * - Track support ticket volume
11
+ * - Monitor response and resolution times
12
+ * - Correlate CSAT/NPS with retention
13
+ * - Track feature complaints
14
+ * - Measure support impact on conversion
15
+ *
16
+ * @metrics
17
+ * - Ticket volume
18
+ * - Average response time
19
+ * - Average resolution time
20
+ * - CSAT score
21
+ * - First contact resolution rate
22
+ *
23
+ * @chartData
24
+ * - Line chart: Ticket volume over time
25
+ * - Bar chart: Tickets by category
26
+ * - Distribution: Resolution time
27
+ * - Correlation: Support vs retention
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const support = new SupportAnalytics(webId, endpoint, apiKey);
32
+ *
33
+ * // Track support ticket
34
+ * await support.trackTicket({
35
+ * ticketId: 'ticket_123',
36
+ * userId: 'user_456',
37
+ * category: 'billing',
38
+ * priority: 'high'
39
+ * });
40
+ * ```
41
+ */
42
+ import { FlowGridTransport } from "../../client/transport";
43
+ // ============================================================================
44
+ // HELPER FUNCTIONS
45
+ // ============================================================================
46
+ /**
47
+ * Calculate first contact resolution rate.
48
+ */
49
+ export function calculateFCRRate(resolvedFirstContact, totalResolved) {
50
+ if (totalResolved === 0)
51
+ return 0;
52
+ return Math.round((resolvedFirstContact / totalResolved) * 10000) / 100;
53
+ }
54
+ /**
55
+ * Calculate average response time.
56
+ */
57
+ export function calculateAvgResponseTime(responseTimes) {
58
+ if (responseTimes.length === 0)
59
+ return 0;
60
+ const sum = responseTimes.reduce((a, b) => a + b, 0);
61
+ return Math.round(sum / responseTimes.length);
62
+ }
63
+ /**
64
+ * Classify CSAT score.
65
+ */
66
+ export function classifyCSAT(score) {
67
+ if (score < 2)
68
+ return 'poor';
69
+ if (score < 3)
70
+ return 'fair';
71
+ if (score < 4)
72
+ return 'good';
73
+ return 'excellent';
74
+ }
75
+ /**
76
+ * Format duration in human-readable format.
77
+ */
78
+ export function formatDuration(ms) {
79
+ if (ms < 60000)
80
+ return `${Math.round(ms / 1000)}s`;
81
+ if (ms < 3600000)
82
+ return `${Math.round(ms / 60000)}m`;
83
+ if (ms < 86400000)
84
+ return `${Math.round(ms / 3600000)}h`;
85
+ return `${Math.round(ms / 86400000)}d`;
86
+ }
87
+ // ============================================================================
88
+ // MAIN CLASS
89
+ // ============================================================================
90
+ /**
91
+ * Customer support and experience analytics class.
92
+ */
93
+ export class SupportAnalytics extends FlowGridTransport {
94
+ /**
95
+ * Track new support ticket.
96
+ */
97
+ async trackTicket(config) {
98
+ return await this.initFeature("support.ticket_created", {
99
+ type: "support",
100
+ ...config,
101
+ status: 'open',
102
+ createdAt: new Date().toISOString(),
103
+ timestamp: new Date().toISOString()
104
+ });
105
+ }
106
+ /**
107
+ * Update ticket status.
108
+ */
109
+ async updateTicket(config) {
110
+ return await this.initFeature("support.ticket_updated", {
111
+ type: "support",
112
+ ...config,
113
+ timestamp: new Date().toISOString()
114
+ });
115
+ }
116
+ /**
117
+ * Track ticket response.
118
+ */
119
+ async trackResponse(ticketId, agentId, responseTimeMs) {
120
+ return await this.initFeature("support.ticket_response", {
121
+ type: "support",
122
+ ticketId,
123
+ agentId,
124
+ responseTimeMs,
125
+ timestamp: new Date().toISOString()
126
+ });
127
+ }
128
+ /**
129
+ * Track ticket resolution.
130
+ */
131
+ async trackResolution(ticketId, resolutionTimeMs, interactionCount) {
132
+ return await this.initFeature("support.ticket_resolved", {
133
+ type: "support",
134
+ ticketId,
135
+ resolutionTimeMs,
136
+ interactionCount,
137
+ firstContactResolution: interactionCount === 1,
138
+ timestamp: new Date().toISOString()
139
+ });
140
+ }
141
+ /**
142
+ * Track CSAT score.
143
+ */
144
+ async trackCSAT(config) {
145
+ return await this.initFeature("support.csat", {
146
+ type: "support",
147
+ ...config,
148
+ timestamp: new Date().toISOString()
149
+ });
150
+ }
151
+ /**
152
+ * Track feature complaint.
153
+ */
154
+ async trackFeatureComplaint(config) {
155
+ return await this.initFeature("support.feature_complaint", {
156
+ type: "support",
157
+ ...config,
158
+ timestamp: new Date().toISOString()
159
+ });
160
+ }
161
+ }
162
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/support.ts"],"names":[],"mappings":"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"}