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,693 @@
1
+ /**
2
+ * Linear Project Management Provider
3
+ *
4
+ * Concrete implementation of ProjectManagementProvider using Linear GraphQL API.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
9
+ import type {
10
+ ProjectManagementProvider,
11
+ ProviderConfig,
12
+ ProviderHealth,
13
+ ProviderInfo,
14
+ PMProjectData,
15
+ CreateIssueOptions,
16
+ IssueData,
17
+ IssueListOptions,
18
+ IssueCommentData,
19
+ PaginatedResult,
20
+ PaginationOptions,
21
+ } from '../types.js'
22
+ import { defineProvider } from '../registry.js'
23
+
24
+ const LINEAR_API_URL = 'https://api.linear.app/graphql'
25
+
26
+ /**
27
+ * Linear provider info
28
+ */
29
+ export const linearInfo: ProviderInfo = {
30
+ id: 'project-management.linear',
31
+ name: 'Linear',
32
+ description: 'Linear issue tracking and project management',
33
+ category: 'project-management',
34
+ website: 'https://linear.app',
35
+ docsUrl: 'https://developers.linear.app',
36
+ requiredConfig: ['apiKey'],
37
+ optionalConfig: [],
38
+ }
39
+
40
+ /**
41
+ * GraphQL query helper
42
+ */
43
+ async function graphqlRequest<T = any>(
44
+ apiKey: string,
45
+ query: string,
46
+ variables?: Record<string, any>
47
+ ): Promise<T> {
48
+ const response = await fetch(LINEAR_API_URL, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ Authorization: apiKey,
53
+ },
54
+ body: JSON.stringify({ query, variables }),
55
+ })
56
+
57
+ const result = (await response.json()) as any
58
+
59
+ if (result.errors) {
60
+ throw new Error(result.errors[0]?.message || 'GraphQL query failed')
61
+ }
62
+
63
+ return result.data as T
64
+ }
65
+
66
+ /**
67
+ * Create Linear project management provider
68
+ */
69
+ export function createLinearProvider(config: ProviderConfig): ProjectManagementProvider {
70
+ let apiKey: string
71
+
72
+ return {
73
+ info: linearInfo,
74
+
75
+ async initialize(cfg: ProviderConfig): Promise<void> {
76
+ apiKey = cfg.apiKey as string
77
+
78
+ if (!apiKey) {
79
+ throw new Error('Linear API key is required')
80
+ }
81
+ },
82
+
83
+ async healthCheck(): Promise<ProviderHealth> {
84
+ const start = Date.now()
85
+ try {
86
+ await graphqlRequest(
87
+ apiKey,
88
+ `query { viewer { id name } }`
89
+ )
90
+
91
+ return {
92
+ healthy: true,
93
+ latencyMs: Date.now() - start,
94
+ message: 'Connected',
95
+ checkedAt: new Date(),
96
+ }
97
+ } catch (error) {
98
+ return {
99
+ healthy: false,
100
+ latencyMs: Date.now() - start,
101
+ message: error instanceof Error ? error.message : 'Unknown error',
102
+ checkedAt: new Date(),
103
+ }
104
+ }
105
+ },
106
+
107
+ async dispose(): Promise<void> {
108
+ // No cleanup needed
109
+ },
110
+
111
+ async listProjects(options?: PaginationOptions): Promise<PaginatedResult<PMProjectData>> {
112
+ const first = options?.limit || 50
113
+ const after = options?.cursor
114
+
115
+ const query = `
116
+ query($first: Int!, $after: String) {
117
+ projects(first: $first, after: $after) {
118
+ nodes {
119
+ id
120
+ key
121
+ name
122
+ description
123
+ lead {
124
+ id
125
+ }
126
+ url
127
+ }
128
+ pageInfo {
129
+ hasNextPage
130
+ endCursor
131
+ }
132
+ }
133
+ }
134
+ `
135
+
136
+ const data = await graphqlRequest<{
137
+ projects: {
138
+ nodes: any[]
139
+ pageInfo: { hasNextPage: boolean; endCursor: string }
140
+ }
141
+ }>(apiKey, query, { first, after })
142
+
143
+ return {
144
+ items: data.projects.nodes.map((p: any) => ({
145
+ id: p.id,
146
+ key: p.key,
147
+ name: p.name,
148
+ description: p.description,
149
+ lead: p.lead?.id,
150
+ url: p.url,
151
+ })),
152
+ hasMore: data.projects.pageInfo.hasNextPage,
153
+ nextCursor: data.projects.pageInfo.endCursor,
154
+ }
155
+ },
156
+
157
+ async getProject(projectId: string): Promise<PMProjectData | null> {
158
+ const query = `
159
+ query($id: String!) {
160
+ project(id: $id) {
161
+ id
162
+ key
163
+ name
164
+ description
165
+ lead {
166
+ id
167
+ }
168
+ url
169
+ }
170
+ }
171
+ `
172
+
173
+ try {
174
+ const data = await graphqlRequest<{ project: any }>(apiKey, query, { id: projectId })
175
+
176
+ if (!data.project) {
177
+ return null
178
+ }
179
+
180
+ return {
181
+ id: data.project.id,
182
+ key: data.project.key,
183
+ name: data.project.name,
184
+ description: data.project.description,
185
+ lead: data.project.lead?.id,
186
+ url: data.project.url,
187
+ }
188
+ } catch {
189
+ return null
190
+ }
191
+ },
192
+
193
+ async createIssue(projectId: string, issue: CreateIssueOptions): Promise<IssueData> {
194
+ const query = `
195
+ mutation($input: IssueCreateInput!) {
196
+ issueCreate(input: $input) {
197
+ success
198
+ issue {
199
+ id
200
+ identifier
201
+ title
202
+ description
203
+ state {
204
+ name
205
+ }
206
+ priority
207
+ priorityLabel
208
+ labels {
209
+ nodes {
210
+ name
211
+ }
212
+ }
213
+ assignee {
214
+ id
215
+ }
216
+ creator {
217
+ id
218
+ }
219
+ createdAt
220
+ updatedAt
221
+ url
222
+ }
223
+ }
224
+ }
225
+ `
226
+
227
+ const input: any = {
228
+ projectId,
229
+ title: issue.title,
230
+ description: issue.description,
231
+ ...(issue.type && { type: issue.type }),
232
+ ...(issue.priority && { priority: parsePriority(issue.priority) }),
233
+ ...(issue.assigneeId && { assigneeId: issue.assigneeId }),
234
+ ...(issue.parentId && { parentId: issue.parentId }),
235
+ ...(issue.estimate && { estimate: issue.estimate }),
236
+ }
237
+
238
+ if (issue.labels?.length) {
239
+ input.labelIds = issue.labels
240
+ }
241
+
242
+ const data = await graphqlRequest<{
243
+ issueCreate: { success: boolean; issue: any }
244
+ }>(apiKey, query, { input })
245
+
246
+ if (!data.issueCreate.success) {
247
+ throw new Error('Failed to create issue')
248
+ }
249
+
250
+ const created = data.issueCreate.issue
251
+
252
+ return {
253
+ id: created.id,
254
+ key: created.identifier,
255
+ title: created.title,
256
+ description: created.description,
257
+ type: issue.type || 'Issue',
258
+ status: created.state.name,
259
+ priority: created.priorityLabel,
260
+ labels: created.labels.nodes.map((l: any) => l.name),
261
+ assigneeId: created.assignee?.id,
262
+ reporterId: created.creator?.id,
263
+ createdAt: new Date(created.createdAt),
264
+ updatedAt: new Date(created.updatedAt),
265
+ url: created.url,
266
+ }
267
+ },
268
+
269
+ async getIssue(issueId: string): Promise<IssueData | null> {
270
+ const query = `
271
+ query($id: String!) {
272
+ issue(id: $id) {
273
+ id
274
+ identifier
275
+ title
276
+ description
277
+ state {
278
+ name
279
+ }
280
+ priority
281
+ priorityLabel
282
+ labels {
283
+ nodes {
284
+ name
285
+ }
286
+ }
287
+ assignee {
288
+ id
289
+ }
290
+ creator {
291
+ id
292
+ }
293
+ createdAt
294
+ updatedAt
295
+ url
296
+ }
297
+ }
298
+ `
299
+
300
+ try {
301
+ const data = await graphqlRequest<{ issue: any }>(apiKey, query, { id: issueId })
302
+
303
+ if (!data.issue) {
304
+ return null
305
+ }
306
+
307
+ const issue = data.issue
308
+
309
+ return {
310
+ id: issue.id,
311
+ key: issue.identifier,
312
+ title: issue.title,
313
+ description: issue.description,
314
+ type: 'Issue',
315
+ status: issue.state.name,
316
+ priority: issue.priorityLabel,
317
+ labels: issue.labels.nodes.map((l: any) => l.name),
318
+ assigneeId: issue.assignee?.id,
319
+ reporterId: issue.creator?.id,
320
+ createdAt: new Date(issue.createdAt),
321
+ updatedAt: new Date(issue.updatedAt),
322
+ url: issue.url,
323
+ }
324
+ } catch {
325
+ return null
326
+ }
327
+ },
328
+
329
+ async updateIssue(issueId: string, updates: Partial<CreateIssueOptions>): Promise<IssueData> {
330
+ const query = `
331
+ mutation($id: String!, $input: IssueUpdateInput!) {
332
+ issueUpdate(id: $id, input: $input) {
333
+ success
334
+ issue {
335
+ id
336
+ identifier
337
+ title
338
+ description
339
+ state {
340
+ name
341
+ }
342
+ priority
343
+ priorityLabel
344
+ labels {
345
+ nodes {
346
+ name
347
+ }
348
+ }
349
+ assignee {
350
+ id
351
+ }
352
+ creator {
353
+ id
354
+ }
355
+ createdAt
356
+ updatedAt
357
+ url
358
+ }
359
+ }
360
+ }
361
+ `
362
+
363
+ const input: any = {}
364
+
365
+ if (updates.title) input.title = updates.title
366
+ if (updates.description !== undefined) input.description = updates.description
367
+ if (updates.priority) input.priority = parsePriority(updates.priority)
368
+ if (updates.assigneeId) input.assigneeId = updates.assigneeId
369
+ if (updates.estimate !== undefined) input.estimate = updates.estimate
370
+
371
+ const data = await graphqlRequest<{
372
+ issueUpdate: { success: boolean; issue: any }
373
+ }>(apiKey, query, { id: issueId, input })
374
+
375
+ if (!data.issueUpdate.success) {
376
+ throw new Error('Failed to update issue')
377
+ }
378
+
379
+ const updated = data.issueUpdate.issue
380
+
381
+ return {
382
+ id: updated.id,
383
+ key: updated.identifier,
384
+ title: updated.title,
385
+ description: updated.description,
386
+ type: 'Issue',
387
+ status: updated.state.name,
388
+ priority: updated.priorityLabel,
389
+ labels: updated.labels.nodes.map((l: any) => l.name),
390
+ assigneeId: updated.assignee?.id,
391
+ reporterId: updated.creator?.id,
392
+ createdAt: new Date(updated.createdAt),
393
+ updatedAt: new Date(updated.updatedAt),
394
+ url: updated.url,
395
+ }
396
+ },
397
+
398
+ async deleteIssue(issueId: string): Promise<boolean> {
399
+ const query = `
400
+ mutation($id: String!) {
401
+ issueDelete(id: $id) {
402
+ success
403
+ }
404
+ }
405
+ `
406
+
407
+ try {
408
+ const data = await graphqlRequest<{
409
+ issueDelete: { success: boolean }
410
+ }>(apiKey, query, { id: issueId })
411
+
412
+ return data.issueDelete.success
413
+ } catch {
414
+ return false
415
+ }
416
+ },
417
+
418
+ async listIssues(
419
+ projectId: string,
420
+ options?: IssueListOptions
421
+ ): Promise<PaginatedResult<IssueData>> {
422
+ const first = options?.limit || 50
423
+ const after = options?.cursor
424
+
425
+ // Build filter
426
+ const filter: any = { project: { id: { eq: projectId } } }
427
+
428
+ if (options?.status?.length) {
429
+ filter.state = { name: { in: options.status } }
430
+ }
431
+
432
+ if (options?.assignee) {
433
+ filter.assignee = { id: { eq: options.assignee } }
434
+ }
435
+
436
+ if (options?.labels?.length) {
437
+ filter.labels = { name: { in: options.labels } }
438
+ }
439
+
440
+ const query = `
441
+ query($first: Int!, $after: String, $filter: IssueFilter) {
442
+ issues(first: $first, after: $after, filter: $filter) {
443
+ nodes {
444
+ id
445
+ identifier
446
+ title
447
+ description
448
+ state {
449
+ name
450
+ }
451
+ priority
452
+ priorityLabel
453
+ labels {
454
+ nodes {
455
+ name
456
+ }
457
+ }
458
+ assignee {
459
+ id
460
+ }
461
+ creator {
462
+ id
463
+ }
464
+ createdAt
465
+ updatedAt
466
+ url
467
+ }
468
+ pageInfo {
469
+ hasNextPage
470
+ endCursor
471
+ }
472
+ }
473
+ }
474
+ `
475
+
476
+ const data = await graphqlRequest<{
477
+ issues: {
478
+ nodes: any[]
479
+ pageInfo: { hasNextPage: boolean; endCursor: string }
480
+ }
481
+ }>(apiKey, query, { first, after, filter })
482
+
483
+ return {
484
+ items: data.issues.nodes.map((issue: any) => ({
485
+ id: issue.id,
486
+ key: issue.identifier,
487
+ title: issue.title,
488
+ description: issue.description,
489
+ type: 'Issue',
490
+ status: issue.state.name,
491
+ priority: issue.priorityLabel,
492
+ labels: issue.labels.nodes.map((l: any) => l.name),
493
+ assigneeId: issue.assignee?.id,
494
+ reporterId: issue.creator?.id,
495
+ createdAt: new Date(issue.createdAt),
496
+ updatedAt: new Date(issue.updatedAt),
497
+ url: issue.url,
498
+ })),
499
+ hasMore: data.issues.pageInfo.hasNextPage,
500
+ nextCursor: data.issues.pageInfo.endCursor,
501
+ }
502
+ },
503
+
504
+ async searchIssues(
505
+ query: string,
506
+ options?: IssueListOptions
507
+ ): Promise<PaginatedResult<IssueData>> {
508
+ const first = options?.limit || 50
509
+ const after = options?.cursor
510
+
511
+ const graphqlQuery = `
512
+ query($first: Int!, $after: String, $filter: IssueFilter) {
513
+ issueSearch(first: $first, after: $after, query: $query, filter: $filter) {
514
+ nodes {
515
+ id
516
+ identifier
517
+ title
518
+ description
519
+ state {
520
+ name
521
+ }
522
+ priority
523
+ priorityLabel
524
+ labels {
525
+ nodes {
526
+ name
527
+ }
528
+ }
529
+ assignee {
530
+ id
531
+ }
532
+ creator {
533
+ id
534
+ }
535
+ createdAt
536
+ updatedAt
537
+ url
538
+ }
539
+ pageInfo {
540
+ hasNextPage
541
+ endCursor
542
+ }
543
+ }
544
+ }
545
+ `
546
+
547
+ // Build filter
548
+ const filter: any = {}
549
+
550
+ if (options?.status?.length) {
551
+ filter.state = { name: { in: options.status } }
552
+ }
553
+
554
+ if (options?.assignee) {
555
+ filter.assignee = { id: { eq: options.assignee } }
556
+ }
557
+
558
+ if (options?.labels?.length) {
559
+ filter.labels = { name: { in: options.labels } }
560
+ }
561
+
562
+ const data = await graphqlRequest<{
563
+ issueSearch: {
564
+ nodes: any[]
565
+ pageInfo: { hasNextPage: boolean; endCursor: string }
566
+ }
567
+ }>(apiKey, graphqlQuery, { first, after, query, filter })
568
+
569
+ return {
570
+ items: data.issueSearch.nodes.map((issue: any) => ({
571
+ id: issue.id,
572
+ key: issue.identifier,
573
+ title: issue.title,
574
+ description: issue.description,
575
+ type: 'Issue',
576
+ status: issue.state.name,
577
+ priority: issue.priorityLabel,
578
+ labels: issue.labels.nodes.map((l: any) => l.name),
579
+ assigneeId: issue.assignee?.id,
580
+ reporterId: issue.creator?.id,
581
+ createdAt: new Date(issue.createdAt),
582
+ updatedAt: new Date(issue.updatedAt),
583
+ url: issue.url,
584
+ })),
585
+ hasMore: data.issueSearch.pageInfo.hasNextPage,
586
+ nextCursor: data.issueSearch.pageInfo.endCursor,
587
+ }
588
+ },
589
+
590
+ async addComment(issueId: string, body: string): Promise<IssueCommentData> {
591
+ const query = `
592
+ mutation($input: CommentCreateInput!) {
593
+ commentCreate(input: $input) {
594
+ success
595
+ comment {
596
+ id
597
+ body
598
+ user {
599
+ id
600
+ }
601
+ createdAt
602
+ }
603
+ }
604
+ }
605
+ `
606
+
607
+ const data = await graphqlRequest<{
608
+ commentCreate: { success: boolean; comment: any }
609
+ }>(apiKey, query, {
610
+ input: {
611
+ issueId,
612
+ body,
613
+ },
614
+ })
615
+
616
+ if (!data.commentCreate.success) {
617
+ throw new Error('Failed to create comment')
618
+ }
619
+
620
+ const comment = data.commentCreate.comment
621
+
622
+ return {
623
+ id: comment.id,
624
+ issueId,
625
+ body: comment.body,
626
+ authorId: comment.user.id,
627
+ createdAt: new Date(comment.createdAt),
628
+ }
629
+ },
630
+
631
+ async transition(issueId: string, statusId: string): Promise<boolean> {
632
+ const query = `
633
+ mutation($id: String!, $stateId: String!) {
634
+ issueUpdate(id: $id, input: { stateId: $stateId }) {
635
+ success
636
+ }
637
+ }
638
+ `
639
+
640
+ try {
641
+ const data = await graphqlRequest<{
642
+ issueUpdate: { success: boolean }
643
+ }>(apiKey, query, { id: issueId, stateId: statusId })
644
+
645
+ return data.issueUpdate.success
646
+ } catch {
647
+ return false
648
+ }
649
+ },
650
+
651
+ async assign(issueId: string, userId: string): Promise<boolean> {
652
+ const query = `
653
+ mutation($id: String!, $assigneeId: String!) {
654
+ issueUpdate(id: $id, input: { assigneeId: $assigneeId }) {
655
+ success
656
+ }
657
+ }
658
+ `
659
+
660
+ try {
661
+ const data = await graphqlRequest<{
662
+ issueUpdate: { success: boolean }
663
+ }>(apiKey, query, { id: issueId, assigneeId: userId })
664
+
665
+ return data.issueUpdate.success
666
+ } catch {
667
+ return false
668
+ }
669
+ },
670
+ }
671
+ }
672
+
673
+ /**
674
+ * Parse priority string to Linear priority number
675
+ */
676
+ function parsePriority(priority: string): number {
677
+ const map: Record<string, number> = {
678
+ urgent: 1,
679
+ high: 2,
680
+ medium: 3,
681
+ low: 4,
682
+ none: 0,
683
+ }
684
+
685
+ return map[priority.toLowerCase()] ?? 0
686
+ }
687
+
688
+ /**
689
+ * Linear provider definition
690
+ */
691
+ export const linearProvider = defineProvider(linearInfo, async (config) =>
692
+ createLinearProvider(config)
693
+ )