@hasna/connectors 1.3.22 → 1.3.24

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 (720) hide show
  1. package/bin/index.js +94 -37
  2. package/bin/mcp.js +102 -118
  3. package/bin/serve.js +68 -24
  4. package/connectors/connect-dropbox/src/api/bulk.ts +285 -0
  5. package/connectors/connect-dropbox/src/api/index.ts +4 -0
  6. package/connectors/connect-dropbox/src/cli/index.ts +151 -0
  7. package/connectors/connect-github/src/api/bulk.ts +328 -0
  8. package/connectors/connect-github/src/api/index.ts +4 -0
  9. package/connectors/connect-github/src/cli/index.ts +145 -0
  10. package/connectors/connect-gmail/src/api/history.ts +82 -0
  11. package/connectors/connect-gmail/src/api/index.ts +12 -0
  12. package/connectors/connect-gmail/src/api/settings.ts +280 -0
  13. package/connectors/connect-gmail/src/api/watch.ts +40 -0
  14. package/connectors/connect-gmail/src/cli/index.ts +237 -0
  15. package/connectors/connect-googleads/src/api/bulk.ts +354 -0
  16. package/connectors/connect-googleads/src/api/index.ts +4 -0
  17. package/connectors/connect-googleads/src/cli/index.ts +192 -0
  18. package/connectors/connect-googlecalendar/src/api/acl.ts +66 -0
  19. package/connectors/connect-googlecalendar/src/api/bulk.ts +452 -0
  20. package/connectors/connect-googlecalendar/src/api/freebusy.ts +35 -0
  21. package/connectors/connect-googlecalendar/src/api/index.ts +9 -0
  22. package/connectors/connect-googlecalendar/src/cli/index.ts +522 -0
  23. package/connectors/connect-googlecalendar/src/types/index.ts +90 -0
  24. package/connectors/connect-googlecontacts/src/api/bulk.ts +365 -0
  25. package/connectors/connect-googlecontacts/src/api/groups.ts +164 -0
  26. package/connectors/connect-googlecontacts/src/api/index.ts +8 -0
  27. package/connectors/connect-googlecontacts/src/cli/index.ts +340 -0
  28. package/connectors/connect-googledocs/src/api/bulk.ts +301 -0
  29. package/connectors/connect-googledocs/src/api/index.ts +4 -0
  30. package/connectors/connect-googledocs/src/cli/index.ts +187 -0
  31. package/connectors/connect-googledrive/src/api/bulk.ts +505 -0
  32. package/connectors/connect-googledrive/src/api/changes.ts +139 -0
  33. package/connectors/connect-googledrive/src/api/client.ts +34 -0
  34. package/connectors/connect-googledrive/src/api/index.ts +12 -0
  35. package/connectors/connect-googledrive/src/api/revisions.ts +132 -0
  36. package/connectors/connect-googledrive/src/cli/index.ts +624 -0
  37. package/connectors/connect-googledrive/src/index.ts +2 -0
  38. package/connectors/connect-googlephotos/src/api/bulk.ts +455 -0
  39. package/connectors/connect-googlephotos/src/api/index.ts +8 -0
  40. package/connectors/connect-googlephotos/src/cli/index.ts +185 -0
  41. package/connectors/connect-googletasks/src/api/bulk.ts +359 -0
  42. package/connectors/connect-googletasks/src/api/index.ts +1 -0
  43. package/connectors/connect-googletasks/src/cli/index.ts +178 -0
  44. package/connectors/connect-linear/src/api/bulk.ts +219 -0
  45. package/connectors/connect-linear/src/api/index.ts +4 -0
  46. package/connectors/connect-linear/src/cli/index.ts +116 -0
  47. package/connectors/connect-shopify/src/api/bulk.ts +288 -0
  48. package/connectors/connect-shopify/src/api/index.ts +4 -0
  49. package/connectors/connect-shopify/src/cli/index.ts +108 -0
  50. package/connectors/connect-slack/src/api/bulk.ts +237 -0
  51. package/connectors/connect-slack/src/api/index.ts +4 -0
  52. package/connectors/connect-slack/src/cli/index.ts +157 -0
  53. package/connectors/connect-stripe/src/api/bulk.ts +488 -0
  54. package/connectors/connect-stripe/src/api/index.ts +4 -0
  55. package/connectors/connect-stripe/src/cli/index.ts +206 -0
  56. package/connectors/{connect-cloudflare → connect-yousign}/bun.lock +3 -3
  57. package/connectors/connect-yousign/node_modules/@types/bun/LICENSE +21 -0
  58. package/connectors/connect-yousign/node_modules/@types/bun/README.md +20 -0
  59. package/connectors/connect-yousign/node_modules/@types/bun/index.d.ts +1 -0
  60. package/connectors/connect-yousign/node_modules/@types/bun/package.json +53 -0
  61. package/connectors/connect-yousign/node_modules/@types/node/LICENSE +21 -0
  62. package/connectors/connect-yousign/node_modules/@types/node/README.md +15 -0
  63. package/connectors/connect-yousign/node_modules/@types/node/assert/strict.d.ts +105 -0
  64. package/connectors/connect-yousign/node_modules/@types/node/assert.d.ts +955 -0
  65. package/connectors/connect-yousign/node_modules/@types/node/async_hooks.d.ts +623 -0
  66. package/connectors/connect-yousign/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  67. package/connectors/connect-yousign/node_modules/@types/node/buffer.d.ts +1810 -0
  68. package/connectors/connect-yousign/node_modules/@types/node/child_process.d.ts +1433 -0
  69. package/connectors/connect-yousign/node_modules/@types/node/cluster.d.ts +486 -0
  70. package/connectors/connect-yousign/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  71. package/connectors/connect-yousign/node_modules/@types/node/console.d.ts +151 -0
  72. package/connectors/connect-yousign/node_modules/@types/node/constants.d.ts +20 -0
  73. package/connectors/connect-yousign/node_modules/@types/node/crypto.d.ts +4065 -0
  74. package/connectors/connect-yousign/node_modules/@types/node/dgram.d.ts +564 -0
  75. package/connectors/connect-yousign/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  76. package/connectors/connect-yousign/node_modules/@types/node/dns/promises.d.ts +503 -0
  77. package/connectors/connect-yousign/node_modules/@types/node/dns.d.ts +922 -0
  78. package/connectors/connect-yousign/node_modules/@types/node/domain.d.ts +166 -0
  79. package/connectors/connect-yousign/node_modules/@types/node/events.d.ts +1047 -0
  80. package/connectors/connect-yousign/node_modules/@types/node/fs/promises.d.ts +1329 -0
  81. package/connectors/connect-yousign/node_modules/@types/node/fs.d.ts +4678 -0
  82. package/connectors/connect-yousign/node_modules/@types/node/globals.d.ts +150 -0
  83. package/connectors/connect-yousign/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  84. package/connectors/connect-yousign/node_modules/@types/node/http.d.ts +2188 -0
  85. package/connectors/connect-yousign/node_modules/@types/node/http2.d.ts +2480 -0
  86. package/connectors/connect-yousign/node_modules/@types/node/https.d.ts +405 -0
  87. package/connectors/connect-yousign/node_modules/@types/node/index.d.ts +115 -0
  88. package/connectors/connect-yousign/node_modules/@types/node/inspector/promises.d.ts +41 -0
  89. package/connectors/connect-yousign/node_modules/@types/node/inspector.d.ts +269 -0
  90. package/connectors/connect-yousign/node_modules/@types/node/inspector.generated.d.ts +4401 -0
  91. package/connectors/connect-yousign/node_modules/@types/node/module.d.ts +757 -0
  92. package/connectors/connect-yousign/node_modules/@types/node/net.d.ts +933 -0
  93. package/connectors/connect-yousign/node_modules/@types/node/os.d.ts +507 -0
  94. package/connectors/connect-yousign/node_modules/@types/node/package.json +155 -0
  95. package/connectors/connect-yousign/node_modules/@types/node/path/posix.d.ts +8 -0
  96. package/connectors/connect-yousign/node_modules/@types/node/path/win32.d.ts +8 -0
  97. package/connectors/connect-yousign/node_modules/@types/node/path.d.ts +187 -0
  98. package/connectors/connect-yousign/node_modules/@types/node/perf_hooks.d.ts +643 -0
  99. package/connectors/connect-yousign/node_modules/@types/node/process.d.ts +2175 -0
  100. package/connectors/connect-yousign/node_modules/@types/node/punycode.d.ts +117 -0
  101. package/connectors/connect-yousign/node_modules/@types/node/querystring.d.ts +152 -0
  102. package/connectors/connect-yousign/node_modules/@types/node/quic.d.ts +910 -0
  103. package/connectors/connect-yousign/node_modules/@types/node/readline/promises.d.ts +161 -0
  104. package/connectors/connect-yousign/node_modules/@types/node/readline.d.ts +542 -0
  105. package/connectors/connect-yousign/node_modules/@types/node/repl.d.ts +415 -0
  106. package/connectors/connect-yousign/node_modules/@types/node/sea.d.ts +162 -0
  107. package/connectors/connect-yousign/node_modules/@types/node/sqlite.d.ts +1065 -0
  108. package/connectors/connect-yousign/node_modules/@types/node/stream/consumers.d.ts +38 -0
  109. package/connectors/connect-yousign/node_modules/@types/node/stream/promises.d.ts +211 -0
  110. package/connectors/connect-yousign/node_modules/@types/node/stream/web.d.ts +296 -0
  111. package/connectors/connect-yousign/node_modules/@types/node/stream.d.ts +1770 -0
  112. package/connectors/connect-yousign/node_modules/@types/node/string_decoder.d.ts +67 -0
  113. package/connectors/connect-yousign/node_modules/@types/node/test/reporters.d.ts +96 -0
  114. package/connectors/connect-yousign/node_modules/@types/node/test.d.ts +2275 -0
  115. package/connectors/connect-yousign/node_modules/@types/node/timers/promises.d.ts +108 -0
  116. package/connectors/connect-yousign/node_modules/@types/node/timers.d.ts +159 -0
  117. package/connectors/connect-yousign/node_modules/@types/node/tls.d.ts +1203 -0
  118. package/connectors/connect-yousign/node_modules/@types/node/trace_events.d.ts +197 -0
  119. package/connectors/connect-yousign/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  120. package/connectors/connect-yousign/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  121. package/connectors/connect-yousign/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  122. package/connectors/connect-yousign/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  123. package/connectors/connect-yousign/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  124. package/connectors/connect-yousign/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  125. package/connectors/connect-yousign/node_modules/@types/node/tty.d.ts +250 -0
  126. package/connectors/connect-yousign/node_modules/@types/node/url.d.ts +541 -0
  127. package/connectors/connect-yousign/node_modules/@types/node/util/types.d.ts +558 -0
  128. package/connectors/connect-yousign/node_modules/@types/node/util.d.ts +1687 -0
  129. package/connectors/connect-yousign/node_modules/@types/node/v8.d.ts +988 -0
  130. package/connectors/connect-yousign/node_modules/@types/node/vm.d.ts +1208 -0
  131. package/connectors/connect-yousign/node_modules/@types/node/wasi.d.ts +202 -0
  132. package/connectors/connect-yousign/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  133. package/connectors/connect-yousign/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  134. package/connectors/connect-yousign/node_modules/@types/node/web-globals/console.d.ts +9 -0
  135. package/connectors/connect-yousign/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  136. package/connectors/connect-yousign/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  137. package/connectors/connect-yousign/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  138. package/connectors/connect-yousign/node_modules/@types/node/web-globals/events.d.ts +106 -0
  139. package/connectors/connect-yousign/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  140. package/connectors/connect-yousign/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  141. package/connectors/connect-yousign/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  142. package/connectors/connect-yousign/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  143. package/connectors/connect-yousign/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  144. package/connectors/connect-yousign/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  145. package/connectors/connect-yousign/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  146. package/connectors/connect-yousign/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  147. package/connectors/connect-yousign/node_modules/@types/node/web-globals/url.d.ts +24 -0
  148. package/connectors/connect-yousign/node_modules/@types/node/worker_threads.d.ts +717 -0
  149. package/connectors/connect-yousign/node_modules/@types/node/zlib.d.ts +682 -0
  150. package/connectors/connect-yousign/node_modules/bun-types/CLAUDE.md +105 -0
  151. package/connectors/connect-yousign/node_modules/bun-types/README.md +33 -0
  152. package/connectors/connect-yousign/node_modules/bun-types/bun.d.ts +8481 -0
  153. package/connectors/connect-yousign/node_modules/bun-types/bun.ns.d.ts +5 -0
  154. package/connectors/connect-yousign/node_modules/bun-types/bundle.d.ts +74 -0
  155. package/connectors/connect-yousign/node_modules/bun-types/deprecated.d.ts +184 -0
  156. package/connectors/connect-yousign/node_modules/bun-types/devserver.d.ts +187 -0
  157. package/connectors/connect-yousign/node_modules/bun-types/docs/README.md +28 -0
  158. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/bytecode.mdx +447 -0
  159. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/css.mdx +1024 -0
  160. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/esbuild.mdx +304 -0
  161. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/executables.mdx +1318 -0
  162. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/fullstack.mdx +1086 -0
  163. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/hot-reloading.mdx +229 -0
  164. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/html-static.mdx +498 -0
  165. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/index.mdx +1840 -0
  166. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/loaders.mdx +451 -0
  167. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/macros.mdx +328 -0
  168. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/minifier.mdx +1286 -0
  169. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/plugins.mdx +477 -0
  170. package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/standalone-html.mdx +314 -0
  171. package/connectors/connect-yousign/node_modules/bun-types/docs/feedback.mdx +75 -0
  172. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  173. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  174. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  175. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  176. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  177. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  178. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-dataview.mdx +16 -0
  179. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-stream.mdx +16 -0
  180. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-string.mdx +17 -0
  181. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  182. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  183. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-blob.mdx +16 -0
  184. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  185. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-string.mdx +27 -0
  186. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  187. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/dataview-to-string.mdx +17 -0
  188. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  189. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  190. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  191. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  192. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  193. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-string.mdx +18 -0
  194. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/aws-lambda.mdx +204 -0
  195. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/digital-ocean.mdx +161 -0
  196. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/google-cloud-run.mdx +194 -0
  197. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/railway.mdx +145 -0
  198. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/render.mdx +82 -0
  199. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/vercel.mdx +97 -0
  200. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/astro.mdx +82 -0
  201. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/discordjs.mdx +80 -0
  202. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/docker.mdx +151 -0
  203. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/drizzle.mdx +195 -0
  204. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/elysia.mdx +31 -0
  205. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/express.mdx +43 -0
  206. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/gel.mdx +261 -0
  207. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/hono.mdx +47 -0
  208. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/mongoose.mdx +92 -0
  209. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  210. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  211. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nextjs.mdx +103 -0
  212. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nuxt.mdx +96 -0
  213. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/pm2.mdx +55 -0
  214. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  215. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma.mdx +164 -0
  216. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/qwik.mdx +114 -0
  217. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/react.mdx +52 -0
  218. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/remix.mdx +97 -0
  219. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sentry.mdx +54 -0
  220. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/solidstart.mdx +62 -0
  221. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/ssr-react.mdx +49 -0
  222. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/stric.mdx +54 -0
  223. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sveltekit.mdx +138 -0
  224. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/systemd.mdx +114 -0
  225. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/tanstack-start.mdx +791 -0
  226. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/upstash.mdx +87 -0
  227. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/vite.mdx +77 -0
  228. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-links.mdx +71 -0
  229. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  230. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/cluster.mdx +69 -0
  231. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch-unix.mdx +35 -0
  232. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch.mdx +26 -0
  233. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/file-uploads.mdx +97 -0
  234. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/hot.mdx +28 -0
  235. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/proxy.mdx +50 -0
  236. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/server.mdx +48 -0
  237. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/simple.mdx +20 -0
  238. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-file.mdx +50 -0
  239. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-iterator.mdx +49 -0
  240. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  241. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/tls.mdx +32 -0
  242. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/index.mdx +10 -0
  243. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-dev.mdx +28 -0
  244. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-git.mdx +40 -0
  245. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-optional.mdx +27 -0
  246. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-peer.mdx +45 -0
  247. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-tarball.mdx +35 -0
  248. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add.mdx +44 -0
  249. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/azure-artifacts.mdx +76 -0
  250. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/cicd.mdx +43 -0
  251. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/custom-registry.mdx +32 -0
  252. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  253. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
  254. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/jfrog-artifactory.mdx +28 -0
  255. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/npm-alias.mdx +25 -0
  256. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/registry-scope.mdx +40 -0
  257. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/trusted.mdx +52 -0
  258. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/workspaces.mdx +70 -0
  259. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/yarnlock.mdx +51 -0
  260. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/argv.mdx +66 -0
  261. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ctrl-c.mdx +18 -0
  262. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ipc.mdx +69 -0
  263. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/nanoseconds.mdx +15 -0
  264. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/os-signals.mdx +31 -0
  265. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stderr.mdx +34 -0
  266. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stdout.mdx +28 -0
  267. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn.mdx +43 -0
  268. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/stdin.mdx +62 -0
  269. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/arraybuffer.mdx +30 -0
  270. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/buffer.mdx +21 -0
  271. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/exists.mdx +18 -0
  272. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/json.mdx +19 -0
  273. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/mime.mdx +22 -0
  274. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/stream.mdx +28 -0
  275. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/string.mdx +24 -0
  276. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/uint8array.mdx +23 -0
  277. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/watch.mdx +66 -0
  278. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/build-time-constants.mdx +295 -0
  279. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/cicd.mdx +45 -0
  280. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  281. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/define-constant.mdx +149 -0
  282. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-directory.mdx +39 -0
  283. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-file.mdx +21 -0
  284. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/heap-snapshot.mdx +28 -0
  285. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-html.mdx +15 -0
  286. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json.mdx +46 -0
  287. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json5.mdx +74 -0
  288. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-toml.mdx +32 -0
  289. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-yaml.mdx +104 -0
  290. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/read-env.mdx +37 -0
  291. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/set-env.mdx +51 -0
  292. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/shell.mdx +42 -0
  293. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/timezone.mdx +38 -0
  294. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  295. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/typescript.mdx +51 -0
  296. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/vscode-debugger.mdx +47 -0
  297. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/web-debugger.mdx +103 -0
  298. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  299. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  300. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-json.mdx +14 -0
  301. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-string.mdx +14 -0
  302. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  303. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-array.mdx +16 -0
  304. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-arraybuffer.mdx +16 -0
  305. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-blob.mdx +16 -0
  306. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-buffer.mdx +17 -0
  307. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-json.mdx +16 -0
  308. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-string.mdx +16 -0
  309. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-typedarray.mdx +24 -0
  310. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/bail.mdx +24 -0
  311. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/concurrent-test-glob.mdx +146 -0
  312. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage-threshold.mdx +67 -0
  313. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage.mdx +49 -0
  314. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/happy-dom.mdx +73 -0
  315. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/migrate-from-jest.mdx +125 -0
  316. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-clock.mdx +50 -0
  317. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-functions.mdx +70 -0
  318. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/rerun-each.mdx +16 -0
  319. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/run-tests.mdx +116 -0
  320. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/skip-tests.mdx +43 -0
  321. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/snapshot.mdx +102 -0
  322. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/spy-on.mdx +49 -0
  323. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/svelte-test.mdx +113 -0
  324. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/testing-library.mdx +93 -0
  325. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/timeout.mdx +17 -0
  326. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/todo-tests.mdx +74 -0
  327. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/update-snapshots.mdx +49 -0
  328. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/watch-mode.mdx +24 -0
  329. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/base64.mdx +17 -0
  330. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deep-equals.mdx +41 -0
  331. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deflate.mdx +20 -0
  332. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/detect-bun.mdx +28 -0
  333. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/entrypoint.mdx +19 -0
  334. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/escape-html.mdx +24 -0
  335. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/file-url-to-path.mdx +16 -0
  336. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/gzip.mdx +20 -0
  337. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/hash-a-password.mdx +56 -0
  338. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-dir.mdx +15 -0
  339. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-file.mdx +15 -0
  340. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-path.mdx +15 -0
  341. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/javascript-uuid.mdx +25 -0
  342. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/main.mdx +43 -0
  343. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/path-to-file-url.mdx +16 -0
  344. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/sleep.mdx +24 -0
  345. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/upgrade.mdx +93 -0
  346. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/version.mdx +23 -0
  347. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  348. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/compression.mdx +33 -0
  349. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/context.mdx +79 -0
  350. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/pubsub.mdx +43 -0
  351. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/simple.mdx +38 -0
  352. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/append.mdx +54 -0
  353. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/basic.mdx +46 -0
  354. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/blob.mdx +30 -0
  355. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/cat.mdx +19 -0
  356. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/file-cp.mdx +18 -0
  357. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/filesink.mdx +54 -0
  358. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/response.mdx +19 -0
  359. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stdout.mdx +23 -0
  360. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stream.mdx +19 -0
  361. package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/unlink.mdx +18 -0
  362. package/connectors/connect-yousign/node_modules/bun-types/docs/index.mdx +133 -0
  363. package/connectors/connect-yousign/node_modules/bun-types/docs/installation.mdx +372 -0
  364. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/bunx.mdx +91 -0
  365. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/catalogs.mdx +292 -0
  366. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/add.mdx +179 -0
  367. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/audit.mdx +60 -0
  368. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/info.mdx +70 -0
  369. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/install.mdx +591 -0
  370. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/link.mdx +61 -0
  371. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/outdated.mdx +197 -0
  372. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/patch.mdx +69 -0
  373. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/pm.mdx +323 -0
  374. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/publish.mdx +131 -0
  375. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/remove.mdx +16 -0
  376. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/update.mdx +140 -0
  377. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/why.mdx +84 -0
  378. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/filter.mdx +127 -0
  379. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/global-cache.mdx +72 -0
  380. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/isolated-installs.mdx +220 -0
  381. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lifecycle.mdx +64 -0
  382. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lockfile.mdx +64 -0
  383. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/npmrc.mdx +245 -0
  384. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/overrides.mdx +83 -0
  385. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/scopes-registries.mdx +35 -0
  386. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/security-scanner-api.mdx +95 -0
  387. package/connectors/connect-yousign/node_modules/bun-types/docs/pm/workspaces.mdx +115 -0
  388. package/connectors/connect-yousign/node_modules/bun-types/docs/project/benchmarking.mdx +296 -0
  389. package/connectors/connect-yousign/node_modules/bun-types/docs/project/bindgen.mdx +223 -0
  390. package/connectors/connect-yousign/node_modules/bun-types/docs/project/building-windows.mdx +143 -0
  391. package/connectors/connect-yousign/node_modules/bun-types/docs/project/contributing.mdx +366 -0
  392. package/connectors/connect-yousign/node_modules/bun-types/docs/project/feedback.mdx +20 -0
  393. package/connectors/connect-yousign/node_modules/bun-types/docs/project/license.mdx +78 -0
  394. package/connectors/connect-yousign/node_modules/bun-types/docs/project/roadmap.mdx +8 -0
  395. package/connectors/connect-yousign/node_modules/bun-types/docs/quickstart.mdx +251 -0
  396. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/archive.mdx +452 -0
  397. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/auto-install.mdx +97 -0
  398. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/binary-data.mdx +846 -0
  399. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bun-apis.mdx +59 -0
  400. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bunfig.mdx +754 -0
  401. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/c-compiler.mdx +204 -0
  402. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/child-process.mdx +659 -0
  403. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/color.mdx +267 -0
  404. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/console.mdx +67 -0
  405. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/cookies.mdx +454 -0
  406. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/debugger.mdx +335 -0
  407. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/environment-variables.mdx +231 -0
  408. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/ffi.mdx +567 -0
  409. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-io.mdx +306 -0
  410. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-system-router.mdx +118 -0
  411. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-types.mdx +482 -0
  412. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/glob.mdx +181 -0
  413. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/globals.mdx +72 -0
  414. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/hashing.mdx +315 -0
  415. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/html-rewriter.mdx +333 -0
  416. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/cookies.mdx +79 -0
  417. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/error-handling.mdx +40 -0
  418. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/metrics.mdx +36 -0
  419. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/routing.mdx +289 -0
  420. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/server.mdx +645 -0
  421. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/tls.mdx +101 -0
  422. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/websockets.mdx +414 -0
  423. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/index.mdx +223 -0
  424. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/json5.mdx +271 -0
  425. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsonl.mdx +188 -0
  426. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsx.mdx +115 -0
  427. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/markdown.mdx +344 -0
  428. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/module-resolution.mdx +374 -0
  429. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/dns.mdx +111 -0
  430. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/fetch.mdx +484 -0
  431. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/tcp.mdx +239 -0
  432. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/udp.mdx +180 -0
  433. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/node-api.mdx +19 -0
  434. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/nodejs-compat.mdx +468 -0
  435. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/plugins.mdx +419 -0
  436. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/redis.mdx +583 -0
  437. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/repl.mdx +176 -0
  438. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/s3.mdx +881 -0
  439. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/secrets.mdx +340 -0
  440. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/semver.mdx +57 -0
  441. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/shell.mdx +637 -0
  442. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sql.mdx +1404 -0
  443. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sqlite.mdx +721 -0
  444. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/streams.mdx +232 -0
  445. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/create.mdx +269 -0
  446. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/init.mdx +58 -0
  447. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/transpiler.mdx +288 -0
  448. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/typescript.mdx +58 -0
  449. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/utils.mdx +1010 -0
  450. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/watch-mode.mdx +161 -0
  451. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/web-apis.mdx +29 -0
  452. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/workers.mdx +314 -0
  453. package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/yaml.mdx +469 -0
  454. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/add.mdx +166 -0
  455. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/build.mdx +197 -0
  456. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/bunx.mdx +49 -0
  457. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/feedback.mdx +17 -0
  458. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/init.mdx +84 -0
  459. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/install.mdx +173 -0
  460. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/link.mdx +163 -0
  461. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/outdated.mdx +140 -0
  462. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/patch.mdx +171 -0
  463. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/publish.mdx +198 -0
  464. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/remove.mdx +146 -0
  465. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/run.mdx +305 -0
  466. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/test.mdx +105 -0
  467. package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/update.mdx +144 -0
  468. package/connectors/connect-yousign/node_modules/bun-types/docs/test/code-coverage.mdx +409 -0
  469. package/connectors/connect-yousign/node_modules/bun-types/docs/test/configuration.mdx +520 -0
  470. package/connectors/connect-yousign/node_modules/bun-types/docs/test/dates-times.mdx +129 -0
  471. package/connectors/connect-yousign/node_modules/bun-types/docs/test/discovery.mdx +90 -0
  472. package/connectors/connect-yousign/node_modules/bun-types/docs/test/dom.mdx +226 -0
  473. package/connectors/connect-yousign/node_modules/bun-types/docs/test/index.mdx +409 -0
  474. package/connectors/connect-yousign/node_modules/bun-types/docs/test/lifecycle.mdx +366 -0
  475. package/connectors/connect-yousign/node_modules/bun-types/docs/test/mocks.mdx +637 -0
  476. package/connectors/connect-yousign/node_modules/bun-types/docs/test/reporters.mdx +126 -0
  477. package/connectors/connect-yousign/node_modules/bun-types/docs/test/runtime-behavior.mdx +342 -0
  478. package/connectors/connect-yousign/node_modules/bun-types/docs/test/snapshots.mdx +434 -0
  479. package/connectors/connect-yousign/node_modules/bun-types/docs/test/writing-tests.mdx +672 -0
  480. package/connectors/connect-yousign/node_modules/bun-types/docs/typescript.mdx +54 -0
  481. package/connectors/connect-yousign/node_modules/bun-types/extensions.d.ts +40 -0
  482. package/connectors/connect-yousign/node_modules/bun-types/fetch.d.ts +79 -0
  483. package/connectors/connect-yousign/node_modules/bun-types/ffi.d.ts +1154 -0
  484. package/connectors/connect-yousign/node_modules/bun-types/globals.d.ts +2067 -0
  485. package/connectors/connect-yousign/node_modules/bun-types/html-rewriter.d.ts +186 -0
  486. package/connectors/connect-yousign/node_modules/bun-types/index.d.ts +32 -0
  487. package/connectors/connect-yousign/node_modules/bun-types/jsc.d.ts +233 -0
  488. package/connectors/connect-yousign/node_modules/bun-types/jsx.d.ts +11 -0
  489. package/connectors/connect-yousign/node_modules/bun-types/overrides.d.ts +376 -0
  490. package/connectors/connect-yousign/node_modules/bun-types/package.json +37 -0
  491. package/connectors/connect-yousign/node_modules/bun-types/redis.d.ts +3352 -0
  492. package/connectors/connect-yousign/node_modules/bun-types/s3.d.ts +1335 -0
  493. package/connectors/connect-yousign/node_modules/bun-types/security.d.ts +101 -0
  494. package/connectors/connect-yousign/node_modules/bun-types/serve.d.ts +1296 -0
  495. package/connectors/connect-yousign/node_modules/bun-types/shell.d.ts +380 -0
  496. package/connectors/connect-yousign/node_modules/bun-types/sql.d.ts +887 -0
  497. package/connectors/connect-yousign/node_modules/bun-types/sqlite.d.ts +1322 -0
  498. package/connectors/connect-yousign/node_modules/bun-types/test-globals.d.ts +22 -0
  499. package/connectors/connect-yousign/node_modules/bun-types/test.d.ts +2392 -0
  500. package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/branding.d.ts +283 -0
  501. package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/index.d.ts +1207 -0
  502. package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/messages.d.ts +395 -0
  503. package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/overloads.d.ts +669 -0
  504. package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/utils.d.ts +431 -0
  505. package/connectors/connect-yousign/node_modules/bun-types/wasm.d.ts +193 -0
  506. package/connectors/connect-yousign/node_modules/chalk/license +9 -0
  507. package/connectors/connect-yousign/node_modules/chalk/package.json +83 -0
  508. package/connectors/connect-yousign/node_modules/chalk/readme.md +297 -0
  509. package/connectors/connect-yousign/node_modules/chalk/source/index.d.ts +325 -0
  510. package/connectors/connect-yousign/node_modules/chalk/source/index.js +225 -0
  511. package/connectors/connect-yousign/node_modules/chalk/source/utilities.js +33 -0
  512. package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  513. package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  514. package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  515. package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
  516. package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  517. package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
  518. package/connectors/connect-yousign/node_modules/commander/LICENSE +22 -0
  519. package/connectors/connect-yousign/node_modules/commander/Readme.md +1157 -0
  520. package/connectors/connect-yousign/node_modules/commander/esm.mjs +16 -0
  521. package/connectors/connect-yousign/node_modules/commander/index.js +24 -0
  522. package/connectors/connect-yousign/node_modules/commander/lib/argument.js +149 -0
  523. package/connectors/connect-yousign/node_modules/commander/lib/command.js +2509 -0
  524. package/connectors/connect-yousign/node_modules/commander/lib/error.js +39 -0
  525. package/connectors/connect-yousign/node_modules/commander/lib/help.js +520 -0
  526. package/connectors/connect-yousign/node_modules/commander/lib/option.js +330 -0
  527. package/connectors/connect-yousign/node_modules/commander/lib/suggestSimilar.js +101 -0
  528. package/connectors/connect-yousign/node_modules/commander/package-support.json +16 -0
  529. package/connectors/connect-yousign/node_modules/commander/package.json +84 -0
  530. package/connectors/connect-yousign/node_modules/commander/typings/esm.d.mts +3 -0
  531. package/connectors/connect-yousign/node_modules/commander/typings/index.d.ts +969 -0
  532. package/connectors/connect-yousign/node_modules/typescript/LICENSE.txt +55 -0
  533. package/connectors/connect-yousign/node_modules/typescript/README.md +50 -0
  534. package/connectors/connect-yousign/node_modules/typescript/SECURITY.md +41 -0
  535. package/connectors/connect-yousign/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
  536. package/connectors/connect-yousign/node_modules/typescript/bin/tsc +2 -0
  537. package/connectors/connect-yousign/node_modules/typescript/bin/tsserver +2 -0
  538. package/connectors/connect-yousign/node_modules/typescript/lib/_tsc.js +133818 -0
  539. package/connectors/connect-yousign/node_modules/typescript/lib/_tsserver.js +659 -0
  540. package/connectors/connect-yousign/node_modules/typescript/lib/_typingsInstaller.js +222 -0
  541. package/connectors/connect-yousign/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
  542. package/connectors/connect-yousign/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
  543. package/connectors/connect-yousign/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
  544. package/connectors/connect-yousign/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
  545. package/connectors/connect-yousign/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
  546. package/connectors/connect-yousign/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
  547. package/connectors/connect-yousign/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
  548. package/connectors/connect-yousign/node_modules/typescript/lib/lib.d.ts +22 -0
  549. package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
  550. package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
  551. package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
  552. package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
  553. package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
  554. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
  555. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
  556. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
  557. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
  558. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
  559. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
  560. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
  561. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
  562. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
  563. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
  564. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
  565. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
  566. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
  567. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
  568. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
  569. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
  570. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
  571. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
  572. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
  573. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
  574. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
  575. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
  576. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
  577. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
  578. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
  579. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
  580. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
  581. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
  582. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
  583. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
  584. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
  585. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
  586. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
  587. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
  588. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
  589. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
  590. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
  591. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
  592. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
  593. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
  594. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
  595. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
  596. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
  597. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
  598. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
  599. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
  600. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
  601. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
  602. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
  603. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
  604. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
  605. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
  606. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
  607. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
  608. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
  609. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
  610. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
  611. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
  612. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
  613. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
  614. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
  615. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
  616. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
  617. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
  618. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
  619. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
  620. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
  621. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
  622. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
  623. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
  624. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
  625. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
  626. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
  627. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
  628. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
  629. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
  630. package/connectors/connect-yousign/node_modules/typescript/lib/lib.es6.d.ts +23 -0
  631. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
  632. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
  633. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
  634. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
  635. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
  636. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
  637. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
  638. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
  639. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
  640. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
  641. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
  642. package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
  643. package/connectors/connect-yousign/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
  644. package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
  645. package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
  646. package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
  647. package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
  648. package/connectors/connect-yousign/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
  649. package/connectors/connect-yousign/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
  650. package/connectors/connect-yousign/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
  651. package/connectors/connect-yousign/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
  652. package/connectors/connect-yousign/node_modules/typescript/lib/tsc.js +8 -0
  653. package/connectors/connect-yousign/node_modules/typescript/lib/tsserver.js +8 -0
  654. package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
  655. package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.js +21 -0
  656. package/connectors/connect-yousign/node_modules/typescript/lib/typesMap.json +497 -0
  657. package/connectors/connect-yousign/node_modules/typescript/lib/typescript.d.ts +11437 -0
  658. package/connectors/connect-yousign/node_modules/typescript/lib/typescript.js +200276 -0
  659. package/connectors/connect-yousign/node_modules/typescript/lib/typingsInstaller.js +8 -0
  660. package/connectors/connect-yousign/node_modules/typescript/lib/watchGuard.js +53 -0
  661. package/connectors/connect-yousign/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
  662. package/connectors/connect-yousign/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
  663. package/connectors/connect-yousign/node_modules/typescript/package.json +120 -0
  664. package/connectors/connect-yousign/node_modules/undici-types/LICENSE +21 -0
  665. package/connectors/connect-yousign/node_modules/undici-types/README.md +6 -0
  666. package/connectors/connect-yousign/node_modules/undici-types/agent.d.ts +32 -0
  667. package/connectors/connect-yousign/node_modules/undici-types/api.d.ts +43 -0
  668. package/connectors/connect-yousign/node_modules/undici-types/balanced-pool.d.ts +30 -0
  669. package/connectors/connect-yousign/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  670. package/connectors/connect-yousign/node_modules/undici-types/cache.d.ts +36 -0
  671. package/connectors/connect-yousign/node_modules/undici-types/client-stats.d.ts +15 -0
  672. package/connectors/connect-yousign/node_modules/undici-types/client.d.ts +108 -0
  673. package/connectors/connect-yousign/node_modules/undici-types/connector.d.ts +34 -0
  674. package/connectors/connect-yousign/node_modules/undici-types/content-type.d.ts +21 -0
  675. package/connectors/connect-yousign/node_modules/undici-types/cookies.d.ts +30 -0
  676. package/connectors/connect-yousign/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  677. package/connectors/connect-yousign/node_modules/undici-types/dispatcher.d.ts +276 -0
  678. package/connectors/connect-yousign/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  679. package/connectors/connect-yousign/node_modules/undici-types/errors.d.ts +161 -0
  680. package/connectors/connect-yousign/node_modules/undici-types/eventsource.d.ts +66 -0
  681. package/connectors/connect-yousign/node_modules/undici-types/fetch.d.ts +211 -0
  682. package/connectors/connect-yousign/node_modules/undici-types/formdata.d.ts +108 -0
  683. package/connectors/connect-yousign/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  684. package/connectors/connect-yousign/node_modules/undici-types/global-origin.d.ts +7 -0
  685. package/connectors/connect-yousign/node_modules/undici-types/h2c-client.d.ts +73 -0
  686. package/connectors/connect-yousign/node_modules/undici-types/handlers.d.ts +15 -0
  687. package/connectors/connect-yousign/node_modules/undici-types/header.d.ts +160 -0
  688. package/connectors/connect-yousign/node_modules/undici-types/index.d.ts +88 -0
  689. package/connectors/connect-yousign/node_modules/undici-types/interceptors.d.ts +73 -0
  690. package/connectors/connect-yousign/node_modules/undici-types/mock-agent.d.ts +68 -0
  691. package/connectors/connect-yousign/node_modules/undici-types/mock-call-history.d.ts +111 -0
  692. package/connectors/connect-yousign/node_modules/undici-types/mock-client.d.ts +27 -0
  693. package/connectors/connect-yousign/node_modules/undici-types/mock-errors.d.ts +12 -0
  694. package/connectors/connect-yousign/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  695. package/connectors/connect-yousign/node_modules/undici-types/mock-pool.d.ts +27 -0
  696. package/connectors/connect-yousign/node_modules/undici-types/package.json +55 -0
  697. package/connectors/connect-yousign/node_modules/undici-types/patch.d.ts +29 -0
  698. package/connectors/connect-yousign/node_modules/undici-types/pool-stats.d.ts +19 -0
  699. package/connectors/connect-yousign/node_modules/undici-types/pool.d.ts +41 -0
  700. package/connectors/connect-yousign/node_modules/undici-types/proxy-agent.d.ts +29 -0
  701. package/connectors/connect-yousign/node_modules/undici-types/readable.d.ts +68 -0
  702. package/connectors/connect-yousign/node_modules/undici-types/retry-agent.d.ts +8 -0
  703. package/connectors/connect-yousign/node_modules/undici-types/retry-handler.d.ts +125 -0
  704. package/connectors/connect-yousign/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  705. package/connectors/connect-yousign/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  706. package/connectors/connect-yousign/node_modules/undici-types/util.d.ts +18 -0
  707. package/connectors/connect-yousign/node_modules/undici-types/utility.d.ts +7 -0
  708. package/connectors/connect-yousign/node_modules/undici-types/webidl.d.ts +341 -0
  709. package/connectors/connect-yousign/node_modules/undici-types/websocket.d.ts +186 -0
  710. package/dashboard/dist/assets/index-CSlS3oNV.css +1 -0
  711. package/dashboard/dist/assets/index-NCasN7x4.js +284 -0
  712. package/dashboard/dist/index.html +2 -2
  713. package/dist/index.js +66 -24
  714. package/dist/lib/runner.d.ts +15 -5
  715. package/package.json +2 -2
  716. package/connectors/connect-gmail/bin/index.js +0 -7027
  717. package/connectors/connect-gmail/dist/cli/index.js +0 -7035
  718. package/connectors/connect-gmail/dist/index.js +0 -2174
  719. package/dashboard/dist/assets/index-ClBXkNbL.css +0 -1
  720. package/dashboard/dist/assets/index-DvfmyAO4.js +0 -284
@@ -1,2174 +0,0 @@
1
- // @bun
2
- // src/types/index.ts
3
- class GmailApiError extends Error {
4
- statusCode;
5
- errors;
6
- constructor(message, statusCode, errors) {
7
- super(message);
8
- this.name = "GmailApiError";
9
- this.statusCode = statusCode;
10
- this.errors = errors;
11
- }
12
- }
13
-
14
- // src/utils/auth.ts
15
- import { createServer } from "http";
16
-
17
- // src/utils/config.ts
18
- import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, rmSync, renameSync, cpSync } from "fs";
19
- import { homedir } from "os";
20
- import { join } from "path";
21
- var DEFAULT_PROFILE = "default";
22
- var CURRENT_PROFILE_FILE = "current_profile";
23
- var PROFILES_DIR = "profiles";
24
- var profileOverride;
25
- function resolveBaseConfigDir() {
26
- return join(homedir(), ".connectors", "connect-gmail");
27
- }
28
- var BASE_CONFIG_DIR = resolveBaseConfigDir();
29
- function ensureBaseConfigDir() {
30
- if (!existsSync(BASE_CONFIG_DIR)) {
31
- mkdirSync(BASE_CONFIG_DIR, { recursive: true });
32
- }
33
- }
34
- function getProfilesDir() {
35
- return join(BASE_CONFIG_DIR, PROFILES_DIR);
36
- }
37
- function getCurrentProfileFile() {
38
- return join(BASE_CONFIG_DIR, CURRENT_PROFILE_FILE);
39
- }
40
- function migrateToProfileStructure() {
41
- const profilesDir = getProfilesDir();
42
- const defaultProfileDir = join(profilesDir, DEFAULT_PROFILE);
43
- if (existsSync(profilesDir)) {
44
- return;
45
- }
46
- const oldConfigFile = join(BASE_CONFIG_DIR, "config.json");
47
- const oldTokensFile = join(BASE_CONFIG_DIR, "tokens.json");
48
- const oldSettingsFile = join(BASE_CONFIG_DIR, "settings.json");
49
- const oldContactsDir = join(BASE_CONFIG_DIR, "contacts");
50
- const hasOldStructure = existsSync(oldConfigFile) || existsSync(oldTokensFile) || existsSync(oldSettingsFile) || existsSync(oldContactsDir);
51
- if (!hasOldStructure) {
52
- mkdirSync(profilesDir, { recursive: true });
53
- return;
54
- }
55
- mkdirSync(defaultProfileDir, { recursive: true });
56
- if (existsSync(oldConfigFile)) {
57
- renameSync(oldConfigFile, join(defaultProfileDir, "config.json"));
58
- }
59
- if (existsSync(oldTokensFile)) {
60
- renameSync(oldTokensFile, join(defaultProfileDir, "tokens.json"));
61
- }
62
- if (existsSync(oldSettingsFile)) {
63
- renameSync(oldSettingsFile, join(defaultProfileDir, "settings.json"));
64
- }
65
- if (existsSync(oldContactsDir)) {
66
- cpSync(oldContactsDir, join(defaultProfileDir, "contacts"), { recursive: true });
67
- rmSync(oldContactsDir, { recursive: true });
68
- }
69
- writeFileSync(getCurrentProfileFile(), DEFAULT_PROFILE);
70
- }
71
- function getCurrentProfile() {
72
- if (profileOverride) {
73
- return profileOverride;
74
- }
75
- ensureBaseConfigDir();
76
- migrateToProfileStructure();
77
- const currentProfileFile = getCurrentProfileFile();
78
- if (existsSync(currentProfileFile)) {
79
- try {
80
- const profile = readFileSync(currentProfileFile, "utf-8").trim();
81
- if (profile && profileExists(profile)) {
82
- return profile;
83
- }
84
- } catch {}
85
- }
86
- return DEFAULT_PROFILE;
87
- }
88
- function profileExists(profile) {
89
- const profileDir = join(getProfilesDir(), profile);
90
- return existsSync(profileDir);
91
- }
92
- function listProfiles() {
93
- ensureBaseConfigDir();
94
- migrateToProfileStructure();
95
- const profilesDir = getProfilesDir();
96
- if (!existsSync(profilesDir)) {
97
- return [];
98
- }
99
- return readdirSync(profilesDir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name).sort();
100
- }
101
- function resolveConfigDir() {
102
- ensureBaseConfigDir();
103
- migrateToProfileStructure();
104
- const profile = getCurrentProfile();
105
- const profileDir = join(getProfilesDir(), profile);
106
- if (!existsSync(profileDir)) {
107
- mkdirSync(profileDir, { recursive: true });
108
- }
109
- return profileDir;
110
- }
111
- function getConfigDirInternal() {
112
- return resolveConfigDir();
113
- }
114
- function getConfigDir() {
115
- return getConfigDirInternal();
116
- }
117
- function ensureConfigDir() {
118
- const configDir = getConfigDirInternal();
119
- if (!existsSync(configDir)) {
120
- mkdirSync(configDir, { recursive: true });
121
- }
122
- }
123
- function getExportsDir() {
124
- return join(getConfigDirInternal(), "exports");
125
- }
126
- function ensureExportsDir() {
127
- const dir = getExportsDir();
128
- if (!existsSync(dir)) {
129
- mkdirSync(dir, { recursive: true });
130
- }
131
- return dir;
132
- }
133
- function loadConfig() {
134
- ensureConfigDir();
135
- const configFile = join(getConfigDirInternal(), "config.json");
136
- if (!existsSync(configFile)) {
137
- return {};
138
- }
139
- try {
140
- const content = readFileSync(configFile, "utf-8");
141
- return JSON.parse(content);
142
- } catch {
143
- return {};
144
- }
145
- }
146
- function saveConfig(config) {
147
- ensureConfigDir();
148
- const configFile = join(getConfigDirInternal(), "config.json");
149
- writeFileSync(configFile, JSON.stringify(config, null, 2));
150
- }
151
- function loadBaseConfig() {
152
- ensureBaseConfigDir();
153
- const configFile = join(BASE_CONFIG_DIR, "credentials.json");
154
- if (!existsSync(configFile)) {
155
- const profiles = listProfiles();
156
- for (const profile of profiles) {
157
- const profileConfigFile = join(getProfilesDir(), profile, "config.json");
158
- if (existsSync(profileConfigFile)) {
159
- try {
160
- const content = readFileSync(profileConfigFile, "utf-8");
161
- const profileConfig = JSON.parse(content);
162
- if (profileConfig.clientId && profileConfig.clientSecret) {
163
- writeFileSync(configFile, JSON.stringify({
164
- clientId: profileConfig.clientId,
165
- clientSecret: profileConfig.clientSecret
166
- }, null, 2));
167
- return { clientId: profileConfig.clientId, clientSecret: profileConfig.clientSecret };
168
- }
169
- } catch {}
170
- }
171
- }
172
- return {};
173
- }
174
- try {
175
- const content = readFileSync(configFile, "utf-8");
176
- return JSON.parse(content);
177
- } catch {
178
- return {};
179
- }
180
- }
181
- function getClientId() {
182
- return process.env.GMAIL_CLIENT_ID || loadBaseConfig().clientId;
183
- }
184
- function getClientSecret() {
185
- return process.env.GMAIL_CLIENT_SECRET || loadBaseConfig().clientSecret;
186
- }
187
- function loadTokens() {
188
- ensureConfigDir();
189
- const tokensFile = join(getConfigDirInternal(), "tokens.json");
190
- if (!existsSync(tokensFile)) {
191
- return null;
192
- }
193
- try {
194
- const content = readFileSync(tokensFile, "utf-8");
195
- return JSON.parse(content);
196
- } catch {
197
- return null;
198
- }
199
- }
200
- function saveTokens(tokens) {
201
- ensureConfigDir();
202
- const tokensFile = join(getConfigDirInternal(), "tokens.json");
203
- writeFileSync(tokensFile, JSON.stringify(tokens, null, 2), { mode: 384 });
204
- }
205
- function getUserEmail() {
206
- return loadConfig().userEmail;
207
- }
208
- function getUserName() {
209
- return loadConfig().userName;
210
- }
211
- function getFormattedSender() {
212
- const email = getUserEmail();
213
- const name = getUserName();
214
- if (!email) {
215
- throw new Error("User email not configured");
216
- }
217
- if (name) {
218
- return `"${name}" <${email}>`;
219
- }
220
- return email;
221
- }
222
- function clearTokens() {
223
- const tokensFile = join(getConfigDirInternal(), "tokens.json");
224
- if (existsSync(tokensFile)) {
225
- writeFileSync(tokensFile, "{}");
226
- }
227
- }
228
- function clearConfig() {
229
- saveConfig({});
230
- clearTokens();
231
- }
232
- function isAuthenticated() {
233
- const tokens = loadTokens();
234
- return tokens !== null && tokens.accessToken !== undefined && tokens.refreshToken !== undefined;
235
- }
236
-
237
- // src/utils/auth.ts
238
- var GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
239
- var GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
240
- var GMAIL_SCOPES = [
241
- "https://www.googleapis.com/auth/gmail.readonly",
242
- "https://www.googleapis.com/auth/gmail.send",
243
- "https://www.googleapis.com/auth/gmail.compose",
244
- "https://www.googleapis.com/auth/gmail.modify",
245
- "https://www.googleapis.com/auth/gmail.labels",
246
- "https://www.googleapis.com/auth/gmail.settings.basic",
247
- "https://mail.google.com/"
248
- ].join(" ");
249
- var REDIRECT_PORT = 8089;
250
- var REDIRECT_URI = `http://127.0.0.1:${REDIRECT_PORT}`;
251
- function getAuthUrl() {
252
- const clientId = getClientId();
253
- if (!clientId) {
254
- throw new Error('Client ID not configured. Run "connect-gmail config set-credentials" first.');
255
- }
256
- const params = new URLSearchParams({
257
- client_id: clientId,
258
- redirect_uri: REDIRECT_URI,
259
- response_type: "code",
260
- scope: GMAIL_SCOPES,
261
- access_type: "offline",
262
- prompt: "consent"
263
- });
264
- return `${GOOGLE_AUTH_URL}?${params.toString()}`;
265
- }
266
- async function exchangeCodeForTokens(code) {
267
- const clientId = getClientId();
268
- const clientSecret = getClientSecret();
269
- if (!clientId || !clientSecret) {
270
- throw new Error("OAuth credentials not configured");
271
- }
272
- const response = await fetch(GOOGLE_TOKEN_URL, {
273
- method: "POST",
274
- headers: {
275
- "Content-Type": "application/x-www-form-urlencoded"
276
- },
277
- body: new URLSearchParams({
278
- code,
279
- client_id: clientId,
280
- client_secret: clientSecret,
281
- redirect_uri: REDIRECT_URI,
282
- grant_type: "authorization_code"
283
- })
284
- });
285
- if (!response.ok) {
286
- const errorText = await response.text();
287
- let errorMessage = `Token exchange failed: ${response.status} ${response.statusText}`;
288
- try {
289
- const error = JSON.parse(errorText);
290
- errorMessage = `Token exchange failed: ${error.error_description || error.error || response.statusText}`;
291
- console.error("Token exchange error details:", error);
292
- } catch {
293
- errorMessage = `Token exchange failed: ${errorText || response.statusText}`;
294
- }
295
- throw new Error(errorMessage);
296
- }
297
- const data = await response.json();
298
- const tokens = {
299
- accessToken: data.access_token,
300
- refreshToken: data.refresh_token,
301
- expiresAt: Date.now() + data.expires_in * 1000,
302
- tokenType: data.token_type,
303
- scope: data.scope
304
- };
305
- return tokens;
306
- }
307
- async function refreshTokens(clientId, clientSecret, refreshToken, currentScope) {
308
- const response = await fetch(GOOGLE_TOKEN_URL, {
309
- method: "POST",
310
- headers: {
311
- "Content-Type": "application/x-www-form-urlencoded"
312
- },
313
- body: new URLSearchParams({
314
- client_id: clientId,
315
- client_secret: clientSecret,
316
- refresh_token: refreshToken,
317
- grant_type: "refresh_token"
318
- })
319
- });
320
- if (!response.ok) {
321
- let errorMessage = `Token refresh failed: ${response.status} ${response.statusText}`;
322
- try {
323
- const errorBody = await response.json();
324
- const detail = errorBody.error_description || errorBody.error;
325
- if (detail) {
326
- errorMessage = `Token refresh failed: ${detail}. Please run "connect-gmail auth login" again.`;
327
- }
328
- } catch {}
329
- throw new Error(errorMessage);
330
- }
331
- const data = await response.json();
332
- return {
333
- accessToken: data.access_token,
334
- refreshToken,
335
- expiresAt: Date.now() + data.expires_in * 1000,
336
- tokenType: data.token_type,
337
- scope: data.scope || currentScope || ""
338
- };
339
- }
340
- async function refreshAccessToken() {
341
- const clientId = getClientId();
342
- const clientSecret = getClientSecret();
343
- const currentTokens = loadTokens();
344
- if (!clientId || !clientSecret) {
345
- throw new Error("OAuth credentials not configured");
346
- }
347
- if (!currentTokens?.refreshToken) {
348
- throw new Error("No refresh token available. Please login again.");
349
- }
350
- const tokens = await refreshTokens(clientId, clientSecret, currentTokens.refreshToken, currentTokens.scope);
351
- saveTokens(tokens);
352
- return tokens;
353
- }
354
- function startCallbackServer() {
355
- return new Promise((resolve) => {
356
- const server = createServer(async (req, res) => {
357
- const url = new URL(req.url || "", `http://127.0.0.1:${REDIRECT_PORT}`);
358
- if (url.pathname === "/" || url.pathname === "/callback") {
359
- const code = url.searchParams.get("code");
360
- const error = url.searchParams.get("error");
361
- if (error) {
362
- res.writeHead(200, { "Content-Type": "text/html" });
363
- res.end(`
364
- <html>
365
- <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
366
- <div style="text-align: center;">
367
- <h1 style="color: #dc3545;">Authentication Failed</h1>
368
- <p>Error: ${error}</p>
369
- <p>You can close this window.</p>
370
- </div>
371
- </body>
372
- </html>
373
- `);
374
- server.close();
375
- resolve({ success: false, error });
376
- return;
377
- }
378
- if (code) {
379
- try {
380
- const tokens = await exchangeCodeForTokens(code);
381
- res.writeHead(200, { "Content-Type": "text/html" });
382
- res.end(`
383
- <html>
384
- <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
385
- <div style="text-align: center;">
386
- <h1 style="color: #28a745;">Authentication Successful!</h1>
387
- <p>You can close this window and return to the terminal.</p>
388
- </div>
389
- </body>
390
- </html>
391
- `);
392
- server.close();
393
- resolve({ success: true, tokens });
394
- } catch (err) {
395
- res.writeHead(200, { "Content-Type": "text/html" });
396
- res.end(`
397
- <html>
398
- <body style="font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
399
- <div style="text-align: center;">
400
- <h1 style="color: #dc3545;">Authentication Failed</h1>
401
- <p>Error: ${String(err)}</p>
402
- <p>You can close this window.</p>
403
- </div>
404
- </body>
405
- </html>
406
- `);
407
- server.close();
408
- resolve({ success: false, error: String(err) });
409
- }
410
- }
411
- }
412
- });
413
- server.listen(REDIRECT_PORT, () => {});
414
- setTimeout(() => {
415
- server.close();
416
- resolve({ success: false, error: "Authentication timed out" });
417
- }, 5 * 60 * 1000);
418
- });
419
- }
420
- async function getValidAccessToken() {
421
- const tokens = loadTokens();
422
- if (!tokens) {
423
- throw new Error('Not authenticated. Run "connect-gmail auth login" first.');
424
- }
425
- if (Date.now() >= tokens.expiresAt - 5 * 60 * 1000) {
426
- const newTokens = await refreshAccessToken();
427
- return newTokens.accessToken;
428
- }
429
- return tokens.accessToken;
430
- }
431
-
432
- // src/api/client.ts
433
- var GMAIL_API_BASE = "https://gmail.googleapis.com/gmail/v1";
434
-
435
- class GmailClient {
436
- accessToken;
437
- userId = "me";
438
- tokenProvider;
439
- constructor(options) {
440
- this.tokenProvider = options?.tokenProvider;
441
- }
442
- setUserId(userId) {
443
- this.userId = userId;
444
- }
445
- getUserId() {
446
- return this.userId;
447
- }
448
- buildUrl(path, params) {
449
- const url = new URL(`${GMAIL_API_BASE}${path}`);
450
- if (params) {
451
- Object.entries(params).forEach(([key, value]) => {
452
- if (value !== undefined && value !== null && value !== "") {
453
- url.searchParams.append(key, String(value));
454
- }
455
- });
456
- }
457
- return url.toString();
458
- }
459
- async request(path, options = {}) {
460
- const { method = "GET", params, body, headers = {} } = options;
461
- const accessToken = this.tokenProvider ? await this.tokenProvider() : await getValidAccessToken();
462
- const url = this.buildUrl(path, params);
463
- const requestHeaders = {
464
- Authorization: `Bearer ${accessToken}`,
465
- Accept: "application/json",
466
- ...headers
467
- };
468
- if (body && ["POST", "PUT", "PATCH"].includes(method)) {
469
- if (typeof body === "string") {
470
- requestHeaders["Content-Type"] = "message/rfc822";
471
- } else {
472
- requestHeaders["Content-Type"] = "application/json";
473
- }
474
- }
475
- const fetchOptions = {
476
- method,
477
- headers: requestHeaders
478
- };
479
- if (body && ["POST", "PUT", "PATCH"].includes(method)) {
480
- fetchOptions.body = typeof body === "string" ? body : JSON.stringify(body);
481
- }
482
- const response = await fetch(url, fetchOptions);
483
- if (response.status === 204) {
484
- return {};
485
- }
486
- let data;
487
- const contentType = response.headers.get("content-type") || "";
488
- if (contentType.includes("application/json")) {
489
- const text = await response.text();
490
- if (text) {
491
- try {
492
- data = JSON.parse(text);
493
- } catch {
494
- data = text;
495
- }
496
- }
497
- } else {
498
- data = await response.text();
499
- }
500
- if (!response.ok) {
501
- const errorData = data;
502
- const errorMessage = errorData?.error?.message || String(data || response.statusText);
503
- throw new GmailApiError(errorMessage, response.status, errorData?.error?.errors);
504
- }
505
- return data;
506
- }
507
- async get(path, params) {
508
- return this.request(path, { method: "GET", params });
509
- }
510
- async post(path, body, params) {
511
- return this.request(path, { method: "POST", body, params });
512
- }
513
- async put(path, body, params) {
514
- return this.request(path, { method: "PUT", body, params });
515
- }
516
- async patch(path, body, params) {
517
- return this.request(path, { method: "PATCH", body, params });
518
- }
519
- async delete(path, params) {
520
- return this.request(path, { method: "DELETE", params });
521
- }
522
- }
523
-
524
- // src/utils/contacts.ts
525
- import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2, readdirSync as readdirSync2, unlinkSync } from "fs";
526
- import { join as join2 } from "path";
527
- function getContactsDir() {
528
- const dir = join2(getConfigDir(), "contacts");
529
- if (!existsSync2(dir)) {
530
- mkdirSync2(dir, { recursive: true });
531
- }
532
- return dir;
533
- }
534
- function emailToFilename(email) {
535
- return email.toLowerCase().replace(/[^a-z0-9]/g, "_") + ".json";
536
- }
537
- function getContact(email) {
538
- const contactsDir = getContactsDir();
539
- const filename = emailToFilename(email);
540
- const filepath = join2(contactsDir, filename);
541
- if (!existsSync2(filepath)) {
542
- return null;
543
- }
544
- try {
545
- const content = readFileSync2(filepath, "utf-8");
546
- return JSON.parse(content);
547
- } catch {
548
- return null;
549
- }
550
- }
551
- function formatEmailWithName(email, fallbackName) {
552
- const contact = getContact(email);
553
- let displayName = fallbackName;
554
- if (contact) {
555
- if (contact.name) {
556
- displayName = contact.name;
557
- } else if (contact.firstName || contact.lastName) {
558
- displayName = [contact.firstName, contact.lastName].filter(Boolean).join(" ");
559
- }
560
- }
561
- if (displayName) {
562
- return `"${displayName}" <${email}>`;
563
- }
564
- return email;
565
- }
566
-
567
- // src/utils/markdown.ts
568
- function markdownToHtml(markdown) {
569
- let html = markdown;
570
- html = html.replace(/&(?!amp;|lt;|gt;|quot;|#)/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
571
- html = html.replace(/^### (.+)$/gm, "<h3>$1</h3>");
572
- html = html.replace(/^## (.+)$/gm, "<h2>$1</h2>");
573
- html = html.replace(/^# (.+)$/gm, "<h1>$1</h1>");
574
- html = html.replace(/^(-{3,}|\*{3,}|_{3,})$/gm, "<hr>");
575
- html = html.replace(/\*\*\*(.+?)\*\*\*/g, "<strong><em>$1</em></strong>");
576
- html = html.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>");
577
- html = html.replace(/\*(.+?)\*/g, "<em>$1</em>");
578
- html = html.replace(/___(.+?)___/g, "<strong><em>$1</em></strong>");
579
- html = html.replace(/__(.+?)__/g, "<strong>$1</strong>");
580
- html = html.replace(/_(.+?)_/g, "<em>$1</em>");
581
- html = html.replace(/~~(.+?)~~/g, "<del>$1</del>");
582
- html = html.replace(/`([^`]+)`/g, '<code style="background:#f4f4f4;padding:2px 4px;border-radius:3px;">$1</code>');
583
- html = html.replace(/```(\w*)\n([\s\S]*?)```/g, (_, lang, code) => {
584
- return `<pre style="background:#f4f4f4;padding:12px;border-radius:4px;overflow-x:auto;"><code>${code.trim()}</code></pre>`;
585
- });
586
- html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" style="color:#1a73e8;">$1</a>');
587
- html = html.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<img src="$2" alt="$1" style="max-width:100%;">');
588
- html = html.replace(/^> (.+)$/gm, '<blockquote style="border-left:4px solid #ddd;margin:0;padding-left:16px;color:#666;">$1</blockquote>');
589
- html = html.replace(/^[\*\-] (.+)$/gm, '<li style="margin:0;padding:0;">$1</li>');
590
- html = html.replace(/(<li style[^>]*>.*?<\/li>\n?)+/g, '<ul style="margin:4px 0;padding-left:20px;">$&</ul>');
591
- html = html.replace(/^\d+\. (.+)$/gm, '<li style="margin:0;padding:0;">$1</li>');
592
- html = html.replace(/\n\n+/g, "</p><p>");
593
- html = `<p>${html}</p>`;
594
- html = html.replace(/<\/li>\n<li/g, "</li><li");
595
- html = html.replace(/<\/li>\n<\/ul>/g, "</li></ul>");
596
- html = html.replace(/\n/g, "<br>");
597
- html = html.replace(/<p><\/p>/g, "");
598
- html = html.replace(/<p>(<h[1-6]>)/g, "$1");
599
- html = html.replace(/(<\/h[1-6]>)<\/p>/g, "$1");
600
- html = html.replace(/<p>(<ul)/g, "$1");
601
- html = html.replace(/(<\/ul>)<\/p>/g, "$1");
602
- html = html.replace(/<p>(<pre)/g, "$1");
603
- html = html.replace(/(<\/pre>)<\/p>/g, "$1");
604
- html = html.replace(/<p>(<blockquote)/g, "$1");
605
- html = html.replace(/(<\/blockquote>)<\/p>/g, "$1");
606
- html = html.replace(/<p><hr><\/p>/g, "<hr>");
607
- return html;
608
- }
609
- function wrapInEmailTemplate(html) {
610
- return `<!DOCTYPE html>
611
- <html>
612
- <head>
613
- <meta charset="UTF-8">
614
- <style>
615
- ul, ol { margin: 4px 0; padding-left: 20px; }
616
- li { margin: 0; padding: 0; line-height: 1.5; }
617
- p { margin: 0 0 8px 0; }
618
- </style>
619
- </head>
620
- <body style="font-family:Arial,sans-serif;font-size:14px;line-height:1.6;color:#202124;">
621
- ${html}
622
- </body>
623
- </html>`;
624
- }
625
- function looksLikeMarkdown(text) {
626
- const markdownPatterns = [
627
- /^#{1,6} /m,
628
- /\*\*.+\*\*/,
629
- /\[.+\]\(.+\)/,
630
- /^[\*\-] /m,
631
- /^\d+\. /m,
632
- /```/,
633
- /^> /m
634
- ];
635
- return markdownPatterns.some((pattern) => pattern.test(text));
636
- }
637
-
638
- // src/utils/settings.ts
639
- import { existsSync as existsSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync3 } from "fs";
640
- import { join as join3 } from "path";
641
- var DEFAULT_SETTINGS = {
642
- appendSignature: true,
643
- appendSignatureToReplies: false,
644
- markdownEnabled: true,
645
- defaultFormat: "pretty",
646
- defaultSendAsHtml: true
647
- };
648
- function getSettingsPath() {
649
- return join3(getConfigDir(), "settings.json");
650
- }
651
- function loadSettings() {
652
- ensureConfigDir();
653
- const filepath = getSettingsPath();
654
- if (!existsSync3(filepath)) {
655
- saveSettings(DEFAULT_SETTINGS);
656
- return DEFAULT_SETTINGS;
657
- }
658
- try {
659
- const content = readFileSync3(filepath, "utf-8");
660
- const loaded = JSON.parse(content);
661
- return { ...DEFAULT_SETTINGS, ...loaded };
662
- } catch {
663
- return DEFAULT_SETTINGS;
664
- }
665
- }
666
- function saveSettings(settings) {
667
- ensureConfigDir();
668
- const filepath = getSettingsPath();
669
- writeFileSync3(filepath, JSON.stringify(settings, null, 2));
670
- }
671
- function getSignature() {
672
- return loadSettings().signature;
673
- }
674
- function shouldAppendSignature(isReply = false) {
675
- const settings = loadSettings();
676
- if (isReply) {
677
- return settings.appendSignatureToReplies;
678
- }
679
- return settings.appendSignature;
680
- }
681
-
682
- // src/api/messages.ts
683
- function encodeHeaderValue(value) {
684
- if (!/[^\x00-\x7F]/.test(value)) {
685
- return value;
686
- }
687
- const encoded = Buffer.from(value, "utf-8").toString("base64");
688
- return `=?UTF-8?B?${encoded}?=`;
689
- }
690
- function htmlToPlainText(html) {
691
- return html.replace(/<br\s*\/?>/gi, `
692
- `).replace(/<\/p>/gi, `
693
-
694
- `).replace(/<\/div>/gi, `
695
- `).replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/\n{3,}/g, `
696
-
697
- `).trim();
698
- }
699
-
700
- class MessagesApi {
701
- client;
702
- constructor(client) {
703
- this.client = client;
704
- }
705
- async list(options = {}) {
706
- const params = {
707
- maxResults: options.maxResults || 10,
708
- pageToken: options.pageToken,
709
- q: options.q,
710
- includeSpamTrash: options.includeSpamTrash
711
- };
712
- if (options.labelIds && options.labelIds.length > 0) {
713
- params.labelIds = options.labelIds.join(",");
714
- }
715
- return this.client.get(`/users/${this.client.getUserId()}/messages`, params);
716
- }
717
- async get(messageId, format = "full") {
718
- return this.client.get(`/users/${this.client.getUserId()}/messages/${messageId}`, { format });
719
- }
720
- async send(options) {
721
- const message = this.buildRawMessage(options);
722
- const encodedMessage = Buffer.from(message).toString("base64url");
723
- const body = {
724
- raw: encodedMessage
725
- };
726
- if (options.threadId) {
727
- body.threadId = options.threadId;
728
- }
729
- return this.client.post(`/users/${this.client.getUserId()}/messages/send`, body);
730
- }
731
- async reply(messageId, options) {
732
- const original = await this.get(messageId, "full");
733
- const headers = original.payload?.headers || [];
734
- const getHeader = (name) => headers.find((h) => h.name.toLowerCase() === name.toLowerCase())?.value || "";
735
- const originalFrom = getHeader("From");
736
- const originalTo = getHeader("To");
737
- const originalSubject = getHeader("Subject");
738
- const originalMessageId = getHeader("Message-ID") || getHeader("Message-Id");
739
- const originalReferences = getHeader("References");
740
- const myEmail = getUserEmail();
741
- let replyTo = originalFrom;
742
- if (originalFrom.includes(myEmail || "")) {
743
- replyTo = originalTo;
744
- }
745
- let references = originalReferences ? `${originalReferences} ${originalMessageId}` : originalMessageId;
746
- let subject = originalSubject;
747
- if (!subject.toLowerCase().startsWith("re:")) {
748
- subject = `Re: ${subject}`;
749
- }
750
- const message = this.buildRawMessage({
751
- to: replyTo,
752
- cc: options.cc,
753
- bcc: options.bcc,
754
- subject,
755
- body: options.body,
756
- isHtml: options.isHtml,
757
- threadId: original.threadId,
758
- inReplyTo: originalMessageId,
759
- references,
760
- isReply: true
761
- });
762
- const encodedMessage = Buffer.from(message).toString("base64url");
763
- return this.client.post(`/users/${this.client.getUserId()}/messages/send`, {
764
- raw: encodedMessage,
765
- threadId: original.threadId
766
- });
767
- }
768
- async trash(messageId) {
769
- return this.client.post(`/users/${this.client.getUserId()}/messages/${messageId}/trash`);
770
- }
771
- async untrash(messageId) {
772
- return this.client.post(`/users/${this.client.getUserId()}/messages/${messageId}/untrash`);
773
- }
774
- async delete(messageId) {
775
- await this.client.delete(`/users/${this.client.getUserId()}/messages/${messageId}`);
776
- }
777
- async modify(messageId, addLabelIds, removeLabelIds) {
778
- return this.client.post(`/users/${this.client.getUserId()}/messages/${messageId}/modify`, {
779
- addLabelIds: addLabelIds || [],
780
- removeLabelIds: removeLabelIds || []
781
- });
782
- }
783
- async addLabel(messageId, labelId) {
784
- return this.modify(messageId, [labelId], undefined);
785
- }
786
- async removeLabel(messageId, labelId) {
787
- return this.modify(messageId, undefined, [labelId]);
788
- }
789
- async addLabels(messageId, labelIds) {
790
- return this.modify(messageId, labelIds, undefined);
791
- }
792
- async removeLabels(messageId, labelIds) {
793
- return this.modify(messageId, undefined, labelIds);
794
- }
795
- async markAsRead(messageId) {
796
- return this.modify(messageId, undefined, ["UNREAD"]);
797
- }
798
- async markAsUnread(messageId) {
799
- return this.modify(messageId, ["UNREAD"]);
800
- }
801
- async star(messageId) {
802
- return this.modify(messageId, ["STARRED"]);
803
- }
804
- async unstar(messageId) {
805
- return this.modify(messageId, undefined, ["STARRED"]);
806
- }
807
- async archive(messageId) {
808
- return this.modify(messageId, undefined, ["INBOX"]);
809
- }
810
- buildRawMessage(options) {
811
- const settings = loadSettings();
812
- const isReply = options.isReply || !!options.inReplyTo;
813
- const formatAddresses = (addresses) => {
814
- const addrs = Array.isArray(addresses) ? addresses : [addresses];
815
- return addrs.map((addr) => {
816
- if (addr.includes("<") && addr.includes(">")) {
817
- return addr;
818
- }
819
- return formatEmailWithName(addr);
820
- }).join(", ");
821
- };
822
- const to = formatAddresses(options.to);
823
- const cc = options.cc ? formatAddresses(options.cc) : "";
824
- const bcc = options.bcc ? formatAddresses(options.bcc) : "";
825
- let body = options.body;
826
- let isHtml = options.isHtml || false;
827
- if (settings.markdownEnabled && !isHtml && looksLikeMarkdown(body)) {
828
- body = markdownToHtml(body);
829
- isHtml = true;
830
- }
831
- if (shouldAppendSignature(isReply)) {
832
- const signature = getSignature();
833
- if (signature) {
834
- if (!isHtml) {
835
- body = body.replace(/\n/g, "<br>");
836
- isHtml = true;
837
- }
838
- body += `<br><br>${signature}`;
839
- }
840
- }
841
- let from;
842
- try {
843
- from = getFormattedSender();
844
- } catch {
845
- from = getUserEmail() || "";
846
- }
847
- let message = "";
848
- message += `From: ${from}\r
849
- `;
850
- message += `To: ${to}\r
851
- `;
852
- if (cc)
853
- message += `Cc: ${cc}\r
854
- `;
855
- if (bcc)
856
- message += `Bcc: ${bcc}\r
857
- `;
858
- message += `Subject: ${encodeHeaderValue(options.subject)}\r
859
- `;
860
- if (options.inReplyTo) {
861
- message += `In-Reply-To: ${options.inReplyTo}\r
862
- `;
863
- }
864
- if (options.references) {
865
- message += `References: ${options.references}\r
866
- `;
867
- }
868
- message += `MIME-Version: 1.0\r
869
- `;
870
- const mixedBoundary = `mixed_${Date.now()}`;
871
- const altBoundary = `alt_${Date.now()}`;
872
- if (options.attachments && options.attachments.length > 0) {
873
- message += `Content-Type: multipart/mixed; boundary="${mixedBoundary}"\r
874
- \r
875
- `;
876
- message += `--${mixedBoundary}\r
877
- `;
878
- if (isHtml) {
879
- const htmlBody = wrapInEmailTemplate(body);
880
- const plainBody = htmlToPlainText(body);
881
- message += `Content-Type: multipart/alternative; boundary="${altBoundary}"\r
882
- \r
883
- `;
884
- message += `--${altBoundary}\r
885
- `;
886
- message += `Content-Type: text/plain; charset="UTF-8"\r
887
- \r
888
- `;
889
- message += `${plainBody}\r
890
- `;
891
- message += `--${altBoundary}\r
892
- `;
893
- message += `Content-Type: text/html; charset="UTF-8"\r
894
- \r
895
- `;
896
- message += `${htmlBody}\r
897
- `;
898
- message += `--${altBoundary}--\r
899
- `;
900
- } else {
901
- message += `Content-Type: text/plain; charset="UTF-8"\r
902
- \r
903
- `;
904
- message += `${body}\r
905
- `;
906
- }
907
- for (const attachment of options.attachments) {
908
- message += `--${mixedBoundary}\r
909
- `;
910
- message += `Content-Type: ${attachment.mimeType}; name="${attachment.filename}"\r
911
- `;
912
- message += `Content-Disposition: attachment; filename="${attachment.filename}"\r
913
- `;
914
- message += `Content-Transfer-Encoding: base64\r
915
- \r
916
- `;
917
- message += `${attachment.data}\r
918
- `;
919
- }
920
- message += `--${mixedBoundary}--`;
921
- } else if (isHtml) {
922
- const htmlBody = wrapInEmailTemplate(body);
923
- const plainBody = htmlToPlainText(body);
924
- message += `Content-Type: multipart/alternative; boundary="${altBoundary}"\r
925
- \r
926
- `;
927
- message += `--${altBoundary}\r
928
- `;
929
- message += `Content-Type: text/plain; charset="UTF-8"\r
930
- \r
931
- `;
932
- message += `${plainBody}\r
933
- `;
934
- message += `--${altBoundary}\r
935
- `;
936
- message += `Content-Type: text/html; charset="UTF-8"\r
937
- \r
938
- `;
939
- message += `${htmlBody}\r
940
- `;
941
- message += `--${altBoundary}--`;
942
- } else {
943
- message += `Content-Type: text/plain; charset="UTF-8"\r
944
- \r
945
- `;
946
- message += body;
947
- }
948
- return message;
949
- }
950
- extractBody(message, preferHtml = false) {
951
- if (!message.payload)
952
- return "";
953
- const targetType = preferHtml ? "text/html" : "text/plain";
954
- const getBaseMime = (mimeType) => {
955
- if (!mimeType)
956
- return "";
957
- return mimeType.split(";")[0].trim().toLowerCase();
958
- };
959
- const collectTextParts = (part, results = []) => {
960
- if (part.body?.data && part.mimeType) {
961
- const baseMime = getBaseMime(part.mimeType);
962
- if (baseMime.startsWith("text/")) {
963
- results.push({
964
- mimeType: baseMime,
965
- data: Buffer.from(part.body.data, "base64url").toString("utf-8")
966
- });
967
- }
968
- }
969
- if (part.parts) {
970
- for (const p of part.parts) {
971
- collectTextParts(p, results);
972
- }
973
- }
974
- return results;
975
- };
976
- const textParts = collectTextParts(message.payload);
977
- const exactMatch = textParts.find((p) => p.mimeType === targetType);
978
- if (exactMatch) {
979
- return exactMatch.data;
980
- }
981
- const altMatch = textParts.find((p) => p.mimeType.startsWith("text/"));
982
- return altMatch?.data || "";
983
- }
984
- extractInlineImages(message) {
985
- if (!message.payload)
986
- return [];
987
- const images = [];
988
- const collectImages = (part) => {
989
- if (part.body?.data && part.mimeType?.startsWith("image/")) {
990
- const contentIdHeader = part.headers?.find((h) => h.name.toLowerCase() === "content-id");
991
- if (contentIdHeader) {
992
- const contentId = contentIdHeader.value.replace(/^<|>$/g, "");
993
- images.push({
994
- contentId,
995
- mimeType: part.mimeType,
996
- data: part.body.data
997
- });
998
- }
999
- }
1000
- if (part.parts) {
1001
- for (const p of part.parts) {
1002
- collectImages(p);
1003
- }
1004
- }
1005
- };
1006
- collectImages(message.payload);
1007
- return images;
1008
- }
1009
- getMessageStructure(message) {
1010
- if (!message.payload)
1011
- return {};
1012
- const buildStructure = (part, depth = 0) => {
1013
- const result = {
1014
- mimeType: part.mimeType,
1015
- size: part.body?.size || 0,
1016
- hasData: !!part.body?.data,
1017
- hasAttachmentId: !!part.body?.attachmentId
1018
- };
1019
- if (part.filename) {
1020
- result.filename = part.filename;
1021
- }
1022
- const contentIdHeader = part.headers?.find((h) => h.name.toLowerCase() === "content-id");
1023
- if (contentIdHeader) {
1024
- result.contentId = contentIdHeader.value;
1025
- }
1026
- if (part.parts && part.parts.length > 0) {
1027
- result.parts = part.parts.map((p) => buildStructure(p, depth + 1));
1028
- }
1029
- return result;
1030
- };
1031
- return buildStructure(message.payload);
1032
- }
1033
- }
1034
-
1035
- // src/api/labels.ts
1036
- class LabelsApi {
1037
- client;
1038
- constructor(client) {
1039
- this.client = client;
1040
- }
1041
- async list() {
1042
- return this.client.get(`/users/${this.client.getUserId()}/labels`);
1043
- }
1044
- async get(labelId) {
1045
- return this.client.get(`/users/${this.client.getUserId()}/labels/${labelId}`);
1046
- }
1047
- async create(options) {
1048
- const body = {
1049
- name: options.name
1050
- };
1051
- if (options.messageListVisibility) {
1052
- body.messageListVisibility = options.messageListVisibility;
1053
- }
1054
- if (options.labelListVisibility) {
1055
- body.labelListVisibility = options.labelListVisibility;
1056
- }
1057
- if (options.backgroundColor || options.textColor) {
1058
- body.color = {
1059
- backgroundColor: options.backgroundColor,
1060
- textColor: options.textColor
1061
- };
1062
- }
1063
- return this.client.post(`/users/${this.client.getUserId()}/labels`, body);
1064
- }
1065
- async update(labelId, options) {
1066
- const body = {
1067
- id: labelId
1068
- };
1069
- if (options.name) {
1070
- body.name = options.name;
1071
- }
1072
- if (options.messageListVisibility) {
1073
- body.messageListVisibility = options.messageListVisibility;
1074
- }
1075
- if (options.labelListVisibility) {
1076
- body.labelListVisibility = options.labelListVisibility;
1077
- }
1078
- if (options.backgroundColor || options.textColor) {
1079
- body.color = {
1080
- backgroundColor: options.backgroundColor,
1081
- textColor: options.textColor
1082
- };
1083
- }
1084
- return this.client.patch(`/users/${this.client.getUserId()}/labels/${labelId}`, body);
1085
- }
1086
- async delete(labelId) {
1087
- await this.client.delete(`/users/${this.client.getUserId()}/labels/${labelId}`);
1088
- }
1089
- async getByName(name) {
1090
- const { labels } = await this.list();
1091
- return labels.find((label) => label.name.toLowerCase() === name.toLowerCase());
1092
- }
1093
- }
1094
-
1095
- // src/api/threads.ts
1096
- class ThreadsApi {
1097
- client;
1098
- constructor(client) {
1099
- this.client = client;
1100
- }
1101
- async list(options = {}) {
1102
- const params = {
1103
- maxResults: options.maxResults || 10,
1104
- pageToken: options.pageToken,
1105
- q: options.q,
1106
- includeSpamTrash: options.includeSpamTrash
1107
- };
1108
- if (options.labelIds && options.labelIds.length > 0) {
1109
- params.labelIds = options.labelIds.join(",");
1110
- }
1111
- return this.client.get(`/users/${this.client.getUserId()}/threads`, params);
1112
- }
1113
- async get(threadId, format = "full") {
1114
- return this.client.get(`/users/${this.client.getUserId()}/threads/${threadId}`, { format });
1115
- }
1116
- async trash(threadId) {
1117
- return this.client.post(`/users/${this.client.getUserId()}/threads/${threadId}/trash`);
1118
- }
1119
- async untrash(threadId) {
1120
- return this.client.post(`/users/${this.client.getUserId()}/threads/${threadId}/untrash`);
1121
- }
1122
- async delete(threadId) {
1123
- await this.client.delete(`/users/${this.client.getUserId()}/threads/${threadId}`);
1124
- }
1125
- async modify(threadId, addLabelIds, removeLabelIds) {
1126
- return this.client.post(`/users/${this.client.getUserId()}/threads/${threadId}/modify`, {
1127
- addLabelIds: addLabelIds || [],
1128
- removeLabelIds: removeLabelIds || []
1129
- });
1130
- }
1131
- }
1132
-
1133
- // src/api/profile.ts
1134
- class ProfileApi {
1135
- client;
1136
- constructor(client) {
1137
- this.client = client;
1138
- }
1139
- async get() {
1140
- return this.client.get(`/users/${this.client.getUserId()}/profile`);
1141
- }
1142
- async listSendAs() {
1143
- return this.client.get(`/users/${this.client.getUserId()}/settings/sendAs`);
1144
- }
1145
- async getSendAs(sendAsEmail) {
1146
- return this.client.get(`/users/${this.client.getUserId()}/settings/sendAs/${sendAsEmail}`);
1147
- }
1148
- async getPrimarySendAs() {
1149
- const { sendAs } = await this.listSendAs();
1150
- return sendAs.find((s) => s.isPrimary || s.isDefault);
1151
- }
1152
- async getSignature() {
1153
- const primary = await this.getPrimarySendAs();
1154
- return primary?.signature;
1155
- }
1156
- async getDisplayName() {
1157
- const primary = await this.getPrimarySendAs();
1158
- return primary?.displayName;
1159
- }
1160
- }
1161
-
1162
- // src/api/drafts.ts
1163
- function encodeHeaderValue2(value) {
1164
- if (!/[^\x00-\x7F]/.test(value)) {
1165
- return value;
1166
- }
1167
- const encoded = Buffer.from(value, "utf-8").toString("base64");
1168
- return `=?UTF-8?B?${encoded}?=`;
1169
- }
1170
- function htmlToPlainText2(html) {
1171
- return html.replace(/<br\s*\/?>/gi, `
1172
- `).replace(/<\/p>/gi, `
1173
-
1174
- `).replace(/<\/div>/gi, `
1175
- `).replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/\n{3,}/g, `
1176
-
1177
- `).trim();
1178
- }
1179
-
1180
- class DraftsApi {
1181
- client;
1182
- constructor(client) {
1183
- this.client = client;
1184
- }
1185
- async list(maxResults = 10) {
1186
- return this.client.get(`/users/${this.client.getUserId()}/drafts`, { maxResults });
1187
- }
1188
- async get(draftId) {
1189
- return this.client.get(`/users/${this.client.getUserId()}/drafts/${draftId}`);
1190
- }
1191
- async create(options) {
1192
- const message = this.buildRawMessage(options);
1193
- const encodedMessage = Buffer.from(message).toString("base64url");
1194
- return this.client.post(`/users/${this.client.getUserId()}/drafts`, {
1195
- message: {
1196
- raw: encodedMessage
1197
- }
1198
- });
1199
- }
1200
- async update(draftId, options) {
1201
- const message = this.buildRawMessage(options);
1202
- const encodedMessage = Buffer.from(message).toString("base64url");
1203
- return this.client.put(`/users/${this.client.getUserId()}/drafts/${draftId}`, {
1204
- message: {
1205
- raw: encodedMessage
1206
- }
1207
- });
1208
- }
1209
- async delete(draftId) {
1210
- await this.client.delete(`/users/${this.client.getUserId()}/drafts/${draftId}`);
1211
- }
1212
- async send(draftId) {
1213
- return this.client.post(`/users/${this.client.getUserId()}/drafts/send`, { id: draftId });
1214
- }
1215
- buildRawMessage(options) {
1216
- const settings = loadSettings();
1217
- const formatAddresses = (addresses) => {
1218
- const addrs = Array.isArray(addresses) ? addresses : [addresses];
1219
- return addrs.map((addr) => {
1220
- if (addr.includes("<") && addr.includes(">")) {
1221
- return addr;
1222
- }
1223
- return formatEmailWithName(addr);
1224
- }).join(", ");
1225
- };
1226
- const to = formatAddresses(options.to);
1227
- const cc = options.cc ? formatAddresses(options.cc) : "";
1228
- const bcc = options.bcc ? formatAddresses(options.bcc) : "";
1229
- let body = options.body;
1230
- let isHtml = options.isHtml || false;
1231
- if (settings.markdownEnabled && !isHtml && looksLikeMarkdown(body)) {
1232
- body = markdownToHtml(body);
1233
- isHtml = true;
1234
- }
1235
- if (shouldAppendSignature(false)) {
1236
- const signature = getSignature();
1237
- if (signature) {
1238
- if (!isHtml) {
1239
- body = body.replace(/\n/g, "<br>");
1240
- isHtml = true;
1241
- }
1242
- body += `<br><br>${signature}`;
1243
- }
1244
- }
1245
- let from;
1246
- try {
1247
- from = getFormattedSender();
1248
- } catch {
1249
- from = getUserEmail() || "";
1250
- }
1251
- let message = "";
1252
- message += `From: ${from}\r
1253
- `;
1254
- message += `To: ${to}\r
1255
- `;
1256
- if (cc)
1257
- message += `Cc: ${cc}\r
1258
- `;
1259
- if (bcc)
1260
- message += `Bcc: ${bcc}\r
1261
- `;
1262
- message += `Subject: ${encodeHeaderValue2(options.subject)}\r
1263
- `;
1264
- message += `MIME-Version: 1.0\r
1265
- `;
1266
- if (isHtml) {
1267
- const boundary = `boundary_${Date.now()}`;
1268
- const htmlBody = wrapInEmailTemplate(body);
1269
- const plainBody = htmlToPlainText2(body);
1270
- message += `Content-Type: multipart/alternative; boundary="${boundary}"\r
1271
- \r
1272
- `;
1273
- message += `--${boundary}\r
1274
- `;
1275
- message += `Content-Type: text/plain; charset="UTF-8"\r
1276
- \r
1277
- `;
1278
- message += `${plainBody}\r
1279
- `;
1280
- message += `--${boundary}\r
1281
- `;
1282
- message += `Content-Type: text/html; charset="UTF-8"\r
1283
- \r
1284
- `;
1285
- message += `${htmlBody}\r
1286
- `;
1287
- message += `--${boundary}--`;
1288
- } else {
1289
- message += `Content-Type: text/plain; charset="UTF-8"\r
1290
- \r
1291
- `;
1292
- message += body;
1293
- }
1294
- return message;
1295
- }
1296
- }
1297
-
1298
- // src/api/filters.ts
1299
- class FiltersApi {
1300
- client;
1301
- constructor(client) {
1302
- this.client = client;
1303
- }
1304
- async list() {
1305
- return this.client.get(`/users/${this.client.getUserId()}/settings/filters`);
1306
- }
1307
- async get(filterId) {
1308
- return this.client.get(`/users/${this.client.getUserId()}/settings/filters/${filterId}`);
1309
- }
1310
- async create(options) {
1311
- return this.client.post(`/users/${this.client.getUserId()}/settings/filters`, {
1312
- criteria: options.criteria,
1313
- action: this.buildAction(options.action)
1314
- });
1315
- }
1316
- async delete(filterId) {
1317
- await this.client.delete(`/users/${this.client.getUserId()}/settings/filters/${filterId}`);
1318
- }
1319
- buildAction(action) {
1320
- const result = {};
1321
- if (action.addLabelIds) {
1322
- result.addLabelIds = action.addLabelIds;
1323
- }
1324
- if (action.removeLabelIds) {
1325
- result.removeLabelIds = action.removeLabelIds;
1326
- }
1327
- if (action.forward) {
1328
- result.forward = action.forward;
1329
- }
1330
- if (action.markImportant) {
1331
- result.addLabelIds = [...result.addLabelIds || [], "IMPORTANT"];
1332
- }
1333
- if (action.neverMarkImportant) {
1334
- result.removeLabelIds = [...result.removeLabelIds || [], "IMPORTANT"];
1335
- }
1336
- if (action.markRead) {
1337
- result.removeLabelIds = [...result.removeLabelIds || [], "UNREAD"];
1338
- }
1339
- if (action.archive) {
1340
- result.removeLabelIds = [...result.removeLabelIds || [], "INBOX"];
1341
- }
1342
- if (action.trash) {
1343
- result.addLabelIds = [...result.addLabelIds || [], "TRASH"];
1344
- }
1345
- if (action.star) {
1346
- result.addLabelIds = [...result.addLabelIds || [], "STARRED"];
1347
- }
1348
- if (action.neverSpam) {
1349
- result.removeLabelIds = [...result.removeLabelIds || [], "SPAM"];
1350
- }
1351
- return result;
1352
- }
1353
- }
1354
-
1355
- // src/api/attachments.ts
1356
- import { existsSync as existsSync4, mkdirSync as mkdirSync3, writeFileSync as writeFileSync4 } from "fs";
1357
- import { join as join4 } from "path";
1358
- class AttachmentsApi {
1359
- client;
1360
- constructor(client) {
1361
- this.client = client;
1362
- }
1363
- getAttachmentsDir(messageId) {
1364
- const dir = join4(getConfigDir(), "attachments", messageId);
1365
- if (!existsSync4(dir)) {
1366
- mkdirSync3(dir, { recursive: true });
1367
- }
1368
- return dir;
1369
- }
1370
- extractAttachments(part, attachments = []) {
1371
- if (part.body?.attachmentId && part.filename) {
1372
- attachments.push({
1373
- attachmentId: part.body.attachmentId,
1374
- filename: part.filename,
1375
- mimeType: part.mimeType,
1376
- size: part.body.size,
1377
- partId: part.partId
1378
- });
1379
- }
1380
- if (part.parts) {
1381
- for (const subpart of part.parts) {
1382
- this.extractAttachments(subpart, attachments);
1383
- }
1384
- }
1385
- return attachments;
1386
- }
1387
- async list(messageId) {
1388
- const message = await this.client.get(`/users/${this.client.getUserId()}/messages/${messageId}`, { format: "full" });
1389
- if (!message.payload) {
1390
- return [];
1391
- }
1392
- return this.extractAttachments(message.payload);
1393
- }
1394
- async get(messageId, attachmentId) {
1395
- return this.client.get(`/users/${this.client.getUserId()}/messages/${messageId}/attachments/${attachmentId}`);
1396
- }
1397
- async download(messageId, attachmentId, filename, mimeType, outputDir) {
1398
- const cleanFilename = filename.replace(/[\u00A0\u2000-\u200B\u202F\u205F\u3000]/g, " ");
1399
- const data = await this.get(messageId, attachmentId);
1400
- let dir;
1401
- if (outputDir) {
1402
- if (!existsSync4(outputDir)) {
1403
- mkdirSync3(outputDir, { recursive: true });
1404
- }
1405
- dir = outputDir;
1406
- } else {
1407
- dir = this.getAttachmentsDir(messageId);
1408
- }
1409
- const filepath = join4(dir, cleanFilename);
1410
- const buffer = Buffer.from(data.data, "base64url");
1411
- writeFileSync4(filepath, buffer);
1412
- return {
1413
- filename: cleanFilename,
1414
- path: filepath,
1415
- size: buffer.length,
1416
- mimeType
1417
- };
1418
- }
1419
- async downloadAll(messageId, outputDir) {
1420
- const attachments = await this.list(messageId);
1421
- const downloaded = [];
1422
- for (const attachment of attachments) {
1423
- const result = await this.download(messageId, attachment.attachmentId, attachment.filename, attachment.mimeType, outputDir);
1424
- downloaded.push(result);
1425
- }
1426
- return downloaded;
1427
- }
1428
- getStoragePath(messageId) {
1429
- return this.getAttachmentsDir(messageId);
1430
- }
1431
- }
1432
-
1433
- // src/api/export.ts
1434
- import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync4, existsSync as existsSync5, appendFileSync } from "fs";
1435
- import { join as join5, dirname } from "path";
1436
- class ExportApi {
1437
- client;
1438
- constructor(client) {
1439
- this.client = client;
1440
- }
1441
- async exportMessages(options = {}) {
1442
- const format = options.format || "eml";
1443
- const messages = await this.getMessages(options);
1444
- if (messages.length === 0) {
1445
- const outputDir = options.outputDir || ensureExportsDir();
1446
- const filename = options.filename || `emails_${new Date().toISOString().split("T")[0]}.${format === "mbox" ? "mbox" : "eml"}`;
1447
- const filePath = join5(outputDir, filename);
1448
- writeFileSync5(filePath, "", "utf-8");
1449
- return {
1450
- messageCount: 0,
1451
- filePath,
1452
- format
1453
- };
1454
- }
1455
- if (format === "mbox") {
1456
- return this.exportToMbox(messages, options);
1457
- } else {
1458
- return this.exportToEml(messages, options);
1459
- }
1460
- }
1461
- async exportLabel(labelId, options = {}) {
1462
- return this.exportMessages({
1463
- ...options,
1464
- labelIds: [labelId]
1465
- });
1466
- }
1467
- async exportInbox(options = {}) {
1468
- return this.exportLabel("INBOX", options);
1469
- }
1470
- async exportSent(options = {}) {
1471
- return this.exportLabel("SENT", options);
1472
- }
1473
- async exportStarred(options = {}) {
1474
- return this.exportLabel("STARRED", options);
1475
- }
1476
- async exportMessage(messageId, options = {}) {
1477
- const message = await this.client.get(`/users/${this.client.getUserId()}/messages/${messageId}`, { format: "raw" });
1478
- const outputDir = options.outputDir || ensureExportsDir();
1479
- const filename = options.filename || `message_${messageId}.eml`;
1480
- const filePath = join5(outputDir, filename);
1481
- if (!existsSync5(dirname(filePath))) {
1482
- mkdirSync4(dirname(filePath), { recursive: true });
1483
- }
1484
- const rawContent = this.decodeBase64Url(message.raw || "");
1485
- writeFileSync5(filePath, rawContent, "utf-8");
1486
- return {
1487
- messageCount: 1,
1488
- filePath,
1489
- format: "eml"
1490
- };
1491
- }
1492
- async exportThread(threadId, options = {}) {
1493
- const thread = await this.client.get(`/users/${this.client.getUserId()}/threads/${threadId}`, { format: "minimal" });
1494
- const messageIds = thread.messages.map((m) => m.id);
1495
- const messages = [];
1496
- for (const id of messageIds) {
1497
- const message = await this.client.get(`/users/${this.client.getUserId()}/messages/${id}`, { format: "raw" });
1498
- messages.push(message);
1499
- }
1500
- const format = options.format || "mbox";
1501
- if (format === "mbox") {
1502
- return this.exportToMbox(messages, {
1503
- ...options,
1504
- filename: options.filename || `thread_${threadId}.mbox`
1505
- });
1506
- } else {
1507
- return this.exportToEml(messages, {
1508
- ...options,
1509
- filename: options.filename || `thread_${threadId}`
1510
- });
1511
- }
1512
- }
1513
- async exportToEml(messages, options) {
1514
- const outputDir = options.outputDir || ensureExportsDir();
1515
- const timestamp = new Date().toISOString().split("T")[0];
1516
- const exportDir = join5(outputDir, options.filename || `emails_${timestamp}`);
1517
- if (!existsSync5(exportDir)) {
1518
- mkdirSync4(exportDir, { recursive: true });
1519
- }
1520
- for (let i = 0;i < messages.length; i++) {
1521
- const message = messages[i];
1522
- const rawContent = this.decodeBase64Url(message.raw || "");
1523
- const subjectMatch = rawContent.match(/^Subject:\s*(.+)$/m);
1524
- let subject = subjectMatch ? subjectMatch[1].trim() : `message_${i + 1}`;
1525
- subject = this.sanitizeFilename(subject).slice(0, 50);
1526
- const filename = `${i + 1}_${message.id}_${subject}.eml`;
1527
- const filePath = join5(exportDir, filename);
1528
- writeFileSync5(filePath, rawContent, "utf-8");
1529
- }
1530
- return {
1531
- messageCount: messages.length,
1532
- filePath: exportDir,
1533
- format: "eml"
1534
- };
1535
- }
1536
- async exportToMbox(messages, options) {
1537
- const outputDir = options.outputDir || ensureExportsDir();
1538
- const filename = options.filename || `emails_${new Date().toISOString().split("T")[0]}.mbox`;
1539
- const filePath = join5(outputDir, filename);
1540
- if (!existsSync5(dirname(filePath))) {
1541
- mkdirSync4(dirname(filePath), { recursive: true });
1542
- }
1543
- writeFileSync5(filePath, "", "utf-8");
1544
- for (const message of messages) {
1545
- const rawContent = this.decodeBase64Url(message.raw || "");
1546
- const fromMatch = rawContent.match(/^From:\s*(.+)$/m);
1547
- let fromAddr = "unknown@unknown.com";
1548
- if (fromMatch) {
1549
- const emailMatch = fromMatch[1].match(/<([^>]+)>/) || fromMatch[1].match(/([^\s<>]+@[^\s<>]+)/);
1550
- if (emailMatch) {
1551
- fromAddr = emailMatch[1];
1552
- }
1553
- }
1554
- const dateMatch = rawContent.match(/^Date:\s*(.+)$/m);
1555
- let mboxDate = new Date().toUTCString();
1556
- if (dateMatch) {
1557
- try {
1558
- const parsed = new Date(dateMatch[1]);
1559
- if (!isNaN(parsed.getTime())) {
1560
- mboxDate = parsed.toUTCString().replace(/,/g, "").replace(/ GMT$/, "");
1561
- }
1562
- } catch {}
1563
- }
1564
- const mboxLine = `From ${fromAddr} ${mboxDate}
1565
- `;
1566
- appendFileSync(filePath, mboxLine, "utf-8");
1567
- const escapedContent = rawContent.replace(/^From /gm, ">From ");
1568
- appendFileSync(filePath, escapedContent, "utf-8");
1569
- if (!rawContent.endsWith(`
1570
- `)) {
1571
- appendFileSync(filePath, `
1572
- `, "utf-8");
1573
- }
1574
- appendFileSync(filePath, `
1575
- `, "utf-8");
1576
- }
1577
- return {
1578
- messageCount: messages.length,
1579
- filePath,
1580
- format: "mbox"
1581
- };
1582
- }
1583
- async getMessages(options) {
1584
- const messages = [];
1585
- let pageToken;
1586
- const maxResults = options.maxResults || 1000;
1587
- let fetched = 0;
1588
- do {
1589
- const params = {
1590
- maxResults: Math.min(100, maxResults - fetched),
1591
- pageToken,
1592
- q: options.query,
1593
- includeSpamTrash: false
1594
- };
1595
- if (options.labelIds && options.labelIds.length > 0) {
1596
- params.labelIds = options.labelIds.join(",");
1597
- }
1598
- const response = await this.client.get(`/users/${this.client.getUserId()}/messages`, params);
1599
- if (!response.messages || response.messages.length === 0) {
1600
- break;
1601
- }
1602
- for (const msg of response.messages) {
1603
- if (fetched >= maxResults)
1604
- break;
1605
- const fullMessage = await this.client.get(`/users/${this.client.getUserId()}/messages/${msg.id}`, { format: "raw" });
1606
- messages.push(fullMessage);
1607
- fetched++;
1608
- }
1609
- pageToken = response.nextPageToken;
1610
- } while (pageToken && fetched < maxResults);
1611
- return messages;
1612
- }
1613
- decodeBase64Url(encoded) {
1614
- let base64 = encoded.replace(/-/g, "+").replace(/_/g, "/");
1615
- while (base64.length % 4) {
1616
- base64 += "=";
1617
- }
1618
- return Buffer.from(base64, "base64").toString("utf-8");
1619
- }
1620
- sanitizeFilename(name) {
1621
- return name.replace(/[<>:"/\\|?*\x00-\x1F]/g, "").replace(/\s+/g, "_").replace(/^\.+/, "").slice(0, 200);
1622
- }
1623
- }
1624
-
1625
- // src/api/bulk.ts
1626
- function isLabelId(value) {
1627
- return value.startsWith("Label_") || /^[A-Z0-9_]+$/.test(value);
1628
- }
1629
-
1630
- class BulkApi {
1631
- client;
1632
- messages;
1633
- labels;
1634
- constructor(client) {
1635
- this.client = client;
1636
- this.messages = new MessagesApi(client);
1637
- this.labels = new LabelsApi(client);
1638
- }
1639
- async preview(query, maxResults = 50) {
1640
- const messages = await this.fetchMessages(query, maxResults);
1641
- return {
1642
- messages,
1643
- total: messages.length,
1644
- query
1645
- };
1646
- }
1647
- async modifyLabels(options) {
1648
- const {
1649
- query,
1650
- maxResults = 100,
1651
- concurrency = 10,
1652
- dryRun = false,
1653
- addLabelIds = [],
1654
- removeLabelIds = [],
1655
- addLabels = [],
1656
- removeLabels = [],
1657
- skipIfLabeled = false,
1658
- offset = 0,
1659
- onProgress,
1660
- onError
1661
- } = options;
1662
- const resolvedAddIds = [...addLabelIds];
1663
- const resolvedRemoveIds = [...removeLabelIds];
1664
- if (addLabels.length > 0 || removeLabels.length > 0) {
1665
- const needsLookup = [...addLabels, ...removeLabels].some((v) => !isLabelId(v));
1666
- let labelMap = new Map;
1667
- if (needsLookup) {
1668
- const allLabels = await this.labels.list();
1669
- labelMap = new Map(allLabels.labels.map((l) => [l.name.toLowerCase(), l.id]));
1670
- }
1671
- for (const value of addLabels) {
1672
- if (isLabelId(value)) {
1673
- resolvedAddIds.push(value);
1674
- } else {
1675
- const id = labelMap.get(value.toLowerCase());
1676
- if (id)
1677
- resolvedAddIds.push(id);
1678
- else
1679
- throw new Error(`Label not found: ${value}`);
1680
- }
1681
- }
1682
- for (const value of removeLabels) {
1683
- if (isLabelId(value)) {
1684
- resolvedRemoveIds.push(value);
1685
- } else {
1686
- const id = labelMap.get(value.toLowerCase());
1687
- if (id)
1688
- resolvedRemoveIds.push(id);
1689
- else
1690
- throw new Error(`Label not found: ${value}`);
1691
- }
1692
- }
1693
- }
1694
- if (resolvedAddIds.length === 0 && resolvedRemoveIds.length === 0) {
1695
- throw new Error("At least one label to add or remove is required");
1696
- }
1697
- const fetchLimit = maxResults === Infinity ? Number.MAX_SAFE_INTEGER : maxResults + offset;
1698
- let messages = await this.fetchMessages(query, fetchLimit);
1699
- if (offset > 0) {
1700
- messages = messages.slice(offset);
1701
- }
1702
- if (maxResults !== Infinity && messages.length > maxResults) {
1703
- messages = messages.slice(0, maxResults);
1704
- }
1705
- if (skipIfLabeled && resolvedAddIds.length > 0) {
1706
- messages = messages.filter((msg) => {
1707
- const existing = msg.labelIds || [];
1708
- return !resolvedAddIds.every((id) => existing.includes(id));
1709
- });
1710
- }
1711
- return this.executeBatch(messages, {
1712
- dryRun,
1713
- concurrency,
1714
- onProgress,
1715
- onError,
1716
- operation: async (msg) => {
1717
- await this.messages.modify(msg.id, resolvedAddIds, resolvedRemoveIds);
1718
- }
1719
- });
1720
- }
1721
- async addLabels(options) {
1722
- return this.modifyLabels({
1723
- ...options,
1724
- removeLabelIds: [],
1725
- removeLabels: []
1726
- });
1727
- }
1728
- async removeLabels(options) {
1729
- return this.modifyLabels({
1730
- ...options,
1731
- addLabelIds: [],
1732
- addLabels: []
1733
- });
1734
- }
1735
- async archive(options) {
1736
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1737
- return this.executeBatch(messages, {
1738
- dryRun: options.dryRun || false,
1739
- concurrency: options.concurrency || 10,
1740
- onProgress: options.onProgress,
1741
- onError: options.onError,
1742
- operation: async (msg) => {
1743
- await this.messages.archive(msg.id);
1744
- }
1745
- });
1746
- }
1747
- async unarchive(options) {
1748
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1749
- return this.executeBatch(messages, {
1750
- dryRun: options.dryRun || false,
1751
- concurrency: options.concurrency || 10,
1752
- onProgress: options.onProgress,
1753
- onError: options.onError,
1754
- operation: async (msg) => {
1755
- await this.messages.modify(msg.id, ["INBOX"], undefined);
1756
- }
1757
- });
1758
- }
1759
- async trash(options) {
1760
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1761
- return this.executeBatch(messages, {
1762
- dryRun: options.dryRun || false,
1763
- concurrency: options.concurrency || 10,
1764
- onProgress: options.onProgress,
1765
- onError: options.onError,
1766
- operation: async (msg) => {
1767
- await this.messages.trash(msg.id);
1768
- }
1769
- });
1770
- }
1771
- async delete(options) {
1772
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1773
- return this.executeBatch(messages, {
1774
- dryRun: options.dryRun || false,
1775
- concurrency: options.concurrency || 10,
1776
- onProgress: options.onProgress,
1777
- onError: options.onError,
1778
- operation: async (msg) => {
1779
- await this.messages.delete(msg.id);
1780
- }
1781
- });
1782
- }
1783
- async untrash(options) {
1784
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1785
- return this.executeBatch(messages, {
1786
- dryRun: options.dryRun || false,
1787
- concurrency: options.concurrency || 10,
1788
- onProgress: options.onProgress,
1789
- onError: options.onError,
1790
- operation: async (msg) => {
1791
- await this.messages.untrash(msg.id);
1792
- }
1793
- });
1794
- }
1795
- async markAsRead(options) {
1796
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1797
- return this.executeBatch(messages, {
1798
- dryRun: options.dryRun || false,
1799
- concurrency: options.concurrency || 10,
1800
- onProgress: options.onProgress,
1801
- onError: options.onError,
1802
- operation: async (msg) => {
1803
- await this.messages.markAsRead(msg.id);
1804
- }
1805
- });
1806
- }
1807
- async markAsUnread(options) {
1808
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1809
- return this.executeBatch(messages, {
1810
- dryRun: options.dryRun || false,
1811
- concurrency: options.concurrency || 10,
1812
- onProgress: options.onProgress,
1813
- onError: options.onError,
1814
- operation: async (msg) => {
1815
- await this.messages.markAsUnread(msg.id);
1816
- }
1817
- });
1818
- }
1819
- async star(options) {
1820
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1821
- return this.executeBatch(messages, {
1822
- dryRun: options.dryRun || false,
1823
- concurrency: options.concurrency || 10,
1824
- onProgress: options.onProgress,
1825
- onError: options.onError,
1826
- operation: async (msg) => {
1827
- await this.messages.star(msg.id);
1828
- }
1829
- });
1830
- }
1831
- async unstar(options) {
1832
- const messages = await this.fetchMessages(options.query, options.maxResults || 100);
1833
- return this.executeBatch(messages, {
1834
- dryRun: options.dryRun || false,
1835
- concurrency: options.concurrency || 10,
1836
- onProgress: options.onProgress,
1837
- onError: options.onError,
1838
- operation: async (msg) => {
1839
- await this.messages.unstar(msg.id);
1840
- }
1841
- });
1842
- }
1843
- async batchModifyLabels(options) {
1844
- const {
1845
- query,
1846
- maxResults = 1000,
1847
- addLabelIds = [],
1848
- removeLabelIds = [],
1849
- addLabels = [],
1850
- removeLabels = [],
1851
- dryRun = false,
1852
- skipIfLabeled = false,
1853
- offset = 0
1854
- } = options;
1855
- const resolvedAddIds = [...addLabelIds];
1856
- const resolvedRemoveIds = [...removeLabelIds];
1857
- if (addLabels.length > 0 || removeLabels.length > 0) {
1858
- const needsLookup = [...addLabels, ...removeLabels].some((v) => !isLabelId(v));
1859
- let labelMap = new Map;
1860
- if (needsLookup) {
1861
- const allLabels = await this.labels.list();
1862
- labelMap = new Map(allLabels.labels.map((l) => [l.name.toLowerCase(), l.id]));
1863
- }
1864
- for (const value of addLabels) {
1865
- if (isLabelId(value)) {
1866
- resolvedAddIds.push(value);
1867
- } else {
1868
- const id = labelMap.get(value.toLowerCase());
1869
- if (id)
1870
- resolvedAddIds.push(id);
1871
- else
1872
- throw new Error(`Label not found: ${value}`);
1873
- }
1874
- }
1875
- for (const value of removeLabels) {
1876
- if (isLabelId(value)) {
1877
- resolvedRemoveIds.push(value);
1878
- } else {
1879
- const id = labelMap.get(value.toLowerCase());
1880
- if (id)
1881
- resolvedRemoveIds.push(id);
1882
- else
1883
- throw new Error(`Label not found: ${value}`);
1884
- }
1885
- }
1886
- }
1887
- let messageIds;
1888
- if (skipIfLabeled && resolvedAddIds.length > 0) {
1889
- const fetchLimit = maxResults === Infinity ? Number.MAX_SAFE_INTEGER : maxResults + offset;
1890
- let msgs = await this.fetchMessages(query, fetchLimit);
1891
- if (offset > 0)
1892
- msgs = msgs.slice(offset);
1893
- if (maxResults !== Infinity && msgs.length > maxResults)
1894
- msgs = msgs.slice(0, maxResults);
1895
- msgs = msgs.filter((msg) => {
1896
- const existing = msg.labelIds || [];
1897
- return !resolvedAddIds.every((id) => existing.includes(id));
1898
- });
1899
- messageIds = msgs.map((m) => m.id);
1900
- } else {
1901
- const fetchLimit = maxResults === Infinity ? Number.MAX_SAFE_INTEGER : maxResults + offset;
1902
- let ids = await this.fetchMessageIds(query, fetchLimit);
1903
- if (offset > 0)
1904
- ids = ids.slice(offset);
1905
- if (maxResults !== Infinity && ids.length > maxResults)
1906
- ids = ids.slice(0, maxResults);
1907
- messageIds = ids;
1908
- }
1909
- const messages = messageIds;
1910
- const result = {
1911
- total: messages.length,
1912
- success: 0,
1913
- failed: 0,
1914
- skipped: 0,
1915
- errors: [],
1916
- processedMessages: []
1917
- };
1918
- if (messages.length === 0) {
1919
- return result;
1920
- }
1921
- if (dryRun) {
1922
- result.success = messages.length;
1923
- result.processedMessages = messages.map((id) => ({ id, threadId: "" }));
1924
- return result;
1925
- }
1926
- const batchSize = 1000;
1927
- const batches = this.chunkArray(messages, batchSize);
1928
- for (const batch of batches) {
1929
- try {
1930
- await this.client.post(`/users/${this.client.getUserId()}/messages/batchModify`, {
1931
- ids: batch,
1932
- addLabelIds: resolvedAddIds.length > 0 ? resolvedAddIds : undefined,
1933
- removeLabelIds: resolvedRemoveIds.length > 0 ? resolvedRemoveIds : undefined
1934
- });
1935
- result.success += batch.length;
1936
- result.processedMessages.push(...batch.map((id) => ({ id, threadId: "" })));
1937
- } catch (err) {
1938
- result.failed += batch.length;
1939
- const errorMessage = err instanceof Error ? err.message : String(err);
1940
- for (const id of batch) {
1941
- result.errors.push({ messageId: id, error: errorMessage });
1942
- }
1943
- }
1944
- }
1945
- return result;
1946
- }
1947
- async batchDelete(options) {
1948
- const { query, maxResults = 1000, dryRun = false } = options;
1949
- const messages = await this.fetchMessageIds(query, maxResults);
1950
- const result = {
1951
- total: messages.length,
1952
- success: 0,
1953
- failed: 0,
1954
- skipped: 0,
1955
- errors: [],
1956
- processedMessages: []
1957
- };
1958
- if (messages.length === 0) {
1959
- return result;
1960
- }
1961
- if (dryRun) {
1962
- result.success = messages.length;
1963
- result.processedMessages = messages.map((id) => ({ id, threadId: "" }));
1964
- return result;
1965
- }
1966
- const batchSize = 1000;
1967
- const batches = this.chunkArray(messages, batchSize);
1968
- for (const batch of batches) {
1969
- try {
1970
- await this.client.post(`/users/${this.client.getUserId()}/messages/batchDelete`, { ids: batch });
1971
- result.success += batch.length;
1972
- result.processedMessages.push(...batch.map((id) => ({ id, threadId: "" })));
1973
- } catch (err) {
1974
- result.failed += batch.length;
1975
- const errorMessage = err instanceof Error ? err.message : String(err);
1976
- for (const id of batch) {
1977
- result.errors.push({ messageId: id, error: errorMessage });
1978
- }
1979
- }
1980
- }
1981
- return result;
1982
- }
1983
- async fetchMessages(query, maxResults) {
1984
- const messages = [];
1985
- let pageToken;
1986
- while (messages.length < maxResults) {
1987
- const response = await this.messages.list({
1988
- q: query,
1989
- maxResults: Math.min(100, maxResults - messages.length),
1990
- pageToken
1991
- });
1992
- if (!response.messages || response.messages.length === 0) {
1993
- break;
1994
- }
1995
- const metadataPromises = response.messages.map(async (m) => {
1996
- const msg = await this.messages.get(m.id, "metadata");
1997
- const headers = msg.payload?.headers || [];
1998
- const getHeader = (name) => headers.find((h) => h.name.toLowerCase() === name.toLowerCase())?.value;
1999
- return {
2000
- id: m.id,
2001
- threadId: m.threadId,
2002
- from: getHeader("from"),
2003
- subject: getHeader("subject"),
2004
- date: getHeader("date"),
2005
- snippet: msg.snippet,
2006
- labelIds: msg.labelIds
2007
- };
2008
- });
2009
- const fetchedMessages = await Promise.all(metadataPromises);
2010
- messages.push(...fetchedMessages);
2011
- pageToken = response.nextPageToken;
2012
- if (!pageToken)
2013
- break;
2014
- }
2015
- return messages;
2016
- }
2017
- async fetchMessageIds(query, maxResults) {
2018
- const messageIds = [];
2019
- let pageToken;
2020
- while (messageIds.length < maxResults) {
2021
- const response = await this.messages.list({
2022
- q: query,
2023
- maxResults: Math.min(500, maxResults - messageIds.length),
2024
- pageToken
2025
- });
2026
- if (!response.messages || response.messages.length === 0) {
2027
- break;
2028
- }
2029
- messageIds.push(...response.messages.map((m) => m.id));
2030
- pageToken = response.nextPageToken;
2031
- if (!pageToken)
2032
- break;
2033
- }
2034
- return messageIds;
2035
- }
2036
- async executeBatch(messages, options) {
2037
- const { dryRun, concurrency, onProgress, onError, operation } = options;
2038
- const result = {
2039
- total: messages.length,
2040
- success: 0,
2041
- failed: 0,
2042
- skipped: 0,
2043
- errors: [],
2044
- processedMessages: []
2045
- };
2046
- if (messages.length === 0) {
2047
- return result;
2048
- }
2049
- const chunks = this.chunkArray(messages, concurrency);
2050
- for (const chunk of chunks) {
2051
- await Promise.all(chunk.map(async (msg) => {
2052
- try {
2053
- if (dryRun) {
2054
- result.success++;
2055
- result.processedMessages.push(msg);
2056
- } else {
2057
- await operation(msg);
2058
- result.success++;
2059
- result.processedMessages.push(msg);
2060
- }
2061
- if (onProgress) {
2062
- onProgress(result.success + result.failed, result.total, msg);
2063
- }
2064
- } catch (err) {
2065
- result.failed++;
2066
- const errorMessage = err instanceof Error ? err.message : String(err);
2067
- result.errors.push({ messageId: msg.id, error: errorMessage });
2068
- if (onError) {
2069
- onError(err instanceof Error ? err : new Error(errorMessage), msg);
2070
- }
2071
- }
2072
- }));
2073
- }
2074
- return result;
2075
- }
2076
- chunkArray(array, size) {
2077
- const chunks = [];
2078
- for (let i = 0;i < array.length; i += size) {
2079
- chunks.push(array.slice(i, i + size));
2080
- }
2081
- return chunks;
2082
- }
2083
- }
2084
-
2085
- // src/api/index.ts
2086
- class Gmail {
2087
- client;
2088
- messages;
2089
- labels;
2090
- threads;
2091
- profile;
2092
- drafts;
2093
- filters;
2094
- attachments;
2095
- export;
2096
- bulk;
2097
- constructor(client) {
2098
- this.client = client ?? new GmailClient;
2099
- this.messages = new MessagesApi(this.client);
2100
- this.labels = new LabelsApi(this.client);
2101
- this.threads = new ThreadsApi(this.client);
2102
- this.profile = new ProfileApi(this.client);
2103
- this.drafts = new DraftsApi(this.client);
2104
- this.filters = new FiltersApi(this.client);
2105
- this.attachments = new AttachmentsApi(this.client);
2106
- this.export = new ExportApi(this.client);
2107
- this.bulk = new BulkApi(this.client);
2108
- }
2109
- static create() {
2110
- return new Gmail;
2111
- }
2112
- static fromEnv() {
2113
- const accessToken = process.env.GMAIL_ACCESS_TOKEN;
2114
- const refreshToken = process.env.GMAIL_REFRESH_TOKEN;
2115
- const clientId = process.env.GMAIL_CLIENT_ID;
2116
- const clientSecret = process.env.GMAIL_CLIENT_SECRET;
2117
- const expiresAt = process.env.GMAIL_TOKEN_EXPIRES_AT ? parseInt(process.env.GMAIL_TOKEN_EXPIRES_AT, 10) : undefined;
2118
- if (refreshToken && clientId && clientSecret) {
2119
- return Gmail.createWithTokens({
2120
- accessToken: accessToken ?? "",
2121
- refreshToken,
2122
- clientId,
2123
- clientSecret,
2124
- expiresAt: accessToken ? expiresAt : 0
2125
- });
2126
- }
2127
- if (accessToken) {
2128
- const client = new GmailClient({ tokenProvider: async () => accessToken });
2129
- return new Gmail(client);
2130
- }
2131
- throw new Error("Missing Gmail env vars. Provide GMAIL_ACCESS_TOKEN, " + "or GMAIL_REFRESH_TOKEN + GMAIL_CLIENT_ID + GMAIL_CLIENT_SECRET");
2132
- }
2133
- static createWithTokens(tokens, onRefresh) {
2134
- let current = { ...tokens };
2135
- const tokenProvider = async () => {
2136
- const isExpired = current.expiresAt === undefined || Date.now() >= current.expiresAt - 5 * 60 * 1000;
2137
- if (isExpired) {
2138
- const refreshed = await refreshTokens(current.clientId, current.clientSecret, current.refreshToken);
2139
- current = {
2140
- accessToken: refreshed.accessToken,
2141
- refreshToken: refreshed.refreshToken,
2142
- clientId: current.clientId,
2143
- clientSecret: current.clientSecret,
2144
- expiresAt: refreshed.expiresAt
2145
- };
2146
- onRefresh?.(current);
2147
- }
2148
- return current.accessToken;
2149
- };
2150
- const client = new GmailClient({ tokenProvider });
2151
- return new Gmail(client);
2152
- }
2153
- getClient() {
2154
- return this.client;
2155
- }
2156
- }
2157
- export {
2158
- startCallbackServer,
2159
- saveTokens,
2160
- refreshTokens,
2161
- refreshAccessToken,
2162
- loadTokens,
2163
- isAuthenticated,
2164
- getValidAccessToken,
2165
- getAuthUrl,
2166
- clearConfig,
2167
- ThreadsApi,
2168
- ProfileApi,
2169
- MessagesApi,
2170
- LabelsApi,
2171
- GmailClient,
2172
- GmailApiError,
2173
- Gmail
2174
- };