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,1690 @@
1
+ /**
2
+ * Analytics and Reporting Entity Types (Nouns)
3
+ *
4
+ * Semantic type definitions for analytics and reporting tools that can be used by
5
+ * both remote human workers AND AI agents. Each entity defines:
6
+ * - Properties: The data fields
7
+ * - Actions: Operations that can be performed (Verbs)
8
+ * - Events: State changes that occur
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+
13
+ import type { Noun, NounProperty, NounRelationship, Verb } from 'ai-database'
14
+
15
+ // =============================================================================
16
+ // Report
17
+ // =============================================================================
18
+
19
+ /**
20
+ * Report entity
21
+ *
22
+ * Represents a generated report with data, visualizations, and scheduling
23
+ */
24
+ export const Report: Noun = {
25
+ singular: 'report',
26
+ plural: 'reports',
27
+ description: 'A generated report containing data analysis and visualizations',
28
+
29
+ properties: {
30
+ // Identity
31
+ title: {
32
+ type: 'string',
33
+ description: 'Report title',
34
+ },
35
+ description: {
36
+ type: 'string',
37
+ optional: true,
38
+ description: 'Report description or summary',
39
+ },
40
+
41
+ // Type and configuration
42
+ type: {
43
+ type: 'string',
44
+ description: 'Report type: summary, detail, comparison, trend, custom',
45
+ examples: ['summary', 'detail', 'comparison', 'trend', 'custom'],
46
+ },
47
+ format: {
48
+ type: 'string',
49
+ description: 'Output format: pdf, html, csv, xlsx, json',
50
+ examples: ['pdf', 'html', 'csv', 'xlsx', 'json'],
51
+ },
52
+ template: {
53
+ type: 'string',
54
+ optional: true,
55
+ description: 'Template used for report generation',
56
+ },
57
+
58
+ // Time range
59
+ startDate: {
60
+ type: 'datetime',
61
+ optional: true,
62
+ description: 'Start date for report data',
63
+ },
64
+ endDate: {
65
+ type: 'datetime',
66
+ optional: true,
67
+ description: 'End date for report data',
68
+ },
69
+ period: {
70
+ type: 'string',
71
+ optional: true,
72
+ description: 'Time period: daily, weekly, monthly, quarterly, yearly, custom',
73
+ examples: ['daily', 'weekly', 'monthly', 'quarterly', 'yearly', 'custom'],
74
+ },
75
+
76
+ // Scheduling
77
+ scheduled: {
78
+ type: 'boolean',
79
+ optional: true,
80
+ description: 'Whether report is automatically generated on schedule',
81
+ },
82
+ schedule: {
83
+ type: 'string',
84
+ optional: true,
85
+ description: 'Cron expression or schedule string',
86
+ },
87
+ scheduleTimezone: {
88
+ type: 'string',
89
+ optional: true,
90
+ description: 'Timezone for scheduled generation',
91
+ },
92
+ lastRunAt: {
93
+ type: 'datetime',
94
+ optional: true,
95
+ description: 'When report was last generated',
96
+ },
97
+ nextRunAt: {
98
+ type: 'datetime',
99
+ optional: true,
100
+ description: 'When report will next be generated',
101
+ },
102
+
103
+ // Status
104
+ status: {
105
+ type: 'string',
106
+ description: 'Report status: draft, generating, completed, failed, scheduled',
107
+ examples: ['draft', 'generating', 'completed', 'failed', 'scheduled'],
108
+ },
109
+ progress: {
110
+ type: 'number',
111
+ optional: true,
112
+ description: 'Generation progress (0-100)',
113
+ },
114
+ error: {
115
+ type: 'string',
116
+ optional: true,
117
+ description: 'Error message if generation failed',
118
+ },
119
+
120
+ // Content
121
+ content: {
122
+ type: 'json',
123
+ optional: true,
124
+ description: 'Generated report content/data',
125
+ },
126
+ url: {
127
+ type: 'url',
128
+ optional: true,
129
+ description: 'URL to access/download the report',
130
+ },
131
+ size: {
132
+ type: 'number',
133
+ optional: true,
134
+ description: 'Report file size in bytes',
135
+ },
136
+
137
+ // Distribution
138
+ recipients: {
139
+ type: 'string',
140
+ array: true,
141
+ optional: true,
142
+ description: 'Email addresses to send report to',
143
+ },
144
+ shared: {
145
+ type: 'boolean',
146
+ optional: true,
147
+ description: 'Whether report is publicly shared',
148
+ },
149
+ shareUrl: {
150
+ type: 'url',
151
+ optional: true,
152
+ description: 'Public URL for shared report',
153
+ },
154
+
155
+ // Metadata
156
+ tags: {
157
+ type: 'string',
158
+ array: true,
159
+ optional: true,
160
+ description: 'Tags for categorizing reports',
161
+ },
162
+ category: {
163
+ type: 'string',
164
+ optional: true,
165
+ description: 'Report category',
166
+ },
167
+ },
168
+
169
+ relationships: {
170
+ dataSource: {
171
+ type: 'DataSource',
172
+ description: 'Primary data source for the report',
173
+ },
174
+ dataSources: {
175
+ type: 'DataSource[]',
176
+ description: 'All data sources used in the report',
177
+ },
178
+ queries: {
179
+ type: 'Query[]',
180
+ description: 'Queries used to fetch report data',
181
+ },
182
+ metrics: {
183
+ type: 'Metric[]',
184
+ description: 'Metrics included in the report',
185
+ },
186
+ widgets: {
187
+ type: 'Widget[]',
188
+ description: 'Widgets/visualizations in the report',
189
+ },
190
+ owner: {
191
+ type: 'Contact',
192
+ description: 'Report owner/creator',
193
+ },
194
+ subscribers: {
195
+ type: 'Contact[]',
196
+ description: 'People subscribed to receive this report',
197
+ },
198
+ },
199
+
200
+ actions: [
201
+ 'create',
202
+ 'edit',
203
+ 'generate',
204
+ 'regenerate',
205
+ 'schedule',
206
+ 'unschedule',
207
+ 'export',
208
+ 'download',
209
+ 'share',
210
+ 'unshare',
211
+ 'send',
212
+ 'duplicate',
213
+ 'archive',
214
+ 'delete',
215
+ 'subscribe',
216
+ 'unsubscribe',
217
+ ],
218
+
219
+ events: [
220
+ 'created',
221
+ 'edited',
222
+ 'generating',
223
+ 'generated',
224
+ 'failed',
225
+ 'scheduled',
226
+ 'unscheduled',
227
+ 'exported',
228
+ 'downloaded',
229
+ 'shared',
230
+ 'unshared',
231
+ 'sent',
232
+ 'duplicated',
233
+ 'archived',
234
+ 'deleted',
235
+ ],
236
+ }
237
+
238
+ // =============================================================================
239
+ // Dashboard
240
+ // =============================================================================
241
+
242
+ /**
243
+ * Dashboard entity
244
+ *
245
+ * Represents a dashboard with multiple widgets displaying metrics and data
246
+ */
247
+ export const Dashboard: Noun = {
248
+ singular: 'dashboard',
249
+ plural: 'dashboards',
250
+ description: 'A dashboard containing widgets and charts for data visualization',
251
+
252
+ properties: {
253
+ // Identity
254
+ name: {
255
+ type: 'string',
256
+ description: 'Dashboard name',
257
+ },
258
+ description: {
259
+ type: 'string',
260
+ optional: true,
261
+ description: 'Dashboard description',
262
+ },
263
+
264
+ // Layout
265
+ layout: {
266
+ type: 'string',
267
+ description: 'Dashboard layout type: grid, freeform, fixed',
268
+ examples: ['grid', 'freeform', 'fixed'],
269
+ },
270
+ columns: {
271
+ type: 'number',
272
+ optional: true,
273
+ description: 'Number of columns in grid layout',
274
+ },
275
+ theme: {
276
+ type: 'string',
277
+ optional: true,
278
+ description: 'Dashboard theme: light, dark, custom',
279
+ examples: ['light', 'dark', 'custom'],
280
+ },
281
+ customStyles: {
282
+ type: 'json',
283
+ optional: true,
284
+ description: 'Custom CSS styles or theme configuration',
285
+ },
286
+
287
+ // Time settings
288
+ timeRange: {
289
+ type: 'string',
290
+ optional: true,
291
+ description: 'Default time range: last_hour, last_24h, last_7d, last_30d, last_90d, custom',
292
+ examples: ['last_hour', 'last_24h', 'last_7d', 'last_30d', 'last_90d', 'custom'],
293
+ },
294
+ startDate: {
295
+ type: 'datetime',
296
+ optional: true,
297
+ description: 'Start date for custom time range',
298
+ },
299
+ endDate: {
300
+ type: 'datetime',
301
+ optional: true,
302
+ description: 'End date for custom time range',
303
+ },
304
+ autoRefresh: {
305
+ type: 'boolean',
306
+ optional: true,
307
+ description: 'Whether dashboard auto-refreshes',
308
+ },
309
+ refreshInterval: {
310
+ type: 'number',
311
+ optional: true,
312
+ description: 'Auto-refresh interval in seconds',
313
+ },
314
+ lastRefreshedAt: {
315
+ type: 'datetime',
316
+ optional: true,
317
+ description: 'When dashboard was last refreshed',
318
+ },
319
+
320
+ // Access control
321
+ visibility: {
322
+ type: 'string',
323
+ description: 'Dashboard visibility: private, team, organization, public',
324
+ examples: ['private', 'team', 'organization', 'public'],
325
+ },
326
+ shared: {
327
+ type: 'boolean',
328
+ optional: true,
329
+ description: 'Whether dashboard is publicly shared',
330
+ },
331
+ shareUrl: {
332
+ type: 'url',
333
+ optional: true,
334
+ description: 'Public URL for shared dashboard',
335
+ },
336
+ embedded: {
337
+ type: 'boolean',
338
+ optional: true,
339
+ description: 'Whether dashboard can be embedded',
340
+ },
341
+
342
+ // Organization
343
+ favorite: {
344
+ type: 'boolean',
345
+ optional: true,
346
+ description: 'Whether dashboard is favorited by current user',
347
+ },
348
+ tags: {
349
+ type: 'string',
350
+ array: true,
351
+ optional: true,
352
+ description: 'Tags for categorizing dashboard',
353
+ },
354
+ category: {
355
+ type: 'string',
356
+ optional: true,
357
+ description: 'Dashboard category',
358
+ },
359
+ template: {
360
+ type: 'boolean',
361
+ optional: true,
362
+ description: 'Whether this is a template dashboard',
363
+ },
364
+ },
365
+
366
+ relationships: {
367
+ widgets: {
368
+ type: 'Widget[]',
369
+ backref: 'dashboard',
370
+ description: 'Widgets displayed on this dashboard',
371
+ },
372
+ dataSources: {
373
+ type: 'DataSource[]',
374
+ description: 'Data sources used by dashboard widgets',
375
+ },
376
+ owner: {
377
+ type: 'Contact',
378
+ description: 'Dashboard owner/creator',
379
+ },
380
+ viewers: {
381
+ type: 'Contact[]',
382
+ description: 'People with view access',
383
+ },
384
+ editors: {
385
+ type: 'Contact[]',
386
+ description: 'People with edit access',
387
+ },
388
+ },
389
+
390
+ actions: [
391
+ 'create',
392
+ 'edit',
393
+ 'view',
394
+ 'refresh',
395
+ 'duplicate',
396
+ 'export',
397
+ 'share',
398
+ 'unshare',
399
+ 'embed',
400
+ 'favorite',
401
+ 'unfavorite',
402
+ 'addWidget',
403
+ 'removeWidget',
404
+ 'reorderWidgets',
405
+ 'setTimeRange',
406
+ 'archive',
407
+ 'delete',
408
+ ],
409
+
410
+ events: [
411
+ 'created',
412
+ 'edited',
413
+ 'viewed',
414
+ 'refreshed',
415
+ 'duplicated',
416
+ 'exported',
417
+ 'shared',
418
+ 'unshared',
419
+ 'embedded',
420
+ 'favorited',
421
+ 'unfavorited',
422
+ 'widgetAdded',
423
+ 'widgetRemoved',
424
+ 'widgetsReordered',
425
+ 'timeRangeChanged',
426
+ 'archived',
427
+ 'deleted',
428
+ ],
429
+ }
430
+
431
+ // =============================================================================
432
+ // Widget
433
+ // =============================================================================
434
+
435
+ /**
436
+ * Widget entity
437
+ *
438
+ * Represents a dashboard widget (chart, metric, table, etc.)
439
+ */
440
+ export const Widget: Noun = {
441
+ singular: 'widget',
442
+ plural: 'widgets',
443
+ description: 'A dashboard widget displaying data as a chart, metric, table, or other visualization',
444
+
445
+ properties: {
446
+ // Identity
447
+ title: {
448
+ type: 'string',
449
+ description: 'Widget title',
450
+ },
451
+ description: {
452
+ type: 'string',
453
+ optional: true,
454
+ description: 'Widget description',
455
+ },
456
+
457
+ // Type and visualization
458
+ type: {
459
+ type: 'string',
460
+ description: 'Widget type: metric, chart, table, text, image, iframe',
461
+ examples: ['metric', 'chart', 'table', 'text', 'image', 'iframe'],
462
+ },
463
+ chartType: {
464
+ type: 'string',
465
+ optional: true,
466
+ description: 'Chart type: line, bar, pie, area, scatter, heatmap, gauge, funnel',
467
+ examples: ['line', 'bar', 'pie', 'area', 'scatter', 'heatmap', 'gauge', 'funnel'],
468
+ },
469
+ visualization: {
470
+ type: 'json',
471
+ optional: true,
472
+ description: 'Visualization configuration (axes, colors, legend, etc.)',
473
+ },
474
+
475
+ // Layout
476
+ position: {
477
+ type: 'json',
478
+ description: 'Widget position and size: {x, y, width, height}',
479
+ },
480
+ minWidth: {
481
+ type: 'number',
482
+ optional: true,
483
+ description: 'Minimum width in grid units',
484
+ },
485
+ minHeight: {
486
+ type: 'number',
487
+ optional: true,
488
+ description: 'Minimum height in grid units',
489
+ },
490
+
491
+ // Data
492
+ data: {
493
+ type: 'json',
494
+ optional: true,
495
+ description: 'Current widget data',
496
+ },
497
+ aggregation: {
498
+ type: 'string',
499
+ optional: true,
500
+ description: 'Data aggregation method: sum, avg, min, max, count, distinct',
501
+ examples: ['sum', 'avg', 'min', 'max', 'count', 'distinct'],
502
+ },
503
+ groupBy: {
504
+ type: 'string',
505
+ optional: true,
506
+ description: 'Field to group data by',
507
+ },
508
+ filters: {
509
+ type: 'json',
510
+ optional: true,
511
+ description: 'Data filters applied to widget',
512
+ },
513
+ limit: {
514
+ type: 'number',
515
+ optional: true,
516
+ description: 'Maximum number of data points or rows',
517
+ },
518
+
519
+ // Time settings
520
+ timeRange: {
521
+ type: 'string',
522
+ optional: true,
523
+ description: 'Widget-specific time range override',
524
+ },
525
+ startDate: {
526
+ type: 'datetime',
527
+ optional: true,
528
+ description: 'Start date for widget data',
529
+ },
530
+ endDate: {
531
+ type: 'datetime',
532
+ optional: true,
533
+ description: 'End date for widget data',
534
+ },
535
+
536
+ // Display options
537
+ showLegend: {
538
+ type: 'boolean',
539
+ optional: true,
540
+ description: 'Whether to show chart legend',
541
+ },
542
+ showLabels: {
543
+ type: 'boolean',
544
+ optional: true,
545
+ description: 'Whether to show data labels',
546
+ },
547
+ colors: {
548
+ type: 'string',
549
+ array: true,
550
+ optional: true,
551
+ description: 'Custom color palette',
552
+ },
553
+
554
+ // Status
555
+ loading: {
556
+ type: 'boolean',
557
+ optional: true,
558
+ description: 'Whether widget is currently loading data',
559
+ },
560
+ error: {
561
+ type: 'string',
562
+ optional: true,
563
+ description: 'Error message if data loading failed',
564
+ },
565
+ lastUpdatedAt: {
566
+ type: 'datetime',
567
+ optional: true,
568
+ description: 'When widget data was last updated',
569
+ },
570
+ },
571
+
572
+ relationships: {
573
+ dashboard: {
574
+ type: 'Dashboard',
575
+ backref: 'widgets',
576
+ description: 'Dashboard this widget belongs to',
577
+ },
578
+ dataSource: {
579
+ type: 'DataSource',
580
+ description: 'Data source for this widget',
581
+ },
582
+ query: {
583
+ type: 'Query',
584
+ description: 'Query used to fetch widget data',
585
+ },
586
+ metrics: {
587
+ type: 'Metric[]',
588
+ description: 'Metrics displayed in this widget',
589
+ },
590
+ alerts: {
591
+ type: 'Alert[]',
592
+ description: 'Alerts configured for this widget',
593
+ },
594
+ },
595
+
596
+ actions: [
597
+ 'create',
598
+ 'edit',
599
+ 'refresh',
600
+ 'duplicate',
601
+ 'resize',
602
+ 'move',
603
+ 'delete',
604
+ 'export',
605
+ 'drilldown',
606
+ 'filter',
607
+ 'setTimeRange',
608
+ 'toggleLegend',
609
+ 'changeChartType',
610
+ ],
611
+
612
+ events: [
613
+ 'created',
614
+ 'edited',
615
+ 'refreshed',
616
+ 'duplicated',
617
+ 'resized',
618
+ 'moved',
619
+ 'deleted',
620
+ 'exported',
621
+ 'drilledDown',
622
+ 'filtered',
623
+ 'timeRangeChanged',
624
+ 'dataLoaded',
625
+ 'dataFailed',
626
+ ],
627
+ }
628
+
629
+ // =============================================================================
630
+ // Metric
631
+ // =============================================================================
632
+
633
+ /**
634
+ * Metric entity
635
+ *
636
+ * Represents a tracked metric or KPI with current value and trends
637
+ */
638
+ export const Metric: Noun = {
639
+ singular: 'metric',
640
+ plural: 'metrics',
641
+ description: 'A tracked metric or key performance indicator (KPI)',
642
+
643
+ properties: {
644
+ // Identity
645
+ name: {
646
+ type: 'string',
647
+ description: 'Metric name',
648
+ },
649
+ displayName: {
650
+ type: 'string',
651
+ optional: true,
652
+ description: 'Human-readable display name',
653
+ },
654
+ description: {
655
+ type: 'string',
656
+ optional: true,
657
+ description: 'Metric description',
658
+ },
659
+
660
+ // Type and calculation
661
+ type: {
662
+ type: 'string',
663
+ description: 'Metric type: number, currency, percentage, ratio, duration, count',
664
+ examples: ['number', 'currency', 'percentage', 'ratio', 'duration', 'count'],
665
+ },
666
+ unit: {
667
+ type: 'string',
668
+ optional: true,
669
+ description: 'Unit of measurement',
670
+ },
671
+ format: {
672
+ type: 'string',
673
+ optional: true,
674
+ description: 'Display format string',
675
+ },
676
+ aggregation: {
677
+ type: 'string',
678
+ description: 'Aggregation method: sum, avg, min, max, count, distinct',
679
+ examples: ['sum', 'avg', 'min', 'max', 'count', 'distinct'],
680
+ },
681
+ formula: {
682
+ type: 'string',
683
+ optional: true,
684
+ description: 'Calculation formula for computed metrics',
685
+ },
686
+
687
+ // Current value
688
+ value: {
689
+ type: 'number',
690
+ description: 'Current metric value',
691
+ },
692
+ previousValue: {
693
+ type: 'number',
694
+ optional: true,
695
+ description: 'Previous period value for comparison',
696
+ },
697
+ change: {
698
+ type: 'number',
699
+ optional: true,
700
+ description: 'Absolute change from previous period',
701
+ },
702
+ changePercent: {
703
+ type: 'number',
704
+ optional: true,
705
+ description: 'Percentage change from previous period',
706
+ },
707
+
708
+ // Trend
709
+ trend: {
710
+ type: 'string',
711
+ optional: true,
712
+ description: 'Trend direction: up, down, flat',
713
+ examples: ['up', 'down', 'flat'],
714
+ },
715
+ trendData: {
716
+ type: 'json',
717
+ optional: true,
718
+ description: 'Time series data for trend visualization',
719
+ },
720
+
721
+ // Thresholds
722
+ target: {
723
+ type: 'number',
724
+ optional: true,
725
+ description: 'Target value or goal',
726
+ },
727
+ minValue: {
728
+ type: 'number',
729
+ optional: true,
730
+ description: 'Minimum acceptable value',
731
+ },
732
+ maxValue: {
733
+ type: 'number',
734
+ optional: true,
735
+ description: 'Maximum acceptable value',
736
+ },
737
+ warningThreshold: {
738
+ type: 'number',
739
+ optional: true,
740
+ description: 'Warning threshold value',
741
+ },
742
+ criticalThreshold: {
743
+ type: 'number',
744
+ optional: true,
745
+ description: 'Critical threshold value',
746
+ },
747
+
748
+ // Status
749
+ status: {
750
+ type: 'string',
751
+ optional: true,
752
+ description: 'Metric status: normal, warning, critical, unknown',
753
+ examples: ['normal', 'warning', 'critical', 'unknown'],
754
+ },
755
+
756
+ // Metadata
757
+ category: {
758
+ type: 'string',
759
+ optional: true,
760
+ description: 'Metric category',
761
+ },
762
+ tags: {
763
+ type: 'string',
764
+ array: true,
765
+ optional: true,
766
+ description: 'Tags for categorization',
767
+ },
768
+ dimensions: {
769
+ type: 'json',
770
+ optional: true,
771
+ description: 'Dimensional breakdown of metric',
772
+ },
773
+
774
+ // Timing
775
+ period: {
776
+ type: 'string',
777
+ optional: true,
778
+ description: 'Time period: hourly, daily, weekly, monthly, quarterly, yearly',
779
+ examples: ['hourly', 'daily', 'weekly', 'monthly', 'quarterly', 'yearly'],
780
+ },
781
+ timestamp: {
782
+ type: 'datetime',
783
+ optional: true,
784
+ description: 'When metric was last calculated',
785
+ },
786
+ },
787
+
788
+ relationships: {
789
+ dataSource: {
790
+ type: 'DataSource',
791
+ description: 'Data source for this metric',
792
+ },
793
+ query: {
794
+ type: 'Query',
795
+ description: 'Query used to calculate metric',
796
+ },
797
+ goal: {
798
+ type: 'Goal',
799
+ required: false,
800
+ description: 'Associated goal or target',
801
+ },
802
+ alerts: {
803
+ type: 'Alert[]',
804
+ backref: 'metric',
805
+ description: 'Alerts configured for this metric',
806
+ },
807
+ reports: {
808
+ type: 'Report[]',
809
+ description: 'Reports that include this metric',
810
+ },
811
+ dashboards: {
812
+ type: 'Dashboard[]',
813
+ description: 'Dashboards that display this metric',
814
+ },
815
+ },
816
+
817
+ actions: [
818
+ 'calculate',
819
+ 'refresh',
820
+ 'setTarget',
821
+ 'setThreshold',
822
+ 'track',
823
+ 'compare',
824
+ 'export',
825
+ 'archive',
826
+ 'delete',
827
+ ],
828
+
829
+ events: [
830
+ 'calculated',
831
+ 'refreshed',
832
+ 'targetSet',
833
+ 'thresholdSet',
834
+ 'thresholdExceeded',
835
+ 'targetReached',
836
+ 'trendChanged',
837
+ 'archived',
838
+ 'deleted',
839
+ ],
840
+ }
841
+
842
+ // =============================================================================
843
+ // Goal
844
+ // =============================================================================
845
+
846
+ /**
847
+ * Goal entity
848
+ *
849
+ * Represents a goal or target with progress tracking
850
+ */
851
+ export const Goal: Noun = {
852
+ singular: 'goal',
853
+ plural: 'goals',
854
+ description: 'A goal or target with progress tracking',
855
+
856
+ properties: {
857
+ // Identity
858
+ name: {
859
+ type: 'string',
860
+ description: 'Goal name',
861
+ },
862
+ description: {
863
+ type: 'string',
864
+ optional: true,
865
+ description: 'Goal description',
866
+ },
867
+
868
+ // Target
869
+ target: {
870
+ type: 'number',
871
+ description: 'Target value to achieve',
872
+ },
873
+ unit: {
874
+ type: 'string',
875
+ optional: true,
876
+ description: 'Unit of measurement',
877
+ },
878
+ type: {
879
+ type: 'string',
880
+ description: 'Goal type: increase, decrease, maintain, threshold',
881
+ examples: ['increase', 'decrease', 'maintain', 'threshold'],
882
+ },
883
+
884
+ // Current state
885
+ current: {
886
+ type: 'number',
887
+ description: 'Current value',
888
+ },
889
+ progress: {
890
+ type: 'number',
891
+ description: 'Progress percentage (0-100)',
892
+ },
893
+ remaining: {
894
+ type: 'number',
895
+ optional: true,
896
+ description: 'Remaining amount to reach goal',
897
+ },
898
+
899
+ // Timing
900
+ startDate: {
901
+ type: 'datetime',
902
+ description: 'Goal start date',
903
+ },
904
+ endDate: {
905
+ type: 'datetime',
906
+ description: 'Goal target completion date',
907
+ },
908
+ completedAt: {
909
+ type: 'datetime',
910
+ optional: true,
911
+ description: 'When goal was achieved',
912
+ },
913
+
914
+ // Status
915
+ status: {
916
+ type: 'string',
917
+ description: 'Goal status: active, completed, failed, cancelled, paused',
918
+ examples: ['active', 'completed', 'failed', 'cancelled', 'paused'],
919
+ },
920
+ onTrack: {
921
+ type: 'boolean',
922
+ optional: true,
923
+ description: 'Whether goal is on track to be achieved',
924
+ },
925
+ projectedCompletion: {
926
+ type: 'datetime',
927
+ optional: true,
928
+ description: 'Projected completion date based on current progress',
929
+ },
930
+
931
+ // Organization
932
+ priority: {
933
+ type: 'string',
934
+ optional: true,
935
+ description: 'Goal priority: low, medium, high, critical',
936
+ examples: ['low', 'medium', 'high', 'critical'],
937
+ },
938
+ category: {
939
+ type: 'string',
940
+ optional: true,
941
+ description: 'Goal category',
942
+ },
943
+ tags: {
944
+ type: 'string',
945
+ array: true,
946
+ optional: true,
947
+ description: 'Tags for categorization',
948
+ },
949
+
950
+ // Notifications
951
+ notifyOnProgress: {
952
+ type: 'boolean',
953
+ optional: true,
954
+ description: 'Whether to notify on progress milestones',
955
+ },
956
+ notifyOnCompletion: {
957
+ type: 'boolean',
958
+ optional: true,
959
+ description: 'Whether to notify when goal is achieved',
960
+ },
961
+ },
962
+
963
+ relationships: {
964
+ metric: {
965
+ type: 'Metric',
966
+ description: 'Metric being tracked for this goal',
967
+ },
968
+ owner: {
969
+ type: 'Contact',
970
+ description: 'Goal owner/responsible person',
971
+ },
972
+ team: {
973
+ type: 'Contact[]',
974
+ description: 'Team members working towards this goal',
975
+ },
976
+ milestones: {
977
+ type: 'Goal[]',
978
+ description: 'Sub-goals or milestones',
979
+ },
980
+ parentGoal: {
981
+ type: 'Goal',
982
+ required: false,
983
+ description: 'Parent goal if this is a milestone',
984
+ },
985
+ },
986
+
987
+ actions: [
988
+ 'create',
989
+ 'update',
990
+ 'track',
991
+ 'complete',
992
+ 'fail',
993
+ 'cancel',
994
+ 'pause',
995
+ 'resume',
996
+ 'setTarget',
997
+ 'addMilestone',
998
+ 'delete',
999
+ ],
1000
+
1001
+ events: [
1002
+ 'created',
1003
+ 'updated',
1004
+ 'progressed',
1005
+ 'completed',
1006
+ 'failed',
1007
+ 'cancelled',
1008
+ 'paused',
1009
+ 'resumed',
1010
+ 'targetChanged',
1011
+ 'milestoneAdded',
1012
+ 'milestoneReached',
1013
+ 'deleted',
1014
+ ],
1015
+ }
1016
+
1017
+ // =============================================================================
1018
+ // DataSource
1019
+ // =============================================================================
1020
+
1021
+ /**
1022
+ * DataSource entity
1023
+ *
1024
+ * Represents a connection to a data source (database, API, file, etc.)
1025
+ */
1026
+ export const DataSource: Noun = {
1027
+ singular: 'data source',
1028
+ plural: 'data sources',
1029
+ description: 'A connection to a data source for analytics and reporting',
1030
+
1031
+ properties: {
1032
+ // Identity
1033
+ name: {
1034
+ type: 'string',
1035
+ description: 'Data source name',
1036
+ },
1037
+ description: {
1038
+ type: 'string',
1039
+ optional: true,
1040
+ description: 'Data source description',
1041
+ },
1042
+
1043
+ // Type and connection
1044
+ type: {
1045
+ type: 'string',
1046
+ description: 'Data source type: database, api, file, webhook, streaming',
1047
+ examples: ['database', 'api', 'file', 'webhook', 'streaming'],
1048
+ },
1049
+ subtype: {
1050
+ type: 'string',
1051
+ optional: true,
1052
+ description: 'Specific data source subtype: postgresql, mysql, mongodb, rest, graphql, csv, json, etc.',
1053
+ examples: ['postgresql', 'mysql', 'mongodb', 'rest', 'graphql', 'csv', 'json'],
1054
+ },
1055
+ connectionString: {
1056
+ type: 'string',
1057
+ optional: true,
1058
+ description: 'Connection string or URL (may be encrypted)',
1059
+ },
1060
+ host: {
1061
+ type: 'string',
1062
+ optional: true,
1063
+ description: 'Host address',
1064
+ },
1065
+ port: {
1066
+ type: 'number',
1067
+ optional: true,
1068
+ description: 'Port number',
1069
+ },
1070
+ database: {
1071
+ type: 'string',
1072
+ optional: true,
1073
+ description: 'Database name',
1074
+ },
1075
+ schema: {
1076
+ type: 'string',
1077
+ optional: true,
1078
+ description: 'Schema name',
1079
+ },
1080
+
1081
+ // Authentication
1082
+ authType: {
1083
+ type: 'string',
1084
+ optional: true,
1085
+ description: 'Authentication type: none, basic, apikey, oauth, certificate',
1086
+ examples: ['none', 'basic', 'apikey', 'oauth', 'certificate'],
1087
+ },
1088
+ username: {
1089
+ type: 'string',
1090
+ optional: true,
1091
+ description: 'Username for authentication',
1092
+ },
1093
+ encrypted: {
1094
+ type: 'boolean',
1095
+ optional: true,
1096
+ description: 'Whether credentials are encrypted',
1097
+ },
1098
+
1099
+ // Configuration
1100
+ config: {
1101
+ type: 'json',
1102
+ optional: true,
1103
+ description: 'Additional configuration options',
1104
+ },
1105
+ timeout: {
1106
+ type: 'number',
1107
+ optional: true,
1108
+ description: 'Connection timeout in milliseconds',
1109
+ },
1110
+ maxConnections: {
1111
+ type: 'number',
1112
+ optional: true,
1113
+ description: 'Maximum number of concurrent connections',
1114
+ },
1115
+ ssl: {
1116
+ type: 'boolean',
1117
+ optional: true,
1118
+ description: 'Whether to use SSL/TLS',
1119
+ },
1120
+
1121
+ // Status
1122
+ status: {
1123
+ type: 'string',
1124
+ description: 'Connection status: connected, disconnected, error, testing',
1125
+ examples: ['connected', 'disconnected', 'error', 'testing'],
1126
+ },
1127
+ lastConnectedAt: {
1128
+ type: 'datetime',
1129
+ optional: true,
1130
+ description: 'When connection was last established',
1131
+ },
1132
+ lastTestedAt: {
1133
+ type: 'datetime',
1134
+ optional: true,
1135
+ description: 'When connection was last tested',
1136
+ },
1137
+ error: {
1138
+ type: 'string',
1139
+ optional: true,
1140
+ description: 'Connection error message',
1141
+ },
1142
+
1143
+ // Metadata
1144
+ tables: {
1145
+ type: 'string',
1146
+ array: true,
1147
+ optional: true,
1148
+ description: 'Available tables or collections',
1149
+ },
1150
+ dataSchema: {
1151
+ type: 'json',
1152
+ optional: true,
1153
+ description: 'Data schema information',
1154
+ },
1155
+ tags: {
1156
+ type: 'string',
1157
+ array: true,
1158
+ optional: true,
1159
+ description: 'Tags for categorization',
1160
+ },
1161
+
1162
+ // Access control
1163
+ readOnly: {
1164
+ type: 'boolean',
1165
+ optional: true,
1166
+ description: 'Whether connection is read-only',
1167
+ },
1168
+ shared: {
1169
+ type: 'boolean',
1170
+ optional: true,
1171
+ description: 'Whether data source is shared with team',
1172
+ },
1173
+ },
1174
+
1175
+ relationships: {
1176
+ reports: {
1177
+ type: 'Report[]',
1178
+ description: 'Reports using this data source',
1179
+ },
1180
+ dashboards: {
1181
+ type: 'Dashboard[]',
1182
+ description: 'Dashboards using this data source',
1183
+ },
1184
+ queries: {
1185
+ type: 'Query[]',
1186
+ backref: 'dataSource',
1187
+ description: 'Queries saved for this data source',
1188
+ },
1189
+ metrics: {
1190
+ type: 'Metric[]',
1191
+ description: 'Metrics calculated from this data source',
1192
+ },
1193
+ owner: {
1194
+ type: 'Contact',
1195
+ description: 'Data source owner',
1196
+ },
1197
+ collaborators: {
1198
+ type: 'Contact[]',
1199
+ description: 'People with access to this data source',
1200
+ },
1201
+ },
1202
+
1203
+ actions: [
1204
+ 'create',
1205
+ 'edit',
1206
+ 'connect',
1207
+ 'disconnect',
1208
+ 'test',
1209
+ 'refresh',
1210
+ 'query',
1211
+ 'sync',
1212
+ 'share',
1213
+ 'unshare',
1214
+ 'delete',
1215
+ ],
1216
+
1217
+ events: [
1218
+ 'created',
1219
+ 'edited',
1220
+ 'connected',
1221
+ 'disconnected',
1222
+ 'tested',
1223
+ 'refreshed',
1224
+ 'queried',
1225
+ 'synced',
1226
+ 'shared',
1227
+ 'unshared',
1228
+ 'failed',
1229
+ 'deleted',
1230
+ ],
1231
+ }
1232
+
1233
+ // =============================================================================
1234
+ // Query
1235
+ // =============================================================================
1236
+
1237
+ /**
1238
+ * Query entity
1239
+ *
1240
+ * Represents a saved query or filter for data retrieval
1241
+ */
1242
+ export const Query: Noun = {
1243
+ singular: 'query',
1244
+ plural: 'queries',
1245
+ description: 'A saved query or filter for retrieving data',
1246
+
1247
+ properties: {
1248
+ // Identity
1249
+ name: {
1250
+ type: 'string',
1251
+ description: 'Query name',
1252
+ },
1253
+ description: {
1254
+ type: 'string',
1255
+ optional: true,
1256
+ description: 'Query description',
1257
+ },
1258
+
1259
+ // Query definition
1260
+ queryType: {
1261
+ type: 'string',
1262
+ description: 'Query type: sql, graphql, rest, nosql, custom',
1263
+ examples: ['sql', 'graphql', 'rest', 'nosql', 'custom'],
1264
+ },
1265
+ queryString: {
1266
+ type: 'string',
1267
+ description: 'The query text (SQL, GraphQL, etc.)',
1268
+ },
1269
+ parameters: {
1270
+ type: 'json',
1271
+ optional: true,
1272
+ description: 'Query parameters and their default values',
1273
+ },
1274
+ variables: {
1275
+ type: 'json',
1276
+ optional: true,
1277
+ description: 'Current variable values',
1278
+ },
1279
+
1280
+ // Filters and transformations
1281
+ filters: {
1282
+ type: 'json',
1283
+ optional: true,
1284
+ description: 'Additional filters applied to results',
1285
+ },
1286
+ sort: {
1287
+ type: 'json',
1288
+ optional: true,
1289
+ description: 'Sort configuration',
1290
+ },
1291
+ limit: {
1292
+ type: 'number',
1293
+ optional: true,
1294
+ description: 'Maximum number of results',
1295
+ },
1296
+ offset: {
1297
+ type: 'number',
1298
+ optional: true,
1299
+ description: 'Result offset for pagination',
1300
+ },
1301
+ transformations: {
1302
+ type: 'json',
1303
+ optional: true,
1304
+ description: 'Data transformations to apply',
1305
+ },
1306
+
1307
+ // Caching
1308
+ cached: {
1309
+ type: 'boolean',
1310
+ optional: true,
1311
+ description: 'Whether to cache query results',
1312
+ },
1313
+ cacheDuration: {
1314
+ type: 'number',
1315
+ optional: true,
1316
+ description: 'Cache duration in seconds',
1317
+ },
1318
+ lastExecutedAt: {
1319
+ type: 'datetime',
1320
+ optional: true,
1321
+ description: 'When query was last executed',
1322
+ },
1323
+
1324
+ // Performance
1325
+ executionTime: {
1326
+ type: 'number',
1327
+ optional: true,
1328
+ description: 'Last execution time in milliseconds',
1329
+ },
1330
+ rowCount: {
1331
+ type: 'number',
1332
+ optional: true,
1333
+ description: 'Number of rows returned',
1334
+ },
1335
+ timeout: {
1336
+ type: 'number',
1337
+ optional: true,
1338
+ description: 'Query timeout in milliseconds',
1339
+ },
1340
+
1341
+ // Status
1342
+ status: {
1343
+ type: 'string',
1344
+ optional: true,
1345
+ description: 'Query status: ready, running, completed, failed',
1346
+ examples: ['ready', 'running', 'completed', 'failed'],
1347
+ },
1348
+ error: {
1349
+ type: 'string',
1350
+ optional: true,
1351
+ description: 'Error message if query failed',
1352
+ },
1353
+
1354
+ // Organization
1355
+ category: {
1356
+ type: 'string',
1357
+ optional: true,
1358
+ description: 'Query category',
1359
+ },
1360
+ tags: {
1361
+ type: 'string',
1362
+ array: true,
1363
+ optional: true,
1364
+ description: 'Tags for categorization',
1365
+ },
1366
+ favorite: {
1367
+ type: 'boolean',
1368
+ optional: true,
1369
+ description: 'Whether query is favorited',
1370
+ },
1371
+ shared: {
1372
+ type: 'boolean',
1373
+ optional: true,
1374
+ description: 'Whether query is shared with team',
1375
+ },
1376
+ },
1377
+
1378
+ relationships: {
1379
+ dataSource: {
1380
+ type: 'DataSource',
1381
+ backref: 'queries',
1382
+ description: 'Data source this query runs against',
1383
+ },
1384
+ reports: {
1385
+ type: 'Report[]',
1386
+ description: 'Reports using this query',
1387
+ },
1388
+ widgets: {
1389
+ type: 'Widget[]',
1390
+ description: 'Widgets using this query',
1391
+ },
1392
+ metrics: {
1393
+ type: 'Metric[]',
1394
+ description: 'Metrics calculated from this query',
1395
+ },
1396
+ owner: {
1397
+ type: 'Contact',
1398
+ description: 'Query owner/creator',
1399
+ },
1400
+ collaborators: {
1401
+ type: 'Contact[]',
1402
+ description: 'People with access to this query',
1403
+ },
1404
+ },
1405
+
1406
+ actions: [
1407
+ 'create',
1408
+ 'edit',
1409
+ 'execute',
1410
+ 'cancel',
1411
+ 'test',
1412
+ 'validate',
1413
+ 'optimize',
1414
+ 'schedule',
1415
+ 'export',
1416
+ 'duplicate',
1417
+ 'share',
1418
+ 'unshare',
1419
+ 'favorite',
1420
+ 'unfavorite',
1421
+ 'delete',
1422
+ ],
1423
+
1424
+ events: [
1425
+ 'created',
1426
+ 'edited',
1427
+ 'executed',
1428
+ 'cancelled',
1429
+ 'tested',
1430
+ 'validated',
1431
+ 'optimized',
1432
+ 'scheduled',
1433
+ 'exported',
1434
+ 'duplicated',
1435
+ 'shared',
1436
+ 'unshared',
1437
+ 'favorited',
1438
+ 'unfavorited',
1439
+ 'failed',
1440
+ 'deleted',
1441
+ ],
1442
+ }
1443
+
1444
+ // =============================================================================
1445
+ // Alert
1446
+ // =============================================================================
1447
+
1448
+ /**
1449
+ * Alert entity
1450
+ *
1451
+ * Represents an alert or notification triggered by metric thresholds
1452
+ */
1453
+ export const Alert: Noun = {
1454
+ singular: 'alert',
1455
+ plural: 'alerts',
1456
+ description: 'An alert or notification based on metric thresholds and conditions',
1457
+
1458
+ properties: {
1459
+ // Identity
1460
+ name: {
1461
+ type: 'string',
1462
+ description: 'Alert name',
1463
+ },
1464
+ description: {
1465
+ type: 'string',
1466
+ optional: true,
1467
+ description: 'Alert description',
1468
+ },
1469
+
1470
+ // Condition
1471
+ condition: {
1472
+ type: 'string',
1473
+ description: 'Alert condition expression',
1474
+ },
1475
+ operator: {
1476
+ type: 'string',
1477
+ description: 'Comparison operator: gt, gte, lt, lte, eq, ne, between, outside',
1478
+ examples: ['gt', 'gte', 'lt', 'lte', 'eq', 'ne', 'between', 'outside'],
1479
+ },
1480
+ threshold: {
1481
+ type: 'number',
1482
+ description: 'Threshold value',
1483
+ },
1484
+ secondThreshold: {
1485
+ type: 'number',
1486
+ optional: true,
1487
+ description: 'Second threshold for between/outside operators',
1488
+ },
1489
+
1490
+ // Evaluation
1491
+ evaluationInterval: {
1492
+ type: 'number',
1493
+ description: 'How often to evaluate condition (in seconds)',
1494
+ },
1495
+ evaluationWindow: {
1496
+ type: 'number',
1497
+ optional: true,
1498
+ description: 'Time window for evaluation (in seconds)',
1499
+ },
1500
+ evaluationCount: {
1501
+ type: 'number',
1502
+ optional: true,
1503
+ description: 'Number of consecutive evaluations before triggering',
1504
+ },
1505
+
1506
+ // Severity
1507
+ severity: {
1508
+ type: 'string',
1509
+ description: 'Alert severity: info, warning, error, critical',
1510
+ examples: ['info', 'warning', 'error', 'critical'],
1511
+ },
1512
+ priority: {
1513
+ type: 'string',
1514
+ optional: true,
1515
+ description: 'Alert priority: low, medium, high',
1516
+ examples: ['low', 'medium', 'high'],
1517
+ },
1518
+
1519
+ // Status
1520
+ enabled: {
1521
+ type: 'boolean',
1522
+ description: 'Whether alert is enabled',
1523
+ },
1524
+ status: {
1525
+ type: 'string',
1526
+ description: 'Alert status: active, triggered, resolved, snoozed, disabled',
1527
+ examples: ['active', 'triggered', 'resolved', 'snoozed', 'disabled'],
1528
+ },
1529
+ triggeredAt: {
1530
+ type: 'datetime',
1531
+ optional: true,
1532
+ description: 'When alert was triggered',
1533
+ },
1534
+ resolvedAt: {
1535
+ type: 'datetime',
1536
+ optional: true,
1537
+ description: 'When alert condition was resolved',
1538
+ },
1539
+ snoozedUntil: {
1540
+ type: 'datetime',
1541
+ optional: true,
1542
+ description: 'Alert is snoozed until this time',
1543
+ },
1544
+ lastEvaluatedAt: {
1545
+ type: 'datetime',
1546
+ optional: true,
1547
+ description: 'When condition was last evaluated',
1548
+ },
1549
+ nextEvaluationAt: {
1550
+ type: 'datetime',
1551
+ optional: true,
1552
+ description: 'When condition will be evaluated next',
1553
+ },
1554
+
1555
+ // Notification
1556
+ notificationChannels: {
1557
+ type: 'string',
1558
+ array: true,
1559
+ optional: true,
1560
+ description: 'Notification channels: email, sms, slack, webhook, push',
1561
+ examples: ['email', 'sms', 'slack', 'webhook', 'push'],
1562
+ },
1563
+ recipients: {
1564
+ type: 'string',
1565
+ array: true,
1566
+ optional: true,
1567
+ description: 'Recipients to notify',
1568
+ },
1569
+ message: {
1570
+ type: 'string',
1571
+ optional: true,
1572
+ description: 'Custom alert message',
1573
+ },
1574
+ notifyOnResolve: {
1575
+ type: 'boolean',
1576
+ optional: true,
1577
+ description: 'Whether to notify when alert resolves',
1578
+ },
1579
+
1580
+ // History
1581
+ triggerCount: {
1582
+ type: 'number',
1583
+ optional: true,
1584
+ description: 'Number of times alert has triggered',
1585
+ },
1586
+ lastTriggerValue: {
1587
+ type: 'number',
1588
+ optional: true,
1589
+ description: 'Metric value when last triggered',
1590
+ },
1591
+
1592
+ // Organization
1593
+ tags: {
1594
+ type: 'string',
1595
+ array: true,
1596
+ optional: true,
1597
+ description: 'Tags for categorization',
1598
+ },
1599
+ category: {
1600
+ type: 'string',
1601
+ optional: true,
1602
+ description: 'Alert category',
1603
+ },
1604
+ },
1605
+
1606
+ relationships: {
1607
+ metric: {
1608
+ type: 'Metric',
1609
+ backref: 'alerts',
1610
+ description: 'Metric being monitored',
1611
+ },
1612
+ widget: {
1613
+ type: 'Widget',
1614
+ required: false,
1615
+ description: 'Widget associated with this alert',
1616
+ },
1617
+ dataSource: {
1618
+ type: 'DataSource',
1619
+ description: 'Data source for alert evaluation',
1620
+ },
1621
+ owner: {
1622
+ type: 'Contact',
1623
+ description: 'Alert owner/creator',
1624
+ },
1625
+ subscribers: {
1626
+ type: 'Contact[]',
1627
+ description: 'People subscribed to alert notifications',
1628
+ },
1629
+ },
1630
+
1631
+ actions: [
1632
+ 'create',
1633
+ 'edit',
1634
+ 'enable',
1635
+ 'disable',
1636
+ 'trigger',
1637
+ 'resolve',
1638
+ 'snooze',
1639
+ 'unsnooze',
1640
+ 'test',
1641
+ 'acknowledge',
1642
+ 'escalate',
1643
+ 'delete',
1644
+ ],
1645
+
1646
+ events: [
1647
+ 'created',
1648
+ 'edited',
1649
+ 'enabled',
1650
+ 'disabled',
1651
+ 'triggered',
1652
+ 'resolved',
1653
+ 'snoozed',
1654
+ 'unsnoozed',
1655
+ 'tested',
1656
+ 'acknowledged',
1657
+ 'escalated',
1658
+ 'notificationSent',
1659
+ 'notificationFailed',
1660
+ 'deleted',
1661
+ ],
1662
+ }
1663
+
1664
+ // =============================================================================
1665
+ // Export all entities as a schema
1666
+ // =============================================================================
1667
+
1668
+ /**
1669
+ * All analytics and reporting entity types
1670
+ */
1671
+ export const AnalyticsEntities = {
1672
+ Report,
1673
+ Dashboard,
1674
+ Widget,
1675
+ Metric,
1676
+ Goal,
1677
+ DataSource,
1678
+ Query,
1679
+ Alert,
1680
+ }
1681
+
1682
+ /**
1683
+ * Entity categories for organization
1684
+ */
1685
+ export const AnalyticsCategories = {
1686
+ reporting: ['Report'],
1687
+ visualization: ['Dashboard', 'Widget'],
1688
+ tracking: ['Metric', 'Goal', 'Alert'],
1689
+ data: ['DataSource', 'Query'],
1690
+ } as const