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,119 @@
1
+ /**
2
+ * Provider Registry Implementation
3
+ *
4
+ * Central registry for discovering and instantiating providers.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
9
+ import type {
10
+ BaseProvider,
11
+ ProviderCategory,
12
+ ProviderConfig,
13
+ ProviderFactory,
14
+ ProviderInfo,
15
+ ProviderRegistry,
16
+ RegisteredProvider,
17
+ } from './types.js'
18
+
19
+ /**
20
+ * Create a new provider registry
21
+ */
22
+ export function createProviderRegistry(): ProviderRegistry {
23
+ const providers = new Map<string, RegisteredProvider>()
24
+
25
+ return {
26
+ register<T extends BaseProvider>(info: ProviderInfo, factory: ProviderFactory<T>): void {
27
+ if (providers.has(info.id)) {
28
+ throw new Error(`Provider '${info.id}' is already registered`)
29
+ }
30
+ providers.set(info.id, { info, factory })
31
+ },
32
+
33
+ get<T extends BaseProvider>(providerId: string): RegisteredProvider<T> | undefined {
34
+ return providers.get(providerId) as RegisteredProvider<T> | undefined
35
+ },
36
+
37
+ list(category?: ProviderCategory): RegisteredProvider[] {
38
+ const all = Array.from(providers.values())
39
+ if (category) {
40
+ return all.filter((p) => p.info.category === category)
41
+ }
42
+ return all
43
+ },
44
+
45
+ async create<T extends BaseProvider>(providerId: string, config: ProviderConfig): Promise<T> {
46
+ const registered = providers.get(providerId)
47
+ if (!registered) {
48
+ throw new Error(`Provider '${providerId}' not found. Available: ${Array.from(providers.keys()).join(', ')}`)
49
+ }
50
+
51
+ // Validate required config
52
+ const missing = registered.info.requiredConfig.filter((key) => !(key in config))
53
+ if (missing.length > 0) {
54
+ throw new Error(`Provider '${providerId}' missing required config: ${missing.join(', ')}`)
55
+ }
56
+
57
+ const provider = await registered.factory(config)
58
+ await provider.initialize(config)
59
+ return provider as T
60
+ },
61
+
62
+ has(providerId: string): boolean {
63
+ return providers.has(providerId)
64
+ },
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Global provider registry instance
70
+ */
71
+ export const providerRegistry = createProviderRegistry()
72
+
73
+ /**
74
+ * Register a provider in the global registry
75
+ */
76
+ export function registerProvider<T extends BaseProvider>(
77
+ info: ProviderInfo,
78
+ factory: ProviderFactory<T>
79
+ ): void {
80
+ providerRegistry.register(info, factory)
81
+ }
82
+
83
+ /**
84
+ * Get a provider from the global registry
85
+ */
86
+ export function getProvider<T extends BaseProvider>(providerId: string): RegisteredProvider<T> | undefined {
87
+ return providerRegistry.get<T>(providerId)
88
+ }
89
+
90
+ /**
91
+ * Create a provider instance from the global registry
92
+ */
93
+ export async function createProvider<T extends BaseProvider>(
94
+ providerId: string,
95
+ config: ProviderConfig
96
+ ): Promise<T> {
97
+ return providerRegistry.create<T>(providerId, config)
98
+ }
99
+
100
+ /**
101
+ * List providers by category
102
+ */
103
+ export function listProviders(category?: ProviderCategory): RegisteredProvider[] {
104
+ return providerRegistry.list(category)
105
+ }
106
+
107
+ /**
108
+ * Helper to define a provider with type safety
109
+ */
110
+ export function defineProvider<T extends BaseProvider>(
111
+ info: ProviderInfo,
112
+ factory: ProviderFactory<T>
113
+ ): { info: ProviderInfo; factory: ProviderFactory<T>; register: () => void } {
114
+ return {
115
+ info,
116
+ factory,
117
+ register: () => registerProvider(info, factory),
118
+ }
119
+ }
@@ -0,0 +1,464 @@
1
+ /**
2
+ * Google Sheets Provider
3
+ *
4
+ * Concrete implementation of SpreadsheetProvider using Google Sheets API.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
9
+ import type {
10
+ SpreadsheetProvider,
11
+ ProviderConfig,
12
+ ProviderHealth,
13
+ ProviderInfo,
14
+ SpreadsheetData,
15
+ SheetInfo,
16
+ SheetData,
17
+ CellValue,
18
+ CreateSpreadsheetOptions,
19
+ SpreadsheetListOptions,
20
+ AddSheetOptions,
21
+ UpdateResult,
22
+ AppendResult,
23
+ ImportOptions,
24
+ PaginatedResult,
25
+ } from '../types.js'
26
+ import { defineProvider } from '../registry.js'
27
+
28
+ const SHEETS_API_URL = 'https://sheets.googleapis.com/v4/spreadsheets'
29
+ const DRIVE_API_URL = 'https://www.googleapis.com/drive/v3/files'
30
+
31
+ /**
32
+ * Google Sheets provider info
33
+ */
34
+ export const googleSheetsInfo: ProviderInfo = {
35
+ id: 'spreadsheet.google-sheets',
36
+ name: 'Google Sheets',
37
+ description: 'Google Sheets cloud spreadsheet service',
38
+ category: 'spreadsheet',
39
+ website: 'https://sheets.google.com',
40
+ docsUrl: 'https://developers.google.com/sheets/api',
41
+ requiredConfig: ['accessToken'],
42
+ optionalConfig: ['refreshToken', 'clientId', 'clientSecret'],
43
+ }
44
+
45
+ /**
46
+ * Create Google Sheets provider
47
+ */
48
+ export function createGoogleSheetsProvider(config: ProviderConfig): SpreadsheetProvider {
49
+ let accessToken: string
50
+
51
+ async function sheetsApi(
52
+ path: string,
53
+ method: string = 'GET',
54
+ body?: unknown,
55
+ baseUrl: string = SHEETS_API_URL
56
+ ): Promise<any> {
57
+ const url = path.startsWith('http') ? path : `${baseUrl}${path}`
58
+
59
+ const response = await fetch(url, {
60
+ method,
61
+ headers: {
62
+ 'Content-Type': 'application/json',
63
+ Authorization: `Bearer ${accessToken}`,
64
+ },
65
+ body: body ? JSON.stringify(body) : undefined,
66
+ })
67
+
68
+ if (!response.ok) {
69
+ const error = await response.json().catch(() => ({}))
70
+ throw new Error((error as any)?.error?.message || `HTTP ${response.status}`)
71
+ }
72
+
73
+ return response.json()
74
+ }
75
+
76
+ return {
77
+ info: googleSheetsInfo,
78
+
79
+ async initialize(cfg: ProviderConfig): Promise<void> {
80
+ accessToken = cfg.accessToken as string
81
+ if (!accessToken) {
82
+ throw new Error('Google Sheets access token is required')
83
+ }
84
+ },
85
+
86
+ async healthCheck(): Promise<ProviderHealth> {
87
+ const start = Date.now()
88
+ try {
89
+ // Test with a minimal API call
90
+ await sheetsApi('', 'GET', undefined, 'https://www.googleapis.com/oauth2/v1/tokeninfo')
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 create(name: string, options?: CreateSpreadsheetOptions): Promise<SpreadsheetData> {
112
+ const sheets = options?.sheets || [{ name: 'Sheet1' }]
113
+
114
+ const body = {
115
+ properties: {
116
+ title: name,
117
+ locale: options?.locale,
118
+ timeZone: options?.timeZone,
119
+ },
120
+ sheets: sheets.map((s, index) => ({
121
+ properties: {
122
+ title: s.name,
123
+ index,
124
+ },
125
+ })),
126
+ }
127
+
128
+ const data = await sheetsApi('', 'POST', body)
129
+
130
+ return mapSpreadsheet(data)
131
+ },
132
+
133
+ async get(spreadsheetId: string): Promise<SpreadsheetData | null> {
134
+ try {
135
+ const data = await sheetsApi(`/${spreadsheetId}?includeGridData=false`)
136
+ return mapSpreadsheet(data)
137
+ } catch {
138
+ return null
139
+ }
140
+ },
141
+
142
+ async list(options?: SpreadsheetListOptions): Promise<PaginatedResult<SpreadsheetData>> {
143
+ const params = new URLSearchParams({
144
+ q: `mimeType='application/vnd.google-apps.spreadsheet'${options?.query ? ` and name contains '${options.query}'` : ''}`,
145
+ pageSize: (options?.limit || 100).toString(),
146
+ fields: 'files(id,name,createdTime,modifiedTime),nextPageToken',
147
+ })
148
+
149
+ if (options?.cursor) {
150
+ params.append('pageToken', options.cursor)
151
+ }
152
+
153
+ const data = await sheetsApi(`?${params.toString()}`, 'GET', undefined, DRIVE_API_URL)
154
+
155
+ return {
156
+ items: data.files?.map((f: any) => ({
157
+ id: f.id,
158
+ name: f.name,
159
+ sheets: [], // Would need separate API call to get sheets
160
+ createdAt: f.createdTime ? new Date(f.createdTime) : undefined,
161
+ modifiedAt: f.modifiedTime ? new Date(f.modifiedTime) : undefined,
162
+ url: `https://docs.google.com/spreadsheets/d/${f.id}`,
163
+ })) || [],
164
+ hasMore: !!data.nextPageToken,
165
+ nextCursor: data.nextPageToken,
166
+ }
167
+ },
168
+
169
+ async delete(spreadsheetId: string): Promise<boolean> {
170
+ try {
171
+ await sheetsApi(`/${spreadsheetId}`, 'DELETE', undefined, DRIVE_API_URL)
172
+ return true
173
+ } catch {
174
+ return false
175
+ }
176
+ },
177
+
178
+ async getSheet(spreadsheetId: string, sheetId: string | number): Promise<SheetData | null> {
179
+ try {
180
+ const spreadsheet = await sheetsApi(`/${spreadsheetId}?includeGridData=true`)
181
+
182
+ const sheet = typeof sheetId === 'number'
183
+ ? spreadsheet.sheets.find((s: any) => s.properties.sheetId === sheetId)
184
+ : spreadsheet.sheets.find((s: any) => s.properties.title === sheetId)
185
+
186
+ if (!sheet) return null
187
+
188
+ // Extract data from grid
189
+ const gridData = sheet.data?.[0]
190
+ const data: CellValue[][] = []
191
+
192
+ if (gridData?.rowData) {
193
+ for (const row of gridData.rowData) {
194
+ const rowValues: CellValue[] = []
195
+ if (row.values) {
196
+ for (const cell of row.values) {
197
+ rowValues.push(extractCellValue(cell))
198
+ }
199
+ }
200
+ data.push(rowValues)
201
+ }
202
+ }
203
+
204
+ return {
205
+ id: sheet.properties.sheetId.toString(),
206
+ name: sheet.properties.title,
207
+ index: sheet.properties.index,
208
+ rowCount: sheet.properties.gridProperties?.rowCount || 0,
209
+ columnCount: sheet.properties.gridProperties?.columnCount || 0,
210
+ data,
211
+ frozenRows: sheet.properties.gridProperties?.frozenRowCount,
212
+ frozenColumns: sheet.properties.gridProperties?.frozenColumnCount,
213
+ }
214
+ } catch {
215
+ return null
216
+ }
217
+ },
218
+
219
+ async addSheet(spreadsheetId: string, name: string, options?: AddSheetOptions): Promise<SheetData> {
220
+ const body = {
221
+ requests: [
222
+ {
223
+ addSheet: {
224
+ properties: {
225
+ title: name,
226
+ index: options?.index,
227
+ gridProperties: {
228
+ rowCount: options?.rowCount || 1000,
229
+ columnCount: options?.columnCount || 26,
230
+ },
231
+ },
232
+ },
233
+ },
234
+ ],
235
+ }
236
+
237
+ const data = await sheetsApi(`/${spreadsheetId}:batchUpdate`, 'POST', body)
238
+
239
+ const reply = data.replies[0].addSheet
240
+ return {
241
+ id: reply.properties.sheetId.toString(),
242
+ name: reply.properties.title,
243
+ index: reply.properties.index,
244
+ rowCount: reply.properties.gridProperties?.rowCount || 0,
245
+ columnCount: reply.properties.gridProperties?.columnCount || 0,
246
+ }
247
+ },
248
+
249
+ async deleteSheet(spreadsheetId: string, sheetId: string | number): Promise<boolean> {
250
+ try {
251
+ // If sheetId is a string (name), we need to look up the actual sheet ID
252
+ let actualSheetId = typeof sheetId === 'number' ? sheetId : parseInt(sheetId, 10)
253
+
254
+ if (isNaN(actualSheetId)) {
255
+ // Look up by name
256
+ const spreadsheet = await sheetsApi(`/${spreadsheetId}`)
257
+ const sheet = spreadsheet.sheets.find((s: any) => s.properties.title === sheetId)
258
+ if (!sheet) return false
259
+ actualSheetId = sheet.properties.sheetId
260
+ }
261
+
262
+ const body = {
263
+ requests: [
264
+ {
265
+ deleteSheet: {
266
+ sheetId: actualSheetId,
267
+ },
268
+ },
269
+ ],
270
+ }
271
+
272
+ await sheetsApi(`/${spreadsheetId}:batchUpdate`, 'POST', body)
273
+ return true
274
+ } catch {
275
+ return false
276
+ }
277
+ },
278
+
279
+ async renameSheet(spreadsheetId: string, sheetId: string | number, name: string): Promise<boolean> {
280
+ try {
281
+ let actualSheetId = typeof sheetId === 'number' ? sheetId : parseInt(sheetId, 10)
282
+
283
+ if (isNaN(actualSheetId)) {
284
+ const spreadsheet = await sheetsApi(`/${spreadsheetId}`)
285
+ const sheet = spreadsheet.sheets.find((s: any) => s.properties.title === sheetId)
286
+ if (!sheet) return false
287
+ actualSheetId = sheet.properties.sheetId
288
+ }
289
+
290
+ const body = {
291
+ requests: [
292
+ {
293
+ updateSheetProperties: {
294
+ properties: {
295
+ sheetId: actualSheetId,
296
+ title: name,
297
+ },
298
+ fields: 'title',
299
+ },
300
+ },
301
+ ],
302
+ }
303
+
304
+ await sheetsApi(`/${spreadsheetId}:batchUpdate`, 'POST', body)
305
+ return true
306
+ } catch {
307
+ return false
308
+ }
309
+ },
310
+
311
+ async readRange(spreadsheetId: string, range: string): Promise<CellValue[][]> {
312
+ const data = await sheetsApi(
313
+ `/${spreadsheetId}/values/${encodeURIComponent(range)}?valueRenderOption=UNFORMATTED_VALUE`
314
+ )
315
+
316
+ return data.values || []
317
+ },
318
+
319
+ async writeRange(spreadsheetId: string, range: string, values: CellValue[][]): Promise<UpdateResult> {
320
+ const body = {
321
+ values,
322
+ }
323
+
324
+ const data = await sheetsApi(
325
+ `/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=USER_ENTERED`,
326
+ 'PUT',
327
+ body
328
+ )
329
+
330
+ return {
331
+ updatedRange: data.updatedRange,
332
+ updatedRows: data.updatedRows || 0,
333
+ updatedColumns: data.updatedColumns || 0,
334
+ updatedCells: data.updatedCells || 0,
335
+ }
336
+ },
337
+
338
+ async appendRows(spreadsheetId: string, range: string, values: CellValue[][]): Promise<AppendResult> {
339
+ const body = {
340
+ values,
341
+ }
342
+
343
+ const data = await sheetsApi(
344
+ `/${spreadsheetId}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS`,
345
+ 'POST',
346
+ body
347
+ )
348
+
349
+ return {
350
+ spreadsheetId: data.spreadsheetId,
351
+ updatedRange: data.updates?.updatedRange || range,
352
+ updatedRows: data.updates?.updatedRows || values.length,
353
+ }
354
+ },
355
+
356
+ async clearRange(spreadsheetId: string, range: string): Promise<boolean> {
357
+ try {
358
+ await sheetsApi(`/${spreadsheetId}/values/${encodeURIComponent(range)}:clear`, 'POST', {})
359
+ return true
360
+ } catch {
361
+ return false
362
+ }
363
+ },
364
+
365
+ async batchRead(spreadsheetId: string, ranges: string[]): Promise<Map<string, CellValue[][]>> {
366
+ const params = ranges.map((r) => `ranges=${encodeURIComponent(r)}`).join('&')
367
+ const data = await sheetsApi(
368
+ `/${spreadsheetId}/values:batchGet?${params}&valueRenderOption=UNFORMATTED_VALUE`
369
+ )
370
+
371
+ const result = new Map<string, CellValue[][]>()
372
+ data.valueRanges?.forEach((vr: any) => {
373
+ result.set(vr.range, vr.values || [])
374
+ })
375
+
376
+ return result
377
+ },
378
+
379
+ async batchWrite(
380
+ spreadsheetId: string,
381
+ data: Array<{ range: string; values: CellValue[][] }>
382
+ ): Promise<UpdateResult> {
383
+ const body = {
384
+ valueInputOption: 'USER_ENTERED',
385
+ data: data.map((d) => ({
386
+ range: d.range,
387
+ values: d.values,
388
+ })),
389
+ }
390
+
391
+ const response = await sheetsApi(`/${spreadsheetId}/values:batchUpdate`, 'POST', body)
392
+
393
+ return {
394
+ updatedRange: 'batch',
395
+ updatedRows: response.totalUpdatedRows || 0,
396
+ updatedColumns: response.totalUpdatedColumns || 0,
397
+ updatedCells: response.totalUpdatedCells || 0,
398
+ }
399
+ },
400
+
401
+ async export(spreadsheetId: string, format: 'xlsx' | 'csv' | 'pdf'): Promise<Buffer> {
402
+ const mimeTypes: Record<string, string> = {
403
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
404
+ csv: 'text/csv',
405
+ pdf: 'application/pdf',
406
+ }
407
+
408
+ const response = await fetch(
409
+ `${DRIVE_API_URL}/${spreadsheetId}/export?mimeType=${encodeURIComponent(mimeTypes[format]!)}`,
410
+ {
411
+ headers: {
412
+ Authorization: `Bearer ${accessToken}`,
413
+ },
414
+ }
415
+ )
416
+
417
+ if (!response.ok) {
418
+ throw new Error(`Export failed: HTTP ${response.status}`)
419
+ }
420
+
421
+ const arrayBuffer = await response.arrayBuffer()
422
+ return Buffer.from(arrayBuffer)
423
+ },
424
+ }
425
+ }
426
+
427
+ function mapSpreadsheet(data: any): SpreadsheetData {
428
+ return {
429
+ id: data.spreadsheetId,
430
+ name: data.properties.title,
431
+ sheets: data.sheets?.map((s: any) => ({
432
+ id: s.properties.sheetId.toString(),
433
+ name: s.properties.title,
434
+ index: s.properties.index,
435
+ rowCount: s.properties.gridProperties?.rowCount,
436
+ columnCount: s.properties.gridProperties?.columnCount,
437
+ })) || [],
438
+ createdAt: undefined, // Not available from Sheets API
439
+ modifiedAt: undefined,
440
+ url: data.spreadsheetUrl,
441
+ }
442
+ }
443
+
444
+ function extractCellValue(cell: any): CellValue {
445
+ if (!cell) return null
446
+
447
+ const ev = cell.effectiveValue
448
+ if (!ev) return null
449
+
450
+ if ('numberValue' in ev) return ev.numberValue
451
+ if ('stringValue' in ev) return ev.stringValue
452
+ if ('boolValue' in ev) return ev.boolValue
453
+ if ('formulaValue' in ev) return ev.formulaValue
454
+ if ('errorValue' in ev) return `#ERROR: ${ev.errorValue.message}`
455
+
456
+ return null
457
+ }
458
+
459
+ /**
460
+ * Google Sheets provider definition
461
+ */
462
+ export const googleSheetsProvider = defineProvider(googleSheetsInfo, async (config) =>
463
+ createGoogleSheetsProvider(config)
464
+ )
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Spreadsheet Providers
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+
7
+ export { xlsxInfo, xlsxProvider, createXlsxProvider } from './xlsx.js'
8
+ export { googleSheetsInfo, googleSheetsProvider, createGoogleSheetsProvider } from './google-sheets.js'
9
+
10
+ import { xlsxProvider } from './xlsx.js'
11
+ import { googleSheetsProvider } from './google-sheets.js'
12
+
13
+ /**
14
+ * Register all spreadsheet providers
15
+ */
16
+ export function registerSpreadsheetProviders(): void {
17
+ xlsxProvider.register()
18
+ googleSheetsProvider.register()
19
+ }
20
+
21
+ /**
22
+ * All spreadsheet providers
23
+ */
24
+ export const spreadsheetProviders = [xlsxProvider, googleSheetsProvider]