digital-tools 2.0.1

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