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,1747 @@
1
+ /**
2
+ * Media Entity Types (Nouns)
3
+ *
4
+ * Semantic type definitions for media-related digital 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
+ // Image
17
+ // =============================================================================
18
+
19
+ /**
20
+ * Image file entity
21
+ *
22
+ * Represents an image file with dimensions, format, and metadata
23
+ */
24
+ export const Image: Noun = {
25
+ singular: 'image',
26
+ plural: 'images',
27
+ description: 'An image file with dimensions, format, and metadata',
28
+
29
+ properties: {
30
+ // Basic info
31
+ filename: {
32
+ type: 'string',
33
+ description: 'Original filename',
34
+ },
35
+ url: {
36
+ type: 'url',
37
+ description: 'URL to access the image',
38
+ },
39
+ altText: {
40
+ type: 'string',
41
+ optional: true,
42
+ description: 'Alternative text for accessibility',
43
+ },
44
+ caption: {
45
+ type: 'string',
46
+ optional: true,
47
+ description: 'Image caption or description',
48
+ },
49
+ title: {
50
+ type: 'string',
51
+ optional: true,
52
+ description: 'Image title',
53
+ },
54
+
55
+ // Format & dimensions
56
+ format: {
57
+ type: 'string',
58
+ description: 'Image format: jpg, jpeg, png, gif, webp, svg, heic, bmp, tiff',
59
+ examples: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'heic', 'bmp', 'tiff'],
60
+ },
61
+ mimeType: {
62
+ type: 'string',
63
+ description: 'MIME type of the image',
64
+ },
65
+ width: {
66
+ type: 'number',
67
+ description: 'Width in pixels',
68
+ },
69
+ height: {
70
+ type: 'number',
71
+ description: 'Height in pixels',
72
+ },
73
+ aspectRatio: {
74
+ type: 'string',
75
+ optional: true,
76
+ description: 'Aspect ratio (e.g., 16:9, 4:3)',
77
+ },
78
+ orientation: {
79
+ type: 'string',
80
+ optional: true,
81
+ description: 'Image orientation: landscape, portrait, square',
82
+ examples: ['landscape', 'portrait', 'square'],
83
+ },
84
+
85
+ // File properties
86
+ size: {
87
+ type: 'number',
88
+ description: 'File size in bytes',
89
+ },
90
+ hash: {
91
+ type: 'string',
92
+ optional: true,
93
+ description: 'Content hash for deduplication',
94
+ },
95
+
96
+ // Technical metadata
97
+ colorSpace: {
98
+ type: 'string',
99
+ optional: true,
100
+ description: 'Color space: rgb, cmyk, grayscale',
101
+ examples: ['rgb', 'cmyk', 'grayscale'],
102
+ },
103
+ bitDepth: {
104
+ type: 'number',
105
+ optional: true,
106
+ description: 'Color bit depth',
107
+ },
108
+ dpi: {
109
+ type: 'number',
110
+ optional: true,
111
+ description: 'Dots per inch resolution',
112
+ },
113
+ hasAlpha: {
114
+ type: 'boolean',
115
+ optional: true,
116
+ description: 'Whether the image has an alpha channel',
117
+ },
118
+
119
+ // EXIF & camera metadata
120
+ exif: {
121
+ type: 'json',
122
+ optional: true,
123
+ description: 'EXIF metadata from the camera',
124
+ },
125
+ camera: {
126
+ type: 'string',
127
+ optional: true,
128
+ description: 'Camera make and model',
129
+ },
130
+ lens: {
131
+ type: 'string',
132
+ optional: true,
133
+ description: 'Lens information',
134
+ },
135
+ focalLength: {
136
+ type: 'number',
137
+ optional: true,
138
+ description: 'Focal length in millimeters',
139
+ },
140
+ aperture: {
141
+ type: 'number',
142
+ optional: true,
143
+ description: 'Aperture f-stop value',
144
+ },
145
+ shutterSpeed: {
146
+ type: 'string',
147
+ optional: true,
148
+ description: 'Shutter speed (e.g., 1/1000)',
149
+ },
150
+ iso: {
151
+ type: 'number',
152
+ optional: true,
153
+ description: 'ISO sensitivity',
154
+ },
155
+ flash: {
156
+ type: 'boolean',
157
+ optional: true,
158
+ description: 'Whether flash was used',
159
+ },
160
+
161
+ // Location & time
162
+ takenAt: {
163
+ type: 'datetime',
164
+ optional: true,
165
+ description: 'When the photo was taken',
166
+ },
167
+ location: {
168
+ type: 'json',
169
+ optional: true,
170
+ description: 'GPS coordinates (latitude, longitude)',
171
+ },
172
+
173
+ // Organization
174
+ tags: {
175
+ type: 'string',
176
+ array: true,
177
+ optional: true,
178
+ description: 'Tags for categorization',
179
+ },
180
+ keywords: {
181
+ type: 'string',
182
+ array: true,
183
+ optional: true,
184
+ description: 'Search keywords',
185
+ },
186
+
187
+ // Processing
188
+ thumbnail: {
189
+ type: 'url',
190
+ optional: true,
191
+ description: 'URL to thumbnail version',
192
+ },
193
+ versions: {
194
+ type: 'json',
195
+ optional: true,
196
+ description: 'Different sizes/versions of the image',
197
+ },
198
+ },
199
+
200
+ relationships: {
201
+ album: {
202
+ type: 'Album',
203
+ required: false,
204
+ description: 'Album this image belongs to',
205
+ },
206
+ library: {
207
+ type: 'MediaLibrary',
208
+ required: false,
209
+ description: 'Media library containing this image',
210
+ },
211
+ photographer: {
212
+ type: 'Contact',
213
+ required: false,
214
+ description: 'Photographer who took the photo',
215
+ },
216
+ },
217
+
218
+ actions: [
219
+ 'upload',
220
+ 'download',
221
+ 'view',
222
+ 'edit',
223
+ 'crop',
224
+ 'resize',
225
+ 'rotate',
226
+ 'flip',
227
+ 'filter',
228
+ 'enhance',
229
+ 'compress',
230
+ 'convert',
231
+ 'tag',
232
+ 'share',
233
+ 'delete',
234
+ 'restore',
235
+ 'duplicate',
236
+ 'addToAlbum',
237
+ 'removeFromAlbum',
238
+ 'setAltText',
239
+ ],
240
+
241
+ events: [
242
+ 'uploaded',
243
+ 'downloaded',
244
+ 'viewed',
245
+ 'edited',
246
+ 'cropped',
247
+ 'resized',
248
+ 'rotated',
249
+ 'flipped',
250
+ 'filtered',
251
+ 'enhanced',
252
+ 'compressed',
253
+ 'converted',
254
+ 'tagged',
255
+ 'shared',
256
+ 'deleted',
257
+ 'restored',
258
+ 'duplicated',
259
+ 'addedToAlbum',
260
+ 'removedFromAlbum',
261
+ ],
262
+ }
263
+
264
+ // =============================================================================
265
+ // Video
266
+ // =============================================================================
267
+
268
+ /**
269
+ * Video file entity
270
+ *
271
+ * Represents a video file with duration, resolution, and metadata
272
+ */
273
+ export const Video: Noun = {
274
+ singular: 'video',
275
+ plural: 'videos',
276
+ description: 'A video file with duration, resolution, format, and metadata',
277
+
278
+ properties: {
279
+ // Basic info
280
+ filename: {
281
+ type: 'string',
282
+ description: 'Original filename',
283
+ },
284
+ url: {
285
+ type: 'url',
286
+ description: 'URL to access the video',
287
+ },
288
+ title: {
289
+ type: 'string',
290
+ optional: true,
291
+ description: 'Video title',
292
+ },
293
+ description: {
294
+ type: 'string',
295
+ optional: true,
296
+ description: 'Video description',
297
+ },
298
+
299
+ // Format & technical
300
+ format: {
301
+ type: 'string',
302
+ description: 'Video format: mp4, mov, avi, webm, mkv, flv, wmv',
303
+ examples: ['mp4', 'mov', 'avi', 'webm', 'mkv', 'flv', 'wmv'],
304
+ },
305
+ mimeType: {
306
+ type: 'string',
307
+ description: 'MIME type of the video',
308
+ },
309
+ codec: {
310
+ type: 'string',
311
+ optional: true,
312
+ description: 'Video codec: h264, h265, vp9, av1',
313
+ examples: ['h264', 'h265', 'vp9', 'av1'],
314
+ },
315
+ audioCodec: {
316
+ type: 'string',
317
+ optional: true,
318
+ description: 'Audio codec: aac, mp3, opus, vorbis',
319
+ examples: ['aac', 'mp3', 'opus', 'vorbis'],
320
+ },
321
+ container: {
322
+ type: 'string',
323
+ optional: true,
324
+ description: 'Container format',
325
+ },
326
+
327
+ // Duration & timing
328
+ duration: {
329
+ type: 'number',
330
+ description: 'Duration in seconds',
331
+ },
332
+ frameRate: {
333
+ type: 'number',
334
+ optional: true,
335
+ description: 'Frames per second',
336
+ },
337
+ totalFrames: {
338
+ type: 'number',
339
+ optional: true,
340
+ description: 'Total number of frames',
341
+ },
342
+
343
+ // Dimensions
344
+ width: {
345
+ type: 'number',
346
+ description: 'Width in pixels',
347
+ },
348
+ height: {
349
+ type: 'number',
350
+ description: 'Height in pixels',
351
+ },
352
+ aspectRatio: {
353
+ type: 'string',
354
+ optional: true,
355
+ description: 'Aspect ratio (e.g., 16:9, 4:3, 21:9)',
356
+ examples: ['16:9', '4:3', '21:9', '1:1'],
357
+ },
358
+ resolution: {
359
+ type: 'string',
360
+ optional: true,
361
+ description: 'Video resolution: 480p, 720p, 1080p, 2k, 4k, 8k',
362
+ examples: ['480p', '720p', '1080p', '1440p', '2k', '4k', '8k'],
363
+ },
364
+ orientation: {
365
+ type: 'string',
366
+ optional: true,
367
+ description: 'Video orientation: landscape, portrait',
368
+ examples: ['landscape', 'portrait'],
369
+ },
370
+
371
+ // File properties
372
+ size: {
373
+ type: 'number',
374
+ description: 'File size in bytes',
375
+ },
376
+ bitrate: {
377
+ type: 'number',
378
+ optional: true,
379
+ description: 'Bitrate in bits per second',
380
+ },
381
+ audioBitrate: {
382
+ type: 'number',
383
+ optional: true,
384
+ description: 'Audio bitrate in bits per second',
385
+ },
386
+
387
+ // Thumbnail
388
+ thumbnail: {
389
+ type: 'url',
390
+ optional: true,
391
+ description: 'URL to thumbnail image',
392
+ },
393
+ poster: {
394
+ type: 'url',
395
+ optional: true,
396
+ description: 'URL to poster image',
397
+ },
398
+ thumbnailTime: {
399
+ type: 'number',
400
+ optional: true,
401
+ description: 'Time in seconds for thumbnail generation',
402
+ },
403
+
404
+ // Audio properties
405
+ hasAudio: {
406
+ type: 'boolean',
407
+ optional: true,
408
+ description: 'Whether the video has an audio track',
409
+ },
410
+ audioChannels: {
411
+ type: 'number',
412
+ optional: true,
413
+ description: 'Number of audio channels',
414
+ },
415
+ sampleRate: {
416
+ type: 'number',
417
+ optional: true,
418
+ description: 'Audio sample rate in Hz',
419
+ },
420
+
421
+ // Recording metadata
422
+ recordedAt: {
423
+ type: 'datetime',
424
+ optional: true,
425
+ description: 'When the video was recorded',
426
+ },
427
+ location: {
428
+ type: 'json',
429
+ optional: true,
430
+ description: 'GPS coordinates where recorded',
431
+ },
432
+ camera: {
433
+ type: 'string',
434
+ optional: true,
435
+ description: 'Camera or device used',
436
+ },
437
+
438
+ // Organization
439
+ tags: {
440
+ type: 'string',
441
+ array: true,
442
+ optional: true,
443
+ description: 'Tags for categorization',
444
+ },
445
+ keywords: {
446
+ type: 'string',
447
+ array: true,
448
+ optional: true,
449
+ description: 'Search keywords',
450
+ },
451
+ chapters: {
452
+ type: 'json',
453
+ array: true,
454
+ optional: true,
455
+ description: 'Video chapters with timestamps',
456
+ },
457
+
458
+ // Processing status
459
+ status: {
460
+ type: 'string',
461
+ optional: true,
462
+ description: 'Processing status: uploading, processing, ready, error',
463
+ examples: ['uploading', 'processing', 'ready', 'error'],
464
+ },
465
+ versions: {
466
+ type: 'json',
467
+ optional: true,
468
+ description: 'Different quality versions of the video',
469
+ },
470
+ },
471
+
472
+ relationships: {
473
+ album: {
474
+ type: 'Album',
475
+ required: false,
476
+ description: 'Album this video belongs to',
477
+ },
478
+ library: {
479
+ type: 'MediaLibrary',
480
+ required: false,
481
+ description: 'Media library containing this video',
482
+ },
483
+ transcript: {
484
+ type: 'Transcript',
485
+ required: false,
486
+ description: 'Transcription of the audio',
487
+ },
488
+ captions: {
489
+ type: 'Caption[]',
490
+ description: 'Subtitle/caption tracks',
491
+ },
492
+ creator: {
493
+ type: 'Contact',
494
+ required: false,
495
+ description: 'Person who created the video',
496
+ },
497
+ },
498
+
499
+ actions: [
500
+ 'upload',
501
+ 'download',
502
+ 'play',
503
+ 'pause',
504
+ 'seek',
505
+ 'edit',
506
+ 'trim',
507
+ 'crop',
508
+ 'rotate',
509
+ 'merge',
510
+ 'split',
511
+ 'transcode',
512
+ 'compress',
513
+ 'extract',
514
+ 'mute',
515
+ 'addAudio',
516
+ 'addSubtitles',
517
+ 'tag',
518
+ 'share',
519
+ 'delete',
520
+ 'restore',
521
+ 'duplicate',
522
+ 'addToAlbum',
523
+ 'removeFromAlbum',
524
+ 'generateThumbnail',
525
+ 'transcribe',
526
+ ],
527
+
528
+ events: [
529
+ 'uploaded',
530
+ 'downloaded',
531
+ 'played',
532
+ 'paused',
533
+ 'seeked',
534
+ 'edited',
535
+ 'trimmed',
536
+ 'cropped',
537
+ 'rotated',
538
+ 'merged',
539
+ 'split',
540
+ 'transcoded',
541
+ 'compressed',
542
+ 'extracted',
543
+ 'muted',
544
+ 'audioAdded',
545
+ 'subtitlesAdded',
546
+ 'tagged',
547
+ 'shared',
548
+ 'deleted',
549
+ 'restored',
550
+ 'duplicated',
551
+ 'addedToAlbum',
552
+ 'removedFromAlbum',
553
+ 'thumbnailGenerated',
554
+ 'transcribed',
555
+ 'processingStarted',
556
+ 'processingCompleted',
557
+ 'processingFailed',
558
+ ],
559
+ }
560
+
561
+ // =============================================================================
562
+ // Audio
563
+ // =============================================================================
564
+
565
+ /**
566
+ * Audio file entity
567
+ *
568
+ * Represents an audio file with duration, format, and metadata
569
+ */
570
+ export const Audio: Noun = {
571
+ singular: 'audio',
572
+ plural: 'audio files',
573
+ description: 'An audio file with duration, format, and metadata',
574
+
575
+ properties: {
576
+ // Basic info
577
+ filename: {
578
+ type: 'string',
579
+ description: 'Original filename',
580
+ },
581
+ url: {
582
+ type: 'url',
583
+ description: 'URL to access the audio',
584
+ },
585
+ title: {
586
+ type: 'string',
587
+ optional: true,
588
+ description: 'Audio title or track name',
589
+ },
590
+ description: {
591
+ type: 'string',
592
+ optional: true,
593
+ description: 'Audio description',
594
+ },
595
+
596
+ // Format & technical
597
+ format: {
598
+ type: 'string',
599
+ description: 'Audio format: mp3, wav, aac, flac, ogg, m4a, wma, opus',
600
+ examples: ['mp3', 'wav', 'aac', 'flac', 'ogg', 'm4a', 'wma', 'opus'],
601
+ },
602
+ mimeType: {
603
+ type: 'string',
604
+ description: 'MIME type of the audio',
605
+ },
606
+ codec: {
607
+ type: 'string',
608
+ optional: true,
609
+ description: 'Audio codec',
610
+ },
611
+
612
+ // Duration
613
+ duration: {
614
+ type: 'number',
615
+ description: 'Duration in seconds',
616
+ },
617
+
618
+ // Audio properties
619
+ bitrate: {
620
+ type: 'number',
621
+ optional: true,
622
+ description: 'Bitrate in bits per second',
623
+ },
624
+ sampleRate: {
625
+ type: 'number',
626
+ optional: true,
627
+ description: 'Sample rate in Hz (e.g., 44100, 48000)',
628
+ },
629
+ channels: {
630
+ type: 'number',
631
+ optional: true,
632
+ description: 'Number of audio channels: 1 (mono), 2 (stereo)',
633
+ },
634
+ bitDepth: {
635
+ type: 'number',
636
+ optional: true,
637
+ description: 'Bit depth (e.g., 16, 24)',
638
+ },
639
+
640
+ // File properties
641
+ size: {
642
+ type: 'number',
643
+ description: 'File size in bytes',
644
+ },
645
+
646
+ // Music metadata
647
+ artist: {
648
+ type: 'string',
649
+ optional: true,
650
+ description: 'Artist or performer',
651
+ },
652
+ album: {
653
+ type: 'string',
654
+ optional: true,
655
+ description: 'Album name',
656
+ },
657
+ albumArtist: {
658
+ type: 'string',
659
+ optional: true,
660
+ description: 'Album artist',
661
+ },
662
+ genre: {
663
+ type: 'string',
664
+ optional: true,
665
+ description: 'Music genre',
666
+ },
667
+ year: {
668
+ type: 'number',
669
+ optional: true,
670
+ description: 'Release year',
671
+ },
672
+ trackNumber: {
673
+ type: 'number',
674
+ optional: true,
675
+ description: 'Track number in album',
676
+ },
677
+ trackCount: {
678
+ type: 'number',
679
+ optional: true,
680
+ description: 'Total tracks in album',
681
+ },
682
+ discNumber: {
683
+ type: 'number',
684
+ optional: true,
685
+ description: 'Disc number for multi-disc albums',
686
+ },
687
+ composer: {
688
+ type: 'string',
689
+ optional: true,
690
+ description: 'Composer name',
691
+ },
692
+ publisher: {
693
+ type: 'string',
694
+ optional: true,
695
+ description: 'Publisher or record label',
696
+ },
697
+ copyright: {
698
+ type: 'string',
699
+ optional: true,
700
+ description: 'Copyright information',
701
+ },
702
+ isrc: {
703
+ type: 'string',
704
+ optional: true,
705
+ description: 'International Standard Recording Code',
706
+ },
707
+
708
+ // Cover art
709
+ coverArt: {
710
+ type: 'url',
711
+ optional: true,
712
+ description: 'URL to album cover art',
713
+ },
714
+
715
+ // Recording metadata
716
+ recordedAt: {
717
+ type: 'datetime',
718
+ optional: true,
719
+ description: 'When the audio was recorded',
720
+ },
721
+
722
+ // Organization
723
+ tags: {
724
+ type: 'string',
725
+ array: true,
726
+ optional: true,
727
+ description: 'Tags for categorization',
728
+ },
729
+ keywords: {
730
+ type: 'string',
731
+ array: true,
732
+ optional: true,
733
+ description: 'Search keywords',
734
+ },
735
+
736
+ // Lyrics & transcription
737
+ lyrics: {
738
+ type: 'string',
739
+ optional: true,
740
+ description: 'Song lyrics',
741
+ },
742
+ hasLyrics: {
743
+ type: 'boolean',
744
+ optional: true,
745
+ description: 'Whether lyrics are available',
746
+ },
747
+ },
748
+
749
+ relationships: {
750
+ library: {
751
+ type: 'MediaLibrary',
752
+ required: false,
753
+ description: 'Media library containing this audio',
754
+ },
755
+ transcript: {
756
+ type: 'Transcript',
757
+ required: false,
758
+ description: 'Transcription of the audio',
759
+ },
760
+ artist: {
761
+ type: 'Contact',
762
+ required: false,
763
+ description: 'The artist or performer',
764
+ },
765
+ },
766
+
767
+ actions: [
768
+ 'upload',
769
+ 'download',
770
+ 'play',
771
+ 'pause',
772
+ 'seek',
773
+ 'stop',
774
+ 'edit',
775
+ 'trim',
776
+ 'normalize',
777
+ 'fade',
778
+ 'merge',
779
+ 'split',
780
+ 'convert',
781
+ 'compress',
782
+ 'tag',
783
+ 'share',
784
+ 'delete',
785
+ 'restore',
786
+ 'duplicate',
787
+ 'transcribe',
788
+ 'addLyrics',
789
+ ],
790
+
791
+ events: [
792
+ 'uploaded',
793
+ 'downloaded',
794
+ 'played',
795
+ 'paused',
796
+ 'seeked',
797
+ 'stopped',
798
+ 'edited',
799
+ 'trimmed',
800
+ 'normalized',
801
+ 'faded',
802
+ 'merged',
803
+ 'split',
804
+ 'converted',
805
+ 'compressed',
806
+ 'tagged',
807
+ 'shared',
808
+ 'deleted',
809
+ 'restored',
810
+ 'duplicated',
811
+ 'transcribed',
812
+ 'lyricsAdded',
813
+ ],
814
+ }
815
+
816
+ // =============================================================================
817
+ // Screenshot
818
+ // =============================================================================
819
+
820
+ /**
821
+ * Screenshot capture entity
822
+ *
823
+ * Represents a screenshot with annotations and context
824
+ */
825
+ export const Screenshot: Noun = {
826
+ singular: 'screenshot',
827
+ plural: 'screenshots',
828
+ description: 'A screenshot capture with annotations and context',
829
+
830
+ properties: {
831
+ // Basic info
832
+ filename: {
833
+ type: 'string',
834
+ description: 'Original filename',
835
+ },
836
+ url: {
837
+ type: 'url',
838
+ description: 'URL to access the screenshot',
839
+ },
840
+ title: {
841
+ type: 'string',
842
+ optional: true,
843
+ description: 'Screenshot title or caption',
844
+ },
845
+ description: {
846
+ type: 'string',
847
+ optional: true,
848
+ description: 'Description of what the screenshot shows',
849
+ },
850
+
851
+ // Format & dimensions
852
+ format: {
853
+ type: 'string',
854
+ description: 'Image format: png, jpg, jpeg',
855
+ examples: ['png', 'jpg', 'jpeg'],
856
+ },
857
+ width: {
858
+ type: 'number',
859
+ description: 'Width in pixels',
860
+ },
861
+ height: {
862
+ type: 'number',
863
+ description: 'Height in pixels',
864
+ },
865
+
866
+ // File properties
867
+ size: {
868
+ type: 'number',
869
+ description: 'File size in bytes',
870
+ },
871
+
872
+ // Capture context
873
+ capturedAt: {
874
+ type: 'datetime',
875
+ description: 'When the screenshot was taken',
876
+ },
877
+ source: {
878
+ type: 'string',
879
+ optional: true,
880
+ description: 'Source application or window',
881
+ },
882
+ sourceUrl: {
883
+ type: 'url',
884
+ optional: true,
885
+ description: 'URL if screenshot is of a webpage',
886
+ },
887
+ device: {
888
+ type: 'string',
889
+ optional: true,
890
+ description: 'Device where screenshot was taken',
891
+ },
892
+ displayName: {
893
+ type: 'string',
894
+ optional: true,
895
+ description: 'Display or monitor name',
896
+ },
897
+
898
+ // Capture type
899
+ captureType: {
900
+ type: 'string',
901
+ optional: true,
902
+ description: 'Capture type: fullscreen, window, region, scrolling',
903
+ examples: ['fullscreen', 'window', 'region', 'scrolling'],
904
+ },
905
+
906
+ // Annotations
907
+ hasAnnotations: {
908
+ type: 'boolean',
909
+ optional: true,
910
+ description: 'Whether the screenshot has annotations',
911
+ },
912
+ annotations: {
913
+ type: 'json',
914
+ array: true,
915
+ optional: true,
916
+ description: 'Annotations (arrows, text, shapes, highlights)',
917
+ },
918
+
919
+ // Organization
920
+ tags: {
921
+ type: 'string',
922
+ array: true,
923
+ optional: true,
924
+ description: 'Tags for categorization',
925
+ },
926
+ keywords: {
927
+ type: 'string',
928
+ array: true,
929
+ optional: true,
930
+ description: 'Search keywords',
931
+ },
932
+
933
+ // Thumbnail
934
+ thumbnail: {
935
+ type: 'url',
936
+ optional: true,
937
+ description: 'URL to thumbnail version',
938
+ },
939
+
940
+ // OCR & text extraction
941
+ extractedText: {
942
+ type: 'string',
943
+ optional: true,
944
+ description: 'Text extracted from screenshot via OCR',
945
+ },
946
+ hasText: {
947
+ type: 'boolean',
948
+ optional: true,
949
+ description: 'Whether text was detected in the screenshot',
950
+ },
951
+ },
952
+
953
+ relationships: {
954
+ library: {
955
+ type: 'MediaLibrary',
956
+ required: false,
957
+ description: 'Media library containing this screenshot',
958
+ },
959
+ capturedBy: {
960
+ type: 'Contact',
961
+ required: false,
962
+ description: 'Person who took the screenshot',
963
+ },
964
+ },
965
+
966
+ actions: [
967
+ 'capture',
968
+ 'upload',
969
+ 'download',
970
+ 'view',
971
+ 'edit',
972
+ 'annotate',
973
+ 'crop',
974
+ 'resize',
975
+ 'blur',
976
+ 'highlight',
977
+ 'addText',
978
+ 'addArrow',
979
+ 'addShape',
980
+ 'redact',
981
+ 'ocr',
982
+ 'tag',
983
+ 'share',
984
+ 'delete',
985
+ 'restore',
986
+ 'duplicate',
987
+ ],
988
+
989
+ events: [
990
+ 'captured',
991
+ 'uploaded',
992
+ 'downloaded',
993
+ 'viewed',
994
+ 'edited',
995
+ 'annotated',
996
+ 'cropped',
997
+ 'resized',
998
+ 'blurred',
999
+ 'highlighted',
1000
+ 'textAdded',
1001
+ 'arrowAdded',
1002
+ 'shapeAdded',
1003
+ 'redacted',
1004
+ 'ocrProcessed',
1005
+ 'tagged',
1006
+ 'shared',
1007
+ 'deleted',
1008
+ 'restored',
1009
+ 'duplicated',
1010
+ ],
1011
+ }
1012
+
1013
+ // =============================================================================
1014
+ // Album
1015
+ // =============================================================================
1016
+
1017
+ /**
1018
+ * Album/collection entity
1019
+ *
1020
+ * Represents a collection of media items (images, videos)
1021
+ */
1022
+ export const Album: Noun = {
1023
+ singular: 'album',
1024
+ plural: 'albums',
1025
+ description: 'A collection of media items (images, videos)',
1026
+
1027
+ properties: {
1028
+ // Basic info
1029
+ name: {
1030
+ type: 'string',
1031
+ description: 'Album name',
1032
+ },
1033
+ description: {
1034
+ type: 'string',
1035
+ optional: true,
1036
+ description: 'Album description',
1037
+ },
1038
+ slug: {
1039
+ type: 'string',
1040
+ optional: true,
1041
+ description: 'URL-friendly slug',
1042
+ },
1043
+
1044
+ // Cover
1045
+ coverImage: {
1046
+ type: 'url',
1047
+ optional: true,
1048
+ description: 'URL to cover/thumbnail image',
1049
+ },
1050
+
1051
+ // Counts
1052
+ itemCount: {
1053
+ type: 'number',
1054
+ optional: true,
1055
+ description: 'Number of items in the album',
1056
+ },
1057
+ imageCount: {
1058
+ type: 'number',
1059
+ optional: true,
1060
+ description: 'Number of images',
1061
+ },
1062
+ videoCount: {
1063
+ type: 'number',
1064
+ optional: true,
1065
+ description: 'Number of videos',
1066
+ },
1067
+
1068
+ // Dates
1069
+ startDate: {
1070
+ type: 'datetime',
1071
+ optional: true,
1072
+ description: 'Start date for event/date range albums',
1073
+ },
1074
+ endDate: {
1075
+ type: 'datetime',
1076
+ optional: true,
1077
+ description: 'End date for event/date range albums',
1078
+ },
1079
+
1080
+ // Organization
1081
+ albumType: {
1082
+ type: 'string',
1083
+ optional: true,
1084
+ description: 'Album type: manual, smart, event, date, location',
1085
+ examples: ['manual', 'smart', 'event', 'date', 'location'],
1086
+ },
1087
+ sortOrder: {
1088
+ type: 'string',
1089
+ optional: true,
1090
+ description: 'How items are sorted: date, name, manual',
1091
+ examples: ['date-asc', 'date-desc', 'name-asc', 'name-desc', 'manual'],
1092
+ },
1093
+ tags: {
1094
+ type: 'string',
1095
+ array: true,
1096
+ optional: true,
1097
+ description: 'Album tags',
1098
+ },
1099
+
1100
+ // Smart album criteria
1101
+ smartCriteria: {
1102
+ type: 'json',
1103
+ optional: true,
1104
+ description: 'Criteria for smart/dynamic albums',
1105
+ },
1106
+
1107
+ // Privacy & sharing
1108
+ visibility: {
1109
+ type: 'string',
1110
+ optional: true,
1111
+ description: 'Album visibility: private, shared, public',
1112
+ examples: ['private', 'shared', 'public'],
1113
+ },
1114
+ shareUrl: {
1115
+ type: 'url',
1116
+ optional: true,
1117
+ description: 'Public sharing URL',
1118
+ },
1119
+ password: {
1120
+ type: 'string',
1121
+ optional: true,
1122
+ description: 'Password for protected albums',
1123
+ },
1124
+
1125
+ // Location
1126
+ location: {
1127
+ type: 'json',
1128
+ optional: true,
1129
+ description: 'Location associated with the album',
1130
+ },
1131
+ },
1132
+
1133
+ relationships: {
1134
+ images: {
1135
+ type: 'Image[]',
1136
+ description: 'Images in this album',
1137
+ },
1138
+ videos: {
1139
+ type: 'Video[]',
1140
+ description: 'Videos in this album',
1141
+ },
1142
+ library: {
1143
+ type: 'MediaLibrary',
1144
+ required: false,
1145
+ description: 'Media library containing this album',
1146
+ },
1147
+ owner: {
1148
+ type: 'Contact',
1149
+ description: 'Album owner/creator',
1150
+ },
1151
+ collaborators: {
1152
+ type: 'Contact[]',
1153
+ description: 'People with access to the album',
1154
+ },
1155
+ },
1156
+
1157
+ actions: [
1158
+ 'create',
1159
+ 'update',
1160
+ 'delete',
1161
+ 'rename',
1162
+ 'addMedia',
1163
+ 'removeMedia',
1164
+ 'reorder',
1165
+ 'sort',
1166
+ 'setCover',
1167
+ 'share',
1168
+ 'unshare',
1169
+ 'export',
1170
+ 'duplicate',
1171
+ 'merge',
1172
+ 'split',
1173
+ ],
1174
+
1175
+ events: [
1176
+ 'created',
1177
+ 'updated',
1178
+ 'deleted',
1179
+ 'renamed',
1180
+ 'mediaAdded',
1181
+ 'mediaRemoved',
1182
+ 'reordered',
1183
+ 'sorted',
1184
+ 'coverChanged',
1185
+ 'shared',
1186
+ 'unshared',
1187
+ 'exported',
1188
+ 'duplicated',
1189
+ 'merged',
1190
+ 'split',
1191
+ ],
1192
+ }
1193
+
1194
+ // =============================================================================
1195
+ // MediaLibrary
1196
+ // =============================================================================
1197
+
1198
+ /**
1199
+ * Media library entity
1200
+ *
1201
+ * Represents a media asset management system/library
1202
+ */
1203
+ export const MediaLibrary: Noun = {
1204
+ singular: 'media library',
1205
+ plural: 'media libraries',
1206
+ description: 'A media asset management system containing organized media',
1207
+
1208
+ properties: {
1209
+ // Basic info
1210
+ name: {
1211
+ type: 'string',
1212
+ description: 'Library name',
1213
+ },
1214
+ description: {
1215
+ type: 'string',
1216
+ optional: true,
1217
+ description: 'Library description',
1218
+ },
1219
+
1220
+ // Storage
1221
+ storageLocation: {
1222
+ type: 'string',
1223
+ optional: true,
1224
+ description: 'Storage location or path',
1225
+ },
1226
+ storageProvider: {
1227
+ type: 'string',
1228
+ optional: true,
1229
+ description: 'Storage provider: local, s3, cloudinary, cloudflare',
1230
+ examples: ['local', 's3', 'cloudinary', 'cloudflare', 'gcs', 'azure'],
1231
+ },
1232
+
1233
+ // Statistics
1234
+ totalItems: {
1235
+ type: 'number',
1236
+ optional: true,
1237
+ description: 'Total number of media items',
1238
+ },
1239
+ totalImages: {
1240
+ type: 'number',
1241
+ optional: true,
1242
+ description: 'Total number of images',
1243
+ },
1244
+ totalVideos: {
1245
+ type: 'number',
1246
+ optional: true,
1247
+ description: 'Total number of videos',
1248
+ },
1249
+ totalAudio: {
1250
+ type: 'number',
1251
+ optional: true,
1252
+ description: 'Total number of audio files',
1253
+ },
1254
+ totalSize: {
1255
+ type: 'number',
1256
+ optional: true,
1257
+ description: 'Total storage size in bytes',
1258
+ },
1259
+ albumCount: {
1260
+ type: 'number',
1261
+ optional: true,
1262
+ description: 'Number of albums',
1263
+ },
1264
+
1265
+ // Organization
1266
+ organizationType: {
1267
+ type: 'string',
1268
+ optional: true,
1269
+ description: 'How media is organized: folders, tags, albums, flat',
1270
+ examples: ['folders', 'tags', 'albums', 'flat', 'hybrid'],
1271
+ },
1272
+ tags: {
1273
+ type: 'string',
1274
+ array: true,
1275
+ optional: true,
1276
+ description: 'Available tags in the library',
1277
+ },
1278
+
1279
+ // Settings
1280
+ autoTag: {
1281
+ type: 'boolean',
1282
+ optional: true,
1283
+ description: 'Whether to automatically tag media',
1284
+ },
1285
+ autoOrganize: {
1286
+ type: 'boolean',
1287
+ optional: true,
1288
+ description: 'Whether to automatically organize media',
1289
+ },
1290
+ duplicateDetection: {
1291
+ type: 'boolean',
1292
+ optional: true,
1293
+ description: 'Whether to detect duplicate files',
1294
+ },
1295
+ faceRecognition: {
1296
+ type: 'boolean',
1297
+ optional: true,
1298
+ description: 'Whether face recognition is enabled',
1299
+ },
1300
+
1301
+ // Access control
1302
+ visibility: {
1303
+ type: 'string',
1304
+ optional: true,
1305
+ description: 'Library visibility: private, team, public',
1306
+ examples: ['private', 'team', 'public'],
1307
+ },
1308
+ },
1309
+
1310
+ relationships: {
1311
+ images: {
1312
+ type: 'Image[]',
1313
+ description: 'Images in this library',
1314
+ },
1315
+ videos: {
1316
+ type: 'Video[]',
1317
+ description: 'Videos in this library',
1318
+ },
1319
+ audio: {
1320
+ type: 'Audio[]',
1321
+ description: 'Audio files in this library',
1322
+ },
1323
+ albums: {
1324
+ type: 'Album[]',
1325
+ description: 'Albums in this library',
1326
+ },
1327
+ owner: {
1328
+ type: 'Contact',
1329
+ description: 'Library owner',
1330
+ },
1331
+ members: {
1332
+ type: 'Contact[]',
1333
+ description: 'People with access to the library',
1334
+ },
1335
+ },
1336
+
1337
+ actions: [
1338
+ 'create',
1339
+ 'configure',
1340
+ 'import',
1341
+ 'export',
1342
+ 'scan',
1343
+ 'index',
1344
+ 'search',
1345
+ 'backup',
1346
+ 'restore',
1347
+ 'optimize',
1348
+ 'deduplicate',
1349
+ 'share',
1350
+ 'archive',
1351
+ 'delete',
1352
+ ],
1353
+
1354
+ events: [
1355
+ 'created',
1356
+ 'configured',
1357
+ 'imported',
1358
+ 'exported',
1359
+ 'scanned',
1360
+ 'indexed',
1361
+ 'searched',
1362
+ 'backedUp',
1363
+ 'restored',
1364
+ 'optimized',
1365
+ 'deduplicated',
1366
+ 'shared',
1367
+ 'archived',
1368
+ 'deleted',
1369
+ ],
1370
+ }
1371
+
1372
+ // =============================================================================
1373
+ // Transcript
1374
+ // =============================================================================
1375
+
1376
+ /**
1377
+ * Transcript entity
1378
+ *
1379
+ * Represents a transcription of audio or video content
1380
+ */
1381
+ export const Transcript: Noun = {
1382
+ singular: 'transcript',
1383
+ plural: 'transcripts',
1384
+ description: 'A transcription of audio or video content',
1385
+
1386
+ properties: {
1387
+ // Basic info
1388
+ text: {
1389
+ type: 'string',
1390
+ description: 'Full transcript text',
1391
+ },
1392
+ title: {
1393
+ type: 'string',
1394
+ optional: true,
1395
+ description: 'Transcript title',
1396
+ },
1397
+
1398
+ // Format
1399
+ format: {
1400
+ type: 'string',
1401
+ optional: true,
1402
+ description: 'Transcript format: plain, srt, vtt, json',
1403
+ examples: ['plain', 'srt', 'vtt', 'json'],
1404
+ },
1405
+
1406
+ // Language
1407
+ language: {
1408
+ type: 'string',
1409
+ description: 'Language code (e.g., en, es, fr)',
1410
+ },
1411
+ languageName: {
1412
+ type: 'string',
1413
+ optional: true,
1414
+ description: 'Language name (e.g., English, Spanish)',
1415
+ },
1416
+
1417
+ // Timing
1418
+ duration: {
1419
+ type: 'number',
1420
+ optional: true,
1421
+ description: 'Duration of the transcribed content in seconds',
1422
+ },
1423
+
1424
+ // Segments
1425
+ segments: {
1426
+ type: 'json',
1427
+ array: true,
1428
+ optional: true,
1429
+ description: 'Timed segments with start, end, and text',
1430
+ },
1431
+ wordTimestamps: {
1432
+ type: 'json',
1433
+ array: true,
1434
+ optional: true,
1435
+ description: 'Word-level timestamps',
1436
+ },
1437
+
1438
+ // Speaker identification
1439
+ hasSpeakers: {
1440
+ type: 'boolean',
1441
+ optional: true,
1442
+ description: 'Whether speakers are identified',
1443
+ },
1444
+ speakers: {
1445
+ type: 'json',
1446
+ array: true,
1447
+ optional: true,
1448
+ description: 'Speaker labels and segments',
1449
+ },
1450
+ speakerCount: {
1451
+ type: 'number',
1452
+ optional: true,
1453
+ description: 'Number of distinct speakers',
1454
+ },
1455
+
1456
+ // Quality & confidence
1457
+ confidence: {
1458
+ type: 'number',
1459
+ optional: true,
1460
+ description: 'Overall transcription confidence score (0-1)',
1461
+ },
1462
+ quality: {
1463
+ type: 'string',
1464
+ optional: true,
1465
+ description: 'Transcript quality: low, medium, high',
1466
+ examples: ['low', 'medium', 'high'],
1467
+ },
1468
+
1469
+ // Processing
1470
+ status: {
1471
+ type: 'string',
1472
+ optional: true,
1473
+ description: 'Processing status: pending, processing, completed, error',
1474
+ examples: ['pending', 'processing', 'completed', 'error'],
1475
+ },
1476
+ provider: {
1477
+ type: 'string',
1478
+ optional: true,
1479
+ description: 'Transcription provider: whisper, deepgram, rev, etc',
1480
+ examples: ['whisper', 'deepgram', 'assemblyai', 'rev', 'manual'],
1481
+ },
1482
+ method: {
1483
+ type: 'string',
1484
+ optional: true,
1485
+ description: 'Transcription method: automatic, manual, hybrid',
1486
+ examples: ['automatic', 'manual', 'hybrid'],
1487
+ },
1488
+
1489
+ // Metadata
1490
+ wordCount: {
1491
+ type: 'number',
1492
+ optional: true,
1493
+ description: 'Total word count',
1494
+ },
1495
+ edited: {
1496
+ type: 'boolean',
1497
+ optional: true,
1498
+ description: 'Whether the transcript has been edited',
1499
+ },
1500
+ },
1501
+
1502
+ relationships: {
1503
+ video: {
1504
+ type: 'Video',
1505
+ required: false,
1506
+ description: 'Video this is a transcript of',
1507
+ },
1508
+ audio: {
1509
+ type: 'Audio',
1510
+ required: false,
1511
+ description: 'Audio this is a transcript of',
1512
+ },
1513
+ editor: {
1514
+ type: 'Contact',
1515
+ required: false,
1516
+ description: 'Person who edited the transcript',
1517
+ },
1518
+ },
1519
+
1520
+ actions: [
1521
+ 'generate',
1522
+ 'edit',
1523
+ 'format',
1524
+ 'export',
1525
+ 'search',
1526
+ 'translate',
1527
+ 'identify',
1528
+ 'timestamp',
1529
+ 'sync',
1530
+ 'review',
1531
+ 'approve',
1532
+ 'delete',
1533
+ ],
1534
+
1535
+ events: [
1536
+ 'generated',
1537
+ 'edited',
1538
+ 'formatted',
1539
+ 'exported',
1540
+ 'searched',
1541
+ 'translated',
1542
+ 'identified',
1543
+ 'timestamped',
1544
+ 'synced',
1545
+ 'reviewed',
1546
+ 'approved',
1547
+ 'deleted',
1548
+ 'processingStarted',
1549
+ 'processingCompleted',
1550
+ 'processingFailed',
1551
+ ],
1552
+ }
1553
+
1554
+ // =============================================================================
1555
+ // Caption
1556
+ // =============================================================================
1557
+
1558
+ /**
1559
+ * Caption/subtitle entity
1560
+ *
1561
+ * Represents captions or subtitles for video content
1562
+ */
1563
+ export const Caption: Noun = {
1564
+ singular: 'caption',
1565
+ plural: 'captions',
1566
+ description: 'Captions or subtitles for video content',
1567
+
1568
+ properties: {
1569
+ // Basic info
1570
+ label: {
1571
+ type: 'string',
1572
+ description: 'Caption track label (e.g., English, Spanish, English CC)',
1573
+ },
1574
+
1575
+ // Language
1576
+ language: {
1577
+ type: 'string',
1578
+ description: 'Language code (e.g., en, es, fr)',
1579
+ },
1580
+ languageName: {
1581
+ type: 'string',
1582
+ optional: true,
1583
+ description: 'Language name (e.g., English, Spanish)',
1584
+ },
1585
+
1586
+ // Type
1587
+ kind: {
1588
+ type: 'string',
1589
+ description: 'Caption kind: subtitles, captions, descriptions',
1590
+ examples: ['subtitles', 'captions', 'descriptions'],
1591
+ },
1592
+ closedCaptions: {
1593
+ type: 'boolean',
1594
+ optional: true,
1595
+ description: 'Whether these are closed captions (CC)',
1596
+ },
1597
+ sdh: {
1598
+ type: 'boolean',
1599
+ optional: true,
1600
+ description: 'Whether these are SDH (Subtitles for Deaf and Hard of hearing)',
1601
+ },
1602
+
1603
+ // Format
1604
+ format: {
1605
+ type: 'string',
1606
+ description: 'Caption format: vtt, srt, ass, scc',
1607
+ examples: ['vtt', 'srt', 'ass', 'scc', 'dfxp', 'ttml'],
1608
+ },
1609
+ url: {
1610
+ type: 'url',
1611
+ optional: true,
1612
+ description: 'URL to the caption file',
1613
+ },
1614
+
1615
+ // Content
1616
+ content: {
1617
+ type: 'string',
1618
+ optional: true,
1619
+ description: 'Raw caption content',
1620
+ },
1621
+ cues: {
1622
+ type: 'json',
1623
+ array: true,
1624
+ optional: true,
1625
+ description: 'Caption cues with timing and text',
1626
+ },
1627
+
1628
+ // Processing
1629
+ status: {
1630
+ type: 'string',
1631
+ optional: true,
1632
+ description: 'Processing status: pending, processing, ready, error',
1633
+ examples: ['pending', 'processing', 'ready', 'error'],
1634
+ },
1635
+ provider: {
1636
+ type: 'string',
1637
+ optional: true,
1638
+ description: 'Caption generation provider',
1639
+ },
1640
+ method: {
1641
+ type: 'string',
1642
+ optional: true,
1643
+ description: 'Caption method: automatic, manual, hybrid',
1644
+ examples: ['automatic', 'manual', 'hybrid'],
1645
+ },
1646
+
1647
+ // Settings
1648
+ default: {
1649
+ type: 'boolean',
1650
+ optional: true,
1651
+ description: 'Whether this is the default caption track',
1652
+ },
1653
+ autoGenerated: {
1654
+ type: 'boolean',
1655
+ optional: true,
1656
+ description: 'Whether these captions were auto-generated',
1657
+ },
1658
+ edited: {
1659
+ type: 'boolean',
1660
+ optional: true,
1661
+ description: 'Whether the captions have been edited',
1662
+ },
1663
+
1664
+ // Metadata
1665
+ cueCount: {
1666
+ type: 'number',
1667
+ optional: true,
1668
+ description: 'Number of caption cues',
1669
+ },
1670
+ },
1671
+
1672
+ relationships: {
1673
+ video: {
1674
+ type: 'Video',
1675
+ description: 'Video these captions belong to',
1676
+ },
1677
+ transcript: {
1678
+ type: 'Transcript',
1679
+ required: false,
1680
+ description: 'Source transcript',
1681
+ },
1682
+ editor: {
1683
+ type: 'Contact',
1684
+ required: false,
1685
+ description: 'Person who edited the captions',
1686
+ },
1687
+ },
1688
+
1689
+ actions: [
1690
+ 'generate',
1691
+ 'upload',
1692
+ 'download',
1693
+ 'edit',
1694
+ 'sync',
1695
+ 'translate',
1696
+ 'export',
1697
+ 'validate',
1698
+ 'preview',
1699
+ 'delete',
1700
+ 'setDefault',
1701
+ ],
1702
+
1703
+ events: [
1704
+ 'generated',
1705
+ 'uploaded',
1706
+ 'downloaded',
1707
+ 'edited',
1708
+ 'synced',
1709
+ 'translated',
1710
+ 'exported',
1711
+ 'validated',
1712
+ 'previewed',
1713
+ 'deleted',
1714
+ 'setAsDefault',
1715
+ 'processingStarted',
1716
+ 'processingCompleted',
1717
+ 'processingFailed',
1718
+ ],
1719
+ }
1720
+
1721
+ // =============================================================================
1722
+ // Export all entities as a collection
1723
+ // =============================================================================
1724
+
1725
+ /**
1726
+ * All media entity types
1727
+ */
1728
+ export const MediaEntities = {
1729
+ Image,
1730
+ Video,
1731
+ Audio,
1732
+ Screenshot,
1733
+ Album,
1734
+ MediaLibrary,
1735
+ Transcript,
1736
+ Caption,
1737
+ }
1738
+
1739
+ /**
1740
+ * Entity categories for organization
1741
+ */
1742
+ export const MediaCategories = {
1743
+ visual: ['Image', 'Video', 'Screenshot'],
1744
+ audio: ['Audio'],
1745
+ collections: ['Album', 'MediaLibrary'],
1746
+ text: ['Transcript', 'Caption'],
1747
+ } as const