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