digital-tools 2.1.1 → 2.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 (293) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +2 -0
  3. package/dist/client.d.ts +109 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +69 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/define.d.ts +2 -2
  8. package/dist/define.d.ts.map +1 -1
  9. package/dist/define.js +22 -20
  10. package/dist/define.js.map +1 -1
  11. package/dist/function-ref.d.ts +229 -0
  12. package/dist/function-ref.d.ts.map +1 -0
  13. package/dist/function-ref.js +28 -0
  14. package/dist/function-ref.js.map +1 -0
  15. package/dist/function-sugar.d.ts +57 -0
  16. package/dist/function-sugar.d.ts.map +1 -0
  17. package/dist/function-sugar.js +79 -0
  18. package/dist/function-sugar.js.map +1 -0
  19. package/dist/index.d.ts +10 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +24 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/providers/analytics/mixpanel.d.ts.map +1 -1
  24. package/dist/providers/analytics/mixpanel.js +21 -18
  25. package/dist/providers/analytics/mixpanel.js.map +1 -1
  26. package/dist/providers/calendar/cal-com.d.ts.map +1 -1
  27. package/dist/providers/calendar/cal-com.js +10 -10
  28. package/dist/providers/calendar/cal-com.js.map +1 -1
  29. package/dist/providers/calendar/google-calendar.d.ts.map +1 -1
  30. package/dist/providers/calendar/google-calendar.js +4 -4
  31. package/dist/providers/calendar/google-calendar.js.map +1 -1
  32. package/dist/providers/crm/hubspot.d.ts.map +1 -1
  33. package/dist/providers/crm/hubspot.js +107 -85
  34. package/dist/providers/crm/hubspot.js.map +1 -1
  35. package/dist/providers/development/github.d.ts.map +1 -1
  36. package/dist/providers/development/github.js +40 -43
  37. package/dist/providers/development/github.js.map +1 -1
  38. package/dist/providers/ecommerce/shopify.d.ts.map +1 -1
  39. package/dist/providers/ecommerce/shopify.js +79 -62
  40. package/dist/providers/ecommerce/shopify.js.map +1 -1
  41. package/dist/providers/email/resend.d.ts.map +1 -1
  42. package/dist/providers/email/resend.js +20 -16
  43. package/dist/providers/email/resend.js.map +1 -1
  44. package/dist/providers/email/sendgrid.d.ts.map +1 -1
  45. package/dist/providers/email/sendgrid.js +12 -9
  46. package/dist/providers/email/sendgrid.js.map +1 -1
  47. package/dist/providers/finance/stripe.d.ts.map +1 -1
  48. package/dist/providers/finance/stripe.js +44 -42
  49. package/dist/providers/finance/stripe.js.map +1 -1
  50. package/dist/providers/forms/typeform.d.ts.map +1 -1
  51. package/dist/providers/forms/typeform.js +68 -58
  52. package/dist/providers/forms/typeform.js.map +1 -1
  53. package/dist/providers/knowledge/notion.d.ts.map +1 -1
  54. package/dist/providers/knowledge/notion.js +75 -41
  55. package/dist/providers/knowledge/notion.js.map +1 -1
  56. package/dist/providers/marketing/mailchimp.d.ts.map +1 -1
  57. package/dist/providers/marketing/mailchimp.js +74 -61
  58. package/dist/providers/marketing/mailchimp.js.map +1 -1
  59. package/dist/providers/media/cloudinary.d.ts.map +1 -1
  60. package/dist/providers/media/cloudinary.js +30 -28
  61. package/dist/providers/media/cloudinary.js.map +1 -1
  62. package/dist/providers/messaging/slack.d.ts.map +1 -1
  63. package/dist/providers/messaging/slack.js +75 -58
  64. package/dist/providers/messaging/slack.js.map +1 -1
  65. package/dist/providers/messaging/twilio-sms.d.ts.map +1 -1
  66. package/dist/providers/messaging/twilio-sms.js +33 -15
  67. package/dist/providers/messaging/twilio-sms.js.map +1 -1
  68. package/dist/providers/project-management/linear.d.ts.map +1 -1
  69. package/dist/providers/project-management/linear.js +31 -27
  70. package/dist/providers/project-management/linear.js.map +1 -1
  71. package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -1
  72. package/dist/providers/spreadsheet/google-sheets.js +21 -18
  73. package/dist/providers/spreadsheet/google-sheets.js.map +1 -1
  74. package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -1
  75. package/dist/providers/spreadsheet/xlsx.js +4 -4
  76. package/dist/providers/spreadsheet/xlsx.js.map +1 -1
  77. package/dist/providers/storage/index.js +1 -0
  78. package/dist/providers/storage/index.js.map +1 -1
  79. package/dist/providers/storage/s3.d.ts.map +1 -1
  80. package/dist/providers/storage/s3.js +36 -27
  81. package/dist/providers/storage/s3.js.map +1 -1
  82. package/dist/providers/support/zendesk.d.ts.map +1 -1
  83. package/dist/providers/support/zendesk.js +24 -25
  84. package/dist/providers/support/zendesk.js.map +1 -1
  85. package/dist/providers/tasks/todoist.d.ts.map +1 -1
  86. package/dist/providers/tasks/todoist.js +18 -18
  87. package/dist/providers/tasks/todoist.js.map +1 -1
  88. package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -1
  89. package/dist/providers/video-conferencing/google-meet.js +11 -11
  90. package/dist/providers/video-conferencing/google-meet.js.map +1 -1
  91. package/dist/providers/video-conferencing/jitsi.js +14 -14
  92. package/dist/providers/video-conferencing/jitsi.js.map +1 -1
  93. package/dist/providers/video-conferencing/teams.d.ts.map +1 -1
  94. package/dist/providers/video-conferencing/teams.js +9 -7
  95. package/dist/providers/video-conferencing/teams.js.map +1 -1
  96. package/dist/providers/video-conferencing/zoom.d.ts.map +1 -1
  97. package/dist/providers/video-conferencing/zoom.js +26 -24
  98. package/dist/providers/video-conferencing/zoom.js.map +1 -1
  99. package/dist/tools/data.d.ts.map +1 -1
  100. package/dist/tools/data.js +5 -12
  101. package/dist/tools/data.js.map +1 -1
  102. package/dist/tools/index.d.ts +1 -0
  103. package/dist/tools/index.d.ts.map +1 -1
  104. package/dist/tools/index.js +1 -0
  105. package/dist/tools/index.js.map +1 -1
  106. package/dist/tools/system.d.ts +289 -0
  107. package/dist/tools/system.d.ts.map +1 -0
  108. package/dist/tools/system.js +752 -0
  109. package/dist/tools/system.js.map +1 -0
  110. package/dist/tools/web.d.ts.map +1 -1
  111. package/dist/tools/web.js +22 -10
  112. package/dist/tools/web.js.map +1 -1
  113. package/dist/track-record.d.ts +101 -0
  114. package/dist/track-record.d.ts.map +1 -0
  115. package/dist/track-record.js +17 -0
  116. package/dist/track-record.js.map +1 -0
  117. package/dist/types.d.ts +210 -9
  118. package/dist/types.d.ts.map +1 -1
  119. package/dist/verb-registration.d.ts +122 -0
  120. package/dist/verb-registration.d.ts.map +1 -0
  121. package/dist/verb-registration.js +176 -0
  122. package/dist/verb-registration.js.map +1 -0
  123. package/dist/worker.d.ts +93 -0
  124. package/dist/worker.d.ts.map +1 -0
  125. package/dist/worker.js +315 -0
  126. package/dist/worker.js.map +1 -0
  127. package/dist/wrap.d.ts +89 -0
  128. package/dist/wrap.d.ts.map +1 -0
  129. package/dist/wrap.js +225 -0
  130. package/dist/wrap.js.map +1 -0
  131. package/package.json +21 -4
  132. package/src/client.ts +136 -0
  133. package/src/define.ts +31 -37
  134. package/src/function-ref.ts +264 -0
  135. package/src/function-sugar.ts +134 -0
  136. package/src/index.ts +132 -10
  137. package/src/providers/analytics/mixpanel.ts +19 -18
  138. package/src/providers/calendar/cal-com.ts +29 -18
  139. package/src/providers/calendar/google-calendar.ts +20 -14
  140. package/src/providers/crm/hubspot.ts +225 -99
  141. package/src/providers/development/github.ts +206 -135
  142. package/src/providers/ecommerce/shopify.ts +250 -89
  143. package/src/providers/email/resend.ts +101 -28
  144. package/src/providers/email/sendgrid.ts +12 -9
  145. package/src/providers/finance/stripe.ts +128 -49
  146. package/src/providers/forms/typeform.ts +74 -58
  147. package/src/providers/knowledge/notion.ts +340 -88
  148. package/src/providers/marketing/mailchimp.ts +86 -70
  149. package/src/providers/media/cloudinary.ts +99 -41
  150. package/src/providers/messaging/slack.ts +283 -85
  151. package/src/providers/messaging/twilio-sms.ts +35 -15
  152. package/src/providers/project-management/linear.ts +143 -55
  153. package/src/providers/spreadsheet/google-sheets.ts +222 -56
  154. package/src/providers/spreadsheet/xlsx.ts +47 -16
  155. package/src/providers/storage/s3.ts +119 -47
  156. package/src/providers/support/zendesk.ts +196 -46
  157. package/src/providers/tasks/todoist.ts +20 -26
  158. package/src/providers/video-conferencing/google-meet.ts +17 -20
  159. package/src/providers/video-conferencing/jitsi.ts +14 -14
  160. package/src/providers/video-conferencing/teams.ts +14 -13
  161. package/src/providers/video-conferencing/zoom.ts +54 -49
  162. package/src/tools/data.ts +6 -16
  163. package/src/tools/index.ts +1 -0
  164. package/src/tools/system.ts +887 -0
  165. package/src/tools/web.ts +22 -10
  166. package/src/track-record.ts +106 -0
  167. package/src/types.ts +241 -13
  168. package/src/verb-registration.ts +197 -0
  169. package/src/worker.ts +370 -0
  170. package/src/wrap.ts +260 -0
  171. package/test/client.test.ts +146 -0
  172. package/test/communication-tools-extended.test.ts +734 -0
  173. package/test/data-tools-extended.test.ts +743 -0
  174. package/test/define-extended.test.ts +819 -0
  175. package/test/define.test.ts +150 -41
  176. package/test/entities.test.ts +623 -0
  177. package/test/extended-entities.test.ts +1228 -0
  178. package/test/provider-implementations.test.ts +725 -0
  179. package/test/provider-registry-extended.test.ts +583 -0
  180. package/test/providers/google-sheets.test.ts +851 -0
  181. package/test/providers/helpers.ts +554 -0
  182. package/test/providers/hubspot.test.ts +576 -0
  183. package/test/providers/slack.test.ts +932 -0
  184. package/test/providers/stripe.test.ts +701 -0
  185. package/test/providers.test.ts +578 -0
  186. package/test/system-tools-extended.test.ts +632 -0
  187. package/test/system.test.ts +673 -0
  188. package/test/tools.test.ts +15 -11
  189. package/test/types.test.ts +402 -0
  190. package/test/verb-registration.test.ts +395 -0
  191. package/test/web-tools.test.ts +553 -0
  192. package/test/worker-extended.test.ts +699 -0
  193. package/test/worker.test.ts +576 -0
  194. package/test/wrap.test.ts +366 -0
  195. package/tsconfig.json +3 -13
  196. package/vitest.config.ts +37 -0
  197. package/wrangler.jsonc +9 -0
  198. package/.turbo/turbo-build.log +0 -5
  199. package/dist/providers/voice/vapi.d.ts +0 -27
  200. package/dist/providers/voice/vapi.d.ts.map +0 -1
  201. package/dist/providers/voice/vapi.js +0 -440
  202. package/dist/providers/voice/vapi.js.map +0 -1
  203. package/src/define.js +0 -267
  204. package/src/entities/advertising.js +0 -999
  205. package/src/entities/ai.js +0 -756
  206. package/src/entities/analytics.js +0 -1588
  207. package/src/entities/automation.js +0 -601
  208. package/src/entities/communication.js +0 -1150
  209. package/src/entities/crm.js +0 -1386
  210. package/src/entities/design.js +0 -546
  211. package/src/entities/development.js +0 -2212
  212. package/src/entities/document.js +0 -874
  213. package/src/entities/ecommerce.js +0 -1429
  214. package/src/entities/experiment.js +0 -1039
  215. package/src/entities/finance.js +0 -3478
  216. package/src/entities/forms.js +0 -1892
  217. package/src/entities/hr.js +0 -661
  218. package/src/entities/identity.js +0 -997
  219. package/src/entities/index.js +0 -282
  220. package/src/entities/infrastructure.js +0 -1153
  221. package/src/entities/knowledge.js +0 -1438
  222. package/src/entities/marketing.js +0 -1610
  223. package/src/entities/media.js +0 -1634
  224. package/src/entities/notification.js +0 -1199
  225. package/src/entities/presentation.js +0 -1274
  226. package/src/entities/productivity.js +0 -1317
  227. package/src/entities/project-management.js +0 -1136
  228. package/src/entities/recruiting.js +0 -736
  229. package/src/entities/shipping.js +0 -509
  230. package/src/entities/signature.js +0 -1102
  231. package/src/entities/site.js +0 -222
  232. package/src/entities/spreadsheet.js +0 -1341
  233. package/src/entities/storage.js +0 -1198
  234. package/src/entities/support.js +0 -1166
  235. package/src/entities/video-conferencing.js +0 -1750
  236. package/src/entities/video.js +0 -950
  237. package/src/entities.js +0 -1663
  238. package/src/index.js +0 -74
  239. package/src/providers/analytics/index.js +0 -17
  240. package/src/providers/analytics/mixpanel.js +0 -255
  241. package/src/providers/calendar/cal-com.js +0 -303
  242. package/src/providers/calendar/google-calendar.js +0 -335
  243. package/src/providers/calendar/index.js +0 -20
  244. package/src/providers/crm/hubspot.js +0 -566
  245. package/src/providers/crm/index.js +0 -17
  246. package/src/providers/development/github.js +0 -472
  247. package/src/providers/development/index.js +0 -17
  248. package/src/providers/ecommerce/index.js +0 -17
  249. package/src/providers/ecommerce/shopify.js +0 -378
  250. package/src/providers/email/index.js +0 -20
  251. package/src/providers/email/resend.js +0 -258
  252. package/src/providers/email/sendgrid.js +0 -161
  253. package/src/providers/finance/index.js +0 -17
  254. package/src/providers/finance/stripe.js +0 -549
  255. package/src/providers/forms/index.js +0 -17
  256. package/src/providers/forms/typeform.js +0 -500
  257. package/src/providers/index.js +0 -123
  258. package/src/providers/knowledge/index.js +0 -17
  259. package/src/providers/knowledge/notion.js +0 -389
  260. package/src/providers/marketing/index.js +0 -17
  261. package/src/providers/marketing/mailchimp.js +0 -443
  262. package/src/providers/media/cloudinary.js +0 -318
  263. package/src/providers/media/index.js +0 -17
  264. package/src/providers/messaging/index.js +0 -20
  265. package/src/providers/messaging/slack.js +0 -393
  266. package/src/providers/messaging/twilio-sms.js +0 -249
  267. package/src/providers/project-management/index.js +0 -17
  268. package/src/providers/project-management/linear.js +0 -575
  269. package/src/providers/registry.js +0 -86
  270. package/src/providers/spreadsheet/google-sheets.js +0 -375
  271. package/src/providers/spreadsheet/index.js +0 -20
  272. package/src/providers/spreadsheet/xlsx.js +0 -423
  273. package/src/providers/storage/index.js +0 -24
  274. package/src/providers/storage/s3.js +0 -419
  275. package/src/providers/support/index.js +0 -17
  276. package/src/providers/support/zendesk.js +0 -373
  277. package/src/providers/tasks/index.js +0 -17
  278. package/src/providers/tasks/todoist.js +0 -286
  279. package/src/providers/types.js +0 -9
  280. package/src/providers/video-conferencing/google-meet.js +0 -286
  281. package/src/providers/video-conferencing/index.js +0 -31
  282. package/src/providers/video-conferencing/jitsi.js +0 -254
  283. package/src/providers/video-conferencing/teams.js +0 -270
  284. package/src/providers/video-conferencing/zoom.js +0 -332
  285. package/src/registry.js +0 -128
  286. package/src/tools/communication.js +0 -184
  287. package/src/tools/data.js +0 -205
  288. package/src/tools/index.js +0 -11
  289. package/src/tools/web.js +0 -137
  290. package/src/types.js +0 -10
  291. package/test/define.test.js +0 -306
  292. package/test/registry.test.js +0 -357
  293. package/test/tools.test.js +0 -363
@@ -1,1039 +0,0 @@
1
- /**
2
- * Experimentation & Analytics Entity Types (Nouns)
3
- *
4
- * Entities for product analytics, feature flags, A/B testing, and user tracking.
5
- * Covers Google Analytics, PostHog, Mixpanel, LaunchDarkly, etc.
6
- *
7
- * @packageDocumentation
8
- */
9
- // =============================================================================
10
- // Session
11
- // =============================================================================
12
- /**
13
- * Session entity
14
- *
15
- * Represents a user session for analytics tracking
16
- */
17
- export const Session = {
18
- singular: 'session',
19
- plural: 'sessions',
20
- description: 'A user session for analytics tracking',
21
- properties: {
22
- // Identity
23
- sessionId: {
24
- type: 'string',
25
- description: 'Unique session identifier',
26
- },
27
- userId: {
28
- type: 'string',
29
- optional: true,
30
- description: 'Identified user ID (if logged in)',
31
- },
32
- anonymousId: {
33
- type: 'string',
34
- optional: true,
35
- description: 'Anonymous visitor ID',
36
- },
37
- // Timing
38
- startedAt: {
39
- type: 'datetime',
40
- description: 'Session start time',
41
- },
42
- endedAt: {
43
- type: 'datetime',
44
- optional: true,
45
- description: 'Session end time',
46
- },
47
- duration: {
48
- type: 'number',
49
- optional: true,
50
- description: 'Session duration in seconds',
51
- },
52
- // Context
53
- device: {
54
- type: 'string',
55
- optional: true,
56
- description: 'Device type: desktop, mobile, tablet',
57
- examples: ['desktop', 'mobile', 'tablet'],
58
- },
59
- browser: {
60
- type: 'string',
61
- optional: true,
62
- description: 'Browser name and version',
63
- },
64
- os: {
65
- type: 'string',
66
- optional: true,
67
- description: 'Operating system',
68
- },
69
- screenResolution: {
70
- type: 'string',
71
- optional: true,
72
- description: 'Screen resolution',
73
- },
74
- // Location
75
- country: {
76
- type: 'string',
77
- optional: true,
78
- description: 'Country code',
79
- },
80
- region: {
81
- type: 'string',
82
- optional: true,
83
- description: 'Region/state',
84
- },
85
- city: {
86
- type: 'string',
87
- optional: true,
88
- description: 'City',
89
- },
90
- timezone: {
91
- type: 'string',
92
- optional: true,
93
- description: 'Timezone',
94
- },
95
- // Source
96
- referrer: {
97
- type: 'url',
98
- optional: true,
99
- description: 'Referrer URL',
100
- },
101
- utmSource: {
102
- type: 'string',
103
- optional: true,
104
- description: 'UTM source',
105
- },
106
- utmMedium: {
107
- type: 'string',
108
- optional: true,
109
- description: 'UTM medium',
110
- },
111
- utmCampaign: {
112
- type: 'string',
113
- optional: true,
114
- description: 'UTM campaign',
115
- },
116
- landingPage: {
117
- type: 'url',
118
- optional: true,
119
- description: 'Landing page URL',
120
- },
121
- // Engagement
122
- pageviews: {
123
- type: 'number',
124
- optional: true,
125
- description: 'Number of pageviews',
126
- },
127
- events: {
128
- type: 'number',
129
- optional: true,
130
- description: 'Number of events',
131
- },
132
- bounced: {
133
- type: 'boolean',
134
- optional: true,
135
- description: 'Whether session bounced',
136
- },
137
- converted: {
138
- type: 'boolean',
139
- optional: true,
140
- description: 'Whether session converted',
141
- },
142
- },
143
- relationships: {
144
- user: {
145
- type: 'Contact',
146
- required: false,
147
- description: 'Identified user',
148
- },
149
- events: {
150
- type: 'AnalyticsEvent[]',
151
- description: 'Events in this session',
152
- },
153
- pageviews: {
154
- type: 'Pageview[]',
155
- description: 'Pageviews in this session',
156
- },
157
- },
158
- actions: ['track', 'identify', 'end', 'merge'],
159
- events: ['started', 'identified', 'ended', 'converted', 'bounced'],
160
- };
161
- // =============================================================================
162
- // Analytics Event
163
- // =============================================================================
164
- /**
165
- * Analytics event entity
166
- *
167
- * Represents a tracked analytics event
168
- */
169
- export const AnalyticsEvent = {
170
- singular: 'analytics event',
171
- plural: 'analytics events',
172
- description: 'A tracked analytics event',
173
- properties: {
174
- // Identity
175
- eventName: {
176
- type: 'string',
177
- description: 'Event name',
178
- },
179
- eventType: {
180
- type: 'string',
181
- optional: true,
182
- description: 'Event type: track, page, identify, group',
183
- examples: ['track', 'page', 'identify', 'group'],
184
- },
185
- // Properties
186
- properties: {
187
- type: 'json',
188
- optional: true,
189
- description: 'Event properties',
190
- },
191
- // Context
192
- timestamp: {
193
- type: 'datetime',
194
- description: 'Event timestamp',
195
- },
196
- sessionId: {
197
- type: 'string',
198
- optional: true,
199
- description: 'Session ID',
200
- },
201
- userId: {
202
- type: 'string',
203
- optional: true,
204
- description: 'User ID',
205
- },
206
- anonymousId: {
207
- type: 'string',
208
- optional: true,
209
- description: 'Anonymous ID',
210
- },
211
- // Location
212
- url: {
213
- type: 'url',
214
- optional: true,
215
- description: 'Page URL where event occurred',
216
- },
217
- path: {
218
- type: 'string',
219
- optional: true,
220
- description: 'Page path',
221
- },
222
- // Device context
223
- context: {
224
- type: 'json',
225
- optional: true,
226
- description: 'Event context (device, location, etc.)',
227
- },
228
- // Value
229
- value: {
230
- type: 'number',
231
- optional: true,
232
- description: 'Numeric value (e.g., revenue)',
233
- },
234
- currency: {
235
- type: 'string',
236
- optional: true,
237
- description: 'Currency code for value',
238
- },
239
- },
240
- relationships: {
241
- session: {
242
- type: 'Session',
243
- required: false,
244
- backref: 'events',
245
- description: 'Parent session',
246
- },
247
- user: {
248
- type: 'Contact',
249
- required: false,
250
- description: 'User who triggered event',
251
- },
252
- },
253
- actions: ['track', 'query', 'aggregate', 'export'],
254
- events: ['tracked'],
255
- };
256
- /**
257
- * Pageview entity
258
- */
259
- export const Pageview = {
260
- singular: 'pageview',
261
- plural: 'pageviews',
262
- description: 'A page view event',
263
- properties: {
264
- url: {
265
- type: 'url',
266
- description: 'Page URL',
267
- },
268
- path: {
269
- type: 'string',
270
- description: 'Page path',
271
- },
272
- title: {
273
- type: 'string',
274
- optional: true,
275
- description: 'Page title',
276
- },
277
- referrer: {
278
- type: 'url',
279
- optional: true,
280
- description: 'Referrer URL',
281
- },
282
- timestamp: {
283
- type: 'datetime',
284
- description: 'Pageview timestamp',
285
- },
286
- timeOnPage: {
287
- type: 'number',
288
- optional: true,
289
- description: 'Time spent on page in seconds',
290
- },
291
- scrollDepth: {
292
- type: 'number',
293
- optional: true,
294
- description: 'Scroll depth percentage',
295
- },
296
- },
297
- relationships: {
298
- session: {
299
- type: 'Session',
300
- backref: 'pageviews',
301
- description: 'Parent session',
302
- },
303
- },
304
- actions: ['track', 'query'],
305
- events: ['tracked'],
306
- };
307
- // =============================================================================
308
- // Segment
309
- // =============================================================================
310
- /**
311
- * Segment entity
312
- *
313
- * Represents a user segment for targeting
314
- */
315
- export const Segment = {
316
- singular: 'segment',
317
- plural: 'segments',
318
- description: 'A user segment for targeting and analysis',
319
- properties: {
320
- // Identity
321
- name: {
322
- type: 'string',
323
- description: 'Segment name',
324
- },
325
- key: {
326
- type: 'string',
327
- optional: true,
328
- description: 'Segment key/identifier',
329
- },
330
- description: {
331
- type: 'string',
332
- optional: true,
333
- description: 'Segment description',
334
- },
335
- // Definition
336
- type: {
337
- type: 'string',
338
- description: 'Segment type: static, dynamic, computed',
339
- examples: ['static', 'dynamic', 'computed'],
340
- },
341
- rules: {
342
- type: 'json',
343
- optional: true,
344
- description: 'Segment rules/conditions',
345
- },
346
- query: {
347
- type: 'string',
348
- optional: true,
349
- description: 'Segment query definition',
350
- },
351
- // Membership
352
- userCount: {
353
- type: 'number',
354
- optional: true,
355
- description: 'Number of users in segment',
356
- },
357
- percentOfTotal: {
358
- type: 'number',
359
- optional: true,
360
- description: 'Percentage of total users',
361
- },
362
- // Sync
363
- syncEnabled: {
364
- type: 'boolean',
365
- optional: true,
366
- description: 'Whether segment syncs to destinations',
367
- },
368
- lastSyncedAt: {
369
- type: 'datetime',
370
- optional: true,
371
- description: 'Last sync timestamp',
372
- },
373
- },
374
- relationships: {
375
- users: {
376
- type: 'Contact[]',
377
- description: 'Users in this segment',
378
- },
379
- campaigns: {
380
- type: 'Campaign[]',
381
- description: 'Campaigns targeting this segment',
382
- },
383
- experiments: {
384
- type: 'Experiment[]',
385
- description: 'Experiments using this segment',
386
- },
387
- },
388
- actions: [
389
- 'create',
390
- 'update',
391
- 'delete',
392
- 'addUser',
393
- 'removeUser',
394
- 'sync',
395
- 'refresh',
396
- 'export',
397
- ],
398
- events: [
399
- 'created',
400
- 'updated',
401
- 'deleted',
402
- 'userAdded',
403
- 'userRemoved',
404
- 'synced',
405
- 'refreshed',
406
- ],
407
- };
408
- // =============================================================================
409
- // Feature Flag
410
- // =============================================================================
411
- /**
412
- * Feature flag entity
413
- *
414
- * Represents a feature flag for controlled rollouts
415
- */
416
- export const FeatureFlag = {
417
- singular: 'feature flag',
418
- plural: 'feature flags',
419
- description: 'A feature flag for controlled feature rollouts',
420
- properties: {
421
- // Identity
422
- key: {
423
- type: 'string',
424
- description: 'Feature flag key',
425
- },
426
- name: {
427
- type: 'string',
428
- optional: true,
429
- description: 'Human-readable name',
430
- },
431
- description: {
432
- type: 'string',
433
- optional: true,
434
- description: 'Flag description',
435
- },
436
- // Type
437
- type: {
438
- type: 'string',
439
- description: 'Flag type: boolean, string, number, json',
440
- examples: ['boolean', 'string', 'number', 'json'],
441
- },
442
- defaultValue: {
443
- type: 'json',
444
- description: 'Default value when flag is off',
445
- },
446
- // Status
447
- enabled: {
448
- type: 'boolean',
449
- description: 'Whether flag is enabled',
450
- },
451
- archived: {
452
- type: 'boolean',
453
- optional: true,
454
- description: 'Whether flag is archived',
455
- },
456
- // Targeting
457
- rules: {
458
- type: 'json',
459
- optional: true,
460
- description: 'Targeting rules',
461
- },
462
- percentRollout: {
463
- type: 'number',
464
- optional: true,
465
- description: 'Percentage of users to enable',
466
- },
467
- userTargets: {
468
- type: 'string',
469
- array: true,
470
- optional: true,
471
- description: 'Specific user IDs to target',
472
- },
473
- segmentTargets: {
474
- type: 'string',
475
- array: true,
476
- optional: true,
477
- description: 'Segments to target',
478
- },
479
- // Variants
480
- variants: {
481
- type: 'json',
482
- optional: true,
483
- description: 'Flag variants for multivariate flags',
484
- },
485
- // Environment
486
- environments: {
487
- type: 'json',
488
- optional: true,
489
- description: 'Per-environment settings',
490
- },
491
- // Tags
492
- tags: {
493
- type: 'string',
494
- array: true,
495
- optional: true,
496
- description: 'Tags for organization',
497
- },
498
- },
499
- relationships: {
500
- experiments: {
501
- type: 'Experiment[]',
502
- description: 'Experiments using this flag',
503
- },
504
- segments: {
505
- type: 'Segment[]',
506
- description: 'Segments targeted by this flag',
507
- },
508
- },
509
- actions: [
510
- 'create',
511
- 'update',
512
- 'delete',
513
- 'enable',
514
- 'disable',
515
- 'archive',
516
- 'unarchive',
517
- 'setRollout',
518
- 'addRule',
519
- 'removeRule',
520
- 'addUserTarget',
521
- 'removeUserTarget',
522
- 'addVariant',
523
- 'removeVariant',
524
- ],
525
- events: [
526
- 'created',
527
- 'updated',
528
- 'deleted',
529
- 'enabled',
530
- 'disabled',
531
- 'archived',
532
- 'unarchived',
533
- 'rolloutChanged',
534
- 'ruleAdded',
535
- 'ruleRemoved',
536
- 'evaluated',
537
- ],
538
- };
539
- // =============================================================================
540
- // Experiment
541
- // =============================================================================
542
- /**
543
- * Experiment entity
544
- *
545
- * Represents an A/B test or experiment
546
- */
547
- export const Experiment = {
548
- singular: 'experiment',
549
- plural: 'experiments',
550
- description: 'An A/B test or experiment',
551
- properties: {
552
- // Identity
553
- key: {
554
- type: 'string',
555
- description: 'Experiment key',
556
- },
557
- name: {
558
- type: 'string',
559
- description: 'Experiment name',
560
- },
561
- description: {
562
- type: 'string',
563
- optional: true,
564
- description: 'Experiment description',
565
- },
566
- hypothesis: {
567
- type: 'string',
568
- optional: true,
569
- description: 'Experiment hypothesis',
570
- },
571
- // Type
572
- type: {
573
- type: 'string',
574
- description: 'Experiment type: ab, multivariate, holdout',
575
- examples: ['ab', 'multivariate', 'holdout'],
576
- },
577
- // Status
578
- status: {
579
- type: 'string',
580
- description: 'Experiment status: draft, running, paused, completed, archived',
581
- examples: ['draft', 'running', 'paused', 'completed', 'archived'],
582
- },
583
- // Timing
584
- startedAt: {
585
- type: 'datetime',
586
- optional: true,
587
- description: 'Experiment start date',
588
- },
589
- endedAt: {
590
- type: 'datetime',
591
- optional: true,
592
- description: 'Experiment end date',
593
- },
594
- scheduledStart: {
595
- type: 'datetime',
596
- optional: true,
597
- description: 'Scheduled start date',
598
- },
599
- scheduledEnd: {
600
- type: 'datetime',
601
- optional: true,
602
- description: 'Scheduled end date',
603
- },
604
- // Variants
605
- variants: {
606
- type: 'json',
607
- description: 'Experiment variants with traffic allocation',
608
- },
609
- controlVariant: {
610
- type: 'string',
611
- optional: true,
612
- description: 'Control variant key',
613
- },
614
- // Targeting
615
- trafficAllocation: {
616
- type: 'number',
617
- optional: true,
618
- description: 'Percentage of traffic in experiment',
619
- },
620
- targetingRules: {
621
- type: 'json',
622
- optional: true,
623
- description: 'Targeting rules',
624
- },
625
- // Goals
626
- primaryMetric: {
627
- type: 'string',
628
- optional: true,
629
- description: 'Primary success metric',
630
- },
631
- secondaryMetrics: {
632
- type: 'string',
633
- array: true,
634
- optional: true,
635
- description: 'Secondary metrics to track',
636
- },
637
- minimumDetectableEffect: {
638
- type: 'number',
639
- optional: true,
640
- description: 'Minimum detectable effect size',
641
- },
642
- // Results
643
- sampleSize: {
644
- type: 'number',
645
- optional: true,
646
- description: 'Required sample size',
647
- },
648
- currentSampleSize: {
649
- type: 'number',
650
- optional: true,
651
- description: 'Current sample size',
652
- },
653
- statisticalSignificance: {
654
- type: 'number',
655
- optional: true,
656
- description: 'Statistical significance level',
657
- },
658
- winningVariant: {
659
- type: 'string',
660
- optional: true,
661
- description: 'Winning variant (if determined)',
662
- },
663
- lift: {
664
- type: 'number',
665
- optional: true,
666
- description: 'Measured lift percentage',
667
- },
668
- pValue: {
669
- type: 'number',
670
- optional: true,
671
- description: 'P-value',
672
- },
673
- confidenceInterval: {
674
- type: 'json',
675
- optional: true,
676
- description: 'Confidence interval',
677
- },
678
- },
679
- relationships: {
680
- featureFlag: {
681
- type: 'FeatureFlag',
682
- required: false,
683
- description: 'Associated feature flag',
684
- },
685
- segments: {
686
- type: 'Segment[]',
687
- description: 'Target segments',
688
- },
689
- results: {
690
- type: 'ExperimentResult[]',
691
- description: 'Experiment results',
692
- },
693
- },
694
- actions: [
695
- 'create',
696
- 'update',
697
- 'delete',
698
- 'start',
699
- 'pause',
700
- 'resume',
701
- 'stop',
702
- 'archive',
703
- 'addVariant',
704
- 'removeVariant',
705
- 'setTraffic',
706
- 'declareWinner',
707
- ],
708
- events: [
709
- 'created',
710
- 'updated',
711
- 'deleted',
712
- 'started',
713
- 'paused',
714
- 'resumed',
715
- 'stopped',
716
- 'archived',
717
- 'variantAdded',
718
- 'variantRemoved',
719
- 'trafficChanged',
720
- 'winnerDeclared',
721
- 'reachedSignificance',
722
- ],
723
- };
724
- /**
725
- * Experiment result entity
726
- */
727
- export const ExperimentResult = {
728
- singular: 'experiment result',
729
- plural: 'experiment results',
730
- description: 'Results for an experiment variant',
731
- properties: {
732
- variantKey: {
733
- type: 'string',
734
- description: 'Variant key',
735
- },
736
- metricKey: {
737
- type: 'string',
738
- description: 'Metric key',
739
- },
740
- sampleSize: {
741
- type: 'number',
742
- description: 'Number of participants',
743
- },
744
- conversionRate: {
745
- type: 'number',
746
- optional: true,
747
- description: 'Conversion rate',
748
- },
749
- meanValue: {
750
- type: 'number',
751
- optional: true,
752
- description: 'Mean metric value',
753
- },
754
- standardDeviation: {
755
- type: 'number',
756
- optional: true,
757
- description: 'Standard deviation',
758
- },
759
- lift: {
760
- type: 'number',
761
- optional: true,
762
- description: 'Lift vs control',
763
- },
764
- pValue: {
765
- type: 'number',
766
- optional: true,
767
- description: 'P-value vs control',
768
- },
769
- confidenceInterval: {
770
- type: 'json',
771
- optional: true,
772
- description: 'Confidence interval',
773
- },
774
- isSignificant: {
775
- type: 'boolean',
776
- optional: true,
777
- description: 'Whether result is statistically significant',
778
- },
779
- calculatedAt: {
780
- type: 'datetime',
781
- description: 'When results were calculated',
782
- },
783
- },
784
- relationships: {
785
- experiment: {
786
- type: 'Experiment',
787
- backref: 'results',
788
- description: 'Parent experiment',
789
- },
790
- },
791
- actions: ['calculate', 'refresh', 'export'],
792
- events: ['calculated', 'refreshed'],
793
- };
794
- // =============================================================================
795
- // Funnel
796
- // =============================================================================
797
- /**
798
- * Funnel entity
799
- *
800
- * Represents a conversion funnel
801
- */
802
- export const Funnel = {
803
- singular: 'funnel',
804
- plural: 'funnels',
805
- description: 'A conversion funnel for tracking user journeys',
806
- properties: {
807
- // Identity
808
- name: {
809
- type: 'string',
810
- description: 'Funnel name',
811
- },
812
- description: {
813
- type: 'string',
814
- optional: true,
815
- description: 'Funnel description',
816
- },
817
- // Steps
818
- steps: {
819
- type: 'json',
820
- description: 'Funnel steps (event definitions)',
821
- },
822
- stepCount: {
823
- type: 'number',
824
- optional: true,
825
- description: 'Number of steps',
826
- },
827
- // Configuration
828
- conversionWindow: {
829
- type: 'number',
830
- optional: true,
831
- description: 'Conversion window in days',
832
- },
833
- strict: {
834
- type: 'boolean',
835
- optional: true,
836
- description: 'Whether order must be strictly followed',
837
- },
838
- // Metrics
839
- totalEntered: {
840
- type: 'number',
841
- optional: true,
842
- description: 'Total users who entered funnel',
843
- },
844
- totalConverted: {
845
- type: 'number',
846
- optional: true,
847
- description: 'Total users who completed funnel',
848
- },
849
- overallConversionRate: {
850
- type: 'number',
851
- optional: true,
852
- description: 'Overall conversion rate',
853
- },
854
- avgTimeToConvert: {
855
- type: 'number',
856
- optional: true,
857
- description: 'Average time to convert in hours',
858
- },
859
- },
860
- relationships: {
861
- stepResults: {
862
- type: 'FunnelStep[]',
863
- description: 'Step-by-step results',
864
- },
865
- },
866
- actions: ['create', 'update', 'delete', 'calculate', 'compare', 'export'],
867
- events: ['created', 'updated', 'deleted', 'calculated'],
868
- };
869
- /**
870
- * Funnel step entity
871
- */
872
- export const FunnelStep = {
873
- singular: 'funnel step',
874
- plural: 'funnel steps',
875
- description: 'A step in a conversion funnel',
876
- properties: {
877
- stepNumber: {
878
- type: 'number',
879
- description: 'Step number (1-indexed)',
880
- },
881
- name: {
882
- type: 'string',
883
- description: 'Step name',
884
- },
885
- eventName: {
886
- type: 'string',
887
- description: 'Event that triggers this step',
888
- },
889
- entered: {
890
- type: 'number',
891
- optional: true,
892
- description: 'Users who entered this step',
893
- },
894
- completed: {
895
- type: 'number',
896
- optional: true,
897
- description: 'Users who completed this step',
898
- },
899
- droppedOff: {
900
- type: 'number',
901
- optional: true,
902
- description: 'Users who dropped off',
903
- },
904
- conversionRate: {
905
- type: 'number',
906
- optional: true,
907
- description: 'Conversion rate from previous step',
908
- },
909
- avgTimeInStep: {
910
- type: 'number',
911
- optional: true,
912
- description: 'Average time in step in seconds',
913
- },
914
- },
915
- relationships: {
916
- funnel: {
917
- type: 'Funnel',
918
- backref: 'stepResults',
919
- description: 'Parent funnel',
920
- },
921
- },
922
- actions: ['view'],
923
- events: ['entered', 'completed', 'droppedOff'],
924
- };
925
- // =============================================================================
926
- // Cohort
927
- // =============================================================================
928
- /**
929
- * Cohort entity
930
- *
931
- * Represents a user cohort for retention analysis
932
- */
933
- export const Cohort = {
934
- singular: 'cohort',
935
- plural: 'cohorts',
936
- description: 'A user cohort for retention analysis',
937
- properties: {
938
- // Identity
939
- name: {
940
- type: 'string',
941
- description: 'Cohort name',
942
- },
943
- description: {
944
- type: 'string',
945
- optional: true,
946
- description: 'Cohort description',
947
- },
948
- // Definition
949
- cohortType: {
950
- type: 'string',
951
- description: 'Cohort type: acquisition, behavioral, custom',
952
- examples: ['acquisition', 'behavioral', 'custom'],
953
- },
954
- startEvent: {
955
- type: 'string',
956
- description: 'Event that defines cohort entry',
957
- },
958
- returnEvent: {
959
- type: 'string',
960
- optional: true,
961
- description: 'Event that defines retention',
962
- },
963
- // Time period
964
- period: {
965
- type: 'string',
966
- description: 'Cohort period: day, week, month',
967
- examples: ['day', 'week', 'month'],
968
- },
969
- startDate: {
970
- type: 'datetime',
971
- optional: true,
972
- description: 'Cohort start date',
973
- },
974
- endDate: {
975
- type: 'datetime',
976
- optional: true,
977
- description: 'Cohort end date',
978
- },
979
- // Size
980
- userCount: {
981
- type: 'number',
982
- optional: true,
983
- description: 'Number of users in cohort',
984
- },
985
- // Retention
986
- retentionData: {
987
- type: 'json',
988
- optional: true,
989
- description: 'Retention curve data',
990
- },
991
- avgRetention: {
992
- type: 'number',
993
- optional: true,
994
- description: 'Average retention rate',
995
- },
996
- },
997
- relationships: {
998
- users: {
999
- type: 'Contact[]',
1000
- description: 'Users in this cohort',
1001
- },
1002
- },
1003
- actions: ['create', 'update', 'delete', 'calculate', 'compare', 'export'],
1004
- events: ['created', 'updated', 'deleted', 'calculated'],
1005
- };
1006
- // =============================================================================
1007
- // Export all entities as a schema
1008
- // =============================================================================
1009
- /**
1010
- * All experiment entity types
1011
- */
1012
- export const ExperimentEntities = {
1013
- // Sessions & Events
1014
- Session,
1015
- AnalyticsEvent,
1016
- Pageview,
1017
- // Segmentation
1018
- Segment,
1019
- // Feature Flags
1020
- FeatureFlag,
1021
- // Experimentation
1022
- Experiment,
1023
- ExperimentResult,
1024
- // Funnels
1025
- Funnel,
1026
- FunnelStep,
1027
- // Cohorts
1028
- Cohort,
1029
- };
1030
- /**
1031
- * Entity categories for organization
1032
- */
1033
- export const ExperimentCategories = {
1034
- tracking: ['Session', 'AnalyticsEvent', 'Pageview'],
1035
- segmentation: ['Segment', 'Cohort'],
1036
- featureFlags: ['FeatureFlag'],
1037
- experimentation: ['Experiment', 'ExperimentResult'],
1038
- funnels: ['Funnel', 'FunnelStep'],
1039
- };