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,1035 @@
1
+ /**
2
+ * Streaming & Video Platform Entity Types (Nouns)
3
+ *
4
+ * Entities for video platforms like YouTube, Twitch, etc.
5
+ * Includes videos, channels, playlists, live streams, and comments.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import type { Noun } from 'ai-database'
11
+
12
+ // =============================================================================
13
+ // Video Channel
14
+ // =============================================================================
15
+
16
+ /**
17
+ * Video channel entity
18
+ *
19
+ * Represents a video channel/creator account
20
+ */
21
+ export const VideoChannel: Noun = {
22
+ singular: 'video channel',
23
+ plural: 'video channels',
24
+ description: 'A video channel or creator account',
25
+
26
+ properties: {
27
+ // Identity
28
+ name: {
29
+ type: 'string',
30
+ description: 'Channel name',
31
+ },
32
+ handle: {
33
+ type: 'string',
34
+ optional: true,
35
+ description: 'Channel handle/username',
36
+ },
37
+ description: {
38
+ type: 'string',
39
+ optional: true,
40
+ description: 'Channel description',
41
+ },
42
+
43
+ // Branding
44
+ thumbnailUrl: {
45
+ type: 'url',
46
+ optional: true,
47
+ description: 'Channel thumbnail/avatar',
48
+ },
49
+ bannerUrl: {
50
+ type: 'url',
51
+ optional: true,
52
+ description: 'Channel banner image',
53
+ },
54
+ customUrl: {
55
+ type: 'string',
56
+ optional: true,
57
+ description: 'Custom channel URL',
58
+ },
59
+
60
+ // Status
61
+ status: {
62
+ type: 'string',
63
+ description: 'Channel status: active, suspended, terminated',
64
+ examples: ['active', 'suspended', 'terminated'],
65
+ },
66
+ verified: {
67
+ type: 'boolean',
68
+ optional: true,
69
+ description: 'Whether channel is verified',
70
+ },
71
+
72
+ // Statistics
73
+ subscriberCount: {
74
+ type: 'number',
75
+ optional: true,
76
+ description: 'Number of subscribers',
77
+ },
78
+ videoCount: {
79
+ type: 'number',
80
+ optional: true,
81
+ description: 'Number of videos',
82
+ },
83
+ viewCount: {
84
+ type: 'number',
85
+ optional: true,
86
+ description: 'Total view count',
87
+ },
88
+
89
+ // Settings
90
+ country: {
91
+ type: 'string',
92
+ optional: true,
93
+ description: 'Channel country',
94
+ },
95
+ defaultLanguage: {
96
+ type: 'string',
97
+ optional: true,
98
+ description: 'Default language',
99
+ },
100
+ madeForKids: {
101
+ type: 'boolean',
102
+ optional: true,
103
+ description: 'Whether channel is made for kids',
104
+ },
105
+
106
+ // Monetization
107
+ monetizationEnabled: {
108
+ type: 'boolean',
109
+ optional: true,
110
+ description: 'Whether monetization is enabled',
111
+ },
112
+ partnerProgram: {
113
+ type: 'string',
114
+ optional: true,
115
+ description: 'Partner program status',
116
+ },
117
+ },
118
+
119
+ relationships: {
120
+ owner: {
121
+ type: 'Contact',
122
+ description: 'Channel owner',
123
+ },
124
+ videos: {
125
+ type: 'StreamingVideo[]',
126
+ backref: 'channel',
127
+ description: 'Videos on this channel',
128
+ },
129
+ playlists: {
130
+ type: 'Playlist[]',
131
+ backref: 'channel',
132
+ description: 'Channel playlists',
133
+ },
134
+ liveStreams: {
135
+ type: 'LiveStream[]',
136
+ backref: 'channel',
137
+ description: 'Live streams',
138
+ },
139
+ },
140
+
141
+ actions: [
142
+ 'create',
143
+ 'update',
144
+ 'delete',
145
+ 'verify',
146
+ 'suspend',
147
+ 'unsuspend',
148
+ 'enableMonetization',
149
+ 'disableMonetization',
150
+ 'subscribe',
151
+ 'unsubscribe',
152
+ ],
153
+
154
+ events: [
155
+ 'created',
156
+ 'updated',
157
+ 'deleted',
158
+ 'verified',
159
+ 'suspended',
160
+ 'unsuspended',
161
+ 'monetizationEnabled',
162
+ 'monetizationDisabled',
163
+ 'subscribed',
164
+ 'unsubscribed',
165
+ ],
166
+ }
167
+
168
+ // =============================================================================
169
+ // Streaming Video
170
+ // =============================================================================
171
+
172
+ /**
173
+ * Streaming video entity
174
+ *
175
+ * Represents a video on a streaming platform
176
+ */
177
+ export const StreamingVideo: Noun = {
178
+ singular: 'streaming video',
179
+ plural: 'streaming videos',
180
+ description: 'A video on a streaming platform',
181
+
182
+ properties: {
183
+ // Identity
184
+ title: {
185
+ type: 'string',
186
+ description: 'Video title',
187
+ },
188
+ description: {
189
+ type: 'string',
190
+ optional: true,
191
+ description: 'Video description',
192
+ },
193
+ tags: {
194
+ type: 'string',
195
+ array: true,
196
+ optional: true,
197
+ description: 'Video tags',
198
+ },
199
+ category: {
200
+ type: 'string',
201
+ optional: true,
202
+ description: 'Video category',
203
+ },
204
+
205
+ // Media
206
+ thumbnailUrl: {
207
+ type: 'url',
208
+ optional: true,
209
+ description: 'Video thumbnail',
210
+ },
211
+ duration: {
212
+ type: 'number',
213
+ optional: true,
214
+ description: 'Video duration in seconds',
215
+ },
216
+ resolution: {
217
+ type: 'string',
218
+ optional: true,
219
+ description: 'Video resolution: 720p, 1080p, 4k',
220
+ examples: ['480p', '720p', '1080p', '1440p', '4k'],
221
+ },
222
+
223
+ // Status
224
+ status: {
225
+ type: 'string',
226
+ description: 'Video status: processing, public, private, unlisted, deleted',
227
+ examples: ['processing', 'public', 'private', 'unlisted', 'deleted'],
228
+ },
229
+ publishedAt: {
230
+ type: 'datetime',
231
+ optional: true,
232
+ description: 'Publication date',
233
+ },
234
+ scheduledPublishAt: {
235
+ type: 'datetime',
236
+ optional: true,
237
+ description: 'Scheduled publication date',
238
+ },
239
+
240
+ // Settings
241
+ madeForKids: {
242
+ type: 'boolean',
243
+ optional: true,
244
+ description: 'Whether video is made for kids',
245
+ },
246
+ ageRestricted: {
247
+ type: 'boolean',
248
+ optional: true,
249
+ description: 'Whether video is age-restricted',
250
+ },
251
+ embeddable: {
252
+ type: 'boolean',
253
+ optional: true,
254
+ description: 'Whether video can be embedded',
255
+ },
256
+ license: {
257
+ type: 'string',
258
+ optional: true,
259
+ description: 'Video license',
260
+ },
261
+
262
+ // Statistics
263
+ viewCount: {
264
+ type: 'number',
265
+ optional: true,
266
+ description: 'View count',
267
+ },
268
+ likeCount: {
269
+ type: 'number',
270
+ optional: true,
271
+ description: 'Like count',
272
+ },
273
+ dislikeCount: {
274
+ type: 'number',
275
+ optional: true,
276
+ description: 'Dislike count',
277
+ },
278
+ commentCount: {
279
+ type: 'number',
280
+ optional: true,
281
+ description: 'Comment count',
282
+ },
283
+ shareCount: {
284
+ type: 'number',
285
+ optional: true,
286
+ description: 'Share count',
287
+ },
288
+
289
+ // Engagement
290
+ averageViewDuration: {
291
+ type: 'number',
292
+ optional: true,
293
+ description: 'Average view duration in seconds',
294
+ },
295
+ averageViewPercentage: {
296
+ type: 'number',
297
+ optional: true,
298
+ description: 'Average percentage watched',
299
+ },
300
+
301
+ // Monetization
302
+ monetized: {
303
+ type: 'boolean',
304
+ optional: true,
305
+ description: 'Whether video is monetized',
306
+ },
307
+ adSuitability: {
308
+ type: 'string',
309
+ optional: true,
310
+ description: 'Ad suitability status',
311
+ },
312
+ estimatedRevenue: {
313
+ type: 'number',
314
+ optional: true,
315
+ description: 'Estimated revenue',
316
+ },
317
+
318
+ // Captions
319
+ captionsAvailable: {
320
+ type: 'boolean',
321
+ optional: true,
322
+ description: 'Whether captions are available',
323
+ },
324
+ captionLanguages: {
325
+ type: 'string',
326
+ array: true,
327
+ optional: true,
328
+ description: 'Available caption languages',
329
+ },
330
+ },
331
+
332
+ relationships: {
333
+ channel: {
334
+ type: 'VideoChannel',
335
+ backref: 'videos',
336
+ description: 'Channel that owns this video',
337
+ },
338
+ comments: {
339
+ type: 'VideoComment[]',
340
+ backref: 'video',
341
+ description: 'Video comments',
342
+ },
343
+ playlists: {
344
+ type: 'Playlist[]',
345
+ description: 'Playlists containing this video',
346
+ },
347
+ captions: {
348
+ type: 'Caption[]',
349
+ description: 'Video captions',
350
+ },
351
+ },
352
+
353
+ actions: [
354
+ 'upload',
355
+ 'update',
356
+ 'delete',
357
+ 'publish',
358
+ 'unpublish',
359
+ 'setPrivacy',
360
+ 'like',
361
+ 'dislike',
362
+ 'share',
363
+ 'comment',
364
+ 'addToPlaylist',
365
+ 'removeFromPlaylist',
366
+ 'monetize',
367
+ 'demonetize',
368
+ 'addCaption',
369
+ 'removeCaption',
370
+ ],
371
+
372
+ events: [
373
+ 'uploaded',
374
+ 'updated',
375
+ 'deleted',
376
+ 'published',
377
+ 'unpublished',
378
+ 'privacyChanged',
379
+ 'liked',
380
+ 'disliked',
381
+ 'shared',
382
+ 'commented',
383
+ 'addedToPlaylist',
384
+ 'removedFromPlaylist',
385
+ 'monetized',
386
+ 'demonetized',
387
+ 'viewed',
388
+ ],
389
+ }
390
+
391
+ // =============================================================================
392
+ // Playlist
393
+ // =============================================================================
394
+
395
+ /**
396
+ * Playlist entity
397
+ *
398
+ * Represents a video playlist
399
+ */
400
+ export const Playlist: Noun = {
401
+ singular: 'playlist',
402
+ plural: 'playlists',
403
+ description: 'A video playlist',
404
+
405
+ properties: {
406
+ // Identity
407
+ title: {
408
+ type: 'string',
409
+ description: 'Playlist title',
410
+ },
411
+ description: {
412
+ type: 'string',
413
+ optional: true,
414
+ description: 'Playlist description',
415
+ },
416
+
417
+ // Branding
418
+ thumbnailUrl: {
419
+ type: 'url',
420
+ optional: true,
421
+ description: 'Playlist thumbnail',
422
+ },
423
+
424
+ // Status
425
+ visibility: {
426
+ type: 'string',
427
+ description: 'Playlist visibility: public, private, unlisted',
428
+ examples: ['public', 'private', 'unlisted'],
429
+ },
430
+
431
+ // Content
432
+ itemCount: {
433
+ type: 'number',
434
+ optional: true,
435
+ description: 'Number of items in playlist',
436
+ },
437
+
438
+ // Settings
439
+ defaultLanguage: {
440
+ type: 'string',
441
+ optional: true,
442
+ description: 'Default language',
443
+ },
444
+ embedEnabled: {
445
+ type: 'boolean',
446
+ optional: true,
447
+ description: 'Whether embedding is enabled',
448
+ },
449
+ },
450
+
451
+ relationships: {
452
+ channel: {
453
+ type: 'VideoChannel',
454
+ backref: 'playlists',
455
+ description: 'Channel that owns this playlist',
456
+ },
457
+ items: {
458
+ type: 'PlaylistItem[]',
459
+ backref: 'playlist',
460
+ description: 'Items in this playlist',
461
+ },
462
+ },
463
+
464
+ actions: [
465
+ 'create',
466
+ 'update',
467
+ 'delete',
468
+ 'addItem',
469
+ 'removeItem',
470
+ 'reorderItems',
471
+ 'setVisibility',
472
+ ],
473
+
474
+ events: [
475
+ 'created',
476
+ 'updated',
477
+ 'deleted',
478
+ 'itemAdded',
479
+ 'itemRemoved',
480
+ 'itemsReordered',
481
+ 'visibilityChanged',
482
+ ],
483
+ }
484
+
485
+ /**
486
+ * Playlist item entity
487
+ */
488
+ export const PlaylistItem: Noun = {
489
+ singular: 'playlist item',
490
+ plural: 'playlist items',
491
+ description: 'An item in a playlist',
492
+
493
+ properties: {
494
+ position: {
495
+ type: 'number',
496
+ description: 'Position in playlist (0-indexed)',
497
+ },
498
+ addedAt: {
499
+ type: 'datetime',
500
+ optional: true,
501
+ description: 'When item was added',
502
+ },
503
+ note: {
504
+ type: 'string',
505
+ optional: true,
506
+ description: 'Note about this item',
507
+ },
508
+ },
509
+
510
+ relationships: {
511
+ playlist: {
512
+ type: 'Playlist',
513
+ backref: 'items',
514
+ description: 'Parent playlist',
515
+ },
516
+ video: {
517
+ type: 'StreamingVideo',
518
+ description: 'The video',
519
+ },
520
+ },
521
+
522
+ actions: ['add', 'remove', 'move', 'setNote'],
523
+
524
+ events: ['added', 'removed', 'moved', 'noteSet'],
525
+ }
526
+
527
+ // =============================================================================
528
+ // Live Stream
529
+ // =============================================================================
530
+
531
+ /**
532
+ * Live stream entity
533
+ *
534
+ * Represents a live streaming broadcast
535
+ */
536
+ export const LiveStream: Noun = {
537
+ singular: 'live stream',
538
+ plural: 'live streams',
539
+ description: 'A live streaming broadcast',
540
+
541
+ properties: {
542
+ // Identity
543
+ title: {
544
+ type: 'string',
545
+ description: 'Stream title',
546
+ },
547
+ description: {
548
+ type: 'string',
549
+ optional: true,
550
+ description: 'Stream description',
551
+ },
552
+ category: {
553
+ type: 'string',
554
+ optional: true,
555
+ description: 'Stream category',
556
+ },
557
+ tags: {
558
+ type: 'string',
559
+ array: true,
560
+ optional: true,
561
+ description: 'Stream tags',
562
+ },
563
+
564
+ // Branding
565
+ thumbnailUrl: {
566
+ type: 'url',
567
+ optional: true,
568
+ description: 'Stream thumbnail',
569
+ },
570
+
571
+ // Status
572
+ status: {
573
+ type: 'string',
574
+ description: 'Stream status: scheduled, live, ended, cancelled',
575
+ examples: ['scheduled', 'live', 'ended', 'cancelled'],
576
+ },
577
+ visibility: {
578
+ type: 'string',
579
+ description: 'Stream visibility: public, private, unlisted',
580
+ examples: ['public', 'private', 'unlisted'],
581
+ },
582
+
583
+ // Timing
584
+ scheduledStartTime: {
585
+ type: 'datetime',
586
+ optional: true,
587
+ description: 'Scheduled start time',
588
+ },
589
+ actualStartTime: {
590
+ type: 'datetime',
591
+ optional: true,
592
+ description: 'Actual start time',
593
+ },
594
+ actualEndTime: {
595
+ type: 'datetime',
596
+ optional: true,
597
+ description: 'Actual end time',
598
+ },
599
+ duration: {
600
+ type: 'number',
601
+ optional: true,
602
+ description: 'Stream duration in seconds',
603
+ },
604
+
605
+ // Configuration
606
+ streamKey: {
607
+ type: 'string',
608
+ optional: true,
609
+ description: 'Stream key',
610
+ },
611
+ rtmpUrl: {
612
+ type: 'url',
613
+ optional: true,
614
+ description: 'RTMP ingest URL',
615
+ },
616
+ latencyPreference: {
617
+ type: 'string',
618
+ optional: true,
619
+ description: 'Latency preference: normal, low, ultra_low',
620
+ examples: ['normal', 'low', 'ultra_low'],
621
+ },
622
+ dvr: {
623
+ type: 'boolean',
624
+ optional: true,
625
+ description: 'Whether DVR is enabled',
626
+ },
627
+
628
+ // Chat
629
+ chatEnabled: {
630
+ type: 'boolean',
631
+ optional: true,
632
+ description: 'Whether chat is enabled',
633
+ },
634
+ chatMode: {
635
+ type: 'string',
636
+ optional: true,
637
+ description: 'Chat mode: open, subscribers, slow, members',
638
+ examples: ['open', 'subscribers', 'slow', 'members'],
639
+ },
640
+
641
+ // Statistics
642
+ concurrentViewers: {
643
+ type: 'number',
644
+ optional: true,
645
+ description: 'Current concurrent viewers',
646
+ },
647
+ peakViewers: {
648
+ type: 'number',
649
+ optional: true,
650
+ description: 'Peak concurrent viewers',
651
+ },
652
+ totalViews: {
653
+ type: 'number',
654
+ optional: true,
655
+ description: 'Total unique views',
656
+ },
657
+ chatMessages: {
658
+ type: 'number',
659
+ optional: true,
660
+ description: 'Total chat messages',
661
+ },
662
+
663
+ // Recording
664
+ recordingEnabled: {
665
+ type: 'boolean',
666
+ optional: true,
667
+ description: 'Whether recording is enabled',
668
+ },
669
+ recordingUrl: {
670
+ type: 'url',
671
+ optional: true,
672
+ description: 'Recording URL (after stream ends)',
673
+ },
674
+ },
675
+
676
+ relationships: {
677
+ channel: {
678
+ type: 'VideoChannel',
679
+ backref: 'liveStreams',
680
+ description: 'Channel broadcasting the stream',
681
+ },
682
+ recording: {
683
+ type: 'StreamingVideo',
684
+ required: false,
685
+ description: 'Recording of the stream',
686
+ },
687
+ chatMessages: {
688
+ type: 'ChatMessage[]',
689
+ description: 'Chat messages during stream',
690
+ },
691
+ },
692
+
693
+ actions: [
694
+ 'schedule',
695
+ 'start',
696
+ 'end',
697
+ 'cancel',
698
+ 'update',
699
+ 'delete',
700
+ 'enableChat',
701
+ 'disableChat',
702
+ 'setChatMode',
703
+ 'enableDvr',
704
+ 'disableDvr',
705
+ 'generateStreamKey',
706
+ 'revokeStreamKey',
707
+ ],
708
+
709
+ events: [
710
+ 'scheduled',
711
+ 'started',
712
+ 'ended',
713
+ 'cancelled',
714
+ 'updated',
715
+ 'deleted',
716
+ 'chatEnabled',
717
+ 'chatDisabled',
718
+ 'chatModeChanged',
719
+ 'viewerJoined',
720
+ 'viewerLeft',
721
+ ],
722
+ }
723
+
724
+ /**
725
+ * Chat message entity
726
+ */
727
+ export const ChatMessage: Noun = {
728
+ singular: 'chat message',
729
+ plural: 'chat messages',
730
+ description: 'A chat message in a live stream',
731
+
732
+ properties: {
733
+ content: {
734
+ type: 'string',
735
+ description: 'Message content',
736
+ },
737
+ authorName: {
738
+ type: 'string',
739
+ description: 'Author display name',
740
+ },
741
+ authorAvatar: {
742
+ type: 'url',
743
+ optional: true,
744
+ description: 'Author avatar URL',
745
+ },
746
+ isModerator: {
747
+ type: 'boolean',
748
+ optional: true,
749
+ description: 'Whether author is a moderator',
750
+ },
751
+ isSubscriber: {
752
+ type: 'boolean',
753
+ optional: true,
754
+ description: 'Whether author is a subscriber',
755
+ },
756
+ isMember: {
757
+ type: 'boolean',
758
+ optional: true,
759
+ description: 'Whether author is a member',
760
+ },
761
+ isOwner: {
762
+ type: 'boolean',
763
+ optional: true,
764
+ description: 'Whether author is the channel owner',
765
+ },
766
+ timestamp: {
767
+ type: 'datetime',
768
+ description: 'Message timestamp',
769
+ },
770
+ superchat: {
771
+ type: 'boolean',
772
+ optional: true,
773
+ description: 'Whether this is a paid message',
774
+ },
775
+ superchatAmount: {
776
+ type: 'number',
777
+ optional: true,
778
+ description: 'Super chat amount',
779
+ },
780
+ deleted: {
781
+ type: 'boolean',
782
+ optional: true,
783
+ description: 'Whether message was deleted',
784
+ },
785
+ },
786
+
787
+ relationships: {
788
+ liveStream: {
789
+ type: 'LiveStream',
790
+ backref: 'chatMessages',
791
+ description: 'Parent live stream',
792
+ },
793
+ author: {
794
+ type: 'Contact',
795
+ description: 'Message author',
796
+ },
797
+ },
798
+
799
+ actions: ['send', 'delete', 'pin', 'unpin', 'timeout', 'ban'],
800
+
801
+ events: ['sent', 'deleted', 'pinned', 'unpinned'],
802
+ }
803
+
804
+ // =============================================================================
805
+ // Video Comment
806
+ // =============================================================================
807
+
808
+ /**
809
+ * Video comment entity
810
+ *
811
+ * Represents a comment on a video
812
+ */
813
+ export const VideoComment: Noun = {
814
+ singular: 'video comment',
815
+ plural: 'video comments',
816
+ description: 'A comment on a video',
817
+
818
+ properties: {
819
+ // Content
820
+ text: {
821
+ type: 'string',
822
+ description: 'Comment text',
823
+ },
824
+ textOriginal: {
825
+ type: 'string',
826
+ optional: true,
827
+ description: 'Original text before any edits',
828
+ },
829
+
830
+ // Author
831
+ authorName: {
832
+ type: 'string',
833
+ description: 'Author display name',
834
+ },
835
+ authorAvatar: {
836
+ type: 'url',
837
+ optional: true,
838
+ description: 'Author avatar URL',
839
+ },
840
+ authorChannelUrl: {
841
+ type: 'url',
842
+ optional: true,
843
+ description: 'Author channel URL',
844
+ },
845
+
846
+ // Status
847
+ published: {
848
+ type: 'boolean',
849
+ optional: true,
850
+ description: 'Whether comment is published',
851
+ },
852
+ heldForReview: {
853
+ type: 'boolean',
854
+ optional: true,
855
+ description: 'Whether comment is held for review',
856
+ },
857
+
858
+ // Engagement
859
+ likeCount: {
860
+ type: 'number',
861
+ optional: true,
862
+ description: 'Number of likes',
863
+ },
864
+ replyCount: {
865
+ type: 'number',
866
+ optional: true,
867
+ description: 'Number of replies',
868
+ },
869
+
870
+ // Metadata
871
+ isReply: {
872
+ type: 'boolean',
873
+ optional: true,
874
+ description: 'Whether this is a reply to another comment',
875
+ },
876
+ timestamp: {
877
+ type: 'datetime',
878
+ description: 'Comment timestamp',
879
+ },
880
+ editedAt: {
881
+ type: 'datetime',
882
+ optional: true,
883
+ description: 'Last edit timestamp',
884
+ },
885
+
886
+ // Pinned
887
+ pinned: {
888
+ type: 'boolean',
889
+ optional: true,
890
+ description: 'Whether comment is pinned',
891
+ },
892
+ heartedByCreator: {
893
+ type: 'boolean',
894
+ optional: true,
895
+ description: 'Whether creator hearted this comment',
896
+ },
897
+ },
898
+
899
+ relationships: {
900
+ video: {
901
+ type: 'StreamingVideo',
902
+ backref: 'comments',
903
+ description: 'Video this comment is on',
904
+ },
905
+ author: {
906
+ type: 'Contact',
907
+ description: 'Comment author',
908
+ },
909
+ parentComment: {
910
+ type: 'VideoComment',
911
+ required: false,
912
+ description: 'Parent comment if this is a reply',
913
+ },
914
+ replies: {
915
+ type: 'VideoComment[]',
916
+ description: 'Replies to this comment',
917
+ },
918
+ },
919
+
920
+ actions: [
921
+ 'create',
922
+ 'update',
923
+ 'delete',
924
+ 'like',
925
+ 'unlike',
926
+ 'reply',
927
+ 'pin',
928
+ 'unpin',
929
+ 'heart',
930
+ 'unheart',
931
+ 'approve',
932
+ 'reject',
933
+ 'report',
934
+ ],
935
+
936
+ events: [
937
+ 'created',
938
+ 'updated',
939
+ 'deleted',
940
+ 'liked',
941
+ 'unliked',
942
+ 'replied',
943
+ 'pinned',
944
+ 'unpinned',
945
+ 'hearted',
946
+ 'unhearted',
947
+ 'approved',
948
+ 'rejected',
949
+ 'reported',
950
+ ],
951
+ }
952
+
953
+ // =============================================================================
954
+ // Subscription
955
+ // =============================================================================
956
+
957
+ /**
958
+ * Channel subscription entity
959
+ *
960
+ * Represents a subscription to a video channel
961
+ */
962
+ export const ChannelSubscription: Noun = {
963
+ singular: 'channel subscription',
964
+ plural: 'channel subscriptions',
965
+ description: 'A subscription to a video channel',
966
+
967
+ properties: {
968
+ // Notification settings
969
+ notificationPreference: {
970
+ type: 'string',
971
+ description: 'Notification preference: all, personalized, none',
972
+ examples: ['all', 'personalized', 'none'],
973
+ },
974
+
975
+ // Timestamps
976
+ subscribedAt: {
977
+ type: 'datetime',
978
+ description: 'When subscription was created',
979
+ },
980
+ },
981
+
982
+ relationships: {
983
+ subscriber: {
984
+ type: 'Contact',
985
+ description: 'The subscriber',
986
+ },
987
+ channel: {
988
+ type: 'VideoChannel',
989
+ description: 'The subscribed channel',
990
+ },
991
+ },
992
+
993
+ actions: ['subscribe', 'unsubscribe', 'setNotifications'],
994
+
995
+ events: ['subscribed', 'unsubscribed', 'notificationsChanged'],
996
+ }
997
+
998
+ // =============================================================================
999
+ // Export all entities as a schema
1000
+ // =============================================================================
1001
+
1002
+ /**
1003
+ * All video entity types
1004
+ */
1005
+ export const VideoEntities = {
1006
+ // Channels
1007
+ VideoChannel,
1008
+
1009
+ // Videos
1010
+ StreamingVideo,
1011
+
1012
+ // Playlists
1013
+ Playlist,
1014
+ PlaylistItem,
1015
+
1016
+ // Live Streaming
1017
+ LiveStream,
1018
+ ChatMessage,
1019
+
1020
+ // Comments
1021
+ VideoComment,
1022
+
1023
+ // Subscriptions
1024
+ ChannelSubscription,
1025
+ }
1026
+
1027
+ /**
1028
+ * Entity categories for organization
1029
+ */
1030
+ export const VideoCategories = {
1031
+ channels: ['VideoChannel'],
1032
+ videos: ['StreamingVideo', 'Playlist', 'PlaylistItem'],
1033
+ liveStreaming: ['LiveStream', 'ChatMessage'],
1034
+ engagement: ['VideoComment', 'ChannelSubscription'],
1035
+ } as const