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,1874 @@
1
+ /**
2
+ * Video Conferencing Entity Types (Nouns)
3
+ *
4
+ * Semantic type definitions for video conferencing 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
+ // Meeting
17
+ // =============================================================================
18
+
19
+ /**
20
+ * Meeting - A video meeting/conference call
21
+ *
22
+ * Represents a scheduled or instant video meeting with participants.
23
+ * This is the brand-agnostic equivalent of:
24
+ * - Zoom Meeting
25
+ * - Google Meet
26
+ * - Microsoft Teams Meeting
27
+ */
28
+ export const Meeting: Noun = {
29
+ singular: 'meeting',
30
+ plural: 'meetings',
31
+ description: 'A video conference meeting with participants',
32
+
33
+ properties: {
34
+ // Identity
35
+ title: {
36
+ type: 'string',
37
+ description: 'Meeting title or topic',
38
+ },
39
+ description: {
40
+ type: 'string',
41
+ optional: true,
42
+ description: 'Meeting description or agenda',
43
+ },
44
+ meetingId: {
45
+ type: 'string',
46
+ description: 'Unique meeting identifier',
47
+ },
48
+ passcode: {
49
+ type: 'string',
50
+ optional: true,
51
+ description: 'Meeting passcode for security',
52
+ },
53
+
54
+ // URL/Link
55
+ joinUrl: {
56
+ type: 'url',
57
+ description: 'URL to join the meeting',
58
+ },
59
+ startUrl: {
60
+ type: 'url',
61
+ optional: true,
62
+ description: 'URL for the host to start the meeting',
63
+ },
64
+
65
+ // Scheduling
66
+ scheduledAt: {
67
+ type: 'datetime',
68
+ optional: true,
69
+ description: 'When the meeting is scheduled to start',
70
+ },
71
+ scheduledDuration: {
72
+ type: 'number',
73
+ optional: true,
74
+ description: 'Scheduled duration in minutes',
75
+ },
76
+ timezone: {
77
+ type: 'string',
78
+ optional: true,
79
+ description: 'Timezone for the meeting',
80
+ },
81
+
82
+ // Status & Timing
83
+ status: {
84
+ type: 'string',
85
+ description: 'Meeting status: scheduled, waiting, in-progress, ended, canceled',
86
+ examples: ['scheduled', 'waiting', 'in-progress', 'ended', 'canceled'],
87
+ },
88
+ startedAt: {
89
+ type: 'datetime',
90
+ optional: true,
91
+ description: 'When the meeting actually started',
92
+ },
93
+ endedAt: {
94
+ type: 'datetime',
95
+ optional: true,
96
+ description: 'When the meeting ended',
97
+ },
98
+ actualDuration: {
99
+ type: 'number',
100
+ optional: true,
101
+ description: 'Actual meeting duration in minutes',
102
+ },
103
+
104
+ // Settings
105
+ isRecurring: {
106
+ type: 'boolean',
107
+ optional: true,
108
+ description: 'Whether this is a recurring meeting',
109
+ },
110
+ recurrenceRule: {
111
+ type: 'string',
112
+ optional: true,
113
+ description: 'Recurrence pattern (RRULE format)',
114
+ },
115
+ requiresPassword: {
116
+ type: 'boolean',
117
+ optional: true,
118
+ description: 'Whether a password is required to join',
119
+ },
120
+ waitingRoomEnabled: {
121
+ type: 'boolean',
122
+ optional: true,
123
+ description: 'Whether waiting room is enabled',
124
+ },
125
+ recordingEnabled: {
126
+ type: 'boolean',
127
+ optional: true,
128
+ description: 'Whether recording is enabled',
129
+ },
130
+ autoRecording: {
131
+ type: 'boolean',
132
+ optional: true,
133
+ description: 'Whether to automatically start recording',
134
+ },
135
+ muteOnEntry: {
136
+ type: 'boolean',
137
+ optional: true,
138
+ description: 'Whether participants are muted on entry',
139
+ },
140
+ allowScreenSharing: {
141
+ type: 'boolean',
142
+ optional: true,
143
+ description: 'Whether screen sharing is allowed',
144
+ },
145
+ allowChat: {
146
+ type: 'boolean',
147
+ optional: true,
148
+ description: 'Whether chat is enabled',
149
+ },
150
+
151
+ // Statistics
152
+ participantCount: {
153
+ type: 'number',
154
+ optional: true,
155
+ description: 'Current or maximum number of participants',
156
+ },
157
+ maxParticipants: {
158
+ type: 'number',
159
+ optional: true,
160
+ description: 'Maximum allowed participants',
161
+ },
162
+
163
+ // Integration
164
+ calendarEventId: {
165
+ type: 'string',
166
+ optional: true,
167
+ description: 'Associated calendar event ID',
168
+ },
169
+ },
170
+
171
+ relationships: {
172
+ host: {
173
+ type: 'Contact',
174
+ description: 'Meeting host/organizer',
175
+ },
176
+ participants: {
177
+ type: 'MeetingParticipant[]',
178
+ backref: 'meeting',
179
+ description: 'Participants in the meeting',
180
+ },
181
+ recordings: {
182
+ type: 'MeetingRecording[]',
183
+ backref: 'meeting',
184
+ description: 'Recordings of this meeting',
185
+ },
186
+ breakoutRooms: {
187
+ type: 'BreakoutRoom[]',
188
+ backref: 'meeting',
189
+ description: 'Breakout rooms created in this meeting',
190
+ },
191
+ polls: {
192
+ type: 'MeetingPoll[]',
193
+ backref: 'meeting',
194
+ description: 'Polls launched during the meeting',
195
+ },
196
+ chat: {
197
+ type: 'MeetingChat',
198
+ backref: 'meeting',
199
+ description: 'Chat messages during the meeting',
200
+ },
201
+ room: {
202
+ type: 'MeetingRoom',
203
+ required: false,
204
+ description: 'Virtual meeting room if this is a persistent room',
205
+ },
206
+ },
207
+
208
+ actions: [
209
+ 'schedule',
210
+ 'start',
211
+ 'join',
212
+ 'leave',
213
+ 'end',
214
+ 'cancel',
215
+ 'reschedule',
216
+ 'invite',
217
+ 'admit',
218
+ 'remove',
219
+ 'mute',
220
+ 'unmute',
221
+ 'muteAll',
222
+ 'unmuteAll',
223
+ 'startRecording',
224
+ 'stopRecording',
225
+ 'pauseRecording',
226
+ 'resumeRecording',
227
+ 'shareScreen',
228
+ 'stopScreenShare',
229
+ 'lock',
230
+ 'unlock',
231
+ 'createBreakoutRooms',
232
+ 'launchPoll',
233
+ 'sendChat',
234
+ ],
235
+
236
+ events: [
237
+ 'scheduled',
238
+ 'started',
239
+ 'joined',
240
+ 'left',
241
+ 'ended',
242
+ 'canceled',
243
+ 'rescheduled',
244
+ 'participantJoined',
245
+ 'participantLeft',
246
+ 'participantAdmitted',
247
+ 'participantRemoved',
248
+ 'recordingStarted',
249
+ 'recordingStopped',
250
+ 'recordingPaused',
251
+ 'recordingResumed',
252
+ 'screenShareStarted',
253
+ 'screenShareStopped',
254
+ 'locked',
255
+ 'unlocked',
256
+ 'breakoutRoomsCreated',
257
+ 'breakoutRoomsClosed',
258
+ 'pollLaunched',
259
+ 'chatMessageSent',
260
+ ],
261
+ }
262
+
263
+ /**
264
+ * MeetingParticipant - A participant in a meeting
265
+ *
266
+ * Represents an individual participant's session within a meeting.
267
+ */
268
+ export const MeetingParticipant: Noun = {
269
+ singular: 'meeting participant',
270
+ plural: 'meeting participants',
271
+ description: 'A participant in a video meeting',
272
+
273
+ properties: {
274
+ // Identity
275
+ name: {
276
+ type: 'string',
277
+ description: 'Participant display name',
278
+ },
279
+ email: {
280
+ type: 'string',
281
+ optional: true,
282
+ description: 'Participant email address',
283
+ },
284
+ userId: {
285
+ type: 'string',
286
+ optional: true,
287
+ description: 'User ID if authenticated',
288
+ },
289
+
290
+ // Role
291
+ role: {
292
+ type: 'string',
293
+ description: 'Participant role: host, co-host, panelist, attendee, guest',
294
+ examples: ['host', 'co-host', 'panelist', 'attendee', 'guest'],
295
+ },
296
+
297
+ // Timing
298
+ joinedAt: {
299
+ type: 'datetime',
300
+ description: 'When the participant joined',
301
+ },
302
+ leftAt: {
303
+ type: 'datetime',
304
+ optional: true,
305
+ description: 'When the participant left',
306
+ },
307
+ duration: {
308
+ type: 'number',
309
+ optional: true,
310
+ description: 'Duration of participation in minutes',
311
+ },
312
+
313
+ // Status
314
+ status: {
315
+ type: 'string',
316
+ description: 'Participant status: waiting, admitted, in-meeting, left, removed',
317
+ examples: ['waiting', 'admitted', 'in-meeting', 'left', 'removed'],
318
+ },
319
+ isOnline: {
320
+ type: 'boolean',
321
+ optional: true,
322
+ description: 'Whether currently connected',
323
+ },
324
+
325
+ // Media State
326
+ audioEnabled: {
327
+ type: 'boolean',
328
+ optional: true,
329
+ description: 'Whether audio is enabled',
330
+ },
331
+ videoEnabled: {
332
+ type: 'boolean',
333
+ optional: true,
334
+ description: 'Whether video is enabled',
335
+ },
336
+ screenSharing: {
337
+ type: 'boolean',
338
+ optional: true,
339
+ description: 'Whether currently sharing screen',
340
+ },
341
+ handRaised: {
342
+ type: 'boolean',
343
+ optional: true,
344
+ description: 'Whether hand is raised',
345
+ },
346
+
347
+ // Device & Connection
348
+ deviceType: {
349
+ type: 'string',
350
+ optional: true,
351
+ description: 'Device type: desktop, mobile, tablet, phone',
352
+ examples: ['desktop', 'mobile', 'tablet', 'phone'],
353
+ },
354
+ connectionQuality: {
355
+ type: 'string',
356
+ optional: true,
357
+ description: 'Connection quality: excellent, good, fair, poor',
358
+ examples: ['excellent', 'good', 'fair', 'poor'],
359
+ },
360
+ location: {
361
+ type: 'string',
362
+ optional: true,
363
+ description: 'Geographic location (city, country)',
364
+ },
365
+ },
366
+
367
+ relationships: {
368
+ meeting: {
369
+ type: 'Meeting',
370
+ backref: 'participants',
371
+ description: 'The meeting this participant is in',
372
+ },
373
+ contact: {
374
+ type: 'Contact',
375
+ required: false,
376
+ description: 'Associated contact record',
377
+ },
378
+ breakoutRoom: {
379
+ type: 'BreakoutRoom',
380
+ required: false,
381
+ description: 'Current breakout room if assigned',
382
+ },
383
+ },
384
+
385
+ actions: [
386
+ 'admit',
387
+ 'remove',
388
+ 'promote',
389
+ 'demote',
390
+ 'mute',
391
+ 'unmute',
392
+ 'disableVideo',
393
+ 'enableVideo',
394
+ 'spotlight',
395
+ 'pin',
396
+ 'sendToBreakoutRoom',
397
+ 'allowToTalk',
398
+ 'putOnHold',
399
+ ],
400
+
401
+ events: [
402
+ 'joined',
403
+ 'left',
404
+ 'admitted',
405
+ 'removed',
406
+ 'promoted',
407
+ 'demoted',
408
+ 'muted',
409
+ 'unmuted',
410
+ 'videoDisabled',
411
+ 'videoEnabled',
412
+ 'startedScreenShare',
413
+ 'stoppedScreenShare',
414
+ 'raisedHand',
415
+ 'loweredHand',
416
+ 'sentToBreakoutRoom',
417
+ 'returnedFromBreakoutRoom',
418
+ ],
419
+ }
420
+
421
+ /**
422
+ * MeetingRecording - A recording of a meeting
423
+ *
424
+ * Represents a video/audio recording of a meeting session.
425
+ */
426
+ export const MeetingRecording: Noun = {
427
+ singular: 'meeting recording',
428
+ plural: 'meeting recordings',
429
+ description: 'A recording of a video meeting',
430
+
431
+ properties: {
432
+ // Identity
433
+ title: {
434
+ type: 'string',
435
+ description: 'Recording title (often same as meeting title)',
436
+ },
437
+ recordingId: {
438
+ type: 'string',
439
+ description: 'Unique recording identifier',
440
+ },
441
+
442
+ // Type & Format
443
+ recordingType: {
444
+ type: 'string',
445
+ description: 'Recording type: cloud, local',
446
+ examples: ['cloud', 'local'],
447
+ },
448
+ format: {
449
+ type: 'string',
450
+ description: 'File format: mp4, m4a, mp3, txt, vtt',
451
+ examples: ['mp4', 'm4a', 'mp3', 'txt', 'vtt'],
452
+ },
453
+ fileType: {
454
+ type: 'string',
455
+ description: 'Content type: video, audio, transcript, chat',
456
+ examples: ['video', 'audio', 'transcript', 'chat'],
457
+ },
458
+
459
+ // Status & Timing
460
+ status: {
461
+ type: 'string',
462
+ description: 'Recording status: recording, processing, completed, failed',
463
+ examples: ['recording', 'processing', 'completed', 'failed'],
464
+ },
465
+ startedAt: {
466
+ type: 'datetime',
467
+ description: 'When recording started',
468
+ },
469
+ endedAt: {
470
+ type: 'datetime',
471
+ optional: true,
472
+ description: 'When recording ended',
473
+ },
474
+ duration: {
475
+ type: 'number',
476
+ optional: true,
477
+ description: 'Recording duration in minutes',
478
+ },
479
+
480
+ // File Info
481
+ size: {
482
+ type: 'number',
483
+ optional: true,
484
+ description: 'File size in bytes',
485
+ },
486
+ url: {
487
+ type: 'url',
488
+ optional: true,
489
+ description: 'URL to download/stream the recording',
490
+ },
491
+ playUrl: {
492
+ type: 'url',
493
+ optional: true,
494
+ description: 'URL to play the recording',
495
+ },
496
+ downloadUrl: {
497
+ type: 'url',
498
+ optional: true,
499
+ description: 'URL to download the recording',
500
+ },
501
+
502
+ // Security
503
+ passcode: {
504
+ type: 'string',
505
+ optional: true,
506
+ description: 'Passcode to access the recording',
507
+ },
508
+ shareUrl: {
509
+ type: 'url',
510
+ optional: true,
511
+ description: 'Shareable URL for the recording',
512
+ },
513
+
514
+ // Features
515
+ hasTranscript: {
516
+ type: 'boolean',
517
+ optional: true,
518
+ description: 'Whether transcript is available',
519
+ },
520
+ hasCaptions: {
521
+ type: 'boolean',
522
+ optional: true,
523
+ description: 'Whether captions are available',
524
+ },
525
+ transcriptUrl: {
526
+ type: 'url',
527
+ optional: true,
528
+ description: 'URL to transcript file',
529
+ },
530
+
531
+ // Settings
532
+ autoDelete: {
533
+ type: 'boolean',
534
+ optional: true,
535
+ description: 'Whether recording will be auto-deleted',
536
+ },
537
+ autoDeleteDate: {
538
+ type: 'datetime',
539
+ optional: true,
540
+ description: 'When recording will be auto-deleted',
541
+ },
542
+ },
543
+
544
+ relationships: {
545
+ meeting: {
546
+ type: 'Meeting',
547
+ backref: 'recordings',
548
+ description: 'The meeting that was recorded',
549
+ },
550
+ recordedBy: {
551
+ type: 'Contact',
552
+ description: 'Who started the recording',
553
+ },
554
+ },
555
+
556
+ actions: [
557
+ 'start',
558
+ 'stop',
559
+ 'pause',
560
+ 'resume',
561
+ 'download',
562
+ 'play',
563
+ 'share',
564
+ 'delete',
565
+ 'transcribe',
566
+ 'generateCaptions',
567
+ 'setExpiration',
568
+ ],
569
+
570
+ events: [
571
+ 'started',
572
+ 'stopped',
573
+ 'paused',
574
+ 'resumed',
575
+ 'completed',
576
+ 'failed',
577
+ 'downloaded',
578
+ 'shared',
579
+ 'deleted',
580
+ 'transcribed',
581
+ 'viewed',
582
+ ],
583
+ }
584
+
585
+ // =============================================================================
586
+ // Webinar
587
+ // =============================================================================
588
+
589
+ /**
590
+ * Webinar - A webinar event with registration and large audience
591
+ *
592
+ * Represents a large-scale online presentation or seminar, typically with
593
+ * panelists presenting to attendees who have registered.
594
+ */
595
+ export const Webinar: Noun = {
596
+ singular: 'webinar',
597
+ plural: 'webinars',
598
+ description: 'A webinar event with registration, panelists, and attendees',
599
+
600
+ properties: {
601
+ // Identity
602
+ title: {
603
+ type: 'string',
604
+ description: 'Webinar title',
605
+ },
606
+ description: {
607
+ type: 'string',
608
+ optional: true,
609
+ description: 'Webinar description and details',
610
+ },
611
+ webinarId: {
612
+ type: 'string',
613
+ description: 'Unique webinar identifier',
614
+ },
615
+
616
+ // Scheduling
617
+ scheduledAt: {
618
+ type: 'datetime',
619
+ description: 'When the webinar is scheduled to start',
620
+ },
621
+ scheduledDuration: {
622
+ type: 'number',
623
+ description: 'Scheduled duration in minutes',
624
+ },
625
+ timezone: {
626
+ type: 'string',
627
+ description: 'Timezone for the webinar',
628
+ },
629
+
630
+ // Status & Timing
631
+ status: {
632
+ type: 'string',
633
+ description: 'Webinar status: draft, scheduled, live, ended, canceled',
634
+ examples: ['draft', 'scheduled', 'live', 'ended', 'canceled'],
635
+ },
636
+ startedAt: {
637
+ type: 'datetime',
638
+ optional: true,
639
+ description: 'When the webinar actually started',
640
+ },
641
+ endedAt: {
642
+ type: 'datetime',
643
+ optional: true,
644
+ description: 'When the webinar ended',
645
+ },
646
+
647
+ // Registration
648
+ registrationRequired: {
649
+ type: 'boolean',
650
+ description: 'Whether registration is required',
651
+ },
652
+ registrationUrl: {
653
+ type: 'url',
654
+ optional: true,
655
+ description: 'URL for registration page',
656
+ },
657
+ approvalRequired: {
658
+ type: 'boolean',
659
+ optional: true,
660
+ description: 'Whether registrations need approval',
661
+ },
662
+ registrationCapacity: {
663
+ type: 'number',
664
+ optional: true,
665
+ description: 'Maximum number of registrants',
666
+ },
667
+ registrationCount: {
668
+ type: 'number',
669
+ optional: true,
670
+ description: 'Current number of registrants',
671
+ },
672
+ attendeeCount: {
673
+ type: 'number',
674
+ optional: true,
675
+ description: 'Number of attendees who joined',
676
+ },
677
+
678
+ // URLs
679
+ joinUrl: {
680
+ type: 'url',
681
+ description: 'URL for attendees to join',
682
+ },
683
+ startUrl: {
684
+ type: 'url',
685
+ optional: true,
686
+ description: 'URL for host to start the webinar',
687
+ },
688
+ practiceSessionUrl: {
689
+ type: 'url',
690
+ optional: true,
691
+ description: 'URL for practice session',
692
+ },
693
+
694
+ // Settings
695
+ recordingEnabled: {
696
+ type: 'boolean',
697
+ optional: true,
698
+ description: 'Whether recording is enabled',
699
+ },
700
+ autoRecording: {
701
+ type: 'boolean',
702
+ optional: true,
703
+ description: 'Whether to automatically start recording',
704
+ },
705
+ allowQA: {
706
+ type: 'boolean',
707
+ optional: true,
708
+ description: 'Whether Q&A is enabled',
709
+ },
710
+ allowPolls: {
711
+ type: 'boolean',
712
+ optional: true,
713
+ description: 'Whether polls are enabled',
714
+ },
715
+ allowChat: {
716
+ type: 'boolean',
717
+ optional: true,
718
+ description: 'Whether chat is enabled',
719
+ },
720
+ practiceSessionEnabled: {
721
+ type: 'boolean',
722
+ optional: true,
723
+ description: 'Whether practice session is available',
724
+ },
725
+
726
+ // Email Notifications
727
+ sendConfirmationEmail: {
728
+ type: 'boolean',
729
+ optional: true,
730
+ description: 'Whether to send confirmation emails',
731
+ },
732
+ sendReminderEmail: {
733
+ type: 'boolean',
734
+ optional: true,
735
+ description: 'Whether to send reminder emails',
736
+ },
737
+ },
738
+
739
+ relationships: {
740
+ host: {
741
+ type: 'Contact',
742
+ description: 'Webinar host/organizer',
743
+ },
744
+ panelists: {
745
+ type: 'Contact[]',
746
+ description: 'Webinar panelists/presenters',
747
+ },
748
+ registrants: {
749
+ type: 'WebinarRegistrant[]',
750
+ backref: 'webinar',
751
+ description: 'People registered for the webinar',
752
+ },
753
+ recordings: {
754
+ type: 'MeetingRecording[]',
755
+ description: 'Recordings of the webinar',
756
+ },
757
+ polls: {
758
+ type: 'MeetingPoll[]',
759
+ description: 'Polls used in the webinar',
760
+ },
761
+ },
762
+
763
+ actions: [
764
+ 'create',
765
+ 'schedule',
766
+ 'start',
767
+ 'end',
768
+ 'cancel',
769
+ 'reschedule',
770
+ 'addPanelist',
771
+ 'removePanelist',
772
+ 'approveRegistrant',
773
+ 'rejectRegistrant',
774
+ 'sendInvitation',
775
+ 'sendReminder',
776
+ 'startPracticeSession',
777
+ 'startRecording',
778
+ 'stopRecording',
779
+ 'launchPoll',
780
+ 'muteAttendees',
781
+ ],
782
+
783
+ events: [
784
+ 'created',
785
+ 'scheduled',
786
+ 'started',
787
+ 'ended',
788
+ 'canceled',
789
+ 'rescheduled',
790
+ 'panelistAdded',
791
+ 'panelistRemoved',
792
+ 'registrantRegistered',
793
+ 'registrantApproved',
794
+ 'registrantRejected',
795
+ 'registrantJoined',
796
+ 'registrantLeft',
797
+ 'recordingStarted',
798
+ 'recordingStopped',
799
+ 'pollLaunched',
800
+ ],
801
+ }
802
+
803
+ /**
804
+ * WebinarRegistrant - A registrant for a webinar
805
+ *
806
+ * Represents someone who has registered for a webinar.
807
+ */
808
+ export const WebinarRegistrant: Noun = {
809
+ singular: 'webinar registrant',
810
+ plural: 'webinar registrants',
811
+ description: 'A person registered for a webinar',
812
+
813
+ properties: {
814
+ // Identity
815
+ email: {
816
+ type: 'string',
817
+ description: 'Registrant email address',
818
+ },
819
+ firstName: {
820
+ type: 'string',
821
+ description: 'First name',
822
+ },
823
+ lastName: {
824
+ type: 'string',
825
+ description: 'Last name',
826
+ },
827
+ organization: {
828
+ type: 'string',
829
+ optional: true,
830
+ description: 'Organization or company',
831
+ },
832
+ jobTitle: {
833
+ type: 'string',
834
+ optional: true,
835
+ description: 'Job title',
836
+ },
837
+
838
+ // Registration
839
+ registeredAt: {
840
+ type: 'datetime',
841
+ description: 'When they registered',
842
+ },
843
+ registrationStatus: {
844
+ type: 'string',
845
+ description: 'Registration status: pending, approved, rejected, canceled',
846
+ examples: ['pending', 'approved', 'rejected', 'canceled'],
847
+ },
848
+
849
+ // Attendance
850
+ attended: {
851
+ type: 'boolean',
852
+ optional: true,
853
+ description: 'Whether they attended the webinar',
854
+ },
855
+ joinedAt: {
856
+ type: 'datetime',
857
+ optional: true,
858
+ description: 'When they joined the webinar',
859
+ },
860
+ leftAt: {
861
+ type: 'datetime',
862
+ optional: true,
863
+ description: 'When they left the webinar',
864
+ },
865
+ attendanceDuration: {
866
+ type: 'number',
867
+ optional: true,
868
+ description: 'Duration of attendance in minutes',
869
+ },
870
+
871
+ // Access
872
+ joinUrl: {
873
+ type: 'url',
874
+ optional: true,
875
+ description: 'Personal join URL',
876
+ },
877
+
878
+ // Custom Questions
879
+ customAnswers: {
880
+ type: 'json',
881
+ optional: true,
882
+ description: 'Answers to custom registration questions',
883
+ },
884
+ },
885
+
886
+ relationships: {
887
+ webinar: {
888
+ type: 'Webinar',
889
+ backref: 'registrants',
890
+ description: 'The webinar they registered for',
891
+ },
892
+ contact: {
893
+ type: 'Contact',
894
+ required: false,
895
+ description: 'Associated contact record',
896
+ },
897
+ },
898
+
899
+ actions: [
900
+ 'register',
901
+ 'approve',
902
+ 'reject',
903
+ 'cancel',
904
+ 'sendJoinUrl',
905
+ 'sendReminder',
906
+ ],
907
+
908
+ events: [
909
+ 'registered',
910
+ 'approved',
911
+ 'rejected',
912
+ 'canceled',
913
+ 'joined',
914
+ 'left',
915
+ 'reminderSent',
916
+ ],
917
+ }
918
+
919
+ // =============================================================================
920
+ // Meeting Room
921
+ // =============================================================================
922
+
923
+ /**
924
+ * MeetingRoom - A persistent virtual meeting room
925
+ *
926
+ * Represents a permanent virtual room with a fixed URL that can be used
927
+ * for multiple meetings over time. Similar to Zoom Personal Meeting Room.
928
+ */
929
+ export const MeetingRoom: Noun = {
930
+ singular: 'meeting room',
931
+ plural: 'meeting rooms',
932
+ description: 'A persistent virtual meeting room with a permanent URL',
933
+
934
+ properties: {
935
+ // Identity
936
+ name: {
937
+ type: 'string',
938
+ description: 'Room name',
939
+ },
940
+ roomId: {
941
+ type: 'string',
942
+ description: 'Unique room identifier',
943
+ },
944
+ description: {
945
+ type: 'string',
946
+ optional: true,
947
+ description: 'Room description or purpose',
948
+ },
949
+
950
+ // Access
951
+ permanentUrl: {
952
+ type: 'url',
953
+ description: 'Permanent URL to join this room',
954
+ },
955
+ roomNumber: {
956
+ type: 'string',
957
+ optional: true,
958
+ description: 'Room number or ID (e.g., PMI)',
959
+ },
960
+ passcode: {
961
+ type: 'string',
962
+ optional: true,
963
+ description: 'Passcode to join the room',
964
+ },
965
+
966
+ // Settings
967
+ isPublic: {
968
+ type: 'boolean',
969
+ optional: true,
970
+ description: 'Whether the room is publicly accessible',
971
+ },
972
+ requiresPassword: {
973
+ type: 'boolean',
974
+ optional: true,
975
+ description: 'Whether password is required',
976
+ },
977
+ waitingRoomEnabled: {
978
+ type: 'boolean',
979
+ optional: true,
980
+ description: 'Whether waiting room is enabled',
981
+ },
982
+ maxParticipants: {
983
+ type: 'number',
984
+ optional: true,
985
+ description: 'Maximum number of participants',
986
+ },
987
+
988
+ // Status
989
+ isActive: {
990
+ type: 'boolean',
991
+ optional: true,
992
+ description: 'Whether there is currently an active meeting',
993
+ },
994
+ currentParticipantCount: {
995
+ type: 'number',
996
+ optional: true,
997
+ description: 'Current number of participants',
998
+ },
999
+
1000
+ // Usage
1001
+ totalMeetings: {
1002
+ type: 'number',
1003
+ optional: true,
1004
+ description: 'Total number of meetings held in this room',
1005
+ },
1006
+ lastUsedAt: {
1007
+ type: 'datetime',
1008
+ optional: true,
1009
+ description: 'When the room was last used',
1010
+ },
1011
+ },
1012
+
1013
+ relationships: {
1014
+ owner: {
1015
+ type: 'Contact',
1016
+ description: 'Room owner',
1017
+ },
1018
+ coHosts: {
1019
+ type: 'Contact[]',
1020
+ description: 'Co-hosts with access to manage the room',
1021
+ },
1022
+ meetings: {
1023
+ type: 'Meeting[]',
1024
+ description: 'Meetings held in this room',
1025
+ },
1026
+ },
1027
+
1028
+ actions: [
1029
+ 'create',
1030
+ 'configure',
1031
+ 'start',
1032
+ 'lock',
1033
+ 'unlock',
1034
+ 'delete',
1035
+ 'addCoHost',
1036
+ 'removeCoHost',
1037
+ 'generateInvite',
1038
+ 'resetPasscode',
1039
+ ],
1040
+
1041
+ events: [
1042
+ 'created',
1043
+ 'configured',
1044
+ 'meetingStarted',
1045
+ 'meetingEnded',
1046
+ 'locked',
1047
+ 'unlocked',
1048
+ 'deleted',
1049
+ 'coHostAdded',
1050
+ 'coHostRemoved',
1051
+ ],
1052
+ }
1053
+
1054
+ // =============================================================================
1055
+ // Breakout Room
1056
+ // =============================================================================
1057
+
1058
+ /**
1059
+ * BreakoutRoom - A breakout room within a meeting
1060
+ *
1061
+ * Represents a separate sub-meeting room where participants can split
1062
+ * into smaller groups for discussions.
1063
+ */
1064
+ export const BreakoutRoom: Noun = {
1065
+ singular: 'breakout room',
1066
+ plural: 'breakout rooms',
1067
+ description: 'A breakout room for small group discussions within a meeting',
1068
+
1069
+ properties: {
1070
+ // Identity
1071
+ name: {
1072
+ type: 'string',
1073
+ description: 'Breakout room name',
1074
+ },
1075
+ roomNumber: {
1076
+ type: 'number',
1077
+ description: 'Room number (1, 2, 3, etc.)',
1078
+ },
1079
+
1080
+ // Status
1081
+ status: {
1082
+ type: 'string',
1083
+ description: 'Room status: created, open, closed',
1084
+ examples: ['created', 'open', 'closed'],
1085
+ },
1086
+ isOpen: {
1087
+ type: 'boolean',
1088
+ optional: true,
1089
+ description: 'Whether the room is currently open',
1090
+ },
1091
+
1092
+ // Timing
1093
+ duration: {
1094
+ type: 'number',
1095
+ optional: true,
1096
+ description: 'Duration in minutes',
1097
+ },
1098
+ startedAt: {
1099
+ type: 'datetime',
1100
+ optional: true,
1101
+ description: 'When the room was opened',
1102
+ },
1103
+ closedAt: {
1104
+ type: 'datetime',
1105
+ optional: true,
1106
+ description: 'When the room was closed',
1107
+ },
1108
+
1109
+ // Settings
1110
+ allowParticipantsToReturn: {
1111
+ type: 'boolean',
1112
+ optional: true,
1113
+ description: 'Whether participants can return to main room',
1114
+ },
1115
+ autoMoveParticipants: {
1116
+ type: 'boolean',
1117
+ optional: true,
1118
+ description: 'Whether to automatically move participants',
1119
+ },
1120
+
1121
+ // Statistics
1122
+ participantCount: {
1123
+ type: 'number',
1124
+ optional: true,
1125
+ description: 'Number of participants in this room',
1126
+ },
1127
+ },
1128
+
1129
+ relationships: {
1130
+ meeting: {
1131
+ type: 'Meeting',
1132
+ backref: 'breakoutRooms',
1133
+ description: 'Parent meeting',
1134
+ },
1135
+ participants: {
1136
+ type: 'MeetingParticipant[]',
1137
+ description: 'Participants assigned to this room',
1138
+ },
1139
+ },
1140
+
1141
+ actions: [
1142
+ 'create',
1143
+ 'open',
1144
+ 'close',
1145
+ 'assignParticipant',
1146
+ 'removeParticipant',
1147
+ 'broadcast',
1148
+ 'rename',
1149
+ ],
1150
+
1151
+ events: [
1152
+ 'created',
1153
+ 'opened',
1154
+ 'closed',
1155
+ 'participantAssigned',
1156
+ 'participantRemoved',
1157
+ 'participantJoined',
1158
+ 'participantLeft',
1159
+ 'messageReceived',
1160
+ ],
1161
+ }
1162
+
1163
+ // =============================================================================
1164
+ // Meeting Poll
1165
+ // =============================================================================
1166
+
1167
+ /**
1168
+ * MeetingPoll - A poll launched during a meeting
1169
+ *
1170
+ * Represents a poll or survey that can be launched during a meeting
1171
+ * to gather real-time feedback from participants.
1172
+ */
1173
+ export const MeetingPoll: Noun = {
1174
+ singular: 'meeting poll',
1175
+ plural: 'meeting polls',
1176
+ description: 'A poll or survey during a meeting',
1177
+
1178
+ properties: {
1179
+ // Identity
1180
+ title: {
1181
+ type: 'string',
1182
+ description: 'Poll title or question',
1183
+ },
1184
+ pollId: {
1185
+ type: 'string',
1186
+ description: 'Unique poll identifier',
1187
+ },
1188
+
1189
+ // Question
1190
+ question: {
1191
+ type: 'string',
1192
+ description: 'Poll question text',
1193
+ },
1194
+ questionType: {
1195
+ type: 'string',
1196
+ description: 'Question type: single-choice, multiple-choice, rating, open-ended',
1197
+ examples: ['single-choice', 'multiple-choice', 'rating', 'open-ended'],
1198
+ },
1199
+
1200
+ // Options
1201
+ options: {
1202
+ type: 'json',
1203
+ array: true,
1204
+ description: 'Poll answer options',
1205
+ },
1206
+
1207
+ // Status
1208
+ status: {
1209
+ type: 'string',
1210
+ description: 'Poll status: draft, active, ended, results-shared',
1211
+ examples: ['draft', 'active', 'ended', 'results-shared'],
1212
+ },
1213
+ launchedAt: {
1214
+ type: 'datetime',
1215
+ optional: true,
1216
+ description: 'When the poll was launched',
1217
+ },
1218
+ endedAt: {
1219
+ type: 'datetime',
1220
+ optional: true,
1221
+ description: 'When the poll was ended',
1222
+ },
1223
+
1224
+ // Settings
1225
+ anonymous: {
1226
+ type: 'boolean',
1227
+ optional: true,
1228
+ description: 'Whether responses are anonymous',
1229
+ },
1230
+ allowMultipleAnswers: {
1231
+ type: 'boolean',
1232
+ optional: true,
1233
+ description: 'Whether multiple answers are allowed',
1234
+ },
1235
+ showResults: {
1236
+ type: 'boolean',
1237
+ optional: true,
1238
+ description: 'Whether to show results to participants',
1239
+ },
1240
+
1241
+ // Results
1242
+ totalResponses: {
1243
+ type: 'number',
1244
+ optional: true,
1245
+ description: 'Total number of responses',
1246
+ },
1247
+ results: {
1248
+ type: 'json',
1249
+ optional: true,
1250
+ description: 'Poll results and statistics',
1251
+ },
1252
+ },
1253
+
1254
+ relationships: {
1255
+ meeting: {
1256
+ type: 'Meeting',
1257
+ backref: 'polls',
1258
+ description: 'Meeting this poll belongs to',
1259
+ },
1260
+ createdBy: {
1261
+ type: 'Contact',
1262
+ description: 'Who created the poll',
1263
+ },
1264
+ },
1265
+
1266
+ actions: [
1267
+ 'create',
1268
+ 'launch',
1269
+ 'end',
1270
+ 'delete',
1271
+ 'shareResults',
1272
+ 'hideResults',
1273
+ 'export',
1274
+ ],
1275
+
1276
+ events: [
1277
+ 'created',
1278
+ 'launched',
1279
+ 'ended',
1280
+ 'deleted',
1281
+ 'responseReceived',
1282
+ 'resultsShared',
1283
+ 'resultsHidden',
1284
+ ],
1285
+ }
1286
+
1287
+ // =============================================================================
1288
+ // Meeting Chat
1289
+ // =============================================================================
1290
+
1291
+ /**
1292
+ * MeetingChat - Chat messages during a meeting
1293
+ *
1294
+ * Represents the chat functionality within a meeting, including
1295
+ * messages sent to everyone or privately.
1296
+ */
1297
+ export const MeetingChat: Noun = {
1298
+ singular: 'meeting chat',
1299
+ plural: 'meeting chats',
1300
+ description: 'Chat messages and conversations during a meeting',
1301
+
1302
+ properties: {
1303
+ // Message
1304
+ text: {
1305
+ type: 'string',
1306
+ description: 'Message text content',
1307
+ },
1308
+ messageId: {
1309
+ type: 'string',
1310
+ description: 'Unique message identifier',
1311
+ },
1312
+
1313
+ // Timing
1314
+ sentAt: {
1315
+ type: 'datetime',
1316
+ description: 'When the message was sent',
1317
+ },
1318
+
1319
+ // Recipient
1320
+ recipientType: {
1321
+ type: 'string',
1322
+ description: 'Who can see the message: everyone, private, panelists, host',
1323
+ examples: ['everyone', 'private', 'panelists', 'host'],
1324
+ },
1325
+ recipientId: {
1326
+ type: 'string',
1327
+ optional: true,
1328
+ description: 'Recipient user ID for private messages',
1329
+ },
1330
+
1331
+ // Content Type
1332
+ messageType: {
1333
+ type: 'string',
1334
+ description: 'Message type: text, file, emoji, system',
1335
+ examples: ['text', 'file', 'emoji', 'system'],
1336
+ },
1337
+
1338
+ // File Attachment
1339
+ fileUrl: {
1340
+ type: 'url',
1341
+ optional: true,
1342
+ description: 'URL to attached file',
1343
+ },
1344
+ fileName: {
1345
+ type: 'string',
1346
+ optional: true,
1347
+ description: 'Name of attached file',
1348
+ },
1349
+ fileSize: {
1350
+ type: 'number',
1351
+ optional: true,
1352
+ description: 'Size of attached file in bytes',
1353
+ },
1354
+ },
1355
+
1356
+ relationships: {
1357
+ meeting: {
1358
+ type: 'Meeting',
1359
+ backref: 'chat',
1360
+ description: 'Meeting this chat belongs to',
1361
+ },
1362
+ sender: {
1363
+ type: 'MeetingParticipant',
1364
+ description: 'Participant who sent the message',
1365
+ },
1366
+ recipient: {
1367
+ type: 'MeetingParticipant',
1368
+ required: false,
1369
+ description: 'Recipient for private messages',
1370
+ },
1371
+ },
1372
+
1373
+ actions: [
1374
+ 'send',
1375
+ 'delete',
1376
+ 'save',
1377
+ 'export',
1378
+ 'enable',
1379
+ 'disable',
1380
+ 'restrictToHost',
1381
+ ],
1382
+
1383
+ events: [
1384
+ 'messageSent',
1385
+ 'messageDeleted',
1386
+ 'chatSaved',
1387
+ 'chatExported',
1388
+ 'chatEnabled',
1389
+ 'chatDisabled',
1390
+ ],
1391
+ }
1392
+
1393
+ // =============================================================================
1394
+ // Meeting Type (Template)
1395
+ // =============================================================================
1396
+
1397
+ /**
1398
+ * MeetingType - A template for scheduling meetings
1399
+ *
1400
+ * Represents a reusable meeting configuration (like Calendly event types).
1401
+ * Defines duration, location, availability, and booking settings.
1402
+ */
1403
+ export const MeetingType: Noun = {
1404
+ singular: 'meeting type',
1405
+ plural: 'meeting types',
1406
+ description: 'A template for scheduling meetings with predefined settings',
1407
+
1408
+ properties: {
1409
+ name: {
1410
+ type: 'string',
1411
+ description: 'Meeting type name',
1412
+ },
1413
+ slug: {
1414
+ type: 'string',
1415
+ description: 'URL-friendly identifier',
1416
+ },
1417
+ description: {
1418
+ type: 'string',
1419
+ optional: true,
1420
+ description: 'Description shown to invitees',
1421
+ },
1422
+ duration: {
1423
+ type: 'number',
1424
+ description: 'Default duration in minutes',
1425
+ },
1426
+ bufferBefore: {
1427
+ type: 'number',
1428
+ optional: true,
1429
+ description: 'Buffer time before meeting (minutes)',
1430
+ },
1431
+ bufferAfter: {
1432
+ type: 'number',
1433
+ optional: true,
1434
+ description: 'Buffer time after meeting (minutes)',
1435
+ },
1436
+ locationType: {
1437
+ type: 'string',
1438
+ description: 'Meeting location type',
1439
+ examples: ['video', 'phone', 'in-person'],
1440
+ },
1441
+ locationDetails: {
1442
+ type: 'string',
1443
+ optional: true,
1444
+ description: 'Location details or address',
1445
+ },
1446
+ videoProvider: {
1447
+ type: 'string',
1448
+ optional: true,
1449
+ description: 'Video provider: zoom, google-meet, teams',
1450
+ examples: ['zoom', 'google-meet', 'teams'],
1451
+ },
1452
+ minimumNotice: {
1453
+ type: 'number',
1454
+ optional: true,
1455
+ description: 'Minimum notice required (minutes)',
1456
+ },
1457
+ maximumAdvance: {
1458
+ type: 'number',
1459
+ optional: true,
1460
+ description: 'Maximum advance booking (days)',
1461
+ },
1462
+ requiresConfirmation: {
1463
+ type: 'boolean',
1464
+ optional: true,
1465
+ description: 'Whether host must confirm bookings',
1466
+ },
1467
+ allowReschedule: {
1468
+ type: 'boolean',
1469
+ optional: true,
1470
+ description: 'Whether invitees can reschedule',
1471
+ },
1472
+ allowCancel: {
1473
+ type: 'boolean',
1474
+ optional: true,
1475
+ description: 'Whether invitees can cancel',
1476
+ },
1477
+ customQuestions: {
1478
+ type: 'json',
1479
+ optional: true,
1480
+ description: 'Custom intake questions for invitees',
1481
+ },
1482
+ confirmationMessage: {
1483
+ type: 'string',
1484
+ optional: true,
1485
+ description: 'Message shown after booking',
1486
+ },
1487
+ color: {
1488
+ type: 'string',
1489
+ optional: true,
1490
+ description: 'Display color for calendar',
1491
+ },
1492
+ isActive: {
1493
+ type: 'boolean',
1494
+ optional: true,
1495
+ description: 'Whether this meeting type is active',
1496
+ },
1497
+ isPublic: {
1498
+ type: 'boolean',
1499
+ optional: true,
1500
+ description: 'Whether publicly visible',
1501
+ },
1502
+ },
1503
+
1504
+ relationships: {
1505
+ host: {
1506
+ type: 'Contact',
1507
+ description: 'Host who owns this meeting type',
1508
+ },
1509
+ meetings: {
1510
+ type: 'Meeting[]',
1511
+ backref: 'meetingType',
1512
+ description: 'Meetings created from this type',
1513
+ },
1514
+ },
1515
+
1516
+ actions: [
1517
+ 'create',
1518
+ 'update',
1519
+ 'activate',
1520
+ 'deactivate',
1521
+ 'duplicate',
1522
+ 'archive',
1523
+ ],
1524
+
1525
+ events: [
1526
+ 'created',
1527
+ 'updated',
1528
+ 'activated',
1529
+ 'deactivated',
1530
+ 'archived',
1531
+ ],
1532
+ }
1533
+
1534
+ // =============================================================================
1535
+ // Resource (Room/Equipment)
1536
+ // =============================================================================
1537
+
1538
+ /**
1539
+ * Resource - A bookable physical resource
1540
+ *
1541
+ * Represents a room, equipment, desk, or other physical resource
1542
+ * that can be reserved for meetings or other purposes.
1543
+ */
1544
+ export const Resource: Noun = {
1545
+ singular: 'resource',
1546
+ plural: 'resources',
1547
+ description: 'A bookable physical resource like a room or equipment',
1548
+
1549
+ properties: {
1550
+ name: {
1551
+ type: 'string',
1552
+ description: 'Resource name',
1553
+ },
1554
+ description: {
1555
+ type: 'string',
1556
+ optional: true,
1557
+ description: 'Resource description',
1558
+ },
1559
+ type: {
1560
+ type: 'string',
1561
+ description: 'Resource type',
1562
+ examples: ['room', 'equipment', 'vehicle', 'desk'],
1563
+ },
1564
+ location: {
1565
+ type: 'string',
1566
+ optional: true,
1567
+ description: 'Physical location',
1568
+ },
1569
+ capacity: {
1570
+ type: 'number',
1571
+ optional: true,
1572
+ description: 'Capacity (for rooms)',
1573
+ },
1574
+ amenities: {
1575
+ type: 'string',
1576
+ array: true,
1577
+ optional: true,
1578
+ description: 'Available amenities',
1579
+ },
1580
+ images: {
1581
+ type: 'url',
1582
+ array: true,
1583
+ optional: true,
1584
+ description: 'Resource images',
1585
+ },
1586
+ hourlyRate: {
1587
+ type: 'number',
1588
+ optional: true,
1589
+ description: 'Hourly rate',
1590
+ },
1591
+ currency: {
1592
+ type: 'string',
1593
+ optional: true,
1594
+ description: 'Rate currency',
1595
+ },
1596
+ requiresApproval: {
1597
+ type: 'boolean',
1598
+ optional: true,
1599
+ description: 'Whether reservations require approval',
1600
+ },
1601
+ isActive: {
1602
+ type: 'boolean',
1603
+ optional: true,
1604
+ description: 'Whether resource is available',
1605
+ },
1606
+ maintenanceMode: {
1607
+ type: 'boolean',
1608
+ optional: true,
1609
+ description: 'Whether in maintenance mode',
1610
+ },
1611
+ rules: {
1612
+ type: 'string',
1613
+ optional: true,
1614
+ description: 'Usage rules and guidelines',
1615
+ },
1616
+ },
1617
+
1618
+ relationships: {
1619
+ reservations: {
1620
+ type: 'Reservation[]',
1621
+ backref: 'resource',
1622
+ description: 'Reservations for this resource',
1623
+ },
1624
+ },
1625
+
1626
+ actions: [
1627
+ 'create',
1628
+ 'update',
1629
+ 'activate',
1630
+ 'deactivate',
1631
+ 'setMaintenance',
1632
+ 'clearMaintenance',
1633
+ ],
1634
+
1635
+ events: [
1636
+ 'created',
1637
+ 'updated',
1638
+ 'activated',
1639
+ 'deactivated',
1640
+ 'maintenanceStarted',
1641
+ 'maintenanceEnded',
1642
+ ],
1643
+ }
1644
+
1645
+ // =============================================================================
1646
+ // Reservation
1647
+ // =============================================================================
1648
+
1649
+ /**
1650
+ * Reservation - A booking for a resource
1651
+ *
1652
+ * Represents a time-bound reservation of a physical resource.
1653
+ */
1654
+ export const Reservation: Noun = {
1655
+ singular: 'reservation',
1656
+ plural: 'reservations',
1657
+ description: 'A time-bound reservation of a physical resource',
1658
+
1659
+ properties: {
1660
+ title: {
1661
+ type: 'string',
1662
+ optional: true,
1663
+ description: 'Reservation title',
1664
+ },
1665
+ purpose: {
1666
+ type: 'string',
1667
+ optional: true,
1668
+ description: 'Purpose of the reservation',
1669
+ },
1670
+ status: {
1671
+ type: 'string',
1672
+ description: 'Reservation status',
1673
+ examples: ['pending', 'approved', 'rejected', 'cancelled', 'checked-in', 'completed'],
1674
+ },
1675
+ startTime: {
1676
+ type: 'datetime',
1677
+ description: 'Start date and time',
1678
+ },
1679
+ endTime: {
1680
+ type: 'datetime',
1681
+ description: 'End date and time',
1682
+ },
1683
+ timezone: {
1684
+ type: 'string',
1685
+ description: 'Timezone',
1686
+ },
1687
+ attendeeCount: {
1688
+ type: 'number',
1689
+ optional: true,
1690
+ description: 'Expected attendees',
1691
+ },
1692
+ notes: {
1693
+ type: 'string',
1694
+ optional: true,
1695
+ description: 'Additional notes',
1696
+ },
1697
+ approvedAt: {
1698
+ type: 'datetime',
1699
+ optional: true,
1700
+ description: 'Approval timestamp',
1701
+ },
1702
+ rejectionReason: {
1703
+ type: 'string',
1704
+ optional: true,
1705
+ description: 'Reason for rejection',
1706
+ },
1707
+ checkedInAt: {
1708
+ type: 'datetime',
1709
+ optional: true,
1710
+ description: 'Check-in timestamp',
1711
+ },
1712
+ checkedOutAt: {
1713
+ type: 'datetime',
1714
+ optional: true,
1715
+ description: 'Check-out timestamp',
1716
+ },
1717
+ },
1718
+
1719
+ relationships: {
1720
+ resource: {
1721
+ type: 'Resource',
1722
+ backref: 'reservations',
1723
+ description: 'Reserved resource',
1724
+ },
1725
+ requestedBy: {
1726
+ type: 'Contact',
1727
+ description: 'Who made the reservation',
1728
+ },
1729
+ approvedBy: {
1730
+ type: 'Contact',
1731
+ required: false,
1732
+ description: 'Who approved the reservation',
1733
+ },
1734
+ meeting: {
1735
+ type: 'Meeting',
1736
+ required: false,
1737
+ description: 'Associated meeting if applicable',
1738
+ },
1739
+ },
1740
+
1741
+ actions: [
1742
+ 'create',
1743
+ 'approve',
1744
+ 'reject',
1745
+ 'cancel',
1746
+ 'checkIn',
1747
+ 'checkOut',
1748
+ 'extend',
1749
+ ],
1750
+
1751
+ events: [
1752
+ 'created',
1753
+ 'approved',
1754
+ 'rejected',
1755
+ 'cancelled',
1756
+ 'checkedIn',
1757
+ 'checkedOut',
1758
+ 'extended',
1759
+ ],
1760
+ }
1761
+
1762
+ // =============================================================================
1763
+ // Waitlist
1764
+ // =============================================================================
1765
+
1766
+ /**
1767
+ * Waitlist - Entry on a waitlist for a meeting or resource
1768
+ *
1769
+ * Represents someone waiting for availability.
1770
+ */
1771
+ export const Waitlist: Noun = {
1772
+ singular: 'waitlist',
1773
+ plural: 'waitlists',
1774
+ description: 'An entry on a waitlist for availability',
1775
+
1776
+ properties: {
1777
+ status: {
1778
+ type: 'string',
1779
+ description: 'Waitlist status',
1780
+ examples: ['waiting', 'notified', 'booked', 'expired', 'cancelled'],
1781
+ },
1782
+ position: {
1783
+ type: 'number',
1784
+ optional: true,
1785
+ description: 'Position in the waitlist',
1786
+ },
1787
+ preferredTimes: {
1788
+ type: 'string',
1789
+ array: true,
1790
+ optional: true,
1791
+ description: 'Preferred time slots',
1792
+ },
1793
+ notes: {
1794
+ type: 'string',
1795
+ optional: true,
1796
+ description: 'Additional notes',
1797
+ },
1798
+ notifiedAt: {
1799
+ type: 'datetime',
1800
+ optional: true,
1801
+ description: 'When notified of availability',
1802
+ },
1803
+ expiresAt: {
1804
+ type: 'datetime',
1805
+ optional: true,
1806
+ description: 'When the offer expires',
1807
+ },
1808
+ },
1809
+
1810
+ relationships: {
1811
+ contact: {
1812
+ type: 'Contact',
1813
+ description: 'Person on the waitlist',
1814
+ },
1815
+ meetingType: {
1816
+ type: 'MeetingType',
1817
+ required: false,
1818
+ description: 'Meeting type waiting for',
1819
+ },
1820
+ resource: {
1821
+ type: 'Resource',
1822
+ required: false,
1823
+ description: 'Resource waiting for',
1824
+ },
1825
+ },
1826
+
1827
+ actions: [
1828
+ 'join',
1829
+ 'leave',
1830
+ 'notify',
1831
+ 'book',
1832
+ ],
1833
+
1834
+ events: [
1835
+ 'joined',
1836
+ 'left',
1837
+ 'notified',
1838
+ 'booked',
1839
+ 'expired',
1840
+ ],
1841
+ }
1842
+
1843
+ // =============================================================================
1844
+ // Export all entities
1845
+ // =============================================================================
1846
+
1847
+ /**
1848
+ * All video conferencing entity types
1849
+ */
1850
+ export const VideoConferencingEntities = {
1851
+ Meeting,
1852
+ MeetingParticipant,
1853
+ MeetingRecording,
1854
+ Webinar,
1855
+ WebinarRegistrant,
1856
+ MeetingRoom,
1857
+ BreakoutRoom,
1858
+ MeetingPoll,
1859
+ MeetingChat,
1860
+ MeetingType,
1861
+ Resource,
1862
+ Reservation,
1863
+ Waitlist,
1864
+ }
1865
+
1866
+ /**
1867
+ * Entity categories for organization
1868
+ */
1869
+ export const VideoConferencingCategories = {
1870
+ meeting: ['Meeting', 'MeetingParticipant', 'MeetingRecording', 'MeetingRoom', 'MeetingType'],
1871
+ webinar: ['Webinar', 'WebinarRegistrant'],
1872
+ interaction: ['BreakoutRoom', 'MeetingPoll', 'MeetingChat'],
1873
+ resource: ['Resource', 'Reservation', 'Waitlist'],
1874
+ } as const