@hasna/connectors 1.3.30 → 1.3.32
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.
- package/LICENSE +1 -1
- package/README.md +9 -0
- package/bin/index.js +461 -1702
- package/bin/mcp.js +583 -1768
- package/bin/serve.js +647 -1875
- package/connectors/{imessage → connect-github}/bin/index.js +892 -390
- package/connectors/connect-github/dist/index.js +520 -0
- package/connectors/{cloudflare → connect-yousign}/bun.lock +3 -3
- package/connectors/connect-yousign/node_modules/@types/bun/LICENSE +21 -0
- package/connectors/connect-yousign/node_modules/@types/bun/README.md +20 -0
- package/connectors/connect-yousign/node_modules/@types/bun/index.d.ts +1 -0
- package/connectors/connect-yousign/node_modules/@types/bun/package.json +53 -0
- package/connectors/connect-yousign/node_modules/@types/node/LICENSE +21 -0
- package/connectors/connect-yousign/node_modules/@types/node/README.md +15 -0
- package/connectors/connect-yousign/node_modules/@types/node/assert/strict.d.ts +105 -0
- package/connectors/connect-yousign/node_modules/@types/node/assert.d.ts +955 -0
- package/connectors/connect-yousign/node_modules/@types/node/async_hooks.d.ts +623 -0
- package/connectors/connect-yousign/node_modules/@types/node/buffer.buffer.d.ts +466 -0
- package/connectors/connect-yousign/node_modules/@types/node/buffer.d.ts +1810 -0
- package/connectors/connect-yousign/node_modules/@types/node/child_process.d.ts +1433 -0
- package/connectors/connect-yousign/node_modules/@types/node/cluster.d.ts +486 -0
- package/connectors/connect-yousign/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/@types/node/console.d.ts +151 -0
- package/connectors/connect-yousign/node_modules/@types/node/constants.d.ts +20 -0
- package/connectors/connect-yousign/node_modules/@types/node/crypto.d.ts +4065 -0
- package/connectors/connect-yousign/node_modules/@types/node/dgram.d.ts +564 -0
- package/connectors/connect-yousign/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/connectors/connect-yousign/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/connectors/connect-yousign/node_modules/@types/node/dns.d.ts +922 -0
- package/connectors/connect-yousign/node_modules/@types/node/domain.d.ts +166 -0
- package/connectors/connect-yousign/node_modules/@types/node/events.d.ts +1047 -0
- package/connectors/connect-yousign/node_modules/@types/node/fs/promises.d.ts +1329 -0
- package/connectors/connect-yousign/node_modules/@types/node/fs.d.ts +4678 -0
- package/connectors/connect-yousign/node_modules/@types/node/globals.d.ts +150 -0
- package/connectors/connect-yousign/node_modules/@types/node/globals.typedarray.d.ts +101 -0
- package/connectors/connect-yousign/node_modules/@types/node/http.d.ts +2188 -0
- package/connectors/connect-yousign/node_modules/@types/node/http2.d.ts +2480 -0
- package/connectors/connect-yousign/node_modules/@types/node/https.d.ts +405 -0
- package/connectors/connect-yousign/node_modules/@types/node/index.d.ts +115 -0
- package/connectors/connect-yousign/node_modules/@types/node/inspector/promises.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/@types/node/inspector.d.ts +269 -0
- package/connectors/connect-yousign/node_modules/@types/node/inspector.generated.d.ts +4401 -0
- package/connectors/connect-yousign/node_modules/@types/node/module.d.ts +757 -0
- package/connectors/connect-yousign/node_modules/@types/node/net.d.ts +933 -0
- package/connectors/connect-yousign/node_modules/@types/node/os.d.ts +507 -0
- package/connectors/connect-yousign/node_modules/@types/node/package.json +155 -0
- package/connectors/connect-yousign/node_modules/@types/node/path/posix.d.ts +8 -0
- package/connectors/connect-yousign/node_modules/@types/node/path/win32.d.ts +8 -0
- package/connectors/connect-yousign/node_modules/@types/node/path.d.ts +187 -0
- package/connectors/connect-yousign/node_modules/@types/node/perf_hooks.d.ts +643 -0
- package/connectors/connect-yousign/node_modules/@types/node/process.d.ts +2175 -0
- package/connectors/connect-yousign/node_modules/@types/node/punycode.d.ts +117 -0
- package/connectors/connect-yousign/node_modules/@types/node/querystring.d.ts +152 -0
- package/connectors/connect-yousign/node_modules/@types/node/quic.d.ts +910 -0
- package/connectors/connect-yousign/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/connectors/connect-yousign/node_modules/@types/node/readline.d.ts +542 -0
- package/connectors/connect-yousign/node_modules/@types/node/repl.d.ts +415 -0
- package/connectors/connect-yousign/node_modules/@types/node/sea.d.ts +162 -0
- package/connectors/connect-yousign/node_modules/@types/node/sqlite.d.ts +1065 -0
- package/connectors/connect-yousign/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/connectors/connect-yousign/node_modules/@types/node/stream/promises.d.ts +211 -0
- package/connectors/connect-yousign/node_modules/@types/node/stream/web.d.ts +296 -0
- package/connectors/connect-yousign/node_modules/@types/node/stream.d.ts +1770 -0
- package/connectors/connect-yousign/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/connectors/connect-yousign/node_modules/@types/node/test/reporters.d.ts +96 -0
- package/connectors/connect-yousign/node_modules/@types/node/test.d.ts +2275 -0
- package/connectors/connect-yousign/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/connectors/connect-yousign/node_modules/@types/node/timers.d.ts +159 -0
- package/connectors/connect-yousign/node_modules/@types/node/tls.d.ts +1203 -0
- package/connectors/connect-yousign/node_modules/@types/node/trace_events.d.ts +197 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/index.d.ts +117 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
- package/connectors/connect-yousign/node_modules/@types/node/ts5.7/index.d.ts +117 -0
- package/connectors/connect-yousign/node_modules/@types/node/tty.d.ts +250 -0
- package/connectors/connect-yousign/node_modules/@types/node/url.d.ts +541 -0
- package/connectors/connect-yousign/node_modules/@types/node/util/types.d.ts +558 -0
- package/connectors/connect-yousign/node_modules/@types/node/util.d.ts +1687 -0
- package/connectors/connect-yousign/node_modules/@types/node/v8.d.ts +988 -0
- package/connectors/connect-yousign/node_modules/@types/node/vm.d.ts +1208 -0
- package/connectors/connect-yousign/node_modules/@types/node/wasi.d.ts +202 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/blob.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/console.d.ts +9 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/events.d.ts +106 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/performance.d.ts +45 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/streams.d.ts +115 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/timers.d.ts +44 -0
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/url.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/@types/node/worker_threads.d.ts +717 -0
- package/connectors/connect-yousign/node_modules/@types/node/zlib.d.ts +682 -0
- package/connectors/connect-yousign/node_modules/bun-types/CLAUDE.md +105 -0
- package/connectors/connect-yousign/node_modules/bun-types/README.md +33 -0
- package/connectors/connect-yousign/node_modules/bun-types/bun.d.ts +8481 -0
- package/connectors/connect-yousign/node_modules/bun-types/bun.ns.d.ts +5 -0
- package/connectors/connect-yousign/node_modules/bun-types/bundle.d.ts +74 -0
- package/connectors/connect-yousign/node_modules/bun-types/deprecated.d.ts +184 -0
- package/connectors/connect-yousign/node_modules/bun-types/devserver.d.ts +187 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/README.md +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/bytecode.mdx +447 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/css.mdx +1024 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/esbuild.mdx +304 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/executables.mdx +1318 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/fullstack.mdx +1086 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/hot-reloading.mdx +229 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/html-static.mdx +498 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/index.mdx +1840 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/loaders.mdx +451 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/macros.mdx +328 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/minifier.mdx +1286 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/plugins.mdx +477 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/standalone-html.mdx +314 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/feedback.mdx +75 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-dataview.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-stream.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-string.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-typedarray.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-blob.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-string.mdx +27 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/dataview-to-string.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-blob.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-string.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/google-cloud-run.mdx +194 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/railway.mdx +145 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/render.mdx +82 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/vercel.mdx +97 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/astro.mdx +82 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/discordjs.mdx +80 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/docker.mdx +151 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/drizzle.mdx +195 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/elysia.mdx +31 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/express.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/gel.mdx +261 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/hono.mdx +47 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/mongoose.mdx +92 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nextjs.mdx +103 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nuxt.mdx +96 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/pm2.mdx +55 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma.mdx +164 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/qwik.mdx +114 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/react.mdx +52 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/remix.mdx +97 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sentry.mdx +54 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/solidstart.mdx +62 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/ssr-react.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/stric.mdx +54 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sveltekit.mdx +138 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/systemd.mdx +114 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/tanstack-start.mdx +791 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/upstash.mdx +87 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/vite.mdx +77 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-links.mdx +71 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/cluster.mdx +69 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch-unix.mdx +35 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch.mdx +26 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/file-uploads.mdx +97 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/hot.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/proxy.mdx +50 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/server.mdx +48 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/simple.mdx +20 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-file.mdx +50 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-iterator.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/tls.mdx +32 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/index.mdx +10 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-dev.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-git.mdx +40 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-optional.mdx +27 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-peer.mdx +45 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-tarball.mdx +35 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add.mdx +44 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/azure-artifacts.mdx +76 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/cicd.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/custom-registry.mdx +32 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/jfrog-artifactory.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/npm-alias.mdx +25 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/registry-scope.mdx +40 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/trusted.mdx +52 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/workspaces.mdx +70 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/yarnlock.mdx +51 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/argv.mdx +66 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ctrl-c.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ipc.mdx +69 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/nanoseconds.mdx +15 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/os-signals.mdx +31 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stderr.mdx +34 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stdout.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/stdin.mdx +62 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/arraybuffer.mdx +30 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/buffer.mdx +21 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/exists.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/json.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/mime.mdx +22 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/stream.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/string.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/uint8array.mdx +23 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/watch.mdx +66 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/build-time-constants.mdx +295 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/cicd.mdx +45 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/define-constant.mdx +149 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-directory.mdx +39 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-file.mdx +21 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/heap-snapshot.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-html.mdx +15 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json.mdx +46 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json5.mdx +74 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-toml.mdx +32 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-yaml.mdx +104 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/read-env.mdx +37 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/set-env.mdx +51 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/shell.mdx +42 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/timezone.mdx +38 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/tsconfig-paths.mdx +31 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/typescript.mdx +51 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/vscode-debugger.mdx +47 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/web-debugger.mdx +103 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-blob.mdx +13 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-json.mdx +14 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-string.mdx +14 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-array.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-arraybuffer.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-blob.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-buffer.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-json.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-string.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-typedarray.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/bail.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/concurrent-test-glob.mdx +146 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage-threshold.mdx +67 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/happy-dom.mdx +73 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/migrate-from-jest.mdx +125 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-clock.mdx +50 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-functions.mdx +70 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/rerun-each.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/run-tests.mdx +116 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/skip-tests.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/snapshot.mdx +102 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/spy-on.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/svelte-test.mdx +113 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/testing-library.mdx +93 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/timeout.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/todo-tests.mdx +74 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/update-snapshots.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/watch-mode.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/base64.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deep-equals.mdx +41 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deflate.mdx +20 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/detect-bun.mdx +28 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/entrypoint.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/escape-html.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/file-url-to-path.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/gzip.mdx +20 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/hash-a-password.mdx +56 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-dir.mdx +15 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-file.mdx +15 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-path.mdx +15 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/javascript-uuid.mdx +25 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/main.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/path-to-file-url.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/sleep.mdx +24 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/upgrade.mdx +93 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/version.mdx +23 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/compression.mdx +33 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/context.mdx +79 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/pubsub.mdx +43 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/simple.mdx +38 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/append.mdx +54 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/basic.mdx +46 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/blob.mdx +30 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/cat.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/file-cp.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/filesink.mdx +54 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/response.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stdout.mdx +23 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stream.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/unlink.mdx +18 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/index.mdx +133 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/installation.mdx +372 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/bunx.mdx +91 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/catalogs.mdx +292 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/add.mdx +179 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/audit.mdx +60 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/info.mdx +70 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/install.mdx +591 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/link.mdx +61 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/outdated.mdx +197 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/patch.mdx +69 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/pm.mdx +323 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/publish.mdx +131 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/remove.mdx +16 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/update.mdx +140 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/why.mdx +84 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/filter.mdx +127 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/global-cache.mdx +72 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/isolated-installs.mdx +220 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lifecycle.mdx +64 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lockfile.mdx +64 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/npmrc.mdx +245 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/overrides.mdx +83 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/scopes-registries.mdx +35 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/security-scanner-api.mdx +95 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/workspaces.mdx +115 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/benchmarking.mdx +296 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/bindgen.mdx +223 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/building-windows.mdx +143 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/contributing.mdx +366 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/feedback.mdx +20 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/license.mdx +78 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/roadmap.mdx +8 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/quickstart.mdx +251 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/archive.mdx +452 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/auto-install.mdx +97 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/binary-data.mdx +846 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bun-apis.mdx +59 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bunfig.mdx +754 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/c-compiler.mdx +204 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/child-process.mdx +659 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/color.mdx +267 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/console.mdx +67 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/cookies.mdx +454 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/debugger.mdx +335 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/environment-variables.mdx +231 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/ffi.mdx +567 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-io.mdx +306 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-system-router.mdx +118 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-types.mdx +482 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/glob.mdx +181 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/globals.mdx +72 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/hashing.mdx +315 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/html-rewriter.mdx +333 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/cookies.mdx +79 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/error-handling.mdx +40 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/metrics.mdx +36 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/routing.mdx +289 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/server.mdx +645 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/tls.mdx +101 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/websockets.mdx +414 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/index.mdx +223 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/json5.mdx +271 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsonl.mdx +188 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsx.mdx +115 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/markdown.mdx +344 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/module-resolution.mdx +374 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/dns.mdx +111 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/fetch.mdx +484 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/tcp.mdx +239 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/udp.mdx +180 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/node-api.mdx +19 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/nodejs-compat.mdx +468 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/plugins.mdx +419 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/redis.mdx +583 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/repl.mdx +176 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/s3.mdx +881 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/secrets.mdx +340 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/semver.mdx +57 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/shell.mdx +637 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sql.mdx +1404 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sqlite.mdx +721 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/streams.mdx +232 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/create.mdx +269 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/init.mdx +58 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/transpiler.mdx +288 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/typescript.mdx +58 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/utils.mdx +1010 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/watch-mode.mdx +161 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/web-apis.mdx +29 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/workers.mdx +314 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/yaml.mdx +469 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/add.mdx +166 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/build.mdx +197 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/bunx.mdx +49 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/feedback.mdx +17 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/init.mdx +84 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/install.mdx +173 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/link.mdx +163 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/outdated.mdx +140 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/patch.mdx +171 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/publish.mdx +198 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/remove.mdx +146 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/run.mdx +305 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/test.mdx +105 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/update.mdx +144 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/code-coverage.mdx +409 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/configuration.mdx +520 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/dates-times.mdx +129 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/discovery.mdx +90 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/dom.mdx +226 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/index.mdx +409 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/lifecycle.mdx +366 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/mocks.mdx +637 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/reporters.mdx +126 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/runtime-behavior.mdx +342 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/snapshots.mdx +434 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/writing-tests.mdx +672 -0
- package/connectors/connect-yousign/node_modules/bun-types/docs/typescript.mdx +54 -0
- package/connectors/connect-yousign/node_modules/bun-types/extensions.d.ts +40 -0
- package/connectors/connect-yousign/node_modules/bun-types/fetch.d.ts +79 -0
- package/connectors/connect-yousign/node_modules/bun-types/ffi.d.ts +1154 -0
- package/connectors/connect-yousign/node_modules/bun-types/globals.d.ts +2067 -0
- package/connectors/connect-yousign/node_modules/bun-types/html-rewriter.d.ts +186 -0
- package/connectors/connect-yousign/node_modules/bun-types/index.d.ts +32 -0
- package/connectors/connect-yousign/node_modules/bun-types/jsc.d.ts +233 -0
- package/connectors/connect-yousign/node_modules/bun-types/jsx.d.ts +11 -0
- package/connectors/connect-yousign/node_modules/bun-types/overrides.d.ts +376 -0
- package/connectors/connect-yousign/node_modules/bun-types/package.json +37 -0
- package/connectors/connect-yousign/node_modules/bun-types/redis.d.ts +3352 -0
- package/connectors/connect-yousign/node_modules/bun-types/s3.d.ts +1335 -0
- package/connectors/connect-yousign/node_modules/bun-types/security.d.ts +101 -0
- package/connectors/connect-yousign/node_modules/bun-types/serve.d.ts +1296 -0
- package/connectors/connect-yousign/node_modules/bun-types/shell.d.ts +380 -0
- package/connectors/connect-yousign/node_modules/bun-types/sql.d.ts +887 -0
- package/connectors/connect-yousign/node_modules/bun-types/sqlite.d.ts +1322 -0
- package/connectors/connect-yousign/node_modules/bun-types/test-globals.d.ts +22 -0
- package/connectors/connect-yousign/node_modules/bun-types/test.d.ts +2392 -0
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/branding.d.ts +283 -0
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/index.d.ts +1207 -0
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/messages.d.ts +395 -0
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/overloads.d.ts +669 -0
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/utils.d.ts +431 -0
- package/connectors/connect-yousign/node_modules/bun-types/wasm.d.ts +193 -0
- package/connectors/connect-yousign/node_modules/chalk/license +9 -0
- package/connectors/connect-yousign/node_modules/chalk/package.json +83 -0
- package/connectors/connect-yousign/node_modules/chalk/readme.md +297 -0
- package/connectors/connect-yousign/node_modules/chalk/source/index.d.ts +325 -0
- package/connectors/connect-yousign/node_modules/chalk/source/index.js +225 -0
- package/connectors/connect-yousign/node_modules/chalk/source/utilities.js +33 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/connectors/connect-yousign/node_modules/commander/LICENSE +22 -0
- package/connectors/connect-yousign/node_modules/commander/Readme.md +1157 -0
- package/connectors/connect-yousign/node_modules/commander/esm.mjs +16 -0
- package/connectors/connect-yousign/node_modules/commander/index.js +24 -0
- package/connectors/connect-yousign/node_modules/commander/lib/argument.js +149 -0
- package/connectors/connect-yousign/node_modules/commander/lib/command.js +2509 -0
- package/connectors/connect-yousign/node_modules/commander/lib/error.js +39 -0
- package/connectors/connect-yousign/node_modules/commander/lib/help.js +520 -0
- package/connectors/connect-yousign/node_modules/commander/lib/option.js +330 -0
- package/connectors/connect-yousign/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/connectors/connect-yousign/node_modules/commander/package-support.json +16 -0
- package/connectors/connect-yousign/node_modules/commander/package.json +84 -0
- package/connectors/connect-yousign/node_modules/commander/typings/esm.d.mts +3 -0
- package/connectors/connect-yousign/node_modules/commander/typings/index.d.ts +969 -0
- package/connectors/connect-yousign/node_modules/typescript/LICENSE.txt +55 -0
- package/connectors/connect-yousign/node_modules/typescript/README.md +50 -0
- package/connectors/connect-yousign/node_modules/typescript/SECURITY.md +41 -0
- package/connectors/connect-yousign/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- package/connectors/connect-yousign/node_modules/typescript/bin/tsc +2 -0
- package/connectors/connect-yousign/node_modules/typescript/bin/tsserver +2 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/_tsc.js +133818 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/_tsserver.js +659 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/_typingsInstaller.js +222 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.d.ts +22 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/tsc.js +8 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserver.js +8 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.js +21 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/typesMap.json +497 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/typescript.d.ts +11437 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/typescript.js +200276 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/typingsInstaller.js +8 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/watchGuard.js +53 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
- package/connectors/connect-yousign/node_modules/typescript/package.json +120 -0
- package/connectors/connect-yousign/node_modules/undici-types/LICENSE +21 -0
- package/connectors/connect-yousign/node_modules/undici-types/README.md +6 -0
- package/connectors/connect-yousign/node_modules/undici-types/agent.d.ts +32 -0
- package/connectors/connect-yousign/node_modules/undici-types/api.d.ts +43 -0
- package/connectors/connect-yousign/node_modules/undici-types/balanced-pool.d.ts +30 -0
- package/connectors/connect-yousign/node_modules/undici-types/cache-interceptor.d.ts +173 -0
- package/connectors/connect-yousign/node_modules/undici-types/cache.d.ts +36 -0
- package/connectors/connect-yousign/node_modules/undici-types/client-stats.d.ts +15 -0
- package/connectors/connect-yousign/node_modules/undici-types/client.d.ts +108 -0
- package/connectors/connect-yousign/node_modules/undici-types/connector.d.ts +34 -0
- package/connectors/connect-yousign/node_modules/undici-types/content-type.d.ts +21 -0
- package/connectors/connect-yousign/node_modules/undici-types/cookies.d.ts +30 -0
- package/connectors/connect-yousign/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
- package/connectors/connect-yousign/node_modules/undici-types/dispatcher.d.ts +276 -0
- package/connectors/connect-yousign/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
- package/connectors/connect-yousign/node_modules/undici-types/errors.d.ts +161 -0
- package/connectors/connect-yousign/node_modules/undici-types/eventsource.d.ts +66 -0
- package/connectors/connect-yousign/node_modules/undici-types/fetch.d.ts +211 -0
- package/connectors/connect-yousign/node_modules/undici-types/formdata.d.ts +108 -0
- package/connectors/connect-yousign/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/connectors/connect-yousign/node_modules/undici-types/global-origin.d.ts +7 -0
- package/connectors/connect-yousign/node_modules/undici-types/h2c-client.d.ts +73 -0
- package/connectors/connect-yousign/node_modules/undici-types/handlers.d.ts +15 -0
- package/connectors/connect-yousign/node_modules/undici-types/header.d.ts +160 -0
- package/connectors/connect-yousign/node_modules/undici-types/index.d.ts +88 -0
- package/connectors/connect-yousign/node_modules/undici-types/interceptors.d.ts +73 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-agent.d.ts +68 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-call-history.d.ts +111 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-client.d.ts +27 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-interceptor.d.ts +94 -0
- package/connectors/connect-yousign/node_modules/undici-types/mock-pool.d.ts +27 -0
- package/connectors/connect-yousign/node_modules/undici-types/package.json +55 -0
- package/connectors/connect-yousign/node_modules/undici-types/patch.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/connectors/connect-yousign/node_modules/undici-types/pool.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/undici-types/proxy-agent.d.ts +29 -0
- package/connectors/connect-yousign/node_modules/undici-types/readable.d.ts +68 -0
- package/connectors/connect-yousign/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/connectors/connect-yousign/node_modules/undici-types/retry-handler.d.ts +125 -0
- package/connectors/connect-yousign/node_modules/undici-types/round-robin-pool.d.ts +41 -0
- package/connectors/connect-yousign/node_modules/undici-types/snapshot-agent.d.ts +109 -0
- package/connectors/connect-yousign/node_modules/undici-types/util.d.ts +18 -0
- package/connectors/connect-yousign/node_modules/undici-types/utility.d.ts +7 -0
- package/connectors/connect-yousign/node_modules/undici-types/webidl.d.ts +341 -0
- package/connectors/connect-yousign/node_modules/undici-types/websocket.d.ts +186 -0
- package/dashboard/dist/assets/index-CSlS3oNV.css +1 -0
- package/dashboard/dist/assets/index-NCasN7x4.js +284 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/cli/commands/auth.d.ts +0 -3
- package/dist/index.d.ts +1 -2
- package/dist/index.js +167 -1399
- package/dist/lib/lock.d.ts +1 -1
- package/dist/lib/runner.d.ts +0 -31
- package/dist/lib/workflow-runner.d.ts +0 -7
- package/dist/server/auth.d.ts +3 -4
- package/package.json +1 -1
- package/connectors/gmail/bin/index.js +0 -7027
- package/connectors/googledrive/bin/index.js +0 -5958
- package/connectors/imessage/bin/.gitkeep +0 -2
- package/connectors/imessage/bun.lock +0 -32
- package/dashboard/dist/assets/index-ClBXkNbL.css +0 -1
- package/dashboard/dist/assets/index-DvfmyAO4.js +0 -284
- package/dist/core/builtins.test.d.ts +0 -1
- package/dist/core/connectors/gmail.d.ts +0 -5
- package/dist/core/connectors/googledrive.d.ts +0 -6
- package/dist/core/connectors/internal-operations.test.d.ts +0 -1
- package/dist/core/connectors/internal-runtime.test.d.ts +0 -1
- package/dist/core/errors.test.d.ts +0 -1
- package/dist/lib/connector-resolver.d.ts +0 -37
- package/dist/lib/connector-resolver.test.d.ts +0 -1
- package/dist/lib/manifest.d.ts +0 -50
- package/dist/lib/manifest.test.d.ts +0 -1
- package/dist/lib/runner-auth.test.d.ts +0 -1
- package/dist/lib/test-endpoints.test.d.ts +0 -1
- package/dist/server/auth-exchange.test.d.ts +0 -1
- package/dist/server/auth-refresh.test.d.ts +0 -1
- /package/dist/{cli/auth-no-browser.test.d.ts → server/server.test.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -15,8 +15,8 @@ var __export = (target, all) => {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
// src/lib/registry.ts
|
|
18
|
-
import { existsSync as
|
|
19
|
-
import { join as
|
|
18
|
+
import { existsSync as existsSync8, readFileSync as readFileSync3 } from "fs";
|
|
19
|
+
import { join as join9, dirname as dirname5 } from "path";
|
|
20
20
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
21
21
|
|
|
22
22
|
// src/core/errors.ts
|
|
@@ -42,7 +42,7 @@ class ConnectorOperationNotFoundError extends Error {
|
|
|
42
42
|
|
|
43
43
|
// src/core/connector.ts
|
|
44
44
|
var CONNECTOR_NAME_RE = /^[a-z0-9-]+$/;
|
|
45
|
-
var OPERATION_NAME_RE = /^[
|
|
45
|
+
var OPERATION_NAME_RE = /^[a-z0-9:_-]+$/;
|
|
46
46
|
function defineConnector(definition) {
|
|
47
47
|
const { meta, auth, operations } = definition;
|
|
48
48
|
if (!CONNECTOR_NAME_RE.test(meta.name)) {
|
|
@@ -4113,10 +4113,10 @@ var NEVER = INVALID;
|
|
|
4113
4113
|
var __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
4114
4114
|
function resolveGithubConnectorDir() {
|
|
4115
4115
|
const candidates = [
|
|
4116
|
-
join(__dirname2, "..", "..", "..", "connectors", "github"),
|
|
4117
|
-
join(__dirname2, "..", "..", "connectors", "github"),
|
|
4118
|
-
join(__dirname2, "..", "connectors", "github"),
|
|
4119
|
-
join(process.cwd(), "connectors", "github")
|
|
4116
|
+
join(__dirname2, "..", "..", "..", "connectors", "connect-github"),
|
|
4117
|
+
join(__dirname2, "..", "..", "connectors", "connect-github"),
|
|
4118
|
+
join(__dirname2, "..", "connectors", "connect-github"),
|
|
4119
|
+
join(process.cwd(), "connectors", "connect-github")
|
|
4120
4120
|
];
|
|
4121
4121
|
for (const candidate of candidates) {
|
|
4122
4122
|
if (existsSync(candidate)) {
|
|
@@ -4966,805 +4966,10 @@ var githubConnector = defineConnector({
|
|
|
4966
4966
|
}
|
|
4967
4967
|
}
|
|
4968
4968
|
});
|
|
4969
|
-
|
|
4970
|
-
// src/core/connectors/gmail.ts
|
|
4971
|
-
import { existsSync as existsSync2, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
|
|
4972
|
-
import { homedir } from "os";
|
|
4973
|
-
import { basename, join as join2 } from "path";
|
|
4974
|
-
var GMAIL_API_BASE = "https://gmail.googleapis.com/gmail/v1";
|
|
4975
|
-
var TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
4976
|
-
var REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
4977
|
-
var MAX_GMAIL_RETRIES = 5;
|
|
4978
|
-
var listMessagesSchema = exports_external.object({
|
|
4979
|
-
max: exports_external.coerce.number().int().positive().max(500).optional(),
|
|
4980
|
-
maxResults: exports_external.coerce.number().int().positive().max(500).optional(),
|
|
4981
|
-
pageToken: exports_external.string().optional(),
|
|
4982
|
-
query: exports_external.string().optional(),
|
|
4983
|
-
q: exports_external.string().optional(),
|
|
4984
|
-
label: exports_external.string().optional(),
|
|
4985
|
-
labelIds: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional(),
|
|
4986
|
-
includeSpamTrash: exports_external.boolean().optional()
|
|
4987
|
-
});
|
|
4988
|
-
var messageIdSchema = exports_external.object({
|
|
4989
|
-
args: exports_external.array(exports_external.union([exports_external.string(), exports_external.number(), exports_external.boolean()])).optional(),
|
|
4990
|
-
messageId: exports_external.string().optional()
|
|
4991
|
-
});
|
|
4992
|
-
var readMessageSchema = messageIdSchema.extend({
|
|
4993
|
-
body: exports_external.boolean().optional(),
|
|
4994
|
-
html: exports_external.boolean().optional(),
|
|
4995
|
-
format: exports_external.enum(["full", "metadata", "minimal", "raw"]).optional()
|
|
4996
|
-
});
|
|
4997
|
-
var attachmentListSchema = messageIdSchema;
|
|
4998
|
-
var attachmentDownloadSchema = messageIdSchema.extend({
|
|
4999
|
-
attachmentId: exports_external.string().optional(),
|
|
5000
|
-
filename: exports_external.string().optional(),
|
|
5001
|
-
mimeType: exports_external.string().optional(),
|
|
5002
|
-
dir: exports_external.string().optional(),
|
|
5003
|
-
outputDir: exports_external.string().optional()
|
|
5004
|
-
});
|
|
5005
|
-
var historyListSchema = exports_external.object({
|
|
5006
|
-
startHistoryId: exports_external.string(),
|
|
5007
|
-
historyTypes: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional(),
|
|
5008
|
-
labelId: exports_external.string().optional(),
|
|
5009
|
-
maxResults: exports_external.coerce.number().int().positive().max(500).optional(),
|
|
5010
|
-
pageToken: exports_external.string().optional()
|
|
5011
|
-
});
|
|
5012
|
-
var replySchema = messageIdSchema.extend({
|
|
5013
|
-
body: exports_external.string(),
|
|
5014
|
-
html: exports_external.boolean().optional(),
|
|
5015
|
-
isHtml: exports_external.boolean().optional(),
|
|
5016
|
-
cc: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional(),
|
|
5017
|
-
bcc: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional()
|
|
5018
|
-
});
|
|
5019
|
-
var gmailConnector = defineConnector({
|
|
5020
|
-
meta: {
|
|
5021
|
-
name: "gmail",
|
|
5022
|
-
displayName: "Gmail",
|
|
5023
|
-
description: "Profile-aware Gmail mailbox operations for sync, labels, attachments, history, and replies.",
|
|
5024
|
-
category: "communication",
|
|
5025
|
-
tags: ["google", "gmail", "email", "mailbox"]
|
|
5026
|
-
},
|
|
5027
|
-
auth: {
|
|
5028
|
-
type: "oauth2",
|
|
5029
|
-
supportsProfiles: true,
|
|
5030
|
-
fields: [
|
|
5031
|
-
{ key: "clientId", env: "GMAIL_CLIENT_ID", label: "OAuth client ID" },
|
|
5032
|
-
{ key: "clientSecret", env: "GMAIL_CLIENT_SECRET", label: "OAuth client secret", secret: true }
|
|
5033
|
-
]
|
|
5034
|
-
},
|
|
5035
|
-
createContext: ({ profile }) => ({ profile: profile || "default" }),
|
|
5036
|
-
operations: {
|
|
5037
|
-
"profiles.list": {
|
|
5038
|
-
summary: "List configured Gmail profiles.",
|
|
5039
|
-
execute: () => ({ profiles: listProfiles() })
|
|
5040
|
-
},
|
|
5041
|
-
"profile.get": {
|
|
5042
|
-
summary: "Get the authenticated Gmail profile.",
|
|
5043
|
-
execute: async ({ context }) => requestJson(context.profile, "/users/me/profile", {})
|
|
5044
|
-
},
|
|
5045
|
-
"messages.list": {
|
|
5046
|
-
summary: "List Gmail messages.",
|
|
5047
|
-
inputSchema: listMessagesSchema,
|
|
5048
|
-
execute: async ({ context }, input) => {
|
|
5049
|
-
const labelIds = normalizeStringArray(input.labelIds ?? input.label);
|
|
5050
|
-
return requestJson(context.profile, "/users/me/messages", {
|
|
5051
|
-
maxResults: input.maxResults ?? input.max ?? 50,
|
|
5052
|
-
pageToken: input.pageToken,
|
|
5053
|
-
q: input.q ?? input.query,
|
|
5054
|
-
labelIds: labelIds.length > 0 ? labelIds.join(",") : undefined,
|
|
5055
|
-
includeSpamTrash: input.includeSpamTrash
|
|
5056
|
-
});
|
|
5057
|
-
}
|
|
5058
|
-
},
|
|
5059
|
-
"messages.read": {
|
|
5060
|
-
summary: "Read a Gmail message with optional extracted body.",
|
|
5061
|
-
inputSchema: readMessageSchema,
|
|
5062
|
-
execute: async ({ context }, input) => {
|
|
5063
|
-
const messageId = getMessageId(input);
|
|
5064
|
-
const message = await requestJson(context.profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: input.format ?? "full" });
|
|
5065
|
-
const headers = headersToObject(message.payload?.headers ?? []);
|
|
5066
|
-
return {
|
|
5067
|
-
...message,
|
|
5068
|
-
from: headers.From ?? headers.from ?? "",
|
|
5069
|
-
to: headers.To ?? headers.to ?? "",
|
|
5070
|
-
cc: headers.Cc ?? headers.cc ?? "",
|
|
5071
|
-
subject: headers.Subject ?? headers.subject ?? "",
|
|
5072
|
-
date: headers.Date ?? headers.date ?? "",
|
|
5073
|
-
body: input.body ? extractBody(message, Boolean(input.html)) : undefined,
|
|
5074
|
-
size: message.sizeEstimate
|
|
5075
|
-
};
|
|
5076
|
-
}
|
|
5077
|
-
},
|
|
5078
|
-
"messages.getRaw": {
|
|
5079
|
-
summary: "Read raw base64url Gmail message content.",
|
|
5080
|
-
inputSchema: messageIdSchema,
|
|
5081
|
-
execute: async ({ context }, input) => {
|
|
5082
|
-
const messageId = getMessageId(input);
|
|
5083
|
-
return requestJson(context.profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "raw" });
|
|
5084
|
-
}
|
|
5085
|
-
},
|
|
5086
|
-
"messages.mark-read": {
|
|
5087
|
-
summary: "Mark a message as read.",
|
|
5088
|
-
inputSchema: messageIdSchema,
|
|
5089
|
-
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), undefined, ["UNREAD"])
|
|
5090
|
-
},
|
|
5091
|
-
"messages.mark-unread": {
|
|
5092
|
-
summary: "Mark a message as unread.",
|
|
5093
|
-
inputSchema: messageIdSchema,
|
|
5094
|
-
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), ["UNREAD"], undefined)
|
|
5095
|
-
},
|
|
5096
|
-
"messages.archive": {
|
|
5097
|
-
summary: "Archive a message by removing the INBOX label.",
|
|
5098
|
-
inputSchema: messageIdSchema,
|
|
5099
|
-
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), undefined, ["INBOX"])
|
|
5100
|
-
},
|
|
5101
|
-
"messages.star": {
|
|
5102
|
-
summary: "Star a message.",
|
|
5103
|
-
inputSchema: messageIdSchema,
|
|
5104
|
-
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), ["STARRED"], undefined)
|
|
5105
|
-
},
|
|
5106
|
-
"messages.reply": {
|
|
5107
|
-
summary: "Reply to a Gmail message in the same thread.",
|
|
5108
|
-
inputSchema: replySchema,
|
|
5109
|
-
execute: async ({ context }, input) => replyToMessage(context.profile, getMessageId(input), input)
|
|
5110
|
-
},
|
|
5111
|
-
"attachments.list": {
|
|
5112
|
-
summary: "List Gmail message attachments.",
|
|
5113
|
-
inputSchema: attachmentListSchema,
|
|
5114
|
-
execute: async ({ context }, input) => {
|
|
5115
|
-
const message = await requestJson(context.profile, `/users/me/messages/${encodeURIComponent(getMessageId(input))}`, { format: "full" });
|
|
5116
|
-
return collectAttachments(message.payload);
|
|
5117
|
-
}
|
|
5118
|
-
},
|
|
5119
|
-
"attachments.download": {
|
|
5120
|
-
summary: "Download one or all Gmail message attachments to disk.",
|
|
5121
|
-
inputSchema: attachmentDownloadSchema,
|
|
5122
|
-
execute: async ({ context }, input) => downloadAttachments(context.profile, input)
|
|
5123
|
-
},
|
|
5124
|
-
"labels.list": {
|
|
5125
|
-
summary: "List Gmail labels.",
|
|
5126
|
-
execute: async ({ context }) => requestJson(context.profile, "/users/me/labels", {})
|
|
5127
|
-
},
|
|
5128
|
-
"history.list": {
|
|
5129
|
-
summary: "List Gmail mailbox history from a history id.",
|
|
5130
|
-
inputSchema: historyListSchema,
|
|
5131
|
-
execute: async ({ context }, input) => requestJson(context.profile, "/users/me/history", {
|
|
5132
|
-
startHistoryId: input.startHistoryId,
|
|
5133
|
-
historyTypes: normalizeStringArray(input.historyTypes).join(",") || undefined,
|
|
5134
|
-
labelId: input.labelId,
|
|
5135
|
-
maxResults: input.maxResults,
|
|
5136
|
-
pageToken: input.pageToken
|
|
5137
|
-
})
|
|
5138
|
-
}
|
|
5139
|
-
}
|
|
5140
|
-
});
|
|
5141
|
-
async function modifyMessage(profile, messageId, addLabelIds, removeLabelIds) {
|
|
5142
|
-
return requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}/modify`, {}, {
|
|
5143
|
-
method: "POST",
|
|
5144
|
-
body: {
|
|
5145
|
-
addLabelIds: addLabelIds ?? [],
|
|
5146
|
-
removeLabelIds: removeLabelIds ?? []
|
|
5147
|
-
}
|
|
5148
|
-
});
|
|
5149
|
-
}
|
|
5150
|
-
async function replyToMessage(profile, messageId, input) {
|
|
5151
|
-
const original = await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "full" });
|
|
5152
|
-
const headers = headersToObject(original.payload?.headers ?? []);
|
|
5153
|
-
const subject = normalizeReplySubject(headers.Subject ?? headers.subject ?? "");
|
|
5154
|
-
const to = headers.From ?? headers.from ?? "";
|
|
5155
|
-
const messageIdHeader = headers["Message-ID"] ?? headers["Message-Id"] ?? headers["message-id"] ?? "";
|
|
5156
|
-
const references = [headers.References ?? headers.references, messageIdHeader].filter(Boolean).join(" ");
|
|
5157
|
-
const raw = buildRawEmail({
|
|
5158
|
-
to,
|
|
5159
|
-
cc: normalizeStringArray(input.cc),
|
|
5160
|
-
bcc: normalizeStringArray(input.bcc),
|
|
5161
|
-
subject,
|
|
5162
|
-
body: input.body,
|
|
5163
|
-
isHtml: Boolean(input.html ?? input.isHtml),
|
|
5164
|
-
inReplyTo: messageIdHeader,
|
|
5165
|
-
references
|
|
5166
|
-
});
|
|
5167
|
-
return requestJson(profile, "/users/me/messages/send", {}, {
|
|
5168
|
-
method: "POST",
|
|
5169
|
-
body: {
|
|
5170
|
-
raw: Buffer.from(raw).toString("base64url"),
|
|
5171
|
-
threadId: original.threadId
|
|
5172
|
-
}
|
|
5173
|
-
});
|
|
5174
|
-
}
|
|
5175
|
-
async function downloadAttachments(profile, input) {
|
|
5176
|
-
const messageId = getMessageId(input);
|
|
5177
|
-
const outputDir = input.dir ?? input.outputDir ?? join2(configDirs()[0], "attachments", messageId);
|
|
5178
|
-
mkdirSync(outputDir, { recursive: true });
|
|
5179
|
-
const attachments = input.attachmentId && input.filename ? [{
|
|
5180
|
-
attachmentId: input.attachmentId,
|
|
5181
|
-
filename: input.filename,
|
|
5182
|
-
mimeType: input.mimeType ?? "application/octet-stream",
|
|
5183
|
-
size: 0
|
|
5184
|
-
}] : collectAttachments((await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "full" })).payload);
|
|
5185
|
-
const downloaded = [];
|
|
5186
|
-
for (const attachment of attachments) {
|
|
5187
|
-
const data = await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachment.attachmentId)}`, {});
|
|
5188
|
-
const filename = safeFilename(attachment.filename);
|
|
5189
|
-
const path = join2(outputDir, filename);
|
|
5190
|
-
const buffer = Buffer.from(data.data, "base64url");
|
|
5191
|
-
writeFileSync(path, buffer);
|
|
5192
|
-
downloaded.push({
|
|
5193
|
-
filename,
|
|
5194
|
-
path,
|
|
5195
|
-
size: buffer.length,
|
|
5196
|
-
mimeType: attachment.mimeType
|
|
5197
|
-
});
|
|
5198
|
-
}
|
|
5199
|
-
return downloaded;
|
|
5200
|
-
}
|
|
5201
|
-
async function requestJson(profile, path, params, options = {}) {
|
|
5202
|
-
const token = await getValidAccessToken(profile);
|
|
5203
|
-
const url = new URL(`${GMAIL_API_BASE}${path}`);
|
|
5204
|
-
for (const [key, value] of Object.entries(params)) {
|
|
5205
|
-
if (value !== undefined && value !== null && value !== "")
|
|
5206
|
-
url.searchParams.append(key, String(value));
|
|
5207
|
-
}
|
|
5208
|
-
let lastError;
|
|
5209
|
-
for (let attempt = 0;attempt <= MAX_GMAIL_RETRIES; attempt++) {
|
|
5210
|
-
let response;
|
|
5211
|
-
try {
|
|
5212
|
-
response = await fetch(url, {
|
|
5213
|
-
method: options.method ?? "GET",
|
|
5214
|
-
headers: {
|
|
5215
|
-
Authorization: `Bearer ${token}`,
|
|
5216
|
-
Accept: "application/json",
|
|
5217
|
-
...options.body ? { "Content-Type": "application/json" } : {}
|
|
5218
|
-
},
|
|
5219
|
-
body: options.body ? JSON.stringify(options.body) : undefined
|
|
5220
|
-
});
|
|
5221
|
-
} catch (error2) {
|
|
5222
|
-
lastError = error2 instanceof Error ? error2.message : String(error2);
|
|
5223
|
-
if (attempt >= MAX_GMAIL_RETRIES)
|
|
5224
|
-
throw error2;
|
|
5225
|
-
await sleep(gmailBackoffDelayMs(attempt));
|
|
5226
|
-
continue;
|
|
5227
|
-
}
|
|
5228
|
-
const text = await response.text();
|
|
5229
|
-
const data = text ? JSON.parse(text) : {};
|
|
5230
|
-
if (response.ok)
|
|
5231
|
-
return data;
|
|
5232
|
-
const error = data;
|
|
5233
|
-
lastError = error.error?.message ?? response.statusText;
|
|
5234
|
-
if (!isRetryableGmailResponse(response.status, error) || attempt >= MAX_GMAIL_RETRIES) {
|
|
5235
|
-
throw new Error(`Gmail request failed (${response.status}): ${lastError}`);
|
|
5236
|
-
}
|
|
5237
|
-
await sleep(gmailBackoffDelayMs(attempt, response.headers.get("retry-after")));
|
|
5238
|
-
}
|
|
5239
|
-
throw new Error(`Gmail request failed: ${lastError ?? "unknown error"}`);
|
|
5240
|
-
}
|
|
5241
|
-
function isRetryableGmailResponse(status, error) {
|
|
5242
|
-
if ([429, 500, 502, 503, 504].includes(status))
|
|
5243
|
-
return true;
|
|
5244
|
-
const reasons = error.error?.errors?.map((entry) => entry.reason) ?? [];
|
|
5245
|
-
return reasons.some((reason) => reason === "rateLimitExceeded" || reason === "userRateLimitExceeded");
|
|
5246
|
-
}
|
|
5247
|
-
function gmailBackoffDelayMs(attempt, retryAfter = null) {
|
|
5248
|
-
if (retryAfter) {
|
|
5249
|
-
const seconds = Number(retryAfter);
|
|
5250
|
-
if (Number.isFinite(seconds) && seconds >= 0)
|
|
5251
|
-
return seconds * 1000;
|
|
5252
|
-
}
|
|
5253
|
-
const base = Number(process.env.CONNECTORS_GMAIL_RETRY_BASE_MS ?? "1000");
|
|
5254
|
-
const baseMs = Number.isFinite(base) && base >= 0 ? base : 1000;
|
|
5255
|
-
const jitterMs = Math.floor(Math.random() * 1000);
|
|
5256
|
-
return Math.min(2 ** attempt * baseMs + jitterMs, 64000);
|
|
5257
|
-
}
|
|
5258
|
-
function sleep(ms) {
|
|
5259
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5260
|
-
}
|
|
5261
|
-
async function getValidAccessToken(profile) {
|
|
5262
|
-
if (process.env.GMAIL_ACCESS_TOKEN)
|
|
5263
|
-
return process.env.GMAIL_ACCESS_TOKEN;
|
|
5264
|
-
const tokens = loadTokens(profile);
|
|
5265
|
-
if (!tokens?.accessToken && !tokens?.refreshToken) {
|
|
5266
|
-
throw new Error(`Gmail profile "${profile}" is not authenticated. Run: connectors auth gmail`);
|
|
5267
|
-
}
|
|
5268
|
-
if (tokens.accessToken && (!tokens.expiresAt || Date.now() < tokens.expiresAt - REFRESH_BUFFER_MS))
|
|
5269
|
-
return tokens.accessToken;
|
|
5270
|
-
if (!tokens.refreshToken)
|
|
5271
|
-
return tokens.accessToken ?? "";
|
|
5272
|
-
return (await refreshAccessToken(profile, tokens)).accessToken ?? "";
|
|
5273
|
-
}
|
|
5274
|
-
async function refreshAccessToken(profile, currentTokens) {
|
|
5275
|
-
const credentials = loadCredentials(profile);
|
|
5276
|
-
if (!credentials.clientId || !credentials.clientSecret)
|
|
5277
|
-
throw new Error("Gmail OAuth credentials are not configured. Run: connectors auth gmail");
|
|
5278
|
-
if (!currentTokens.refreshToken)
|
|
5279
|
-
throw new Error(`Gmail profile "${profile}" has no refresh token. Run: connectors auth gmail`);
|
|
5280
|
-
const response = await fetch(TOKEN_URL, {
|
|
5281
|
-
method: "POST",
|
|
5282
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
5283
|
-
body: new URLSearchParams({
|
|
5284
|
-
client_id: credentials.clientId,
|
|
5285
|
-
client_secret: credentials.clientSecret,
|
|
5286
|
-
refresh_token: currentTokens.refreshToken,
|
|
5287
|
-
grant_type: "refresh_token"
|
|
5288
|
-
})
|
|
5289
|
-
});
|
|
5290
|
-
const data = await response.json().catch(() => ({}));
|
|
5291
|
-
if (!response.ok || !data.access_token)
|
|
5292
|
-
throw new Error(`Gmail token refresh failed: ${data.error_description || data.error || response.statusText}`);
|
|
5293
|
-
const tokens = {
|
|
5294
|
-
accessToken: data.access_token,
|
|
5295
|
-
refreshToken: currentTokens.refreshToken,
|
|
5296
|
-
expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,
|
|
5297
|
-
tokenType: data.token_type ?? currentTokens.tokenType,
|
|
5298
|
-
scope: data.scope ?? currentTokens.scope
|
|
5299
|
-
};
|
|
5300
|
-
saveTokens(profile, tokens);
|
|
5301
|
-
return tokens;
|
|
5302
|
-
}
|
|
5303
|
-
function listProfiles() {
|
|
5304
|
-
const profiles = new Set;
|
|
5305
|
-
for (const baseDir of configDirs()) {
|
|
5306
|
-
const profilesDir = join2(baseDir, "profiles");
|
|
5307
|
-
if (!existsSync2(profilesDir))
|
|
5308
|
-
continue;
|
|
5309
|
-
for (const entry of readdirSync(profilesDir, { withFileTypes: true })) {
|
|
5310
|
-
if (entry.isDirectory())
|
|
5311
|
-
profiles.add(entry.name);
|
|
5312
|
-
if (entry.isFile() && entry.name.endsWith(".json"))
|
|
5313
|
-
profiles.add(basename(entry.name, ".json"));
|
|
5314
|
-
}
|
|
5315
|
-
}
|
|
5316
|
-
return Array.from(profiles).sort((a, b) => a.localeCompare(b));
|
|
5317
|
-
}
|
|
5318
|
-
function loadCredentials(profile) {
|
|
5319
|
-
const envClientId = process.env.GMAIL_CLIENT_ID ?? process.env.GOOGLE_CLIENT_ID;
|
|
5320
|
-
const envClientSecret = process.env.GMAIL_CLIENT_SECRET ?? process.env.GOOGLE_CLIENT_SECRET;
|
|
5321
|
-
if (envClientId && envClientSecret)
|
|
5322
|
-
return { clientId: envClientId, clientSecret: envClientSecret };
|
|
5323
|
-
for (const baseDir of configDirs()) {
|
|
5324
|
-
const credentials = {
|
|
5325
|
-
...readJson(join2(baseDir, "credentials.json")),
|
|
5326
|
-
...readJson(join2(baseDir, "profiles", profile, "config.json"))
|
|
5327
|
-
};
|
|
5328
|
-
if (credentials.clientId || credentials.clientSecret)
|
|
5329
|
-
return credentials;
|
|
5330
|
-
}
|
|
5331
|
-
return {};
|
|
5332
|
-
}
|
|
5333
|
-
function loadTokens(profile) {
|
|
5334
|
-
for (const baseDir of configDirs()) {
|
|
5335
|
-
const fromProfile = readJson(join2(baseDir, "profiles", profile, "tokens.json"));
|
|
5336
|
-
if (fromProfile)
|
|
5337
|
-
return fromProfile;
|
|
5338
|
-
const flat = readJson(join2(baseDir, "profiles", `${profile}.json`));
|
|
5339
|
-
if (flat)
|
|
5340
|
-
return flat.tokens ?? (flat.accessToken || flat.refreshToken ? flat : null);
|
|
5341
|
-
}
|
|
5342
|
-
return null;
|
|
5343
|
-
}
|
|
5344
|
-
function saveTokens(profile, tokens) {
|
|
5345
|
-
const baseDir = configDirs().find((dir) => existsSync2(dir)) ?? configDirs()[0];
|
|
5346
|
-
const profileDir = join2(baseDir, "profiles", profile);
|
|
5347
|
-
mkdirSync(profileDir, { recursive: true });
|
|
5348
|
-
writeFileSync(join2(profileDir, "tokens.json"), JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
5349
|
-
}
|
|
5350
|
-
function configDirs() {
|
|
5351
|
-
const explicit = process.env.HASNA_GMAIL_CONNECTOR_DIR ?? process.env.GMAIL_CONNECTOR_DIR;
|
|
5352
|
-
if (explicit)
|
|
5353
|
-
return [explicit];
|
|
5354
|
-
const baseDir = process.env.HASNA_CONNECTORS_DIR ?? join2(homedir(), ".hasna", "connectors");
|
|
5355
|
-
return [join2(baseDir, "gmail"), join2(baseDir, "connect-gmail")];
|
|
5356
|
-
}
|
|
5357
|
-
function readJson(path) {
|
|
5358
|
-
if (!existsSync2(path))
|
|
5359
|
-
return null;
|
|
5360
|
-
try {
|
|
5361
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
5362
|
-
} catch {
|
|
5363
|
-
return null;
|
|
5364
|
-
}
|
|
5365
|
-
}
|
|
5366
|
-
function getMessageId(input) {
|
|
5367
|
-
const id = input.messageId ?? (input.args?.[0] != null ? String(input.args[0]) : undefined);
|
|
5368
|
-
if (!id)
|
|
5369
|
-
throw new Error("Gmail messageId is required");
|
|
5370
|
-
return id;
|
|
5371
|
-
}
|
|
5372
|
-
function headersToObject(headers) {
|
|
5373
|
-
const out = {};
|
|
5374
|
-
for (const header of headers)
|
|
5375
|
-
out[header.name] = header.value;
|
|
5376
|
-
return out;
|
|
5377
|
-
}
|
|
5378
|
-
function extractBody(message, preferHtml = false) {
|
|
5379
|
-
if (!message.payload)
|
|
5380
|
-
return "";
|
|
5381
|
-
const targetType = preferHtml ? "text/html" : "text/plain";
|
|
5382
|
-
const parts = [];
|
|
5383
|
-
collectTextParts(message.payload, parts);
|
|
5384
|
-
return parts.find((part) => part.mimeType === targetType)?.data ?? parts.find((part) => part.mimeType.startsWith("text/"))?.data ?? "";
|
|
5385
|
-
}
|
|
5386
|
-
function collectTextParts(part, results) {
|
|
5387
|
-
const mimeType = (part.mimeType ?? "").split(";")[0].trim().toLowerCase();
|
|
5388
|
-
if (part.body?.data && mimeType.startsWith("text/")) {
|
|
5389
|
-
results.push({ mimeType, data: Buffer.from(part.body.data, "base64url").toString("utf8") });
|
|
5390
|
-
}
|
|
5391
|
-
for (const child of part.parts ?? [])
|
|
5392
|
-
collectTextParts(child, results);
|
|
5393
|
-
}
|
|
5394
|
-
function collectAttachments(part, attachments = []) {
|
|
5395
|
-
if (!part)
|
|
5396
|
-
return attachments;
|
|
5397
|
-
if (part.body?.attachmentId && part.filename) {
|
|
5398
|
-
attachments.push({
|
|
5399
|
-
attachmentId: part.body.attachmentId,
|
|
5400
|
-
filename: part.filename,
|
|
5401
|
-
mimeType: part.mimeType ?? "application/octet-stream",
|
|
5402
|
-
size: part.body.size ?? 0,
|
|
5403
|
-
partId: part.partId
|
|
5404
|
-
});
|
|
5405
|
-
}
|
|
5406
|
-
for (const child of part.parts ?? [])
|
|
5407
|
-
collectAttachments(child, attachments);
|
|
5408
|
-
return attachments;
|
|
5409
|
-
}
|
|
5410
|
-
function normalizeStringArray(value) {
|
|
5411
|
-
if (!value)
|
|
5412
|
-
return [];
|
|
5413
|
-
return Array.isArray(value) ? value : value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
5414
|
-
}
|
|
5415
|
-
function normalizeReplySubject(subject) {
|
|
5416
|
-
return subject.toLowerCase().startsWith("re:") ? subject : `Re: ${subject}`;
|
|
5417
|
-
}
|
|
5418
|
-
function buildRawEmail(input) {
|
|
5419
|
-
const headers = [
|
|
5420
|
-
`To: ${input.to}`,
|
|
5421
|
-
input.cc.length ? `Cc: ${input.cc.join(", ")}` : "",
|
|
5422
|
-
input.bcc.length ? `Bcc: ${input.bcc.join(", ")}` : "",
|
|
5423
|
-
`Subject: ${input.subject}`,
|
|
5424
|
-
input.inReplyTo ? `In-Reply-To: ${input.inReplyTo}` : "",
|
|
5425
|
-
input.references ? `References: ${input.references}` : "",
|
|
5426
|
-
"MIME-Version: 1.0",
|
|
5427
|
-
`Content-Type: ${input.isHtml ? "text/html" : "text/plain"}; charset=UTF-8`
|
|
5428
|
-
].filter(Boolean);
|
|
5429
|
-
return `${headers.join(`\r
|
|
5430
|
-
`)}\r
|
|
5431
|
-
\r
|
|
5432
|
-
${input.body}`;
|
|
5433
|
-
}
|
|
5434
|
-
function safeFilename(filename) {
|
|
5435
|
-
return basename(filename.replace(/[\u00A0\u2000-\u200B\u202F\u205F\u3000]/g, " ")).replace(/[\/\\]/g, "_");
|
|
5436
|
-
}
|
|
5437
|
-
|
|
5438
|
-
// src/core/connectors/googledrive.ts
|
|
5439
|
-
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync as readFileSync2, readdirSync as readdirSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
5440
|
-
import { homedir as homedir2 } from "os";
|
|
5441
|
-
import { basename as basename2, join as join3 } from "path";
|
|
5442
|
-
var DRIVE_API_BASE = "https://www.googleapis.com/drive/v3";
|
|
5443
|
-
var TOKEN_URL2 = "https://oauth2.googleapis.com/token";
|
|
5444
|
-
var REFRESH_BUFFER_MS2 = 5 * 60 * 1000;
|
|
5445
|
-
var DEFAULT_FILE_FIELDS = [
|
|
5446
|
-
"id",
|
|
5447
|
-
"name",
|
|
5448
|
-
"mimeType",
|
|
5449
|
-
"parents",
|
|
5450
|
-
"version",
|
|
5451
|
-
"md5Checksum",
|
|
5452
|
-
"size",
|
|
5453
|
-
"modifiedTime",
|
|
5454
|
-
"createdTime",
|
|
5455
|
-
"trashed",
|
|
5456
|
-
"webViewLink",
|
|
5457
|
-
"webContentLink"
|
|
5458
|
-
].join(",");
|
|
5459
|
-
var DEFAULT_EXPORT_FORMATS = {
|
|
5460
|
-
document: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
5461
|
-
spreadsheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
5462
|
-
presentation: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
5463
|
-
drawing: "image/png"
|
|
5464
|
-
};
|
|
5465
|
-
var EXPORT_EXTENSIONS = {
|
|
5466
|
-
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx",
|
|
5467
|
-
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ".xlsx",
|
|
5468
|
-
"application/vnd.openxmlformats-officedocument.presentationml.presentation": ".pptx",
|
|
5469
|
-
"application/pdf": ".pdf",
|
|
5470
|
-
"text/plain": ".txt",
|
|
5471
|
-
"text/csv": ".csv",
|
|
5472
|
-
"image/png": ".png",
|
|
5473
|
-
"image/jpeg": ".jpg",
|
|
5474
|
-
"image/svg+xml": ".svg"
|
|
5475
|
-
};
|
|
5476
|
-
var listFilesSchema = exports_external.object({
|
|
5477
|
-
pageSize: exports_external.coerce.number().int().positive().max(1000).optional(),
|
|
5478
|
-
pageToken: exports_external.string().optional(),
|
|
5479
|
-
q: exports_external.string().optional(),
|
|
5480
|
-
fields: exports_external.string().optional(),
|
|
5481
|
-
orderBy: exports_external.string().optional(),
|
|
5482
|
-
corpora: exports_external.enum(["user", "drive", "allDrives"]).optional(),
|
|
5483
|
-
driveId: exports_external.string().optional(),
|
|
5484
|
-
supportsAllDrives: exports_external.boolean().optional(),
|
|
5485
|
-
includeItemsFromAllDrives: exports_external.boolean().optional()
|
|
5486
|
-
});
|
|
5487
|
-
var listDrivesSchema = exports_external.object({
|
|
5488
|
-
pageSize: exports_external.coerce.number().int().positive().max(100).optional(),
|
|
5489
|
-
pageToken: exports_external.string().optional(),
|
|
5490
|
-
q: exports_external.string().optional()
|
|
5491
|
-
});
|
|
5492
|
-
var fileIdSchema = exports_external.object({
|
|
5493
|
-
fileId: exports_external.string(),
|
|
5494
|
-
fields: exports_external.string().optional()
|
|
5495
|
-
});
|
|
5496
|
-
var downloadSchema = exports_external.object({
|
|
5497
|
-
fileId: exports_external.string(),
|
|
5498
|
-
file: exports_external.object({
|
|
5499
|
-
id: exports_external.string(),
|
|
5500
|
-
name: exports_external.string(),
|
|
5501
|
-
mimeType: exports_external.string()
|
|
5502
|
-
}).optional(),
|
|
5503
|
-
exportMimeType: exports_external.string().optional()
|
|
5504
|
-
});
|
|
5505
|
-
var profilesStatusSchema = exports_external.object({
|
|
5506
|
-
profile: exports_external.string().optional()
|
|
5507
|
-
});
|
|
5508
|
-
var googleDriveConnector = defineConnector({
|
|
5509
|
-
meta: {
|
|
5510
|
-
name: "googledrive",
|
|
5511
|
-
displayName: "Google Drive",
|
|
5512
|
-
description: "Profile-aware Google Drive discovery and file download operations.",
|
|
5513
|
-
category: "storage",
|
|
5514
|
-
tags: ["google", "drive", "files", "storage"]
|
|
5515
|
-
},
|
|
5516
|
-
auth: {
|
|
5517
|
-
type: "oauth2",
|
|
5518
|
-
supportsProfiles: true,
|
|
5519
|
-
fields: [
|
|
5520
|
-
{ key: "clientId", env: "GOOGLE_CLIENT_ID", label: "OAuth client ID" },
|
|
5521
|
-
{ key: "clientSecret", env: "GOOGLE_CLIENT_SECRET", label: "OAuth client secret", secret: true }
|
|
5522
|
-
]
|
|
5523
|
-
},
|
|
5524
|
-
createContext: ({ profile }) => ({ profile: profile || "default" }),
|
|
5525
|
-
operations: {
|
|
5526
|
-
"profiles.list": {
|
|
5527
|
-
summary: "List configured Google Drive profiles.",
|
|
5528
|
-
execute: () => ({ profiles: listProfiles2() })
|
|
5529
|
-
},
|
|
5530
|
-
"profiles.status": {
|
|
5531
|
-
summary: "List Google Drive profile authentication status.",
|
|
5532
|
-
inputSchema: profilesStatusSchema,
|
|
5533
|
-
execute: (_ctx, input) => ({ profiles: listProfileStatuses(input.profile) })
|
|
5534
|
-
},
|
|
5535
|
-
"files.list": {
|
|
5536
|
-
summary: "List Google Drive files.",
|
|
5537
|
-
inputSchema: listFilesSchema,
|
|
5538
|
-
execute: async ({ context }, input) => requestJson2(context.profile, "/files", {
|
|
5539
|
-
pageSize: input.pageSize ?? 1000,
|
|
5540
|
-
pageToken: input.pageToken,
|
|
5541
|
-
q: input.q,
|
|
5542
|
-
fields: input.fields ?? `nextPageToken,files(${DEFAULT_FILE_FIELDS})`,
|
|
5543
|
-
orderBy: input.orderBy ?? "modifiedTime desc",
|
|
5544
|
-
corpora: input.corpora,
|
|
5545
|
-
driveId: input.driveId,
|
|
5546
|
-
supportsAllDrives: input.supportsAllDrives ?? true,
|
|
5547
|
-
includeItemsFromAllDrives: input.includeItemsFromAllDrives ?? false
|
|
5548
|
-
})
|
|
5549
|
-
},
|
|
5550
|
-
"files.get": {
|
|
5551
|
-
summary: "Get Google Drive file metadata.",
|
|
5552
|
-
inputSchema: fileIdSchema,
|
|
5553
|
-
execute: async ({ context }, input) => requestJson2(context.profile, `/files/${encodeURIComponent(input.fileId)}`, {
|
|
5554
|
-
fields: input.fields ?? DEFAULT_FILE_FIELDS,
|
|
5555
|
-
supportsAllDrives: true
|
|
5556
|
-
})
|
|
5557
|
-
},
|
|
5558
|
-
"files.download": {
|
|
5559
|
-
summary: "Download or export a Google Drive file as base64 content.",
|
|
5560
|
-
inputSchema: downloadSchema,
|
|
5561
|
-
execute: async ({ context }, input) => {
|
|
5562
|
-
const file = input.file ?? await requestJson2(context.profile, `/files/${encodeURIComponent(input.fileId)}`, { fields: DEFAULT_FILE_FIELDS, supportsAllDrives: true });
|
|
5563
|
-
const exportMimeType = file.mimeType.startsWith("application/vnd.google-apps.") ? input.exportMimeType ?? defaultExportMimeType(file.mimeType) : undefined;
|
|
5564
|
-
const data = await requestBinary(context.profile, exportMimeType ? `/files/${encodeURIComponent(file.id)}/export` : `/files/${encodeURIComponent(file.id)}`, exportMimeType ? { mimeType: exportMimeType, supportsAllDrives: true } : { alt: "media", supportsAllDrives: true });
|
|
5565
|
-
const mimeType = exportMimeType ?? file.mimeType ?? "application/octet-stream";
|
|
5566
|
-
return {
|
|
5567
|
-
dataBase64: Buffer.from(data).toString("base64"),
|
|
5568
|
-
filename: exportMimeType ? `${file.name}${extensionForMimeType(exportMimeType)}` : file.name,
|
|
5569
|
-
mimeType
|
|
5570
|
-
};
|
|
5571
|
-
}
|
|
5572
|
-
},
|
|
5573
|
-
"drives.list": {
|
|
5574
|
-
summary: "List Google shared drives.",
|
|
5575
|
-
inputSchema: listDrivesSchema,
|
|
5576
|
-
execute: async ({ context }, input) => requestJson2(context.profile, "/drives", {
|
|
5577
|
-
pageSize: input.pageSize ?? 100,
|
|
5578
|
-
pageToken: input.pageToken,
|
|
5579
|
-
q: input.q
|
|
5580
|
-
})
|
|
5581
|
-
}
|
|
5582
|
-
}
|
|
5583
|
-
});
|
|
5584
|
-
async function requestJson2(profile, path, params) {
|
|
5585
|
-
const response = await request(profile, path, params);
|
|
5586
|
-
const text = await response.text();
|
|
5587
|
-
return text ? JSON.parse(text) : {};
|
|
5588
|
-
}
|
|
5589
|
-
async function requestBinary(profile, path, params) {
|
|
5590
|
-
return (await request(profile, path, params)).arrayBuffer();
|
|
5591
|
-
}
|
|
5592
|
-
async function request(profile, path, params) {
|
|
5593
|
-
const token = await getValidAccessToken2(profile);
|
|
5594
|
-
const url = new URL(`${DRIVE_API_BASE}${path}`);
|
|
5595
|
-
for (const [key, value] of Object.entries(params)) {
|
|
5596
|
-
if (value !== undefined && value !== null && value !== "")
|
|
5597
|
-
url.searchParams.set(key, String(value));
|
|
5598
|
-
}
|
|
5599
|
-
const response = await fetch(url, { headers: { Authorization: `Bearer ${token}`, Accept: "application/json" } });
|
|
5600
|
-
if (!response.ok) {
|
|
5601
|
-
const body = await response.text().catch(() => "");
|
|
5602
|
-
throw new Error(`Google Drive request failed (${response.status}): ${extractGoogleError(body) || response.statusText}`);
|
|
5603
|
-
}
|
|
5604
|
-
return response;
|
|
5605
|
-
}
|
|
5606
|
-
async function getValidAccessToken2(profile) {
|
|
5607
|
-
if (process.env.GOOGLE_ACCESS_TOKEN)
|
|
5608
|
-
return process.env.GOOGLE_ACCESS_TOKEN;
|
|
5609
|
-
const tokens = loadTokens2(profile);
|
|
5610
|
-
if (!tokens?.accessToken && !tokens?.refreshToken) {
|
|
5611
|
-
throw new Error(`Google Drive profile "${profile}" is not authenticated. Run: connectors auth googledrive`);
|
|
5612
|
-
}
|
|
5613
|
-
if (tokens.accessToken && (!tokens.expiresAt || Date.now() < tokens.expiresAt - REFRESH_BUFFER_MS2))
|
|
5614
|
-
return tokens.accessToken;
|
|
5615
|
-
if (!tokens.refreshToken)
|
|
5616
|
-
return tokens.accessToken ?? "";
|
|
5617
|
-
return (await refreshAccessToken2(profile, tokens)).accessToken ?? "";
|
|
5618
|
-
}
|
|
5619
|
-
async function refreshAccessToken2(profile, currentTokens) {
|
|
5620
|
-
const credentials = loadCredentials2(profile);
|
|
5621
|
-
if (!credentials.clientId || !credentials.clientSecret)
|
|
5622
|
-
throw new Error("Google Drive OAuth credentials are not configured. Run: connectors auth googledrive");
|
|
5623
|
-
if (!currentTokens.refreshToken)
|
|
5624
|
-
throw new Error(`Google Drive profile "${profile}" has no refresh token. Run: connectors auth googledrive`);
|
|
5625
|
-
const response = await fetch(TOKEN_URL2, {
|
|
5626
|
-
method: "POST",
|
|
5627
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
5628
|
-
body: new URLSearchParams({
|
|
5629
|
-
client_id: credentials.clientId,
|
|
5630
|
-
client_secret: credentials.clientSecret,
|
|
5631
|
-
refresh_token: currentTokens.refreshToken,
|
|
5632
|
-
grant_type: "refresh_token"
|
|
5633
|
-
})
|
|
5634
|
-
});
|
|
5635
|
-
const data = await response.json().catch(() => ({}));
|
|
5636
|
-
if (!response.ok || !data.access_token)
|
|
5637
|
-
throw new Error(`Google Drive token refresh failed: ${data.error_description || data.error || response.statusText}`);
|
|
5638
|
-
const tokens = {
|
|
5639
|
-
accessToken: data.access_token,
|
|
5640
|
-
refreshToken: currentTokens.refreshToken,
|
|
5641
|
-
expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,
|
|
5642
|
-
tokenType: data.token_type ?? currentTokens.tokenType,
|
|
5643
|
-
scope: data.scope ?? currentTokens.scope
|
|
5644
|
-
};
|
|
5645
|
-
saveTokens2(profile, tokens);
|
|
5646
|
-
return tokens;
|
|
5647
|
-
}
|
|
5648
|
-
function listProfiles2() {
|
|
5649
|
-
const profiles = new Set;
|
|
5650
|
-
for (const baseDir of configDirs2()) {
|
|
5651
|
-
const profilesDir = join3(baseDir, "profiles");
|
|
5652
|
-
if (!existsSync3(profilesDir))
|
|
5653
|
-
continue;
|
|
5654
|
-
for (const entry of readdirSync2(profilesDir, { withFileTypes: true })) {
|
|
5655
|
-
if (entry.isDirectory())
|
|
5656
|
-
profiles.add(entry.name);
|
|
5657
|
-
if (entry.isFile() && entry.name.endsWith(".json"))
|
|
5658
|
-
profiles.add(basename2(entry.name, ".json"));
|
|
5659
|
-
}
|
|
5660
|
-
}
|
|
5661
|
-
return Array.from(profiles).sort((a, b) => a.localeCompare(b));
|
|
5662
|
-
}
|
|
5663
|
-
function listProfileStatuses(profile) {
|
|
5664
|
-
const profiles = profile ? [profile] : listProfiles2();
|
|
5665
|
-
const uniqueProfiles = profiles.length ? profiles : ["default"];
|
|
5666
|
-
const now = Date.now();
|
|
5667
|
-
return uniqueProfiles.map((name) => {
|
|
5668
|
-
const tokens = loadTokens2(name);
|
|
5669
|
-
const credentials = loadCredentials2(name);
|
|
5670
|
-
const hasAccessToken = Boolean(tokens?.accessToken || process.env.GOOGLE_ACCESS_TOKEN);
|
|
5671
|
-
const hasRefreshToken = Boolean(tokens?.refreshToken);
|
|
5672
|
-
const hasOAuthCredentials = Boolean(credentials.clientId && credentials.clientSecret);
|
|
5673
|
-
const expiresAt = tokens?.expiresAt ?? null;
|
|
5674
|
-
const expired = Boolean(expiresAt && now >= expiresAt - REFRESH_BUFFER_MS2);
|
|
5675
|
-
const authenticated = Boolean(process.env.GOOGLE_ACCESS_TOKEN || hasRefreshToken || hasAccessToken && !expired);
|
|
5676
|
-
const configured = authenticated || hasOAuthCredentials;
|
|
5677
|
-
const authRequired = !authenticated || expired && !hasRefreshToken;
|
|
5678
|
-
return {
|
|
5679
|
-
profile: name,
|
|
5680
|
-
configured,
|
|
5681
|
-
authenticated,
|
|
5682
|
-
expired,
|
|
5683
|
-
expiresAt,
|
|
5684
|
-
hasAccessToken,
|
|
5685
|
-
hasRefreshToken,
|
|
5686
|
-
hasOAuthCredentials,
|
|
5687
|
-
authRequired,
|
|
5688
|
-
message: authRequired ? `Google Drive profile "${name}" needs authentication. Run: connectors auth googledrive` : expired ? `Google Drive profile "${name}" access token is expired but can refresh.` : `Google Drive profile "${name}" is authenticated.`
|
|
5689
|
-
};
|
|
5690
|
-
});
|
|
5691
|
-
}
|
|
5692
|
-
function loadCredentials2(profile) {
|
|
5693
|
-
const envClientId = process.env.GOOGLE_CLIENT_ID;
|
|
5694
|
-
const envClientSecret = process.env.GOOGLE_CLIENT_SECRET;
|
|
5695
|
-
if (envClientId && envClientSecret)
|
|
5696
|
-
return { clientId: envClientId, clientSecret: envClientSecret };
|
|
5697
|
-
for (const baseDir of configDirs2()) {
|
|
5698
|
-
const credentials = {
|
|
5699
|
-
...readJson2(join3(baseDir, "credentials.json")),
|
|
5700
|
-
...readJson2(join3(baseDir, "profiles", profile, "config.json"))
|
|
5701
|
-
};
|
|
5702
|
-
if (credentials.clientId || credentials.clientSecret)
|
|
5703
|
-
return credentials;
|
|
5704
|
-
}
|
|
5705
|
-
return {};
|
|
5706
|
-
}
|
|
5707
|
-
function loadTokens2(profile) {
|
|
5708
|
-
for (const baseDir of configDirs2()) {
|
|
5709
|
-
const fromProfile = readJson2(join3(baseDir, "profiles", profile, "tokens.json"));
|
|
5710
|
-
if (fromProfile)
|
|
5711
|
-
return fromProfile;
|
|
5712
|
-
const flat = readJson2(join3(baseDir, "profiles", `${profile}.json`));
|
|
5713
|
-
if (flat)
|
|
5714
|
-
return flat.tokens ?? (flat.accessToken || flat.refreshToken ? flat : null);
|
|
5715
|
-
}
|
|
5716
|
-
return null;
|
|
5717
|
-
}
|
|
5718
|
-
function saveTokens2(profile, tokens) {
|
|
5719
|
-
const baseDir = configDirs2().find((dir) => existsSync3(dir)) ?? configDirs2()[0];
|
|
5720
|
-
const profileDir = join3(baseDir, "profiles", profile);
|
|
5721
|
-
mkdirSync2(profileDir, { recursive: true });
|
|
5722
|
-
writeFileSync2(join3(profileDir, "tokens.json"), JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
5723
|
-
}
|
|
5724
|
-
function configDirs2() {
|
|
5725
|
-
const explicit = process.env.HASNA_GOOGLE_DRIVE_CONNECTOR_DIR ?? process.env.GOOGLE_DRIVE_CONNECTOR_DIR;
|
|
5726
|
-
if (explicit)
|
|
5727
|
-
return [explicit];
|
|
5728
|
-
const baseDir = process.env.HASNA_CONNECTORS_DIR ?? join3(homedir2(), ".hasna", "connectors");
|
|
5729
|
-
return [join3(baseDir, "googledrive"), join3(baseDir, "connect-googledrive")];
|
|
5730
|
-
}
|
|
5731
|
-
function readJson2(path) {
|
|
5732
|
-
if (!existsSync3(path))
|
|
5733
|
-
return null;
|
|
5734
|
-
try {
|
|
5735
|
-
return JSON.parse(readFileSync2(path, "utf8"));
|
|
5736
|
-
} catch {
|
|
5737
|
-
return null;
|
|
5738
|
-
}
|
|
5739
|
-
}
|
|
5740
|
-
function defaultExportMimeType(googleMimeType) {
|
|
5741
|
-
if (googleMimeType.endsWith(".document"))
|
|
5742
|
-
return DEFAULT_EXPORT_FORMATS.document;
|
|
5743
|
-
if (googleMimeType.endsWith(".spreadsheet"))
|
|
5744
|
-
return DEFAULT_EXPORT_FORMATS.spreadsheet;
|
|
5745
|
-
if (googleMimeType.endsWith(".presentation"))
|
|
5746
|
-
return DEFAULT_EXPORT_FORMATS.presentation;
|
|
5747
|
-
if (googleMimeType.endsWith(".drawing"))
|
|
5748
|
-
return DEFAULT_EXPORT_FORMATS.drawing;
|
|
5749
|
-
throw new Error(`Cannot export Google Workspace file type: ${googleMimeType}`);
|
|
5750
|
-
}
|
|
5751
|
-
function extensionForMimeType(mimeType) {
|
|
5752
|
-
return EXPORT_EXTENSIONS[mimeType] ?? "";
|
|
5753
|
-
}
|
|
5754
|
-
function extractGoogleError(body) {
|
|
5755
|
-
if (!body)
|
|
5756
|
-
return "";
|
|
5757
|
-
try {
|
|
5758
|
-
const parsed = JSON.parse(body);
|
|
5759
|
-
return parsed.error?.message ?? body;
|
|
5760
|
-
} catch {
|
|
5761
|
-
return body;
|
|
5762
|
-
}
|
|
5763
|
-
}
|
|
5764
4969
|
// package.json
|
|
5765
4970
|
var package_default = {
|
|
5766
4971
|
name: "@hasna/connectors",
|
|
5767
|
-
version: "1.3.
|
|
4972
|
+
version: "1.3.24",
|
|
5768
4973
|
description: "Open source connector library - Install API connectors with a single command",
|
|
5769
4974
|
type: "module",
|
|
5770
4975
|
bin: {
|
|
@@ -5852,39 +5057,35 @@ var package_default = {
|
|
|
5852
5057
|
|
|
5853
5058
|
// src/core/connectors/imessage.ts
|
|
5854
5059
|
import {
|
|
5855
|
-
existsSync as
|
|
5060
|
+
existsSync as existsSync6,
|
|
5856
5061
|
mkdirSync as mkdirSync5,
|
|
5857
|
-
readFileSync as
|
|
5858
|
-
readdirSync as
|
|
5062
|
+
readFileSync as readFileSync2,
|
|
5063
|
+
readdirSync as readdirSync5,
|
|
5859
5064
|
rmSync,
|
|
5860
|
-
statSync as
|
|
5861
|
-
writeFileSync as
|
|
5065
|
+
statSync as statSync2,
|
|
5066
|
+
writeFileSync as writeFileSync2
|
|
5862
5067
|
} from "fs";
|
|
5863
|
-
import { join as join9 } from "path";
|
|
5864
|
-
|
|
5865
|
-
// src/lib/connector-resolver.ts
|
|
5866
|
-
import { existsSync as existsSync6, readdirSync as readdirSync5, statSync as statSync2 } from "fs";
|
|
5867
5068
|
import { join as join7 } from "path";
|
|
5868
5069
|
|
|
5869
5070
|
// node_modules/@hasna/cloud/dist/index.js
|
|
5870
5071
|
import { createRequire } from "module";
|
|
5871
5072
|
import { Database } from "bun:sqlite";
|
|
5872
5073
|
import {
|
|
5873
|
-
existsSync as
|
|
5874
|
-
mkdirSync
|
|
5875
|
-
readdirSync
|
|
5074
|
+
existsSync as existsSync2,
|
|
5075
|
+
mkdirSync,
|
|
5076
|
+
readdirSync,
|
|
5876
5077
|
copyFileSync
|
|
5877
5078
|
} from "fs";
|
|
5878
|
-
import { homedir
|
|
5879
|
-
import { join as
|
|
5880
|
-
import { existsSync as existsSync22, mkdirSync as
|
|
5881
|
-
import { homedir as
|
|
5079
|
+
import { homedir } from "os";
|
|
5080
|
+
import { join as join2, relative } from "path";
|
|
5081
|
+
import { existsSync as existsSync22, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "fs";
|
|
5082
|
+
import { homedir as homedir2 } from "os";
|
|
5882
5083
|
import { join as join22 } from "path";
|
|
5883
|
-
import { readdirSync as
|
|
5884
|
-
import { join as
|
|
5885
|
-
import { homedir as
|
|
5084
|
+
import { readdirSync as readdirSync2, existsSync as existsSync3 } from "fs";
|
|
5085
|
+
import { join as join3 } from "path";
|
|
5086
|
+
import { homedir as homedir3 } from "os";
|
|
5886
5087
|
import { homedir as homedir4 } from "os";
|
|
5887
|
-
import { join as
|
|
5088
|
+
import { join as join4 } from "path";
|
|
5888
5089
|
import { join as join6, dirname as dirname2 } from "path";
|
|
5889
5090
|
import { homedir as homedir5, platform } from "os";
|
|
5890
5091
|
var __create = Object.create;
|
|
@@ -15050,17 +14251,17 @@ var init_zod = __esm(() => {
|
|
|
15050
14251
|
init_external();
|
|
15051
14252
|
});
|
|
15052
14253
|
function getDataDir(serviceName) {
|
|
15053
|
-
const dir =
|
|
15054
|
-
|
|
14254
|
+
const dir = join2(HASNA_DIR, serviceName);
|
|
14255
|
+
mkdirSync(dir, { recursive: true });
|
|
15055
14256
|
return dir;
|
|
15056
14257
|
}
|
|
15057
14258
|
function getDbPath(serviceName) {
|
|
15058
14259
|
const dir = getDataDir(serviceName);
|
|
15059
|
-
return
|
|
14260
|
+
return join2(dir, `${serviceName}.db`);
|
|
15060
14261
|
}
|
|
15061
14262
|
var HASNA_DIR;
|
|
15062
14263
|
var init_dotfile = __esm(() => {
|
|
15063
|
-
HASNA_DIR =
|
|
14264
|
+
HASNA_DIR = join2(homedir(), ".hasna");
|
|
15064
14265
|
});
|
|
15065
14266
|
var exports_config = {};
|
|
15066
14267
|
__export2(exports_config, {
|
|
@@ -15083,15 +14284,15 @@ function getCloudConfig() {
|
|
|
15083
14284
|
return CloudConfigSchema.parse({});
|
|
15084
14285
|
}
|
|
15085
14286
|
try {
|
|
15086
|
-
const raw =
|
|
14287
|
+
const raw = readFileSync(CONFIG_PATH, "utf-8");
|
|
15087
14288
|
return CloudConfigSchema.parse(JSON.parse(raw));
|
|
15088
14289
|
} catch {
|
|
15089
14290
|
return CloudConfigSchema.parse({});
|
|
15090
14291
|
}
|
|
15091
14292
|
}
|
|
15092
14293
|
function saveCloudConfig(config) {
|
|
15093
|
-
|
|
15094
|
-
|
|
14294
|
+
mkdirSync2(CONFIG_DIR, { recursive: true });
|
|
14295
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + `
|
|
15095
14296
|
`, "utf-8");
|
|
15096
14297
|
}
|
|
15097
14298
|
function getConnectionString(dbName) {
|
|
@@ -15139,7 +14340,7 @@ var init_config = __esm(() => {
|
|
|
15139
14340
|
schedule_minutes: exports_external2.number().default(0)
|
|
15140
14341
|
}).default({})
|
|
15141
14342
|
});
|
|
15142
|
-
CONFIG_DIR = join22(
|
|
14343
|
+
CONFIG_DIR = join22(homedir2(), ".hasna", "cloud");
|
|
15143
14344
|
CONFIG_PATH = join22(CONFIG_DIR, "config.json");
|
|
15144
14345
|
});
|
|
15145
14346
|
var exports_discover = {};
|
|
@@ -15155,11 +14356,11 @@ function isSyncExcludedTable(table) {
|
|
|
15155
14356
|
return SYNC_EXCLUDED_TABLE_PATTERNS.some((p) => p.test(table));
|
|
15156
14357
|
}
|
|
15157
14358
|
function discoverServices() {
|
|
15158
|
-
const dataDir =
|
|
15159
|
-
if (!
|
|
14359
|
+
const dataDir = join3(homedir3(), ".hasna");
|
|
14360
|
+
if (!existsSync3(dataDir))
|
|
15160
14361
|
return [];
|
|
15161
14362
|
try {
|
|
15162
|
-
const entries =
|
|
14363
|
+
const entries = readdirSync2(dataDir, { withFileTypes: true });
|
|
15163
14364
|
return entries.filter((e) => {
|
|
15164
14365
|
if (!e.isDirectory())
|
|
15165
14366
|
return false;
|
|
@@ -15177,24 +14378,24 @@ function discoverSyncableServices() {
|
|
|
15177
14378
|
return local.filter((s) => pgSet.has(s));
|
|
15178
14379
|
}
|
|
15179
14380
|
function getServiceDbPath(service) {
|
|
15180
|
-
const dataDir =
|
|
15181
|
-
if (!
|
|
14381
|
+
const dataDir = join3(homedir3(), ".hasna", service);
|
|
14382
|
+
if (!existsSync3(dataDir))
|
|
15182
14383
|
return null;
|
|
15183
14384
|
const candidates = [
|
|
15184
|
-
|
|
15185
|
-
|
|
15186
|
-
|
|
14385
|
+
join3(dataDir, `${service}.db`),
|
|
14386
|
+
join3(dataDir, "data.db"),
|
|
14387
|
+
join3(dataDir, "database.db")
|
|
15187
14388
|
];
|
|
15188
14389
|
try {
|
|
15189
|
-
const files =
|
|
14390
|
+
const files = readdirSync2(dataDir);
|
|
15190
14391
|
for (const f of files) {
|
|
15191
14392
|
if (f.endsWith(".db") && !f.endsWith("-wal") && !f.endsWith("-shm")) {
|
|
15192
|
-
candidates.push(
|
|
14393
|
+
candidates.push(join3(dataDir, f));
|
|
15193
14394
|
}
|
|
15194
14395
|
}
|
|
15195
14396
|
} catch {}
|
|
15196
14397
|
for (const p of candidates) {
|
|
15197
|
-
if (
|
|
14398
|
+
if (existsSync3(p))
|
|
15198
14399
|
return p;
|
|
15199
14400
|
}
|
|
15200
14401
|
return null;
|
|
@@ -15374,7 +14575,7 @@ class SyncProgressTracker {
|
|
|
15374
14575
|
init_adapter();
|
|
15375
14576
|
init_config();
|
|
15376
14577
|
init_discover();
|
|
15377
|
-
var AUTO_SYNC_CONFIG_PATH =
|
|
14578
|
+
var AUTO_SYNC_CONFIG_PATH = join4(homedir4(), ".hasna", "cloud", "config.json");
|
|
15378
14579
|
init_config();
|
|
15379
14580
|
init_adapter();
|
|
15380
14581
|
init_dotfile();
|
|
@@ -15394,13 +14595,13 @@ init_adapter();
|
|
|
15394
14595
|
// src/db/database.ts
|
|
15395
14596
|
import { dirname as dirname3, join as join5 } from "path";
|
|
15396
14597
|
import { homedir as homedir6 } from "os";
|
|
15397
|
-
import { mkdirSync as
|
|
14598
|
+
import { mkdirSync as mkdirSync3, existsSync as existsSync4, readdirSync as readdirSync3, copyFileSync as copyFileSync2, statSync } from "fs";
|
|
15398
14599
|
function mergeDirectoryContents(sourceDir, targetDir) {
|
|
15399
|
-
if (!
|
|
14600
|
+
if (!existsSync4(sourceDir)) {
|
|
15400
14601
|
return;
|
|
15401
14602
|
}
|
|
15402
|
-
|
|
15403
|
-
for (const entry of
|
|
14603
|
+
mkdirSync3(targetDir, { recursive: true });
|
|
14604
|
+
for (const entry of readdirSync3(sourceDir)) {
|
|
15404
14605
|
const sourcePath = join5(sourceDir, entry);
|
|
15405
14606
|
const targetPath = join5(targetDir, entry);
|
|
15406
14607
|
try {
|
|
@@ -15409,7 +14610,7 @@ function mergeDirectoryContents(sourceDir, targetDir) {
|
|
|
15409
14610
|
mergeDirectoryContents(sourcePath, targetPath);
|
|
15410
14611
|
continue;
|
|
15411
14612
|
}
|
|
15412
|
-
if (!
|
|
14613
|
+
if (!existsSync4(targetPath)) {
|
|
15413
14614
|
copyFileSync2(sourcePath, targetPath);
|
|
15414
14615
|
}
|
|
15415
14616
|
} catch {}
|
|
@@ -15419,7 +14620,7 @@ function getConnectorsHome() {
|
|
|
15419
14620
|
const home = process.env["HOME"] || process.env["USERPROFILE"] || homedir6();
|
|
15420
14621
|
const newDir = join5(home, ".hasna", "connectors");
|
|
15421
14622
|
const legacyDirs = [join5(home, ".connectors"), join5(home, ".connect")];
|
|
15422
|
-
|
|
14623
|
+
mkdirSync3(newDir, { recursive: true });
|
|
15423
14624
|
for (const legacyDir of legacyDirs) {
|
|
15424
14625
|
try {
|
|
15425
14626
|
mergeDirectoryContents(legacyDir, newDir);
|
|
@@ -15430,85 +14631,8 @@ function getConnectorsHome() {
|
|
|
15430
14631
|
var DB_DIR = getConnectorsHome();
|
|
15431
14632
|
var DB_PATH = join5(DB_DIR, "connectors.db");
|
|
15432
14633
|
|
|
15433
|
-
// src/lib/connector-resolver.ts
|
|
15434
|
-
var LEGACY_CONNECTOR_PREFIX = "connect-";
|
|
15435
|
-
var CONNECTOR_NAME_RE2 = /^[a-z0-9-]+$/;
|
|
15436
|
-
function normalizeConnectorName(name) {
|
|
15437
|
-
const trimmed = name.trim().toLowerCase();
|
|
15438
|
-
return trimmed.startsWith(LEGACY_CONNECTOR_PREFIX) ? trimmed.slice(LEGACY_CONNECTOR_PREFIX.length) : trimmed;
|
|
15439
|
-
}
|
|
15440
|
-
function legacyConnectorName(name) {
|
|
15441
|
-
return `${LEGACY_CONNECTOR_PREFIX}${normalizeConnectorName(name)}`;
|
|
15442
|
-
}
|
|
15443
|
-
function resolveConnectorName(name) {
|
|
15444
|
-
const canonicalName = normalizeConnectorName(name);
|
|
15445
|
-
const legacyName = legacyConnectorName(canonicalName);
|
|
15446
|
-
return {
|
|
15447
|
-
input: name,
|
|
15448
|
-
canonicalName,
|
|
15449
|
-
legacyName,
|
|
15450
|
-
aliases: canonicalName === legacyName ? [canonicalName] : [canonicalName, legacyName],
|
|
15451
|
-
isLegacyInput: name.trim().toLowerCase().startsWith(LEGACY_CONNECTOR_PREFIX)
|
|
15452
|
-
};
|
|
15453
|
-
}
|
|
15454
|
-
function isValidConnectorName(name) {
|
|
15455
|
-
const trimmed = name.trim();
|
|
15456
|
-
if (trimmed !== trimmed.toLowerCase())
|
|
15457
|
-
return false;
|
|
15458
|
-
return CONNECTOR_NAME_RE2.test(normalizeConnectorName(trimmed));
|
|
15459
|
-
}
|
|
15460
|
-
function connectorPackageDirNames(name) {
|
|
15461
|
-
const { canonicalName, legacyName } = resolveConnectorName(name);
|
|
15462
|
-
if (!canonicalName)
|
|
15463
|
-
return [legacyName];
|
|
15464
|
-
return canonicalName === legacyName ? [canonicalName] : [canonicalName, legacyName];
|
|
15465
|
-
}
|
|
15466
|
-
function resolveConnectorPackagePath(connectorsDir, name) {
|
|
15467
|
-
const resolution = resolveConnectorName(name);
|
|
15468
|
-
const dirNames = connectorPackageDirNames(name);
|
|
15469
|
-
const checkedPaths = dirNames.map((dirName) => join7(connectorsDir, dirName));
|
|
15470
|
-
const existingPath = checkedPaths.find((path) => existsSync6(path)) ?? null;
|
|
15471
|
-
const existingDirName = existingPath ? dirNames[checkedPaths.indexOf(existingPath)] : null;
|
|
15472
|
-
return {
|
|
15473
|
-
...resolution,
|
|
15474
|
-
connectorsDir,
|
|
15475
|
-
preferredDirName: dirNames[0],
|
|
15476
|
-
preferredPath: checkedPaths[0],
|
|
15477
|
-
existingPath,
|
|
15478
|
-
existingDirName,
|
|
15479
|
-
checkedPaths
|
|
15480
|
-
};
|
|
15481
|
-
}
|
|
15482
|
-
function getConnectorPackagePath(connectorsDir, name) {
|
|
15483
|
-
const resolved = resolveConnectorPackagePath(connectorsDir, name);
|
|
15484
|
-
return resolved.existingPath ?? resolved.preferredPath;
|
|
15485
|
-
}
|
|
15486
|
-
function resolveConnectorConfigPaths(name, connectorsHome = getConnectorsHome()) {
|
|
15487
|
-
const resolution = resolveConnectorName(name);
|
|
15488
|
-
const preferredDirName = resolution.canonicalName || resolution.legacyName;
|
|
15489
|
-
const preferredPath = join7(connectorsHome, preferredDirName);
|
|
15490
|
-
const legacyPath = join7(connectorsHome, resolution.legacyName);
|
|
15491
|
-
const paths = preferredPath === legacyPath ? [preferredPath] : [preferredPath, legacyPath];
|
|
15492
|
-
const existingPaths = paths.filter((path) => existsSync6(path));
|
|
15493
|
-
return {
|
|
15494
|
-
...resolution,
|
|
15495
|
-
connectorsHome,
|
|
15496
|
-
preferredDirName,
|
|
15497
|
-
preferredPath,
|
|
15498
|
-
legacyPath,
|
|
15499
|
-
existingPaths,
|
|
15500
|
-
readPaths: paths
|
|
15501
|
-
};
|
|
15502
|
-
}
|
|
15503
|
-
function getConnectorConfigDir(name, connectorsHome = getConnectorsHome()) {
|
|
15504
|
-
return resolveConnectorConfigPaths(name, connectorsHome).preferredPath;
|
|
15505
|
-
}
|
|
15506
|
-
function getConnectorConfigReadDirs(name, connectorsHome = getConnectorsHome()) {
|
|
15507
|
-
return resolveConnectorConfigPaths(name, connectorsHome).readPaths;
|
|
15508
|
-
}
|
|
15509
|
-
|
|
15510
14634
|
// src/core/connectors/imessage.ts
|
|
15511
|
-
var
|
|
14635
|
+
var CONNECTOR_DIRNAME = "connect-imessage";
|
|
15512
14636
|
var COMMAND_SPECS = [
|
|
15513
14637
|
{
|
|
15514
14638
|
name: "profile",
|
|
@@ -15632,7 +14756,7 @@ API Key authentication is optional and depends on the bridge deployment. A bridg
|
|
|
15632
14756
|
|
|
15633
14757
|
## Data Storage
|
|
15634
14758
|
|
|
15635
|
-
Connector state is stored under \`~/.hasna/connectors/imessage/\`. Profiles are read from both \`profiles/<name>.json\` and \`profiles/<name>/config.json\` so the connector stays compatible with the shared dashboard auth helpers while remaining fully internal to the one-product repo.
|
|
14759
|
+
Connector state is stored under \`~/.hasna/connectors/connect-imessage/\`. Profiles are read from both \`profiles/<name>.json\` and \`profiles/<name>/config.json\` so the connector stays compatible with the shared dashboard auth helpers while remaining fully internal to the one-product repo.
|
|
15636
14760
|
`;
|
|
15637
14761
|
var commandInputSchema = exports_external.object({
|
|
15638
14762
|
args: exports_external.array(exports_external.string()).default([]),
|
|
@@ -15668,44 +14792,36 @@ var messageReplyInputSchema = exports_external.object({
|
|
|
15668
14792
|
deviceId: exports_external.string().optional()
|
|
15669
14793
|
});
|
|
15670
14794
|
function getConfigDir2() {
|
|
15671
|
-
return
|
|
15672
|
-
}
|
|
15673
|
-
function getConfigReadDirs() {
|
|
15674
|
-
return getConnectorConfigReadDirs(CONNECTOR_NAME);
|
|
14795
|
+
return join7(getConnectorsHome(), CONNECTOR_DIRNAME);
|
|
15675
14796
|
}
|
|
15676
14797
|
function getProfilesDir() {
|
|
15677
|
-
return
|
|
14798
|
+
return join7(getConfigDir2(), "profiles");
|
|
15678
14799
|
}
|
|
15679
14800
|
function getCurrentProfile() {
|
|
15680
|
-
|
|
15681
|
-
|
|
15682
|
-
|
|
15683
|
-
|
|
15684
|
-
|
|
15685
|
-
|
|
15686
|
-
|
|
15687
|
-
|
|
15688
|
-
}
|
|
14801
|
+
const currentProfileFile = join7(getConfigDir2(), "current_profile");
|
|
14802
|
+
if (!existsSync6(currentProfileFile)) {
|
|
14803
|
+
return "default";
|
|
14804
|
+
}
|
|
14805
|
+
try {
|
|
14806
|
+
return readFileSync2(currentProfileFile, "utf-8").trim() || "default";
|
|
14807
|
+
} catch {
|
|
14808
|
+
return "default";
|
|
15689
14809
|
}
|
|
15690
|
-
return "default";
|
|
15691
14810
|
}
|
|
15692
14811
|
function setCurrentProfile(profile) {
|
|
15693
14812
|
const configDir = getConfigDir2();
|
|
15694
14813
|
mkdirSync5(configDir, { recursive: true });
|
|
15695
|
-
|
|
14814
|
+
writeFileSync2(join7(configDir, "current_profile"), profile);
|
|
15696
14815
|
}
|
|
15697
14816
|
function getFlatProfilePath(profile) {
|
|
15698
|
-
return
|
|
15699
|
-
}
|
|
15700
|
-
function getFlatProfileReadPaths(profile) {
|
|
15701
|
-
return getConfigReadDirs().map((dir) => join9(dir, "profiles", `${profile}.json`));
|
|
14817
|
+
return join7(getProfilesDir(), `${profile}.json`);
|
|
15702
14818
|
}
|
|
15703
|
-
function
|
|
15704
|
-
return
|
|
14819
|
+
function getDirectoryProfilePath(profile) {
|
|
14820
|
+
return join7(getProfilesDir(), profile, "config.json");
|
|
15705
14821
|
}
|
|
15706
14822
|
function loadJsonFile(path) {
|
|
15707
14823
|
try {
|
|
15708
|
-
return JSON.parse(
|
|
14824
|
+
return JSON.parse(readFileSync2(path, "utf-8"));
|
|
15709
14825
|
} catch {
|
|
15710
14826
|
return {};
|
|
15711
14827
|
}
|
|
@@ -15721,8 +14837,8 @@ function sanitizeProfileConfig(config) {
|
|
|
15721
14837
|
};
|
|
15722
14838
|
}
|
|
15723
14839
|
function loadProfile(profile = getCurrentProfile()) {
|
|
15724
|
-
const flatConfig =
|
|
15725
|
-
const directoryConfig =
|
|
14840
|
+
const flatConfig = existsSync6(getFlatProfilePath(profile)) ? loadJsonFile(getFlatProfilePath(profile)) : {};
|
|
14841
|
+
const directoryConfig = existsSync6(getDirectoryProfilePath(profile)) ? loadJsonFile(getDirectoryProfilePath(profile)) : {};
|
|
15726
14842
|
return sanitizeProfileConfig({
|
|
15727
14843
|
...flatConfig,
|
|
15728
14844
|
...directoryConfig
|
|
@@ -15731,33 +14847,32 @@ function loadProfile(profile = getCurrentProfile()) {
|
|
|
15731
14847
|
function writeProfile(profile, config) {
|
|
15732
14848
|
const profilesDir = getProfilesDir();
|
|
15733
14849
|
mkdirSync5(profilesDir, { recursive: true });
|
|
15734
|
-
|
|
14850
|
+
writeFileSync2(getFlatProfilePath(profile), JSON.stringify(config, null, 2) + `
|
|
15735
14851
|
`);
|
|
15736
14852
|
}
|
|
15737
14853
|
function profileExists(profile) {
|
|
15738
14854
|
if (profile === "default") {
|
|
15739
14855
|
return true;
|
|
15740
14856
|
}
|
|
15741
|
-
return
|
|
14857
|
+
return existsSync6(getFlatProfilePath(profile)) || existsSync6(join7(getProfilesDir(), profile));
|
|
15742
14858
|
}
|
|
15743
|
-
function
|
|
14859
|
+
function listProfiles() {
|
|
14860
|
+
const profilesDir = getProfilesDir();
|
|
15744
14861
|
const seen = new Set(["default"]);
|
|
15745
|
-
|
|
15746
|
-
|
|
15747
|
-
if (!existsSync7(profilesDir))
|
|
15748
|
-
continue;
|
|
15749
|
-
try {
|
|
15750
|
-
for (const entry of readdirSync6(profilesDir)) {
|
|
15751
|
-
const fullPath = join9(profilesDir, entry);
|
|
15752
|
-
const stat = statSync3(fullPath);
|
|
15753
|
-
if (stat.isDirectory()) {
|
|
15754
|
-
seen.add(entry);
|
|
15755
|
-
} else if (entry.endsWith(".json")) {
|
|
15756
|
-
seen.add(entry.replace(/\.json$/, ""));
|
|
15757
|
-
}
|
|
15758
|
-
}
|
|
15759
|
-
} catch {}
|
|
14862
|
+
if (!existsSync6(profilesDir)) {
|
|
14863
|
+
return [...seen];
|
|
15760
14864
|
}
|
|
14865
|
+
try {
|
|
14866
|
+
for (const entry of readdirSync5(profilesDir)) {
|
|
14867
|
+
const fullPath = join7(profilesDir, entry);
|
|
14868
|
+
const stat = statSync2(fullPath);
|
|
14869
|
+
if (stat.isDirectory()) {
|
|
14870
|
+
seen.add(entry);
|
|
14871
|
+
} else if (entry.endsWith(".json")) {
|
|
14872
|
+
seen.add(entry.replace(/\.json$/, ""));
|
|
14873
|
+
}
|
|
14874
|
+
}
|
|
14875
|
+
} catch {}
|
|
15761
14876
|
return [...seen].sort();
|
|
15762
14877
|
}
|
|
15763
14878
|
function createProfile(profile, config = {}) {
|
|
@@ -15770,11 +14885,11 @@ function createProfile(profile, config = {}) {
|
|
|
15770
14885
|
}
|
|
15771
14886
|
function clearProfile(profile = getCurrentProfile()) {
|
|
15772
14887
|
const flatPath = getFlatProfilePath(profile);
|
|
15773
|
-
const directoryPath =
|
|
15774
|
-
if (
|
|
14888
|
+
const directoryPath = join7(getProfilesDir(), profile);
|
|
14889
|
+
if (existsSync6(flatPath)) {
|
|
15775
14890
|
rmSync(flatPath);
|
|
15776
14891
|
}
|
|
15777
|
-
if (
|
|
14892
|
+
if (existsSync6(directoryPath)) {
|
|
15778
14893
|
rmSync(directoryPath, { recursive: true, force: true });
|
|
15779
14894
|
}
|
|
15780
14895
|
}
|
|
@@ -16070,7 +15185,7 @@ async function sendMessage(context, input) {
|
|
|
16070
15185
|
direction: "outbound"
|
|
16071
15186
|
});
|
|
16072
15187
|
}
|
|
16073
|
-
async function
|
|
15188
|
+
async function replyToMessage(context, input) {
|
|
16074
15189
|
const payload = await bridgeRequest(context, "/messages/reply", {
|
|
16075
15190
|
method: "POST",
|
|
16076
15191
|
body: {
|
|
@@ -16184,7 +15299,7 @@ async function runProfileCommand2(args, context) {
|
|
|
16184
15299
|
switch (subcommand) {
|
|
16185
15300
|
case "list": {
|
|
16186
15301
|
const current = getCurrentProfile();
|
|
16187
|
-
const profiles =
|
|
15302
|
+
const profiles = listProfiles();
|
|
16188
15303
|
return successOutput({ current, profiles }, context.format, () => profiles.map((profile) => `${profile}${profile === current ? " (active)" : ""}`).join(`
|
|
16189
15304
|
`));
|
|
16190
15305
|
}
|
|
@@ -16358,7 +15473,7 @@ async function runMessageCommand(args, context) {
|
|
|
16358
15473
|
if (!conversationId || !text) {
|
|
16359
15474
|
return failure2("Usage: connect-imessage message reply --conversation <id> --text <text>");
|
|
16360
15475
|
}
|
|
16361
|
-
return successOutput(await
|
|
15476
|
+
return successOutput(await replyToMessage(resolved, {
|
|
16362
15477
|
conversationId,
|
|
16363
15478
|
text,
|
|
16364
15479
|
replyToMessageId: asString2(options.replyTo),
|
|
@@ -16516,7 +15631,7 @@ var imessageConnector = defineConnector({
|
|
|
16516
15631
|
summary: "Reply to an existing conversation through the bridge",
|
|
16517
15632
|
inputSchema: messageReplyInputSchema,
|
|
16518
15633
|
async execute({ context }, input) {
|
|
16519
|
-
return
|
|
15634
|
+
return replyToMessage(context, input);
|
|
16520
15635
|
}
|
|
16521
15636
|
}
|
|
16522
15637
|
},
|
|
@@ -16579,19 +15694,19 @@ var imessageConnector = defineConnector({
|
|
|
16579
15694
|
});
|
|
16580
15695
|
|
|
16581
15696
|
// src/core/connectors/stripe.ts
|
|
16582
|
-
import { existsSync as
|
|
16583
|
-
import { dirname as dirname4, join as
|
|
15697
|
+
import { existsSync as existsSync7 } from "fs";
|
|
15698
|
+
import { dirname as dirname4, join as join8 } from "path";
|
|
16584
15699
|
import { fileURLToPath as fileURLToPath2, pathToFileURL as pathToFileURL2 } from "url";
|
|
16585
15700
|
var __dirname3 = dirname4(fileURLToPath2(import.meta.url));
|
|
16586
15701
|
function resolveStripeConnectorDir() {
|
|
16587
15702
|
const candidates = [
|
|
16588
|
-
|
|
16589
|
-
|
|
16590
|
-
|
|
16591
|
-
|
|
15703
|
+
join8(__dirname3, "..", "..", "..", "connectors", "connect-stripe"),
|
|
15704
|
+
join8(__dirname3, "..", "..", "connectors", "connect-stripe"),
|
|
15705
|
+
join8(__dirname3, "..", "connectors", "connect-stripe"),
|
|
15706
|
+
join8(process.cwd(), "connectors", "connect-stripe")
|
|
16592
15707
|
];
|
|
16593
15708
|
for (const candidate of candidates) {
|
|
16594
|
-
if (
|
|
15709
|
+
if (existsSync7(candidate)) {
|
|
16595
15710
|
return candidate;
|
|
16596
15711
|
}
|
|
16597
15712
|
}
|
|
@@ -16830,10 +15945,10 @@ function buildCommandHelp2(spec) {
|
|
|
16830
15945
|
var ROOT_HELP3 = buildRootHelp2(COMMAND_SPECS2);
|
|
16831
15946
|
var COMMAND_HELP3 = Object.fromEntries(COMMAND_SPECS2.map((spec) => [spec.name, buildCommandHelp2(spec)]));
|
|
16832
15947
|
async function loadStripeApiModule() {
|
|
16833
|
-
return await import(pathToFileURL2(
|
|
15948
|
+
return await import(pathToFileURL2(join8(CONNECTOR_DIR2, "src", "api", "index.ts")).href);
|
|
16834
15949
|
}
|
|
16835
15950
|
async function loadStripeConfigModule() {
|
|
16836
|
-
return await import(pathToFileURL2(
|
|
15951
|
+
return await import(pathToFileURL2(join8(CONNECTOR_DIR2, "src", "utils", "config.ts")).href);
|
|
16837
15952
|
}
|
|
16838
15953
|
function extractGlobalArgs3(args) {
|
|
16839
15954
|
const remaining = [];
|
|
@@ -17445,9 +16560,7 @@ var stripeConnector = defineConnector({
|
|
|
17445
16560
|
|
|
17446
16561
|
// src/core/builtins.ts
|
|
17447
16562
|
var INTERNAL_CONNECTOR_DEFINITIONS = [
|
|
17448
|
-
gmailConnector,
|
|
17449
16563
|
githubConnector,
|
|
17450
|
-
googleDriveConnector,
|
|
17451
16564
|
imessageConnector,
|
|
17452
16565
|
stripeConnector
|
|
17453
16566
|
];
|
|
@@ -23721,10 +22834,7 @@ function searchConnectors(query, context) {
|
|
|
23721
22834
|
return results.slice(0, limit);
|
|
23722
22835
|
}
|
|
23723
22836
|
function getConnector(name) {
|
|
23724
|
-
|
|
23725
|
-
return;
|
|
23726
|
-
const normalizedName = normalizeConnectorName(name);
|
|
23727
|
-
return CONNECTORS.find((c) => c.name === normalizedName);
|
|
22837
|
+
return CONNECTORS.find((c) => c.name === name);
|
|
23728
22838
|
}
|
|
23729
22839
|
var versionsLoaded = false;
|
|
23730
22840
|
function loadConnectorVersions() {
|
|
@@ -23733,17 +22843,17 @@ function loadConnectorVersions() {
|
|
|
23733
22843
|
versionsLoaded = true;
|
|
23734
22844
|
const thisDir = dirname5(fileURLToPath3(import.meta.url));
|
|
23735
22845
|
const candidates = [
|
|
23736
|
-
|
|
23737
|
-
|
|
22846
|
+
join9(thisDir, "..", "connectors"),
|
|
22847
|
+
join9(thisDir, "..", "..", "connectors")
|
|
23738
22848
|
];
|
|
23739
|
-
const connectorsDir = candidates.find((d) =>
|
|
22849
|
+
const connectorsDir = candidates.find((d) => existsSync8(d));
|
|
23740
22850
|
if (!connectorsDir)
|
|
23741
22851
|
return;
|
|
23742
22852
|
for (const connector of CONNECTORS) {
|
|
23743
22853
|
try {
|
|
23744
|
-
const pkgPath =
|
|
23745
|
-
if (
|
|
23746
|
-
const pkg = JSON.parse(
|
|
22854
|
+
const pkgPath = join9(connectorsDir, `connect-${connector.name}`, "package.json");
|
|
22855
|
+
if (existsSync8(pkgPath)) {
|
|
22856
|
+
const pkg = JSON.parse(readFileSync3(pkgPath, "utf-8"));
|
|
23747
22857
|
connector.version = pkg.version || "0.0.0";
|
|
23748
22858
|
continue;
|
|
23749
22859
|
}
|
|
@@ -23755,16 +22865,16 @@ function loadConnectorVersions() {
|
|
|
23755
22865
|
}
|
|
23756
22866
|
}
|
|
23757
22867
|
// src/lib/installer.ts
|
|
23758
|
-
import { existsSync as
|
|
23759
|
-
import { join as
|
|
22868
|
+
import { existsSync as existsSync9, mkdirSync as mkdirSync6, readFileSync as readFileSync4, writeFileSync as writeFileSync3, readdirSync as readdirSync6, statSync as statSync3, rmSync as rmSync2 } from "fs";
|
|
22869
|
+
import { join as join10, dirname as dirname6 } from "path";
|
|
23760
22870
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
23761
22871
|
var __dirname4 = dirname6(fileURLToPath4(import.meta.url));
|
|
23762
22872
|
function resolveConnectorsDir() {
|
|
23763
|
-
const fromBin =
|
|
23764
|
-
if (
|
|
22873
|
+
const fromBin = join10(__dirname4, "..", "connectors");
|
|
22874
|
+
if (existsSync9(fromBin))
|
|
23765
22875
|
return fromBin;
|
|
23766
|
-
const fromSrc =
|
|
23767
|
-
if (
|
|
22876
|
+
const fromSrc = join10(__dirname4, "..", "..", "connectors");
|
|
22877
|
+
if (existsSync9(fromSrc))
|
|
23768
22878
|
return fromSrc;
|
|
23769
22879
|
return fromBin;
|
|
23770
22880
|
}
|
|
@@ -23772,22 +22882,25 @@ var CONNECTORS_DIR = resolveConnectorsDir();
|
|
|
23772
22882
|
var PROJECT_CONNECTORS_DIRNAME = ".connectors";
|
|
23773
22883
|
var ENABLEMENT_MANIFEST_FILENAME = "manifest.json";
|
|
23774
22884
|
var ENABLEMENT_INDEX_FILENAME = "index.ts";
|
|
22885
|
+
function normalizeConnectorName(name) {
|
|
22886
|
+
return name.startsWith("connect-") ? name.slice("connect-".length) : name;
|
|
22887
|
+
}
|
|
23775
22888
|
function getProjectConnectorsDir(targetDir) {
|
|
23776
|
-
return
|
|
22889
|
+
return join10(targetDir, PROJECT_CONNECTORS_DIRNAME);
|
|
23777
22890
|
}
|
|
23778
22891
|
function getEnablementManifestPath(targetDir) {
|
|
23779
|
-
return
|
|
22892
|
+
return join10(getProjectConnectorsDir(targetDir), ENABLEMENT_MANIFEST_FILENAME);
|
|
23780
22893
|
}
|
|
23781
22894
|
function getLegacyInstallPath(targetDir, name) {
|
|
23782
|
-
return
|
|
22895
|
+
return join10(getProjectConnectorsDir(targetDir), `connect-${normalizeConnectorName(name)}`);
|
|
23783
22896
|
}
|
|
23784
22897
|
function loadEnablementManifest(targetDir) {
|
|
23785
22898
|
const manifestPath = getEnablementManifestPath(targetDir);
|
|
23786
|
-
if (!
|
|
22899
|
+
if (!existsSync9(manifestPath)) {
|
|
23787
22900
|
return null;
|
|
23788
22901
|
}
|
|
23789
22902
|
try {
|
|
23790
|
-
const raw = JSON.parse(
|
|
22903
|
+
const raw = JSON.parse(readFileSync4(manifestPath, "utf-8"));
|
|
23791
22904
|
if (!Array.isArray(raw.connectors)) {
|
|
23792
22905
|
return null;
|
|
23793
22906
|
}
|
|
@@ -23803,12 +22916,12 @@ function loadEnablementManifest(targetDir) {
|
|
|
23803
22916
|
}
|
|
23804
22917
|
function getLegacyInstalledConnectors(targetDir) {
|
|
23805
22918
|
const connectorsDir = getProjectConnectorsDir(targetDir);
|
|
23806
|
-
if (!
|
|
22919
|
+
if (!existsSync9(connectorsDir)) {
|
|
23807
22920
|
return [];
|
|
23808
22921
|
}
|
|
23809
|
-
return
|
|
23810
|
-
const fullPath =
|
|
23811
|
-
return entry.startsWith("connect-") &&
|
|
22922
|
+
return readdirSync6(connectorsDir).filter((entry) => {
|
|
22923
|
+
const fullPath = join10(connectorsDir, entry);
|
|
22924
|
+
return entry.startsWith("connect-") && statSync3(fullPath).isDirectory();
|
|
23812
22925
|
}).map((entry) => entry.replace("connect-", "")).sort();
|
|
23813
22926
|
}
|
|
23814
22927
|
function getEnabledConnectors(targetDir) {
|
|
@@ -23816,7 +22929,7 @@ function getEnabledConnectors(targetDir) {
|
|
|
23816
22929
|
return [...new Set([...manifestConnectors, ...getLegacyInstalledConnectors(targetDir)])].sort();
|
|
23817
22930
|
}
|
|
23818
22931
|
function updateConnectorsIndex(connectorsDir, connectors18) {
|
|
23819
|
-
const indexPath =
|
|
22932
|
+
const indexPath = join10(connectorsDir, ENABLEMENT_INDEX_FILENAME);
|
|
23820
22933
|
const connectorList = connectors18.map((connector) => ` "${connector}",`).join(`
|
|
23821
22934
|
`);
|
|
23822
22935
|
const content = `/**
|
|
@@ -23832,7 +22945,7 @@ ${connectorList}
|
|
|
23832
22945
|
|
|
23833
22946
|
export type EnabledConnectorName = typeof enabledConnectors[number];
|
|
23834
22947
|
`;
|
|
23835
|
-
|
|
22948
|
+
writeFileSync3(indexPath, content);
|
|
23836
22949
|
}
|
|
23837
22950
|
function writeEnablementManifest(targetDir, connectors18) {
|
|
23838
22951
|
const connectorsDir = getProjectConnectorsDir(targetDir);
|
|
@@ -23843,16 +22956,17 @@ function writeEnablementManifest(targetDir, connectors18) {
|
|
|
23843
22956
|
updatedAt: new Date().toISOString(),
|
|
23844
22957
|
connectors: [...new Set(connectors18.map((value) => normalizeConnectorName(value)))].sort()
|
|
23845
22958
|
};
|
|
23846
|
-
|
|
22959
|
+
writeFileSync3(getEnablementManifestPath(targetDir), JSON.stringify(manifest, null, 2) + `
|
|
23847
22960
|
`);
|
|
23848
22961
|
updateConnectorsIndex(connectorsDir, manifest.connectors);
|
|
23849
22962
|
}
|
|
23850
22963
|
function getConnectorPath(name) {
|
|
23851
|
-
|
|
22964
|
+
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
22965
|
+
return join10(CONNECTORS_DIR, connectorName);
|
|
23852
22966
|
}
|
|
23853
22967
|
function connectorExists(name) {
|
|
23854
22968
|
const normalizedName = normalizeConnectorName(name);
|
|
23855
|
-
return hasInternalConnectorDefinition(normalizedName) ||
|
|
22969
|
+
return hasInternalConnectorDefinition(normalizedName) || existsSync9(getConnectorPath(normalizedName));
|
|
23856
22970
|
}
|
|
23857
22971
|
function installConnector(name, options = {}) {
|
|
23858
22972
|
const { targetDir = process.cwd(), overwrite = false } = options;
|
|
@@ -23885,7 +22999,7 @@ function installConnector(name, options = {}) {
|
|
|
23885
22999
|
try {
|
|
23886
23000
|
const nextEnabled = [...new Set([...installed, normalizedName])].sort();
|
|
23887
23001
|
writeEnablementManifest(targetDir, nextEnabled);
|
|
23888
|
-
if (overwrite &&
|
|
23002
|
+
if (overwrite && existsSync9(legacyInstallPath)) {
|
|
23889
23003
|
rmSync2(legacyInstallPath, { recursive: true });
|
|
23890
23004
|
}
|
|
23891
23005
|
return {
|
|
@@ -23920,9 +23034,9 @@ function parseConnectorDocs(raw) {
|
|
|
23920
23034
|
function getConnectorDocs(name) {
|
|
23921
23035
|
const normalizedName = normalizeConnectorName(name);
|
|
23922
23036
|
const connectorPath = getConnectorPath(normalizedName);
|
|
23923
|
-
const claudeMdPath =
|
|
23924
|
-
if (
|
|
23925
|
-
return parseConnectorDocs(
|
|
23037
|
+
const claudeMdPath = join10(connectorPath, "CLAUDE.md");
|
|
23038
|
+
if (existsSync9(claudeMdPath)) {
|
|
23039
|
+
return parseConnectorDocs(readFileSync4(claudeMdPath, "utf-8"));
|
|
23926
23040
|
}
|
|
23927
23041
|
const internalDocs = getInternalConnectorDefinition(normalizedName)?.docsMarkdown;
|
|
23928
23042
|
if (internalDocs) {
|
|
@@ -23966,171 +23080,23 @@ function removeConnector(name, targetDir = process.cwd()) {
|
|
|
23966
23080
|
const nextEnabled = installed.filter((connector) => connector !== normalizedName);
|
|
23967
23081
|
writeEnablementManifest(targetDir, nextEnabled);
|
|
23968
23082
|
const legacyInstallPath = getLegacyInstallPath(targetDir, normalizedName);
|
|
23969
|
-
if (
|
|
23083
|
+
if (existsSync9(legacyInstallPath)) {
|
|
23970
23084
|
rmSync2(legacyInstallPath, { recursive: true });
|
|
23971
23085
|
}
|
|
23972
23086
|
return true;
|
|
23973
23087
|
}
|
|
23974
23088
|
// src/lib/runner.ts
|
|
23975
|
-
import { existsSync as
|
|
23976
|
-
import { join as
|
|
23089
|
+
import { existsSync as existsSync10, readdirSync as readdirSync7 } from "fs";
|
|
23090
|
+
import { join as join11, dirname as dirname7 } from "path";
|
|
23977
23091
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
23978
23092
|
import { spawn } from "child_process";
|
|
23979
|
-
|
|
23980
|
-
// src/server/auth.ts
|
|
23981
|
-
import { existsSync as existsSync11, readFileSync as readFileSync7, writeFileSync as writeFileSync6, mkdirSync as mkdirSync7, readdirSync as readdirSync8, rmSync as rmSync3, statSync as statSync5 } from "fs";
|
|
23982
|
-
import { join as join13 } from "path";
|
|
23983
|
-
var oauthStateStore = new Map;
|
|
23984
|
-
var GOOGLE_SCOPES = {
|
|
23985
|
-
gmail: [
|
|
23986
|
-
"https://www.googleapis.com/auth/gmail.readonly",
|
|
23987
|
-
"https://www.googleapis.com/auth/gmail.send",
|
|
23988
|
-
"https://www.googleapis.com/auth/gmail.compose",
|
|
23989
|
-
"https://www.googleapis.com/auth/gmail.modify",
|
|
23990
|
-
"https://www.googleapis.com/auth/gmail.labels",
|
|
23991
|
-
"https://mail.google.com/"
|
|
23992
|
-
].join(" "),
|
|
23993
|
-
googlecalendar: [
|
|
23994
|
-
"https://www.googleapis.com/auth/calendar",
|
|
23995
|
-
"https://www.googleapis.com/auth/calendar.events"
|
|
23996
|
-
].join(" "),
|
|
23997
|
-
googledrive: [
|
|
23998
|
-
"https://www.googleapis.com/auth/drive",
|
|
23999
|
-
"https://www.googleapis.com/auth/drive.file"
|
|
24000
|
-
].join(" "),
|
|
24001
|
-
googledocs: [
|
|
24002
|
-
"https://www.googleapis.com/auth/documents",
|
|
24003
|
-
"https://www.googleapis.com/auth/drive.file"
|
|
24004
|
-
].join(" "),
|
|
24005
|
-
googlesheets: [
|
|
24006
|
-
"https://www.googleapis.com/auth/spreadsheets",
|
|
24007
|
-
"https://www.googleapis.com/auth/drive.file"
|
|
24008
|
-
].join(" "),
|
|
24009
|
-
googletasks: [
|
|
24010
|
-
"https://www.googleapis.com/auth/tasks"
|
|
24011
|
-
].join(" "),
|
|
24012
|
-
googlecontacts: [
|
|
24013
|
-
"https://www.googleapis.com/auth/contacts",
|
|
24014
|
-
"https://www.googleapis.com/auth/contacts.readonly"
|
|
24015
|
-
].join(" "),
|
|
24016
|
-
google: [
|
|
24017
|
-
"openid",
|
|
24018
|
-
"https://www.googleapis.com/auth/userinfo.email",
|
|
24019
|
-
"https://www.googleapis.com/auth/userinfo.profile"
|
|
24020
|
-
].join(" ")
|
|
24021
|
-
};
|
|
24022
|
-
function getAuthType(name) {
|
|
24023
|
-
name = normalizeConnectorName(name);
|
|
24024
|
-
const docs = getConnectorDocs(name);
|
|
24025
|
-
if (!docs?.auth)
|
|
24026
|
-
return "apikey";
|
|
24027
|
-
const authLower = docs.auth.toLowerCase();
|
|
24028
|
-
if (authLower.includes("oauth"))
|
|
24029
|
-
return "oauth";
|
|
24030
|
-
if (authLower.includes("bearer token"))
|
|
24031
|
-
return "bearer";
|
|
24032
|
-
return "apikey";
|
|
24033
|
-
}
|
|
24034
|
-
function getConnectorConfigReadDirs2(name) {
|
|
24035
|
-
name = normalizeConnectorName(name);
|
|
24036
|
-
return getConnectorConfigReadDirs(name);
|
|
24037
|
-
}
|
|
24038
|
-
function getCurrentProfile2(name) {
|
|
24039
|
-
name = normalizeConnectorName(name);
|
|
24040
|
-
for (const configDir of getConnectorConfigReadDirs2(name)) {
|
|
24041
|
-
const currentProfileFile = join13(configDir, "current_profile");
|
|
24042
|
-
if (existsSync11(currentProfileFile)) {
|
|
24043
|
-
try {
|
|
24044
|
-
return readFileSync7(currentProfileFile, "utf-8").trim() || "default";
|
|
24045
|
-
} catch {
|
|
24046
|
-
return "default";
|
|
24047
|
-
}
|
|
24048
|
-
}
|
|
24049
|
-
}
|
|
24050
|
-
return "default";
|
|
24051
|
-
}
|
|
24052
|
-
function loadProfileConfigFromDir(configDir, profile) {
|
|
24053
|
-
let flatConfig = {};
|
|
24054
|
-
let dirConfig = {};
|
|
24055
|
-
const profileFile = join13(configDir, "profiles", `${profile}.json`);
|
|
24056
|
-
if (existsSync11(profileFile)) {
|
|
24057
|
-
try {
|
|
24058
|
-
flatConfig = JSON.parse(readFileSync7(profileFile, "utf-8"));
|
|
24059
|
-
} catch {}
|
|
24060
|
-
}
|
|
24061
|
-
const profileDirConfig = join13(configDir, "profiles", profile, "config.json");
|
|
24062
|
-
if (existsSync11(profileDirConfig)) {
|
|
24063
|
-
try {
|
|
24064
|
-
dirConfig = JSON.parse(readFileSync7(profileDirConfig, "utf-8"));
|
|
24065
|
-
} catch {}
|
|
24066
|
-
}
|
|
24067
|
-
return { ...flatConfig, ...dirConfig };
|
|
24068
|
-
}
|
|
24069
|
-
function loadProfileConfig(name) {
|
|
24070
|
-
name = normalizeConnectorName(name);
|
|
24071
|
-
const profile = getCurrentProfile2(name);
|
|
24072
|
-
const merged = {};
|
|
24073
|
-
for (const configDir of [...getConnectorConfigReadDirs2(name)].reverse()) {
|
|
24074
|
-
Object.assign(merged, loadProfileConfigFromDir(configDir, profile));
|
|
24075
|
-
}
|
|
24076
|
-
return merged;
|
|
24077
|
-
}
|
|
24078
|
-
function loadTokens3(name) {
|
|
24079
|
-
name = normalizeConnectorName(name);
|
|
24080
|
-
const profile = getCurrentProfile2(name);
|
|
24081
|
-
for (const configDir of getConnectorConfigReadDirs2(name)) {
|
|
24082
|
-
const tokensFile = join13(configDir, "profiles", profile, "tokens.json");
|
|
24083
|
-
if (existsSync11(tokensFile)) {
|
|
24084
|
-
try {
|
|
24085
|
-
return JSON.parse(readFileSync7(tokensFile, "utf-8"));
|
|
24086
|
-
} catch {
|
|
24087
|
-
return null;
|
|
24088
|
-
}
|
|
24089
|
-
}
|
|
24090
|
-
}
|
|
24091
|
-
const profileConfig = loadProfileConfig(name);
|
|
24092
|
-
if (profileConfig.refreshToken || profileConfig.accessToken) {
|
|
24093
|
-
return {
|
|
24094
|
-
accessToken: profileConfig.accessToken ?? "",
|
|
24095
|
-
refreshToken: profileConfig.refreshToken,
|
|
24096
|
-
expiresAt: profileConfig.expiresAt ?? 0,
|
|
24097
|
-
tokenType: profileConfig.tokenType,
|
|
24098
|
-
scope: profileConfig.scope
|
|
24099
|
-
};
|
|
24100
|
-
}
|
|
24101
|
-
return null;
|
|
24102
|
-
}
|
|
24103
|
-
function getEnvVars(name) {
|
|
24104
|
-
name = normalizeConnectorName(name);
|
|
24105
|
-
const docs = getConnectorDocs(name);
|
|
24106
|
-
return docs?.envVars || [];
|
|
24107
|
-
}
|
|
24108
|
-
function getOAuthConfig(name) {
|
|
24109
|
-
name = normalizeConnectorName(name);
|
|
24110
|
-
for (const configDir of getConnectorConfigReadDirs2(name)) {
|
|
24111
|
-
const credentialsFile = join13(configDir, "credentials.json");
|
|
24112
|
-
if (existsSync11(credentialsFile)) {
|
|
24113
|
-
try {
|
|
24114
|
-
const creds = JSON.parse(readFileSync7(credentialsFile, "utf-8"));
|
|
24115
|
-
return { clientId: creds.clientId, clientSecret: creds.clientSecret };
|
|
24116
|
-
} catch {}
|
|
24117
|
-
}
|
|
24118
|
-
}
|
|
24119
|
-
const config = loadProfileConfig(name);
|
|
24120
|
-
return {
|
|
24121
|
-
clientId: config.clientId,
|
|
24122
|
-
clientSecret: config.clientSecret
|
|
24123
|
-
};
|
|
24124
|
-
}
|
|
24125
|
-
|
|
24126
|
-
// src/lib/runner.ts
|
|
24127
23093
|
var __dirname5 = dirname7(fileURLToPath5(import.meta.url));
|
|
24128
23094
|
function resolveConnectorsDir2() {
|
|
24129
|
-
const fromBin =
|
|
24130
|
-
if (
|
|
23095
|
+
const fromBin = join11(__dirname5, "..", "connectors");
|
|
23096
|
+
if (existsSync10(fromBin))
|
|
24131
23097
|
return fromBin;
|
|
24132
|
-
const fromSrc =
|
|
24133
|
-
if (
|
|
23098
|
+
const fromSrc = join11(__dirname5, "..", "..", "connectors");
|
|
23099
|
+
if (existsSync10(fromSrc))
|
|
24134
23100
|
return fromSrc;
|
|
24135
23101
|
return fromBin;
|
|
24136
23102
|
}
|
|
@@ -24159,9 +23125,8 @@ var ENV_VAR_NAME_OVERRIDES = {
|
|
|
24159
23125
|
};
|
|
24160
23126
|
function buildEnvWithCredentials(connectorName, baseEnv) {
|
|
24161
23127
|
const env = { ...baseEnv };
|
|
24162
|
-
const
|
|
24163
|
-
|
|
24164
|
-
normalizedConnectorName.toUpperCase().replace(/-/g, "_")
|
|
23128
|
+
const prefixes = ENV_VAR_NAME_OVERRIDES[connectorName] || [
|
|
23129
|
+
connectorName.toUpperCase().replace(/-/g, "_")
|
|
24165
23130
|
];
|
|
24166
23131
|
for (const prefix of prefixes) {
|
|
24167
23132
|
const canonicalKey = `${prefix}_API_KEY`;
|
|
@@ -24182,32 +23147,13 @@ function buildEnvWithCredentials(connectorName, baseEnv) {
|
|
|
24182
23147
|
}
|
|
24183
23148
|
}
|
|
24184
23149
|
}
|
|
24185
|
-
if (getAuthType(normalizedConnectorName) === "oauth") {
|
|
24186
|
-
const oauthConfig = getOAuthConfig(normalizedConnectorName);
|
|
24187
|
-
const tokens = loadTokens3(normalizedConnectorName);
|
|
24188
|
-
for (const { variable } of getEnvVars(normalizedConnectorName)) {
|
|
24189
|
-
if (env[variable])
|
|
24190
|
-
continue;
|
|
24191
|
-
if (variable.endsWith("_CLIENT_ID") && oauthConfig.clientId) {
|
|
24192
|
-
env[variable] = oauthConfig.clientId;
|
|
24193
|
-
} else if (variable.endsWith("_CLIENT_SECRET") && oauthConfig.clientSecret) {
|
|
24194
|
-
env[variable] = oauthConfig.clientSecret;
|
|
24195
|
-
} else if (variable.endsWith("_ACCESS_TOKEN") && tokens?.accessToken) {
|
|
24196
|
-
env[variable] = tokens.accessToken;
|
|
24197
|
-
} else if (variable.endsWith("_REFRESH_TOKEN") && tokens?.refreshToken) {
|
|
24198
|
-
env[variable] = tokens.refreshToken;
|
|
24199
|
-
} else if (variable.endsWith("_TOKEN_EXPIRES_AT") && tokens?.expiresAt) {
|
|
24200
|
-
env[variable] = String(tokens.expiresAt);
|
|
24201
|
-
}
|
|
24202
|
-
}
|
|
24203
|
-
}
|
|
24204
23150
|
return env;
|
|
24205
23151
|
}
|
|
24206
23152
|
function getConnectorCliPath(name) {
|
|
24207
|
-
const safeName =
|
|
24208
|
-
const connectorDir =
|
|
24209
|
-
const cliPath =
|
|
24210
|
-
if (
|
|
23153
|
+
const safeName = name.replace(/[^a-z0-9-]/g, "");
|
|
23154
|
+
const connectorDir = join11(CONNECTORS_DIR2, `connect-${safeName}`);
|
|
23155
|
+
const cliPath = join11(connectorDir, "src", "cli", "index.ts");
|
|
23156
|
+
if (existsSync10(cliPath))
|
|
24211
23157
|
return cliPath;
|
|
24212
23158
|
return null;
|
|
24213
23159
|
}
|
|
@@ -24245,7 +23191,7 @@ function parseCommanderHelpOperations(helpText) {
|
|
|
24245
23191
|
inCommands = false;
|
|
24246
23192
|
continue;
|
|
24247
23193
|
}
|
|
24248
|
-
const row = line.match(/^ {2}(
|
|
23194
|
+
const row = line.match(/^ {2}(\S.*?)(?: {2,}(.+))?$/);
|
|
24249
23195
|
if (!row)
|
|
24250
23196
|
continue;
|
|
24251
23197
|
const usage = row[1].trim();
|
|
@@ -24262,9 +23208,8 @@ function parseCommanderHelpOperations(helpText) {
|
|
|
24262
23208
|
return operations;
|
|
24263
23209
|
}
|
|
24264
23210
|
function runConnectorCommand(name, args, timeoutMs = 30000) {
|
|
24265
|
-
const connectorName = normalizeConnectorName(name);
|
|
24266
23211
|
getConnectorsHome();
|
|
24267
|
-
const internalRuntime = getInternalCommandRuntime(
|
|
23212
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24268
23213
|
if (internalRuntime?.run) {
|
|
24269
23214
|
return Promise.resolve(internalRuntime.run(args)).then((result) => {
|
|
24270
23215
|
if (result) {
|
|
@@ -24278,125 +23223,17 @@ function runConnectorCommand(name, args, timeoutMs = 30000) {
|
|
|
24278
23223
|
success: result.success ?? exitCode === 0
|
|
24279
23224
|
};
|
|
24280
23225
|
}
|
|
24281
|
-
return runLegacyConnectorCommand(
|
|
23226
|
+
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
24282
23227
|
});
|
|
24283
23228
|
}
|
|
24284
|
-
return runLegacyConnectorCommand(
|
|
24285
|
-
}
|
|
24286
|
-
async function runConnectorOperation(args) {
|
|
24287
|
-
const connectorName = normalizeConnectorName(args.connector);
|
|
24288
|
-
const internal = getInternalConnectorDefinition(connectorName);
|
|
24289
|
-
if (internal?.operations[args.operation]) {
|
|
24290
|
-
try {
|
|
24291
|
-
const operationData = await executeConnectorOperation(internal, {
|
|
24292
|
-
operation: args.operation,
|
|
24293
|
-
input: args.input,
|
|
24294
|
-
profile: args.profile
|
|
24295
|
-
});
|
|
24296
|
-
const commandResult = normalizeOperationReturn(operationData);
|
|
24297
|
-
return {
|
|
24298
|
-
connector: connectorName,
|
|
24299
|
-
operation: args.operation,
|
|
24300
|
-
profile: args.profile,
|
|
24301
|
-
...commandResult
|
|
24302
|
-
};
|
|
24303
|
-
} catch (error) {
|
|
24304
|
-
return {
|
|
24305
|
-
connector: connectorName,
|
|
24306
|
-
operation: args.operation,
|
|
24307
|
-
profile: args.profile,
|
|
24308
|
-
stdout: "",
|
|
24309
|
-
stderr: error.message,
|
|
24310
|
-
exitCode: 1,
|
|
24311
|
-
success: false
|
|
24312
|
-
};
|
|
24313
|
-
}
|
|
24314
|
-
}
|
|
24315
|
-
const commandArgs = buildConnectorOperationArgs(args);
|
|
24316
|
-
const result = await runConnectorCommand(connectorName, commandArgs, args.timeoutMs ?? 30000);
|
|
24317
|
-
const response = {
|
|
24318
|
-
...result,
|
|
24319
|
-
connector: connectorName,
|
|
24320
|
-
operation: args.operation,
|
|
24321
|
-
profile: args.profile
|
|
24322
|
-
};
|
|
24323
|
-
if (args.parseJson !== false && result.stdout) {
|
|
24324
|
-
try {
|
|
24325
|
-
response.data = JSON.parse(result.stdout);
|
|
24326
|
-
} catch {}
|
|
24327
|
-
}
|
|
24328
|
-
return response;
|
|
24329
|
-
}
|
|
24330
|
-
function normalizeOperationReturn(value) {
|
|
24331
|
-
if (isRunResult(value)) {
|
|
24332
|
-
const result = value;
|
|
24333
|
-
const response = {
|
|
24334
|
-
...result
|
|
24335
|
-
};
|
|
24336
|
-
if (result.stdout) {
|
|
24337
|
-
try {
|
|
24338
|
-
response.data = JSON.parse(result.stdout);
|
|
24339
|
-
} catch {}
|
|
24340
|
-
}
|
|
24341
|
-
return response;
|
|
24342
|
-
}
|
|
24343
|
-
return {
|
|
24344
|
-
data: value,
|
|
24345
|
-
stdout: JSON.stringify(value),
|
|
24346
|
-
stderr: "",
|
|
24347
|
-
exitCode: 0,
|
|
24348
|
-
success: true
|
|
24349
|
-
};
|
|
24350
|
-
}
|
|
24351
|
-
function isRunResult(value) {
|
|
24352
|
-
if (!value || typeof value !== "object")
|
|
24353
|
-
return false;
|
|
24354
|
-
const candidate = value;
|
|
24355
|
-
return typeof candidate.stdout === "string" && typeof candidate.stderr === "string" && typeof candidate.exitCode === "number" && typeof candidate.success === "boolean";
|
|
24356
|
-
}
|
|
24357
|
-
function buildConnectorOperationArgs(args) {
|
|
24358
|
-
const commandArgs = [];
|
|
24359
|
-
if (args.profile) {
|
|
24360
|
-
commandArgs.push("--profile", args.profile);
|
|
24361
|
-
}
|
|
24362
|
-
commandArgs.push(...args.operation.split(".").filter(Boolean));
|
|
24363
|
-
for (const positional of args.input?.args ?? []) {
|
|
24364
|
-
commandArgs.push(String(positional));
|
|
24365
|
-
}
|
|
24366
|
-
let hasFormat = false;
|
|
24367
|
-
for (const [key, value] of Object.entries(args.input ?? {})) {
|
|
24368
|
-
if (key === "args")
|
|
24369
|
-
continue;
|
|
24370
|
-
if (value === undefined || value === null)
|
|
24371
|
-
continue;
|
|
24372
|
-
const flag = `--${key.replace(/_/g, "-").replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)}`;
|
|
24373
|
-
if (flag === "--format" || flag === "--json")
|
|
24374
|
-
hasFormat = true;
|
|
24375
|
-
if (typeof value === "boolean") {
|
|
24376
|
-
if (value)
|
|
24377
|
-
commandArgs.push(flag);
|
|
24378
|
-
continue;
|
|
24379
|
-
}
|
|
24380
|
-
if (Array.isArray(value)) {
|
|
24381
|
-
for (const item of value) {
|
|
24382
|
-
commandArgs.push(flag, String(item));
|
|
24383
|
-
}
|
|
24384
|
-
continue;
|
|
24385
|
-
}
|
|
24386
|
-
commandArgs.push(flag, String(value));
|
|
24387
|
-
}
|
|
24388
|
-
if (args.parseJson !== false && !hasFormat) {
|
|
24389
|
-
commandArgs.push("--format", "json");
|
|
24390
|
-
}
|
|
24391
|
-
return commandArgs;
|
|
23229
|
+
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
24392
23230
|
}
|
|
24393
23231
|
function runLegacyConnectorCommand(name, args, timeoutMs = 30000) {
|
|
24394
|
-
const
|
|
24395
|
-
const cliPath = getConnectorCliPath(connectorName);
|
|
23232
|
+
const cliPath = getConnectorCliPath(name);
|
|
24396
23233
|
if (!cliPath) {
|
|
24397
23234
|
return Promise.resolve({
|
|
24398
23235
|
stdout: "",
|
|
24399
|
-
stderr: `Connector '${
|
|
23236
|
+
stderr: `Connector '${name}' not found or has no CLI.`,
|
|
24400
23237
|
exitCode: 1,
|
|
24401
23238
|
success: false
|
|
24402
23239
|
});
|
|
@@ -24404,7 +23241,7 @@ function runLegacyConnectorCommand(name, args, timeoutMs = 30000) {
|
|
|
24404
23241
|
return new Promise((resolve) => {
|
|
24405
23242
|
const proc = spawn("bun", ["run", cliPath, ...args], {
|
|
24406
23243
|
timeout: timeoutMs,
|
|
24407
|
-
env: buildEnvWithCredentials(
|
|
23244
|
+
env: buildEnvWithCredentials(name, process.env),
|
|
24408
23245
|
stdio: ["pipe", "pipe", "pipe"]
|
|
24409
23246
|
});
|
|
24410
23247
|
let stdout = "";
|
|
@@ -24434,8 +23271,7 @@ function runLegacyConnectorCommand(name, args, timeoutMs = 30000) {
|
|
|
24434
23271
|
});
|
|
24435
23272
|
}
|
|
24436
23273
|
async function getConnectorOperations(name) {
|
|
24437
|
-
const
|
|
24438
|
-
const internalRuntime = getInternalCommandRuntime(connectorName);
|
|
23274
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24439
23275
|
if (internalRuntime?.commands.length) {
|
|
24440
23276
|
const operations2 = internalRuntime.commands.map((command) => ({
|
|
24441
23277
|
name: command.name,
|
|
@@ -24447,15 +23283,15 @@ async function getConnectorOperations(name) {
|
|
|
24447
23283
|
return {
|
|
24448
23284
|
commands: operations2.map((operation) => operation.name),
|
|
24449
23285
|
operations: operations2,
|
|
24450
|
-
helpText: internalRuntime.helpText ?? buildInternalHelpText(
|
|
23286
|
+
helpText: internalRuntime.helpText ?? buildInternalHelpText(name, internalRuntime.commands),
|
|
24451
23287
|
hasCli: true
|
|
24452
23288
|
};
|
|
24453
23289
|
}
|
|
24454
|
-
const cliPath = getConnectorCliPath(
|
|
23290
|
+
const cliPath = getConnectorCliPath(name);
|
|
24455
23291
|
if (!cliPath) {
|
|
24456
23292
|
return { commands: [], operations: [], helpText: "", hasCli: false };
|
|
24457
23293
|
}
|
|
24458
|
-
const result = await runConnectorCommand(
|
|
23294
|
+
const result = await runConnectorCommand(name, ["--help"]);
|
|
24459
23295
|
const helpText = result.stdout || result.stderr;
|
|
24460
23296
|
const operations = parseCommanderHelpOperations(helpText);
|
|
24461
23297
|
return {
|
|
@@ -24466,8 +23302,7 @@ async function getConnectorOperations(name) {
|
|
|
24466
23302
|
};
|
|
24467
23303
|
}
|
|
24468
23304
|
async function getConnectorCommandHelp(name, command) {
|
|
24469
|
-
const
|
|
24470
|
-
const internalRuntime = getInternalCommandRuntime(connectorName);
|
|
23305
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24471
23306
|
if (internalRuntime?.getHelp) {
|
|
24472
23307
|
const help = await internalRuntime.getHelp(command);
|
|
24473
23308
|
if (help) {
|
|
@@ -24478,15 +23313,17 @@ async function getConnectorCommandHelp(name, command) {
|
|
|
24478
23313
|
if (runtimeCommand?.helpText) {
|
|
24479
23314
|
return runtimeCommand.helpText;
|
|
24480
23315
|
}
|
|
24481
|
-
const result = await runConnectorCommand(
|
|
23316
|
+
const result = await runConnectorCommand(name, [command, "--help"]);
|
|
24482
23317
|
return result.stdout || result.stderr;
|
|
24483
23318
|
}
|
|
24484
23319
|
function getConnectorsWithCli() {
|
|
24485
23320
|
const connectors18 = new Set;
|
|
24486
23321
|
try {
|
|
24487
|
-
const dirs =
|
|
23322
|
+
const dirs = readdirSync7(CONNECTORS_DIR2);
|
|
24488
23323
|
for (const dir of dirs) {
|
|
24489
|
-
|
|
23324
|
+
if (!dir.startsWith("connect-"))
|
|
23325
|
+
continue;
|
|
23326
|
+
const name = dir.replace("connect-", "");
|
|
24490
23327
|
if (getConnectorCliPath(name)) {
|
|
24491
23328
|
connectors18.add(name);
|
|
24492
23329
|
}
|
|
@@ -24499,74 +23336,8 @@ function getConnectorsWithCli() {
|
|
|
24499
23336
|
}
|
|
24500
23337
|
return [...connectors18].sort();
|
|
24501
23338
|
}
|
|
24502
|
-
// src/lib/manifest.ts
|
|
24503
|
-
function buildAliases(name) {
|
|
24504
|
-
const canonicalName = normalizeConnectorName(name);
|
|
24505
|
-
const legacyName = legacyConnectorName(canonicalName);
|
|
24506
|
-
return canonicalName === legacyName ? [canonicalName] : [canonicalName, legacyName];
|
|
24507
|
-
}
|
|
24508
|
-
async function loadOperations(name, includeOperations) {
|
|
24509
|
-
if (!includeOperations || !hasConnectorCommandSurface(name))
|
|
24510
|
-
return;
|
|
24511
|
-
return (await getConnectorOperations(name)).operations;
|
|
24512
|
-
}
|
|
24513
|
-
async function getConnectorCapability(name, options = {}) {
|
|
24514
|
-
const connectorName = normalizeConnectorName(name);
|
|
24515
|
-
const meta = getConnector(connectorName);
|
|
24516
|
-
if (!meta)
|
|
24517
|
-
return null;
|
|
24518
|
-
const docs = getConnectorDocs(connectorName);
|
|
24519
|
-
const configPaths = resolveConnectorConfigPaths(connectorName);
|
|
24520
|
-
const operations = await loadOperations(connectorName, options.includeOperations);
|
|
24521
|
-
return {
|
|
24522
|
-
...meta,
|
|
24523
|
-
id: connectorName,
|
|
24524
|
-
aliases: buildAliases(connectorName),
|
|
24525
|
-
runtime: {
|
|
24526
|
-
packageName: "@hasna/connectors",
|
|
24527
|
-
connectorId: connectorName,
|
|
24528
|
-
legacyConnectorId: legacyConnectorName(connectorName),
|
|
24529
|
-
packagePath: getConnectorPath(connectorName),
|
|
24530
|
-
configDirName: configPaths.preferredDirName,
|
|
24531
|
-
legacyConfigDirName: configPaths.legacyName,
|
|
24532
|
-
internal: Boolean(getInternalConnectorDefinition(connectorName)),
|
|
24533
|
-
packageDirectory: connectorExists(connectorName),
|
|
24534
|
-
commandSurface: hasConnectorCommandSurface(connectorName)
|
|
24535
|
-
},
|
|
24536
|
-
auth: {
|
|
24537
|
-
type: getAuthType(connectorName),
|
|
24538
|
-
summary: docs?.auth ?? null,
|
|
24539
|
-
envVars: docs?.envVars ?? []
|
|
24540
|
-
},
|
|
24541
|
-
docs: {
|
|
24542
|
-
overview: docs?.overview ?? "",
|
|
24543
|
-
cliCommands: docs?.cliCommands ?? "",
|
|
24544
|
-
dataStorage: docs?.dataStorage ?? null
|
|
24545
|
-
},
|
|
24546
|
-
...operations ? { operations } : {}
|
|
24547
|
-
};
|
|
24548
|
-
}
|
|
24549
|
-
async function getConnectorCapabilityManifest(options = {}) {
|
|
24550
|
-
const names = options.connectorNames ? [...new Set(options.connectorNames.map((name) => normalizeConnectorName(name)))].sort() : CONNECTORS.map((connector) => connector.name);
|
|
24551
|
-
const connectors18 = [];
|
|
24552
|
-
for (const name of names) {
|
|
24553
|
-
const capability = await getConnectorCapability(name, options);
|
|
24554
|
-
if (capability)
|
|
24555
|
-
connectors18.push(capability);
|
|
24556
|
-
}
|
|
24557
|
-
return {
|
|
24558
|
-
version: 1,
|
|
24559
|
-
packageName: "@hasna/connectors",
|
|
24560
|
-
packageVersion: package_default.version,
|
|
24561
|
-
generatedAt: new Date().toISOString(),
|
|
24562
|
-
categories: CATEGORIES,
|
|
24563
|
-
connectorCount: connectors18.length,
|
|
24564
|
-
connectors: connectors18
|
|
24565
|
-
};
|
|
24566
|
-
}
|
|
24567
23339
|
export {
|
|
24568
23340
|
searchConnectors,
|
|
24569
|
-
runConnectorOperation,
|
|
24570
23341
|
runConnectorCommand,
|
|
24571
23342
|
removeConnector,
|
|
24572
23343
|
loadConnectorVersions,
|
|
@@ -24583,13 +23354,10 @@ export {
|
|
|
24583
23354
|
getConnectorDocs,
|
|
24584
23355
|
getConnectorCommandHelp,
|
|
24585
23356
|
getConnectorCliPath,
|
|
24586
|
-
getConnectorCapabilityManifest,
|
|
24587
|
-
getConnectorCapability,
|
|
24588
23357
|
getConnector,
|
|
24589
23358
|
executeConnectorOperation,
|
|
24590
23359
|
defineConnector,
|
|
24591
23360
|
connectorExists,
|
|
24592
|
-
buildConnectorOperationArgs,
|
|
24593
23361
|
ConnectorOperationNotFoundError,
|
|
24594
23362
|
ConnectorDefinitionError,
|
|
24595
23363
|
CONNECTORS,
|