@hasna/connectors 1.3.24 → 1.3.26
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/bin/index.js +911 -143
- package/bin/mcp.js +2804 -1815
- package/bin/serve.js +1200 -430
- package/connectors/{connect-yousign → connect-cloudflare}/bun.lock +3 -3
- package/connectors/connect-gmail/bin/index.js +7027 -0
- package/connectors/connect-googledrive/bin/index.js +5958 -0
- package/connectors/connect-imessage/bin/.gitkeep +2 -0
- package/connectors/connect-imessage/bin/index.js +3016 -0
- package/connectors/connect-imessage/bun.lock +32 -0
- package/connectors/connect-imessage/package.json +46 -0
- package/connectors/connect-imessage/src/api/client.ts +139 -0
- package/connectors/connect-imessage/src/api/conversations.ts +49 -0
- package/connectors/connect-imessage/src/api/health.ts +16 -0
- package/connectors/connect-imessage/src/api/index.ts +62 -0
- package/connectors/connect-imessage/src/api/messages.ts +119 -0
- package/connectors/connect-imessage/src/cli/index.ts +258 -0
- package/connectors/connect-imessage/src/index.ts +26 -0
- package/connectors/connect-imessage/src/types/index.ts +134 -0
- package/connectors/connect-imessage/src/utils/config.ts +219 -0
- package/connectors/connect-imessage/src/utils/output.ts +121 -0
- package/connectors/connect-imessage/tsconfig.json +16 -0
- package/dashboard/dist/assets/index-ClBXkNbL.css +1 -0
- package/dashboard/dist/assets/index-DvfmyAO4.js +284 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/core/connectors/gmail.d.ts +5 -0
- package/dist/core/connectors/googledrive.d.ts +6 -0
- package/dist/core/connectors/internal-operations.test.d.ts +1 -0
- package/dist/core/connectors/internal-runtime.test.d.ts +1 -0
- package/dist/core/errors.test.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1075 -89
- package/dist/lib/runner-auth.test.d.ts +1 -0
- package/dist/lib/runner.d.ts +31 -0
- package/dist/lib/test-endpoints.test.d.ts +1 -0
- package/dist/lib/workflow-runner.d.ts +7 -0
- package/dist/server/auth-exchange.test.d.ts +1 -0
- package/dist/server/auth-refresh.test.d.ts +1 -0
- package/dist/server/auth.d.ts +1 -0
- package/package.json +1 -1
- package/connectors/connect-yousign/node_modules/@types/bun/LICENSE +0 -21
- package/connectors/connect-yousign/node_modules/@types/bun/README.md +0 -20
- package/connectors/connect-yousign/node_modules/@types/bun/index.d.ts +0 -1
- package/connectors/connect-yousign/node_modules/@types/bun/package.json +0 -53
- package/connectors/connect-yousign/node_modules/@types/node/LICENSE +0 -21
- package/connectors/connect-yousign/node_modules/@types/node/README.md +0 -15
- package/connectors/connect-yousign/node_modules/@types/node/assert/strict.d.ts +0 -105
- package/connectors/connect-yousign/node_modules/@types/node/assert.d.ts +0 -955
- package/connectors/connect-yousign/node_modules/@types/node/async_hooks.d.ts +0 -623
- package/connectors/connect-yousign/node_modules/@types/node/buffer.buffer.d.ts +0 -466
- package/connectors/connect-yousign/node_modules/@types/node/buffer.d.ts +0 -1810
- package/connectors/connect-yousign/node_modules/@types/node/child_process.d.ts +0 -1433
- package/connectors/connect-yousign/node_modules/@types/node/cluster.d.ts +0 -486
- package/connectors/connect-yousign/node_modules/@types/node/compatibility/iterators.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/@types/node/console.d.ts +0 -151
- package/connectors/connect-yousign/node_modules/@types/node/constants.d.ts +0 -20
- package/connectors/connect-yousign/node_modules/@types/node/crypto.d.ts +0 -4065
- package/connectors/connect-yousign/node_modules/@types/node/dgram.d.ts +0 -564
- package/connectors/connect-yousign/node_modules/@types/node/diagnostics_channel.d.ts +0 -576
- package/connectors/connect-yousign/node_modules/@types/node/dns/promises.d.ts +0 -503
- package/connectors/connect-yousign/node_modules/@types/node/dns.d.ts +0 -922
- package/connectors/connect-yousign/node_modules/@types/node/domain.d.ts +0 -166
- package/connectors/connect-yousign/node_modules/@types/node/events.d.ts +0 -1047
- package/connectors/connect-yousign/node_modules/@types/node/fs/promises.d.ts +0 -1329
- package/connectors/connect-yousign/node_modules/@types/node/fs.d.ts +0 -4678
- package/connectors/connect-yousign/node_modules/@types/node/globals.d.ts +0 -150
- package/connectors/connect-yousign/node_modules/@types/node/globals.typedarray.d.ts +0 -101
- package/connectors/connect-yousign/node_modules/@types/node/http.d.ts +0 -2188
- package/connectors/connect-yousign/node_modules/@types/node/http2.d.ts +0 -2480
- package/connectors/connect-yousign/node_modules/@types/node/https.d.ts +0 -405
- package/connectors/connect-yousign/node_modules/@types/node/index.d.ts +0 -115
- package/connectors/connect-yousign/node_modules/@types/node/inspector/promises.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/@types/node/inspector.d.ts +0 -269
- package/connectors/connect-yousign/node_modules/@types/node/inspector.generated.d.ts +0 -4401
- package/connectors/connect-yousign/node_modules/@types/node/module.d.ts +0 -757
- package/connectors/connect-yousign/node_modules/@types/node/net.d.ts +0 -933
- package/connectors/connect-yousign/node_modules/@types/node/os.d.ts +0 -507
- package/connectors/connect-yousign/node_modules/@types/node/package.json +0 -155
- package/connectors/connect-yousign/node_modules/@types/node/path/posix.d.ts +0 -8
- package/connectors/connect-yousign/node_modules/@types/node/path/win32.d.ts +0 -8
- package/connectors/connect-yousign/node_modules/@types/node/path.d.ts +0 -187
- package/connectors/connect-yousign/node_modules/@types/node/perf_hooks.d.ts +0 -643
- package/connectors/connect-yousign/node_modules/@types/node/process.d.ts +0 -2175
- package/connectors/connect-yousign/node_modules/@types/node/punycode.d.ts +0 -117
- package/connectors/connect-yousign/node_modules/@types/node/querystring.d.ts +0 -152
- package/connectors/connect-yousign/node_modules/@types/node/quic.d.ts +0 -910
- package/connectors/connect-yousign/node_modules/@types/node/readline/promises.d.ts +0 -161
- package/connectors/connect-yousign/node_modules/@types/node/readline.d.ts +0 -542
- package/connectors/connect-yousign/node_modules/@types/node/repl.d.ts +0 -415
- package/connectors/connect-yousign/node_modules/@types/node/sea.d.ts +0 -162
- package/connectors/connect-yousign/node_modules/@types/node/sqlite.d.ts +0 -1065
- package/connectors/connect-yousign/node_modules/@types/node/stream/consumers.d.ts +0 -38
- package/connectors/connect-yousign/node_modules/@types/node/stream/promises.d.ts +0 -211
- package/connectors/connect-yousign/node_modules/@types/node/stream/web.d.ts +0 -296
- package/connectors/connect-yousign/node_modules/@types/node/stream.d.ts +0 -1770
- package/connectors/connect-yousign/node_modules/@types/node/string_decoder.d.ts +0 -67
- package/connectors/connect-yousign/node_modules/@types/node/test/reporters.d.ts +0 -96
- package/connectors/connect-yousign/node_modules/@types/node/test.d.ts +0 -2275
- package/connectors/connect-yousign/node_modules/@types/node/timers/promises.d.ts +0 -108
- package/connectors/connect-yousign/node_modules/@types/node/timers.d.ts +0 -159
- package/connectors/connect-yousign/node_modules/@types/node/tls.d.ts +0 -1203
- package/connectors/connect-yousign/node_modules/@types/node/trace_events.d.ts +0 -197
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -462
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +0 -71
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -36
- package/connectors/connect-yousign/node_modules/@types/node/ts5.6/index.d.ts +0 -117
- package/connectors/connect-yousign/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +0 -72
- package/connectors/connect-yousign/node_modules/@types/node/ts5.7/index.d.ts +0 -117
- package/connectors/connect-yousign/node_modules/@types/node/tty.d.ts +0 -250
- package/connectors/connect-yousign/node_modules/@types/node/url.d.ts +0 -541
- package/connectors/connect-yousign/node_modules/@types/node/util/types.d.ts +0 -558
- package/connectors/connect-yousign/node_modules/@types/node/util.d.ts +0 -1687
- package/connectors/connect-yousign/node_modules/@types/node/v8.d.ts +0 -988
- package/connectors/connect-yousign/node_modules/@types/node/vm.d.ts +0 -1208
- package/connectors/connect-yousign/node_modules/@types/node/wasi.d.ts +0 -202
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -59
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/blob.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/console.d.ts +0 -9
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/crypto.d.ts +0 -39
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/encoding.d.ts +0 -11
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/events.d.ts +0 -106
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/fetch.d.ts +0 -69
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/importmeta.d.ts +0 -13
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/messaging.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/navigator.d.ts +0 -25
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/performance.d.ts +0 -45
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/storage.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/streams.d.ts +0 -115
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/timers.d.ts +0 -44
- package/connectors/connect-yousign/node_modules/@types/node/web-globals/url.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/@types/node/worker_threads.d.ts +0 -717
- package/connectors/connect-yousign/node_modules/@types/node/zlib.d.ts +0 -682
- package/connectors/connect-yousign/node_modules/bun-types/CLAUDE.md +0 -105
- package/connectors/connect-yousign/node_modules/bun-types/README.md +0 -33
- package/connectors/connect-yousign/node_modules/bun-types/bun.d.ts +0 -8481
- package/connectors/connect-yousign/node_modules/bun-types/bun.ns.d.ts +0 -5
- package/connectors/connect-yousign/node_modules/bun-types/bundle.d.ts +0 -74
- package/connectors/connect-yousign/node_modules/bun-types/deprecated.d.ts +0 -184
- package/connectors/connect-yousign/node_modules/bun-types/devserver.d.ts +0 -187
- package/connectors/connect-yousign/node_modules/bun-types/docs/README.md +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/bytecode.mdx +0 -447
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/css.mdx +0 -1024
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/esbuild.mdx +0 -304
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/executables.mdx +0 -1318
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/fullstack.mdx +0 -1086
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/hot-reloading.mdx +0 -229
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/html-static.mdx +0 -498
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/index.mdx +0 -1840
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/loaders.mdx +0 -451
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/macros.mdx +0 -328
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/minifier.mdx +0 -1286
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/plugins.mdx +0 -477
- package/connectors/connect-yousign/node_modules/bun-types/docs/bundler/standalone-html.mdx +0 -314
- package/connectors/connect-yousign/node_modules/bun-types/docs/feedback.mdx +0 -75
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-array.mdx +0 -29
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-blob.mdx +0 -26
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-buffer.mdx +0 -27
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-string.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/arraybuffer-to-typedarray.mdx +0 -41
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-arraybuffer.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-dataview.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-stream.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-string.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/blob-to-typedarray.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-arraybuffer.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-blob.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-readablestream.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-string.mdx +0 -27
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/buffer-to-typedarray.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/dataview-to-string.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-arraybuffer.mdx +0 -27
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-blob.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-buffer.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-dataview.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-readablestream.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/binary/typedarray-to-string.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/aws-lambda.mdx +0 -204
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/digital-ocean.mdx +0 -161
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/google-cloud-run.mdx +0 -194
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/railway.mdx +0 -145
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/render.mdx +0 -82
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/deployment/vercel.mdx +0 -97
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/astro.mdx +0 -82
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/discordjs.mdx +0 -80
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/docker.mdx +0 -151
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/drizzle.mdx +0 -195
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/elysia.mdx +0 -31
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/express.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/gel.mdx +0 -261
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/hono.mdx +0 -47
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/mongoose.mdx +0 -92
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-drizzle.mdx +0 -234
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/neon-serverless-postgres.mdx +0 -60
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nextjs.mdx +0 -103
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/nuxt.mdx +0 -96
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/pm2.mdx +0 -55
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma-postgres.mdx +0 -169
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/prisma.mdx +0 -164
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/qwik.mdx +0 -114
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/react.mdx +0 -52
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/remix.mdx +0 -97
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sentry.mdx +0 -54
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/solidstart.mdx +0 -62
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/ssr-react.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/stric.mdx +0 -54
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/sveltekit.mdx +0 -138
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/systemd.mdx +0 -114
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/tanstack-start.mdx +0 -791
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/upstash.mdx +0 -87
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/ecosystem/vite.mdx +0 -77
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-links.mdx +0 -71
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/html-rewriter/extract-social-meta.mdx +0 -97
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/cluster.mdx +0 -69
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch-unix.mdx +0 -35
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/fetch.mdx +0 -26
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/file-uploads.mdx +0 -97
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/hot.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/proxy.mdx +0 -50
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/server.mdx +0 -48
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/simple.mdx +0 -20
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-file.mdx +0 -50
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-iterator.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/stream-node-streams-in-bun.mdx +0 -22
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/http/tls.mdx +0 -32
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/index.mdx +0 -10
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-dev.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-git.mdx +0 -40
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-optional.mdx +0 -27
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-peer.mdx +0 -45
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add-tarball.mdx +0 -35
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/add.mdx +0 -44
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/azure-artifacts.mdx +0 -76
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/cicd.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/custom-registry.mdx +0 -32
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/from-npm-install-to-bun-install.mdx +0 -230
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/git-diff-bun-lockfile.mdx +0 -48
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/jfrog-artifactory.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/npm-alias.mdx +0 -25
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/registry-scope.mdx +0 -40
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/trusted.mdx +0 -52
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/workspaces.mdx +0 -70
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/install/yarnlock.mdx +0 -51
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/argv.mdx +0 -66
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ctrl-c.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/ipc.mdx +0 -69
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/nanoseconds.mdx +0 -15
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/os-signals.mdx +0 -31
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stderr.mdx +0 -34
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn-stdout.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/spawn.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/process/stdin.mdx +0 -62
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/arraybuffer.mdx +0 -30
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/buffer.mdx +0 -21
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/exists.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/json.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/mime.mdx +0 -22
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/stream.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/string.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/uint8array.mdx +0 -23
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/read-file/watch.mdx +0 -66
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/build-time-constants.mdx +0 -295
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/cicd.mdx +0 -45
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/codesign-macos-executable.mdx +0 -61
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/define-constant.mdx +0 -149
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-directory.mdx +0 -39
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/delete-file.mdx +0 -21
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/heap-snapshot.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-html.mdx +0 -15
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json.mdx +0 -46
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-json5.mdx +0 -74
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-toml.mdx +0 -32
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/import-yaml.mdx +0 -104
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/read-env.mdx +0 -37
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/set-env.mdx +0 -51
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/shell.mdx +0 -42
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/timezone.mdx +0 -38
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/tsconfig-paths.mdx +0 -31
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/typescript.mdx +0 -51
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/vscode-debugger.mdx +0 -47
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/runtime/web-debugger.mdx +0 -103
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-arraybuffer.mdx +0 -13
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-blob.mdx +0 -13
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-json.mdx +0 -14
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-string.mdx +0 -14
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/node-readable-to-uint8array.mdx +0 -13
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-array.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-arraybuffer.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-blob.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-buffer.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-json.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-string.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/streams/to-typedarray.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/bail.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/concurrent-test-glob.mdx +0 -146
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage-threshold.mdx +0 -67
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/coverage.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/happy-dom.mdx +0 -73
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/migrate-from-jest.mdx +0 -125
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-clock.mdx +0 -50
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/mock-functions.mdx +0 -70
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/rerun-each.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/run-tests.mdx +0 -116
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/skip-tests.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/snapshot.mdx +0 -102
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/spy-on.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/svelte-test.mdx +0 -113
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/testing-library.mdx +0 -93
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/timeout.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/todo-tests.mdx +0 -74
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/update-snapshots.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/test/watch-mode.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/base64.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deep-equals.mdx +0 -41
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/deflate.mdx +0 -20
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/detect-bun.mdx +0 -28
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/entrypoint.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/escape-html.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/file-url-to-path.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/gzip.mdx +0 -20
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/hash-a-password.mdx +0 -56
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-dir.mdx +0 -15
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-file.mdx +0 -15
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/import-meta-path.mdx +0 -15
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/javascript-uuid.mdx +0 -25
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/main.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/path-to-file-url.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/sleep.mdx +0 -24
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/upgrade.mdx +0 -93
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/version.mdx +0 -23
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/util/which-path-to-executable-bin.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/compression.mdx +0 -33
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/context.mdx +0 -79
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/pubsub.mdx +0 -43
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/websocket/simple.mdx +0 -38
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/append.mdx +0 -54
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/basic.mdx +0 -46
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/blob.mdx +0 -30
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/cat.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/file-cp.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/filesink.mdx +0 -54
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/response.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stdout.mdx +0 -23
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/stream.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/guides/write-file/unlink.mdx +0 -18
- package/connectors/connect-yousign/node_modules/bun-types/docs/index.mdx +0 -133
- package/connectors/connect-yousign/node_modules/bun-types/docs/installation.mdx +0 -372
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/bunx.mdx +0 -91
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/catalogs.mdx +0 -292
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/add.mdx +0 -179
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/audit.mdx +0 -60
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/info.mdx +0 -70
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/install.mdx +0 -591
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/link.mdx +0 -61
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/outdated.mdx +0 -197
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/patch.mdx +0 -69
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/pm.mdx +0 -323
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/publish.mdx +0 -131
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/remove.mdx +0 -16
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/update.mdx +0 -140
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/cli/why.mdx +0 -84
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/filter.mdx +0 -127
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/global-cache.mdx +0 -72
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/isolated-installs.mdx +0 -220
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lifecycle.mdx +0 -64
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/lockfile.mdx +0 -64
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/npmrc.mdx +0 -245
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/overrides.mdx +0 -83
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/scopes-registries.mdx +0 -35
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/security-scanner-api.mdx +0 -95
- package/connectors/connect-yousign/node_modules/bun-types/docs/pm/workspaces.mdx +0 -115
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/benchmarking.mdx +0 -296
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/bindgen.mdx +0 -223
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/building-windows.mdx +0 -143
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/contributing.mdx +0 -366
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/feedback.mdx +0 -20
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/license.mdx +0 -78
- package/connectors/connect-yousign/node_modules/bun-types/docs/project/roadmap.mdx +0 -8
- package/connectors/connect-yousign/node_modules/bun-types/docs/quickstart.mdx +0 -251
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/archive.mdx +0 -452
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/auto-install.mdx +0 -97
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/binary-data.mdx +0 -846
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bun-apis.mdx +0 -59
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/bunfig.mdx +0 -754
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/c-compiler.mdx +0 -204
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/child-process.mdx +0 -659
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/color.mdx +0 -267
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/console.mdx +0 -67
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/cookies.mdx +0 -454
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/debugger.mdx +0 -335
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/environment-variables.mdx +0 -231
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/ffi.mdx +0 -567
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-io.mdx +0 -306
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-system-router.mdx +0 -118
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/file-types.mdx +0 -482
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/glob.mdx +0 -181
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/globals.mdx +0 -72
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/hashing.mdx +0 -315
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/html-rewriter.mdx +0 -333
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/cookies.mdx +0 -79
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/error-handling.mdx +0 -40
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/metrics.mdx +0 -36
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/routing.mdx +0 -289
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/server.mdx +0 -645
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/tls.mdx +0 -101
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/http/websockets.mdx +0 -414
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/index.mdx +0 -223
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/json5.mdx +0 -271
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsonl.mdx +0 -188
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/jsx.mdx +0 -115
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/markdown.mdx +0 -344
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/module-resolution.mdx +0 -374
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/dns.mdx +0 -111
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/fetch.mdx +0 -484
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/tcp.mdx +0 -239
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/networking/udp.mdx +0 -180
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/node-api.mdx +0 -19
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/nodejs-compat.mdx +0 -468
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/plugins.mdx +0 -419
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/redis.mdx +0 -583
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/repl.mdx +0 -176
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/s3.mdx +0 -881
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/secrets.mdx +0 -340
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/semver.mdx +0 -57
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/shell.mdx +0 -637
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sql.mdx +0 -1404
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/sqlite.mdx +0 -721
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/streams.mdx +0 -232
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/create.mdx +0 -269
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/templating/init.mdx +0 -58
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/transpiler.mdx +0 -288
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/typescript.mdx +0 -58
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/utils.mdx +0 -1010
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/watch-mode.mdx +0 -161
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/web-apis.mdx +0 -29
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/workers.mdx +0 -314
- package/connectors/connect-yousign/node_modules/bun-types/docs/runtime/yaml.mdx +0 -469
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/add.mdx +0 -166
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/build.mdx +0 -197
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/bunx.mdx +0 -49
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/feedback.mdx +0 -17
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/init.mdx +0 -84
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/install.mdx +0 -173
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/link.mdx +0 -163
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/outdated.mdx +0 -140
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/patch.mdx +0 -171
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/publish.mdx +0 -198
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/remove.mdx +0 -146
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/run.mdx +0 -305
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/test.mdx +0 -105
- package/connectors/connect-yousign/node_modules/bun-types/docs/snippets/cli/update.mdx +0 -144
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/code-coverage.mdx +0 -409
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/configuration.mdx +0 -520
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/dates-times.mdx +0 -129
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/discovery.mdx +0 -90
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/dom.mdx +0 -226
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/index.mdx +0 -409
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/lifecycle.mdx +0 -366
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/mocks.mdx +0 -637
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/reporters.mdx +0 -126
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/runtime-behavior.mdx +0 -342
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/snapshots.mdx +0 -434
- package/connectors/connect-yousign/node_modules/bun-types/docs/test/writing-tests.mdx +0 -672
- package/connectors/connect-yousign/node_modules/bun-types/docs/typescript.mdx +0 -54
- package/connectors/connect-yousign/node_modules/bun-types/extensions.d.ts +0 -40
- package/connectors/connect-yousign/node_modules/bun-types/fetch.d.ts +0 -79
- package/connectors/connect-yousign/node_modules/bun-types/ffi.d.ts +0 -1154
- package/connectors/connect-yousign/node_modules/bun-types/globals.d.ts +0 -2067
- package/connectors/connect-yousign/node_modules/bun-types/html-rewriter.d.ts +0 -186
- package/connectors/connect-yousign/node_modules/bun-types/index.d.ts +0 -32
- package/connectors/connect-yousign/node_modules/bun-types/jsc.d.ts +0 -233
- package/connectors/connect-yousign/node_modules/bun-types/jsx.d.ts +0 -11
- package/connectors/connect-yousign/node_modules/bun-types/overrides.d.ts +0 -376
- package/connectors/connect-yousign/node_modules/bun-types/package.json +0 -37
- package/connectors/connect-yousign/node_modules/bun-types/redis.d.ts +0 -3352
- package/connectors/connect-yousign/node_modules/bun-types/s3.d.ts +0 -1335
- package/connectors/connect-yousign/node_modules/bun-types/security.d.ts +0 -101
- package/connectors/connect-yousign/node_modules/bun-types/serve.d.ts +0 -1296
- package/connectors/connect-yousign/node_modules/bun-types/shell.d.ts +0 -380
- package/connectors/connect-yousign/node_modules/bun-types/sql.d.ts +0 -887
- package/connectors/connect-yousign/node_modules/bun-types/sqlite.d.ts +0 -1322
- package/connectors/connect-yousign/node_modules/bun-types/test-globals.d.ts +0 -22
- package/connectors/connect-yousign/node_modules/bun-types/test.d.ts +0 -2392
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/branding.d.ts +0 -283
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/index.d.ts +0 -1207
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/messages.d.ts +0 -395
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/overloads.d.ts +0 -669
- package/connectors/connect-yousign/node_modules/bun-types/vendor/expect-type/utils.d.ts +0 -431
- package/connectors/connect-yousign/node_modules/bun-types/wasm.d.ts +0 -193
- package/connectors/connect-yousign/node_modules/chalk/license +0 -9
- package/connectors/connect-yousign/node_modules/chalk/package.json +0 -83
- package/connectors/connect-yousign/node_modules/chalk/readme.md +0 -297
- package/connectors/connect-yousign/node_modules/chalk/source/index.d.ts +0 -325
- package/connectors/connect-yousign/node_modules/chalk/source/index.js +0 -225
- package/connectors/connect-yousign/node_modules/chalk/source/utilities.js +0 -33
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +0 -236
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/ansi-styles/index.js +0 -223
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.d.ts +0 -1
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/browser.js +0 -34
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.d.ts +0 -55
- package/connectors/connect-yousign/node_modules/chalk/source/vendor/supports-color/index.js +0 -190
- package/connectors/connect-yousign/node_modules/commander/LICENSE +0 -22
- package/connectors/connect-yousign/node_modules/commander/Readme.md +0 -1157
- package/connectors/connect-yousign/node_modules/commander/esm.mjs +0 -16
- package/connectors/connect-yousign/node_modules/commander/index.js +0 -24
- package/connectors/connect-yousign/node_modules/commander/lib/argument.js +0 -149
- package/connectors/connect-yousign/node_modules/commander/lib/command.js +0 -2509
- package/connectors/connect-yousign/node_modules/commander/lib/error.js +0 -39
- package/connectors/connect-yousign/node_modules/commander/lib/help.js +0 -520
- package/connectors/connect-yousign/node_modules/commander/lib/option.js +0 -330
- package/connectors/connect-yousign/node_modules/commander/lib/suggestSimilar.js +0 -101
- package/connectors/connect-yousign/node_modules/commander/package-support.json +0 -16
- package/connectors/connect-yousign/node_modules/commander/package.json +0 -84
- package/connectors/connect-yousign/node_modules/commander/typings/esm.d.mts +0 -3
- package/connectors/connect-yousign/node_modules/commander/typings/index.d.ts +0 -969
- package/connectors/connect-yousign/node_modules/typescript/LICENSE.txt +0 -55
- package/connectors/connect-yousign/node_modules/typescript/README.md +0 -50
- package/connectors/connect-yousign/node_modules/typescript/SECURITY.md +0 -41
- package/connectors/connect-yousign/node_modules/typescript/ThirdPartyNoticeText.txt +0 -193
- package/connectors/connect-yousign/node_modules/typescript/bin/tsc +0 -2
- package/connectors/connect-yousign/node_modules/typescript/bin/tsserver +0 -2
- package/connectors/connect-yousign/node_modules/typescript/lib/_tsc.js +0 -133818
- package/connectors/connect-yousign/node_modules/typescript/lib/_tsserver.js +0 -659
- package/connectors/connect-yousign/node_modules/typescript/lib/_typingsInstaller.js +0 -222
- package/connectors/connect-yousign/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.d.ts +0 -22
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.d.ts +0 -384
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -22
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.d.ts +0 -39429
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -571
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -147
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -597
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.d.ts +0 -28
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -77
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -605
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -81
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -128
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -144
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -46
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -326
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -116
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -31
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.d.ts +0 -26
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -31
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -44
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -49
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -135
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -45
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -53
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -77
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -53
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -83
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -30
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -37
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -79
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -33
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -37
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -765
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.d.ts +0 -27
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -42
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -474
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -28
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -47
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -99
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -44
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -166
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -48
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -33
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -78
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -121
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.d.ts +0 -25
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -75
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -145
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -26
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -39
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -25
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -924
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.d.ts +0 -22
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -56
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -65
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.d.ts +0 -26
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -35
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -25
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -68
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es5.d.ts +0 -4601
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.es6.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -35
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -96
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -28
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -193
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -445
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -24
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -148
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -34
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -25
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.scripthost.d.ts +0 -322
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.d.ts +0 -13150
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -23
- package/connectors/connect-yousign/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -340
- package/connectors/connect-yousign/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/tsc.js +0 -8
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserver.js +0 -8
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -17
- package/connectors/connect-yousign/node_modules/typescript/lib/tsserverlibrary.js +0 -21
- package/connectors/connect-yousign/node_modules/typescript/lib/typesMap.json +0 -497
- package/connectors/connect-yousign/node_modules/typescript/lib/typescript.d.ts +0 -11437
- package/connectors/connect-yousign/node_modules/typescript/lib/typescript.js +0 -200276
- package/connectors/connect-yousign/node_modules/typescript/lib/typingsInstaller.js +0 -8
- package/connectors/connect-yousign/node_modules/typescript/lib/watchGuard.js +0 -53
- package/connectors/connect-yousign/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -2122
- package/connectors/connect-yousign/node_modules/typescript/package.json +0 -120
- package/connectors/connect-yousign/node_modules/undici-types/LICENSE +0 -21
- package/connectors/connect-yousign/node_modules/undici-types/README.md +0 -6
- package/connectors/connect-yousign/node_modules/undici-types/agent.d.ts +0 -32
- package/connectors/connect-yousign/node_modules/undici-types/api.d.ts +0 -43
- package/connectors/connect-yousign/node_modules/undici-types/balanced-pool.d.ts +0 -30
- package/connectors/connect-yousign/node_modules/undici-types/cache-interceptor.d.ts +0 -173
- package/connectors/connect-yousign/node_modules/undici-types/cache.d.ts +0 -36
- package/connectors/connect-yousign/node_modules/undici-types/client-stats.d.ts +0 -15
- package/connectors/connect-yousign/node_modules/undici-types/client.d.ts +0 -108
- package/connectors/connect-yousign/node_modules/undici-types/connector.d.ts +0 -34
- package/connectors/connect-yousign/node_modules/undici-types/content-type.d.ts +0 -21
- package/connectors/connect-yousign/node_modules/undici-types/cookies.d.ts +0 -30
- package/connectors/connect-yousign/node_modules/undici-types/diagnostics-channel.d.ts +0 -74
- package/connectors/connect-yousign/node_modules/undici-types/dispatcher.d.ts +0 -276
- package/connectors/connect-yousign/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -22
- package/connectors/connect-yousign/node_modules/undici-types/errors.d.ts +0 -161
- package/connectors/connect-yousign/node_modules/undici-types/eventsource.d.ts +0 -66
- package/connectors/connect-yousign/node_modules/undici-types/fetch.d.ts +0 -211
- package/connectors/connect-yousign/node_modules/undici-types/formdata.d.ts +0 -108
- package/connectors/connect-yousign/node_modules/undici-types/global-dispatcher.d.ts +0 -9
- package/connectors/connect-yousign/node_modules/undici-types/global-origin.d.ts +0 -7
- package/connectors/connect-yousign/node_modules/undici-types/h2c-client.d.ts +0 -73
- package/connectors/connect-yousign/node_modules/undici-types/handlers.d.ts +0 -15
- package/connectors/connect-yousign/node_modules/undici-types/header.d.ts +0 -160
- package/connectors/connect-yousign/node_modules/undici-types/index.d.ts +0 -88
- package/connectors/connect-yousign/node_modules/undici-types/interceptors.d.ts +0 -73
- package/connectors/connect-yousign/node_modules/undici-types/mock-agent.d.ts +0 -68
- package/connectors/connect-yousign/node_modules/undici-types/mock-call-history.d.ts +0 -111
- package/connectors/connect-yousign/node_modules/undici-types/mock-client.d.ts +0 -27
- package/connectors/connect-yousign/node_modules/undici-types/mock-errors.d.ts +0 -12
- package/connectors/connect-yousign/node_modules/undici-types/mock-interceptor.d.ts +0 -94
- package/connectors/connect-yousign/node_modules/undici-types/mock-pool.d.ts +0 -27
- package/connectors/connect-yousign/node_modules/undici-types/package.json +0 -55
- package/connectors/connect-yousign/node_modules/undici-types/patch.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/undici-types/pool-stats.d.ts +0 -19
- package/connectors/connect-yousign/node_modules/undici-types/pool.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/undici-types/proxy-agent.d.ts +0 -29
- package/connectors/connect-yousign/node_modules/undici-types/readable.d.ts +0 -68
- package/connectors/connect-yousign/node_modules/undici-types/retry-agent.d.ts +0 -8
- package/connectors/connect-yousign/node_modules/undici-types/retry-handler.d.ts +0 -125
- package/connectors/connect-yousign/node_modules/undici-types/round-robin-pool.d.ts +0 -41
- package/connectors/connect-yousign/node_modules/undici-types/snapshot-agent.d.ts +0 -109
- package/connectors/connect-yousign/node_modules/undici-types/util.d.ts +0 -18
- package/connectors/connect-yousign/node_modules/undici-types/utility.d.ts +0 -7
- package/connectors/connect-yousign/node_modules/undici-types/webidl.d.ts +0 -341
- package/connectors/connect-yousign/node_modules/undici-types/websocket.d.ts +0 -186
- package/dashboard/dist/assets/index-CSlS3oNV.css +0 -1
- package/dashboard/dist/assets/index-NCasN7x4.js +0 -284
- /package/dist/{server/server.test.d.ts → core/builtins.test.d.ts} +0 -0
package/bin/serve.js
CHANGED
|
@@ -10009,7 +10009,7 @@ var init_promotions = __esm(() => {
|
|
|
10009
10009
|
});
|
|
10010
10010
|
|
|
10011
10011
|
// src/server/serve.ts
|
|
10012
|
-
import { existsSync as
|
|
10012
|
+
import { existsSync as existsSync17, readdirSync as readdirSync11, readFileSync as readFileSync9, writeFileSync as writeFileSync8, mkdirSync as mkdirSync12 } from "fs";
|
|
10013
10013
|
|
|
10014
10014
|
// src/db/agents.ts
|
|
10015
10015
|
init_database();
|
|
@@ -10188,7 +10188,8 @@ init_scheduler();
|
|
|
10188
10188
|
|
|
10189
10189
|
// src/lib/workflow-runner.ts
|
|
10190
10190
|
init_strip();
|
|
10191
|
-
import { spawn as
|
|
10191
|
+
import { spawn as nodeSpawn } from "child_process";
|
|
10192
|
+
var spawnImpl = nodeSpawn;
|
|
10192
10193
|
async function runStep(step, previousOutput) {
|
|
10193
10194
|
return new Promise((resolve) => {
|
|
10194
10195
|
const args = [...step.args ?? []];
|
|
@@ -10196,7 +10197,7 @@ async function runStep(step, previousOutput) {
|
|
|
10196
10197
|
args.push("--input", previousOutput.trim().slice(0, 4096));
|
|
10197
10198
|
}
|
|
10198
10199
|
const cmdArgs = ["run", step.connector, step.command, ...args, "--format", "json"];
|
|
10199
|
-
const proc =
|
|
10200
|
+
const proc = spawnImpl("connectors", cmdArgs, { shell: false });
|
|
10200
10201
|
let output = "";
|
|
10201
10202
|
proc.stdout.on("data", (d) => {
|
|
10202
10203
|
output += d.toString();
|
|
@@ -10239,12 +10240,12 @@ async function runWorkflow(workflow) {
|
|
|
10239
10240
|
|
|
10240
10241
|
// src/server/serve.ts
|
|
10241
10242
|
init_database();
|
|
10242
|
-
import { join as
|
|
10243
|
+
import { join as join18, dirname as dirname8, extname, basename as basename3 } from "path";
|
|
10243
10244
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
10244
10245
|
|
|
10245
10246
|
// src/lib/registry.ts
|
|
10246
|
-
import { existsSync as
|
|
10247
|
-
import { join as
|
|
10247
|
+
import { existsSync as existsSync12, readFileSync as readFileSync6 } from "fs";
|
|
10248
|
+
import { join as join13, dirname as dirname5 } from "path";
|
|
10248
10249
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
10249
10250
|
|
|
10250
10251
|
// src/core/errors.ts
|
|
@@ -10259,7 +10260,7 @@ class ConnectorDefinitionError extends Error {
|
|
|
10259
10260
|
|
|
10260
10261
|
// src/core/connector.ts
|
|
10261
10262
|
var CONNECTOR_NAME_RE = /^[a-z0-9-]+$/;
|
|
10262
|
-
var OPERATION_NAME_RE = /^[
|
|
10263
|
+
var OPERATION_NAME_RE = /^[A-Za-z0-9:._-]+$/;
|
|
10263
10264
|
function defineConnector(definition) {
|
|
10264
10265
|
const { meta, auth, operations } = definition;
|
|
10265
10266
|
if (!CONNECTOR_NAME_RE.test(meta.name)) {
|
|
@@ -15157,10 +15158,731 @@ var githubConnector = defineConnector({
|
|
|
15157
15158
|
}
|
|
15158
15159
|
}
|
|
15159
15160
|
});
|
|
15161
|
+
|
|
15162
|
+
// src/core/connectors/gmail.ts
|
|
15163
|
+
import { existsSync as existsSync8, mkdirSync as mkdirSync6, readFileSync as readFileSync3, readdirSync as readdirSync5, writeFileSync as writeFileSync3 } from "fs";
|
|
15164
|
+
import { homedir as homedir8 } from "os";
|
|
15165
|
+
import { basename, join as join9 } from "path";
|
|
15166
|
+
var GMAIL_API_BASE = "https://gmail.googleapis.com/gmail/v1";
|
|
15167
|
+
var TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
15168
|
+
var REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
15169
|
+
var listMessagesSchema = exports_external2.object({
|
|
15170
|
+
max: exports_external2.coerce.number().int().positive().max(500).optional(),
|
|
15171
|
+
maxResults: exports_external2.coerce.number().int().positive().max(500).optional(),
|
|
15172
|
+
pageToken: exports_external2.string().optional(),
|
|
15173
|
+
query: exports_external2.string().optional(),
|
|
15174
|
+
q: exports_external2.string().optional(),
|
|
15175
|
+
label: exports_external2.string().optional(),
|
|
15176
|
+
labelIds: exports_external2.union([exports_external2.string(), exports_external2.array(exports_external2.string())]).optional(),
|
|
15177
|
+
includeSpamTrash: exports_external2.boolean().optional()
|
|
15178
|
+
});
|
|
15179
|
+
var messageIdSchema = exports_external2.object({
|
|
15180
|
+
args: exports_external2.array(exports_external2.union([exports_external2.string(), exports_external2.number(), exports_external2.boolean()])).optional(),
|
|
15181
|
+
messageId: exports_external2.string().optional()
|
|
15182
|
+
});
|
|
15183
|
+
var readMessageSchema = messageIdSchema.extend({
|
|
15184
|
+
body: exports_external2.boolean().optional(),
|
|
15185
|
+
html: exports_external2.boolean().optional(),
|
|
15186
|
+
format: exports_external2.enum(["full", "metadata", "minimal", "raw"]).optional()
|
|
15187
|
+
});
|
|
15188
|
+
var attachmentListSchema = messageIdSchema;
|
|
15189
|
+
var attachmentDownloadSchema = messageIdSchema.extend({
|
|
15190
|
+
attachmentId: exports_external2.string().optional(),
|
|
15191
|
+
filename: exports_external2.string().optional(),
|
|
15192
|
+
mimeType: exports_external2.string().optional(),
|
|
15193
|
+
dir: exports_external2.string().optional(),
|
|
15194
|
+
outputDir: exports_external2.string().optional()
|
|
15195
|
+
});
|
|
15196
|
+
var historyListSchema = exports_external2.object({
|
|
15197
|
+
startHistoryId: exports_external2.string(),
|
|
15198
|
+
historyTypes: exports_external2.union([exports_external2.string(), exports_external2.array(exports_external2.string())]).optional(),
|
|
15199
|
+
labelId: exports_external2.string().optional(),
|
|
15200
|
+
maxResults: exports_external2.coerce.number().int().positive().max(500).optional(),
|
|
15201
|
+
pageToken: exports_external2.string().optional()
|
|
15202
|
+
});
|
|
15203
|
+
var replySchema = messageIdSchema.extend({
|
|
15204
|
+
body: exports_external2.string(),
|
|
15205
|
+
html: exports_external2.boolean().optional(),
|
|
15206
|
+
isHtml: exports_external2.boolean().optional(),
|
|
15207
|
+
cc: exports_external2.union([exports_external2.string(), exports_external2.array(exports_external2.string())]).optional(),
|
|
15208
|
+
bcc: exports_external2.union([exports_external2.string(), exports_external2.array(exports_external2.string())]).optional()
|
|
15209
|
+
});
|
|
15210
|
+
var gmailConnector = defineConnector({
|
|
15211
|
+
meta: {
|
|
15212
|
+
name: "gmail",
|
|
15213
|
+
displayName: "Gmail",
|
|
15214
|
+
description: "Profile-aware Gmail mailbox operations for sync, labels, attachments, history, and replies.",
|
|
15215
|
+
category: "communication",
|
|
15216
|
+
tags: ["google", "gmail", "email", "mailbox"]
|
|
15217
|
+
},
|
|
15218
|
+
auth: {
|
|
15219
|
+
type: "oauth2",
|
|
15220
|
+
supportsProfiles: true,
|
|
15221
|
+
fields: [
|
|
15222
|
+
{ key: "clientId", env: "GMAIL_CLIENT_ID", label: "OAuth client ID" },
|
|
15223
|
+
{ key: "clientSecret", env: "GMAIL_CLIENT_SECRET", label: "OAuth client secret", secret: true }
|
|
15224
|
+
]
|
|
15225
|
+
},
|
|
15226
|
+
createContext: ({ profile }) => ({ profile: profile || "default" }),
|
|
15227
|
+
operations: {
|
|
15228
|
+
"profiles.list": {
|
|
15229
|
+
summary: "List configured Gmail profiles.",
|
|
15230
|
+
execute: () => ({ profiles: listProfiles() })
|
|
15231
|
+
},
|
|
15232
|
+
"profile.get": {
|
|
15233
|
+
summary: "Get the authenticated Gmail profile.",
|
|
15234
|
+
execute: async ({ context }) => requestJson(context.profile, "/users/me/profile", {})
|
|
15235
|
+
},
|
|
15236
|
+
"messages.list": {
|
|
15237
|
+
summary: "List Gmail messages.",
|
|
15238
|
+
inputSchema: listMessagesSchema,
|
|
15239
|
+
execute: async ({ context }, input) => {
|
|
15240
|
+
const labelIds = normalizeStringArray(input.labelIds ?? input.label);
|
|
15241
|
+
return requestJson(context.profile, "/users/me/messages", {
|
|
15242
|
+
maxResults: input.maxResults ?? input.max ?? 50,
|
|
15243
|
+
pageToken: input.pageToken,
|
|
15244
|
+
q: input.q ?? input.query,
|
|
15245
|
+
labelIds: labelIds.length > 0 ? labelIds.join(",") : undefined,
|
|
15246
|
+
includeSpamTrash: input.includeSpamTrash
|
|
15247
|
+
});
|
|
15248
|
+
}
|
|
15249
|
+
},
|
|
15250
|
+
"messages.read": {
|
|
15251
|
+
summary: "Read a Gmail message with optional extracted body.",
|
|
15252
|
+
inputSchema: readMessageSchema,
|
|
15253
|
+
execute: async ({ context }, input) => {
|
|
15254
|
+
const messageId = getMessageId(input);
|
|
15255
|
+
const message = await requestJson(context.profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: input.format ?? "full" });
|
|
15256
|
+
const headers = headersToObject(message.payload?.headers ?? []);
|
|
15257
|
+
return {
|
|
15258
|
+
...message,
|
|
15259
|
+
from: headers.From ?? headers.from ?? "",
|
|
15260
|
+
to: headers.To ?? headers.to ?? "",
|
|
15261
|
+
cc: headers.Cc ?? headers.cc ?? "",
|
|
15262
|
+
subject: headers.Subject ?? headers.subject ?? "",
|
|
15263
|
+
date: headers.Date ?? headers.date ?? "",
|
|
15264
|
+
body: input.body ? extractBody(message, Boolean(input.html)) : undefined,
|
|
15265
|
+
size: message.sizeEstimate
|
|
15266
|
+
};
|
|
15267
|
+
}
|
|
15268
|
+
},
|
|
15269
|
+
"messages.getRaw": {
|
|
15270
|
+
summary: "Read raw base64url Gmail message content.",
|
|
15271
|
+
inputSchema: messageIdSchema,
|
|
15272
|
+
execute: async ({ context }, input) => {
|
|
15273
|
+
const messageId = getMessageId(input);
|
|
15274
|
+
return requestJson(context.profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "raw" });
|
|
15275
|
+
}
|
|
15276
|
+
},
|
|
15277
|
+
"messages.mark-read": {
|
|
15278
|
+
summary: "Mark a message as read.",
|
|
15279
|
+
inputSchema: messageIdSchema,
|
|
15280
|
+
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), undefined, ["UNREAD"])
|
|
15281
|
+
},
|
|
15282
|
+
"messages.mark-unread": {
|
|
15283
|
+
summary: "Mark a message as unread.",
|
|
15284
|
+
inputSchema: messageIdSchema,
|
|
15285
|
+
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), ["UNREAD"], undefined)
|
|
15286
|
+
},
|
|
15287
|
+
"messages.archive": {
|
|
15288
|
+
summary: "Archive a message by removing the INBOX label.",
|
|
15289
|
+
inputSchema: messageIdSchema,
|
|
15290
|
+
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), undefined, ["INBOX"])
|
|
15291
|
+
},
|
|
15292
|
+
"messages.star": {
|
|
15293
|
+
summary: "Star a message.",
|
|
15294
|
+
inputSchema: messageIdSchema,
|
|
15295
|
+
execute: async ({ context }, input) => modifyMessage(context.profile, getMessageId(input), ["STARRED"], undefined)
|
|
15296
|
+
},
|
|
15297
|
+
"messages.reply": {
|
|
15298
|
+
summary: "Reply to a Gmail message in the same thread.",
|
|
15299
|
+
inputSchema: replySchema,
|
|
15300
|
+
execute: async ({ context }, input) => replyToMessage(context.profile, getMessageId(input), input)
|
|
15301
|
+
},
|
|
15302
|
+
"attachments.list": {
|
|
15303
|
+
summary: "List Gmail message attachments.",
|
|
15304
|
+
inputSchema: attachmentListSchema,
|
|
15305
|
+
execute: async ({ context }, input) => {
|
|
15306
|
+
const message = await requestJson(context.profile, `/users/me/messages/${encodeURIComponent(getMessageId(input))}`, { format: "full" });
|
|
15307
|
+
return collectAttachments(message.payload);
|
|
15308
|
+
}
|
|
15309
|
+
},
|
|
15310
|
+
"attachments.download": {
|
|
15311
|
+
summary: "Download one or all Gmail message attachments to disk.",
|
|
15312
|
+
inputSchema: attachmentDownloadSchema,
|
|
15313
|
+
execute: async ({ context }, input) => downloadAttachments(context.profile, input)
|
|
15314
|
+
},
|
|
15315
|
+
"labels.list": {
|
|
15316
|
+
summary: "List Gmail labels.",
|
|
15317
|
+
execute: async ({ context }) => requestJson(context.profile, "/users/me/labels", {})
|
|
15318
|
+
},
|
|
15319
|
+
"history.list": {
|
|
15320
|
+
summary: "List Gmail mailbox history from a history id.",
|
|
15321
|
+
inputSchema: historyListSchema,
|
|
15322
|
+
execute: async ({ context }, input) => requestJson(context.profile, "/users/me/history", {
|
|
15323
|
+
startHistoryId: input.startHistoryId,
|
|
15324
|
+
historyTypes: normalizeStringArray(input.historyTypes).join(",") || undefined,
|
|
15325
|
+
labelId: input.labelId,
|
|
15326
|
+
maxResults: input.maxResults,
|
|
15327
|
+
pageToken: input.pageToken
|
|
15328
|
+
})
|
|
15329
|
+
}
|
|
15330
|
+
}
|
|
15331
|
+
});
|
|
15332
|
+
async function modifyMessage(profile, messageId, addLabelIds, removeLabelIds) {
|
|
15333
|
+
return requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}/modify`, {}, {
|
|
15334
|
+
method: "POST",
|
|
15335
|
+
body: {
|
|
15336
|
+
addLabelIds: addLabelIds ?? [],
|
|
15337
|
+
removeLabelIds: removeLabelIds ?? []
|
|
15338
|
+
}
|
|
15339
|
+
});
|
|
15340
|
+
}
|
|
15341
|
+
async function replyToMessage(profile, messageId, input) {
|
|
15342
|
+
const original = await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "full" });
|
|
15343
|
+
const headers = headersToObject(original.payload?.headers ?? []);
|
|
15344
|
+
const subject = normalizeReplySubject(headers.Subject ?? headers.subject ?? "");
|
|
15345
|
+
const to = headers.From ?? headers.from ?? "";
|
|
15346
|
+
const messageIdHeader = headers["Message-ID"] ?? headers["Message-Id"] ?? headers["message-id"] ?? "";
|
|
15347
|
+
const references = [headers.References ?? headers.references, messageIdHeader].filter(Boolean).join(" ");
|
|
15348
|
+
const raw = buildRawEmail({
|
|
15349
|
+
to,
|
|
15350
|
+
cc: normalizeStringArray(input.cc),
|
|
15351
|
+
bcc: normalizeStringArray(input.bcc),
|
|
15352
|
+
subject,
|
|
15353
|
+
body: input.body,
|
|
15354
|
+
isHtml: Boolean(input.html ?? input.isHtml),
|
|
15355
|
+
inReplyTo: messageIdHeader,
|
|
15356
|
+
references
|
|
15357
|
+
});
|
|
15358
|
+
return requestJson(profile, "/users/me/messages/send", {}, {
|
|
15359
|
+
method: "POST",
|
|
15360
|
+
body: {
|
|
15361
|
+
raw: Buffer.from(raw).toString("base64url"),
|
|
15362
|
+
threadId: original.threadId
|
|
15363
|
+
}
|
|
15364
|
+
});
|
|
15365
|
+
}
|
|
15366
|
+
async function downloadAttachments(profile, input) {
|
|
15367
|
+
const messageId = getMessageId(input);
|
|
15368
|
+
const outputDir = input.dir ?? input.outputDir ?? join9(configDirs()[0], "attachments", messageId);
|
|
15369
|
+
mkdirSync6(outputDir, { recursive: true });
|
|
15370
|
+
const attachments = input.attachmentId && input.filename ? [{
|
|
15371
|
+
attachmentId: input.attachmentId,
|
|
15372
|
+
filename: input.filename,
|
|
15373
|
+
mimeType: input.mimeType ?? "application/octet-stream",
|
|
15374
|
+
size: 0
|
|
15375
|
+
}] : collectAttachments((await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}`, { format: "full" })).payload);
|
|
15376
|
+
const downloaded = [];
|
|
15377
|
+
for (const attachment of attachments) {
|
|
15378
|
+
const data = await requestJson(profile, `/users/me/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachment.attachmentId)}`, {});
|
|
15379
|
+
const filename = safeFilename(attachment.filename);
|
|
15380
|
+
const path = join9(outputDir, filename);
|
|
15381
|
+
const buffer = Buffer.from(data.data, "base64url");
|
|
15382
|
+
writeFileSync3(path, buffer);
|
|
15383
|
+
downloaded.push({
|
|
15384
|
+
filename,
|
|
15385
|
+
path,
|
|
15386
|
+
size: buffer.length,
|
|
15387
|
+
mimeType: attachment.mimeType
|
|
15388
|
+
});
|
|
15389
|
+
}
|
|
15390
|
+
return downloaded;
|
|
15391
|
+
}
|
|
15392
|
+
async function requestJson(profile, path, params, options = {}) {
|
|
15393
|
+
const token = await getValidAccessToken(profile);
|
|
15394
|
+
const url = new URL(`${GMAIL_API_BASE}${path}`);
|
|
15395
|
+
for (const [key, value] of Object.entries(params)) {
|
|
15396
|
+
if (value !== undefined && value !== null && value !== "")
|
|
15397
|
+
url.searchParams.append(key, String(value));
|
|
15398
|
+
}
|
|
15399
|
+
const response = await fetch(url, {
|
|
15400
|
+
method: options.method ?? "GET",
|
|
15401
|
+
headers: {
|
|
15402
|
+
Authorization: `Bearer ${token}`,
|
|
15403
|
+
Accept: "application/json",
|
|
15404
|
+
...options.body ? { "Content-Type": "application/json" } : {}
|
|
15405
|
+
},
|
|
15406
|
+
body: options.body ? JSON.stringify(options.body) : undefined
|
|
15407
|
+
});
|
|
15408
|
+
const text = await response.text();
|
|
15409
|
+
const data = text ? JSON.parse(text) : {};
|
|
15410
|
+
if (!response.ok) {
|
|
15411
|
+
const error = data;
|
|
15412
|
+
throw new Error(`Gmail request failed (${response.status}): ${error.error?.message ?? response.statusText}`);
|
|
15413
|
+
}
|
|
15414
|
+
return data;
|
|
15415
|
+
}
|
|
15416
|
+
async function getValidAccessToken(profile) {
|
|
15417
|
+
if (process.env.GMAIL_ACCESS_TOKEN)
|
|
15418
|
+
return process.env.GMAIL_ACCESS_TOKEN;
|
|
15419
|
+
const tokens = loadTokens(profile);
|
|
15420
|
+
if (!tokens?.accessToken && !tokens?.refreshToken) {
|
|
15421
|
+
throw new Error(`Gmail profile "${profile}" is not authenticated. Run: connectors auth gmail`);
|
|
15422
|
+
}
|
|
15423
|
+
if (tokens.accessToken && (!tokens.expiresAt || Date.now() < tokens.expiresAt - REFRESH_BUFFER_MS))
|
|
15424
|
+
return tokens.accessToken;
|
|
15425
|
+
if (!tokens.refreshToken)
|
|
15426
|
+
return tokens.accessToken ?? "";
|
|
15427
|
+
return (await refreshAccessToken(profile, tokens)).accessToken ?? "";
|
|
15428
|
+
}
|
|
15429
|
+
async function refreshAccessToken(profile, currentTokens) {
|
|
15430
|
+
const credentials = loadCredentials(profile);
|
|
15431
|
+
if (!credentials.clientId || !credentials.clientSecret)
|
|
15432
|
+
throw new Error("Gmail OAuth credentials are not configured. Run: connectors auth gmail");
|
|
15433
|
+
if (!currentTokens.refreshToken)
|
|
15434
|
+
throw new Error(`Gmail profile "${profile}" has no refresh token. Run: connectors auth gmail`);
|
|
15435
|
+
const response = await fetch(TOKEN_URL, {
|
|
15436
|
+
method: "POST",
|
|
15437
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
15438
|
+
body: new URLSearchParams({
|
|
15439
|
+
client_id: credentials.clientId,
|
|
15440
|
+
client_secret: credentials.clientSecret,
|
|
15441
|
+
refresh_token: currentTokens.refreshToken,
|
|
15442
|
+
grant_type: "refresh_token"
|
|
15443
|
+
})
|
|
15444
|
+
});
|
|
15445
|
+
const data = await response.json().catch(() => ({}));
|
|
15446
|
+
if (!response.ok || !data.access_token)
|
|
15447
|
+
throw new Error(`Gmail token refresh failed: ${data.error_description || data.error || response.statusText}`);
|
|
15448
|
+
const tokens = {
|
|
15449
|
+
accessToken: data.access_token,
|
|
15450
|
+
refreshToken: currentTokens.refreshToken,
|
|
15451
|
+
expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,
|
|
15452
|
+
tokenType: data.token_type ?? currentTokens.tokenType,
|
|
15453
|
+
scope: data.scope ?? currentTokens.scope
|
|
15454
|
+
};
|
|
15455
|
+
saveTokens(profile, tokens);
|
|
15456
|
+
return tokens;
|
|
15457
|
+
}
|
|
15458
|
+
function listProfiles() {
|
|
15459
|
+
const profiles = new Set;
|
|
15460
|
+
for (const baseDir of configDirs()) {
|
|
15461
|
+
const profilesDir = join9(baseDir, "profiles");
|
|
15462
|
+
if (!existsSync8(profilesDir))
|
|
15463
|
+
continue;
|
|
15464
|
+
for (const entry of readdirSync5(profilesDir, { withFileTypes: true })) {
|
|
15465
|
+
if (entry.isDirectory())
|
|
15466
|
+
profiles.add(entry.name);
|
|
15467
|
+
if (entry.isFile() && entry.name.endsWith(".json"))
|
|
15468
|
+
profiles.add(basename(entry.name, ".json"));
|
|
15469
|
+
}
|
|
15470
|
+
}
|
|
15471
|
+
return Array.from(profiles).sort((a, b) => a.localeCompare(b));
|
|
15472
|
+
}
|
|
15473
|
+
function loadCredentials(profile) {
|
|
15474
|
+
const envClientId = process.env.GMAIL_CLIENT_ID ?? process.env.GOOGLE_CLIENT_ID;
|
|
15475
|
+
const envClientSecret = process.env.GMAIL_CLIENT_SECRET ?? process.env.GOOGLE_CLIENT_SECRET;
|
|
15476
|
+
if (envClientId && envClientSecret)
|
|
15477
|
+
return { clientId: envClientId, clientSecret: envClientSecret };
|
|
15478
|
+
for (const baseDir of configDirs()) {
|
|
15479
|
+
const credentials = {
|
|
15480
|
+
...readJson(join9(baseDir, "credentials.json")),
|
|
15481
|
+
...readJson(join9(baseDir, "profiles", profile, "config.json"))
|
|
15482
|
+
};
|
|
15483
|
+
if (credentials.clientId || credentials.clientSecret)
|
|
15484
|
+
return credentials;
|
|
15485
|
+
}
|
|
15486
|
+
return {};
|
|
15487
|
+
}
|
|
15488
|
+
function loadTokens(profile) {
|
|
15489
|
+
for (const baseDir of configDirs()) {
|
|
15490
|
+
const fromProfile = readJson(join9(baseDir, "profiles", profile, "tokens.json"));
|
|
15491
|
+
if (fromProfile)
|
|
15492
|
+
return fromProfile;
|
|
15493
|
+
const flat = readJson(join9(baseDir, "profiles", `${profile}.json`));
|
|
15494
|
+
if (flat)
|
|
15495
|
+
return flat.tokens ?? (flat.accessToken || flat.refreshToken ? flat : null);
|
|
15496
|
+
}
|
|
15497
|
+
return null;
|
|
15498
|
+
}
|
|
15499
|
+
function saveTokens(profile, tokens) {
|
|
15500
|
+
const baseDir = configDirs().find((dir) => existsSync8(dir)) ?? configDirs()[0];
|
|
15501
|
+
const profileDir = join9(baseDir, "profiles", profile);
|
|
15502
|
+
mkdirSync6(profileDir, { recursive: true });
|
|
15503
|
+
writeFileSync3(join9(profileDir, "tokens.json"), JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
15504
|
+
}
|
|
15505
|
+
function configDirs() {
|
|
15506
|
+
const explicit = process.env.HASNA_GMAIL_CONNECTOR_DIR ?? process.env.GMAIL_CONNECTOR_DIR;
|
|
15507
|
+
if (explicit)
|
|
15508
|
+
return [explicit];
|
|
15509
|
+
const baseDir = process.env.HASNA_CONNECTORS_DIR ?? join9(homedir8(), ".hasna", "connectors");
|
|
15510
|
+
return [join9(baseDir, "connect-gmail"), join9(baseDir, "gmail")];
|
|
15511
|
+
}
|
|
15512
|
+
function readJson(path) {
|
|
15513
|
+
if (!existsSync8(path))
|
|
15514
|
+
return null;
|
|
15515
|
+
try {
|
|
15516
|
+
return JSON.parse(readFileSync3(path, "utf8"));
|
|
15517
|
+
} catch {
|
|
15518
|
+
return null;
|
|
15519
|
+
}
|
|
15520
|
+
}
|
|
15521
|
+
function getMessageId(input) {
|
|
15522
|
+
const id = input.messageId ?? (input.args?.[0] != null ? String(input.args[0]) : undefined);
|
|
15523
|
+
if (!id)
|
|
15524
|
+
throw new Error("Gmail messageId is required");
|
|
15525
|
+
return id;
|
|
15526
|
+
}
|
|
15527
|
+
function headersToObject(headers) {
|
|
15528
|
+
const out = {};
|
|
15529
|
+
for (const header of headers)
|
|
15530
|
+
out[header.name] = header.value;
|
|
15531
|
+
return out;
|
|
15532
|
+
}
|
|
15533
|
+
function extractBody(message, preferHtml = false) {
|
|
15534
|
+
if (!message.payload)
|
|
15535
|
+
return "";
|
|
15536
|
+
const targetType = preferHtml ? "text/html" : "text/plain";
|
|
15537
|
+
const parts = [];
|
|
15538
|
+
collectTextParts(message.payload, parts);
|
|
15539
|
+
return parts.find((part) => part.mimeType === targetType)?.data ?? parts.find((part) => part.mimeType.startsWith("text/"))?.data ?? "";
|
|
15540
|
+
}
|
|
15541
|
+
function collectTextParts(part, results) {
|
|
15542
|
+
const mimeType = (part.mimeType ?? "").split(";")[0].trim().toLowerCase();
|
|
15543
|
+
if (part.body?.data && mimeType.startsWith("text/")) {
|
|
15544
|
+
results.push({ mimeType, data: Buffer.from(part.body.data, "base64url").toString("utf8") });
|
|
15545
|
+
}
|
|
15546
|
+
for (const child of part.parts ?? [])
|
|
15547
|
+
collectTextParts(child, results);
|
|
15548
|
+
}
|
|
15549
|
+
function collectAttachments(part, attachments = []) {
|
|
15550
|
+
if (!part)
|
|
15551
|
+
return attachments;
|
|
15552
|
+
if (part.body?.attachmentId && part.filename) {
|
|
15553
|
+
attachments.push({
|
|
15554
|
+
attachmentId: part.body.attachmentId,
|
|
15555
|
+
filename: part.filename,
|
|
15556
|
+
mimeType: part.mimeType ?? "application/octet-stream",
|
|
15557
|
+
size: part.body.size ?? 0,
|
|
15558
|
+
partId: part.partId
|
|
15559
|
+
});
|
|
15560
|
+
}
|
|
15561
|
+
for (const child of part.parts ?? [])
|
|
15562
|
+
collectAttachments(child, attachments);
|
|
15563
|
+
return attachments;
|
|
15564
|
+
}
|
|
15565
|
+
function normalizeStringArray(value) {
|
|
15566
|
+
if (!value)
|
|
15567
|
+
return [];
|
|
15568
|
+
return Array.isArray(value) ? value : value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
15569
|
+
}
|
|
15570
|
+
function normalizeReplySubject(subject) {
|
|
15571
|
+
return subject.toLowerCase().startsWith("re:") ? subject : `Re: ${subject}`;
|
|
15572
|
+
}
|
|
15573
|
+
function buildRawEmail(input) {
|
|
15574
|
+
const headers = [
|
|
15575
|
+
`To: ${input.to}`,
|
|
15576
|
+
input.cc.length ? `Cc: ${input.cc.join(", ")}` : "",
|
|
15577
|
+
input.bcc.length ? `Bcc: ${input.bcc.join(", ")}` : "",
|
|
15578
|
+
`Subject: ${input.subject}`,
|
|
15579
|
+
input.inReplyTo ? `In-Reply-To: ${input.inReplyTo}` : "",
|
|
15580
|
+
input.references ? `References: ${input.references}` : "",
|
|
15581
|
+
"MIME-Version: 1.0",
|
|
15582
|
+
`Content-Type: ${input.isHtml ? "text/html" : "text/plain"}; charset=UTF-8`
|
|
15583
|
+
].filter(Boolean);
|
|
15584
|
+
return `${headers.join(`\r
|
|
15585
|
+
`)}\r
|
|
15586
|
+
\r
|
|
15587
|
+
${input.body}`;
|
|
15588
|
+
}
|
|
15589
|
+
function safeFilename(filename) {
|
|
15590
|
+
return basename(filename.replace(/[\u00A0\u2000-\u200B\u202F\u205F\u3000]/g, " ")).replace(/[\/\\]/g, "_");
|
|
15591
|
+
}
|
|
15592
|
+
|
|
15593
|
+
// src/core/connectors/googledrive.ts
|
|
15594
|
+
import { existsSync as existsSync9, mkdirSync as mkdirSync7, readFileSync as readFileSync4, readdirSync as readdirSync6, writeFileSync as writeFileSync4 } from "fs";
|
|
15595
|
+
import { homedir as homedir9 } from "os";
|
|
15596
|
+
import { basename as basename2, join as join10 } from "path";
|
|
15597
|
+
var DRIVE_API_BASE = "https://www.googleapis.com/drive/v3";
|
|
15598
|
+
var TOKEN_URL2 = "https://oauth2.googleapis.com/token";
|
|
15599
|
+
var REFRESH_BUFFER_MS2 = 5 * 60 * 1000;
|
|
15600
|
+
var DEFAULT_FILE_FIELDS = [
|
|
15601
|
+
"id",
|
|
15602
|
+
"name",
|
|
15603
|
+
"mimeType",
|
|
15604
|
+
"parents",
|
|
15605
|
+
"version",
|
|
15606
|
+
"md5Checksum",
|
|
15607
|
+
"size",
|
|
15608
|
+
"modifiedTime",
|
|
15609
|
+
"createdTime",
|
|
15610
|
+
"trashed",
|
|
15611
|
+
"webViewLink",
|
|
15612
|
+
"webContentLink"
|
|
15613
|
+
].join(",");
|
|
15614
|
+
var DEFAULT_EXPORT_FORMATS = {
|
|
15615
|
+
document: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
15616
|
+
spreadsheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
15617
|
+
presentation: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
15618
|
+
drawing: "image/png"
|
|
15619
|
+
};
|
|
15620
|
+
var EXPORT_EXTENSIONS = {
|
|
15621
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx",
|
|
15622
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ".xlsx",
|
|
15623
|
+
"application/vnd.openxmlformats-officedocument.presentationml.presentation": ".pptx",
|
|
15624
|
+
"application/pdf": ".pdf",
|
|
15625
|
+
"text/plain": ".txt",
|
|
15626
|
+
"text/csv": ".csv",
|
|
15627
|
+
"image/png": ".png",
|
|
15628
|
+
"image/jpeg": ".jpg",
|
|
15629
|
+
"image/svg+xml": ".svg"
|
|
15630
|
+
};
|
|
15631
|
+
var listFilesSchema = exports_external2.object({
|
|
15632
|
+
pageSize: exports_external2.coerce.number().int().positive().max(1000).optional(),
|
|
15633
|
+
pageToken: exports_external2.string().optional(),
|
|
15634
|
+
q: exports_external2.string().optional(),
|
|
15635
|
+
fields: exports_external2.string().optional(),
|
|
15636
|
+
orderBy: exports_external2.string().optional(),
|
|
15637
|
+
corpora: exports_external2.enum(["user", "drive", "allDrives"]).optional(),
|
|
15638
|
+
driveId: exports_external2.string().optional(),
|
|
15639
|
+
supportsAllDrives: exports_external2.boolean().optional(),
|
|
15640
|
+
includeItemsFromAllDrives: exports_external2.boolean().optional()
|
|
15641
|
+
});
|
|
15642
|
+
var listDrivesSchema = exports_external2.object({
|
|
15643
|
+
pageSize: exports_external2.coerce.number().int().positive().max(100).optional(),
|
|
15644
|
+
pageToken: exports_external2.string().optional(),
|
|
15645
|
+
q: exports_external2.string().optional()
|
|
15646
|
+
});
|
|
15647
|
+
var fileIdSchema = exports_external2.object({
|
|
15648
|
+
fileId: exports_external2.string(),
|
|
15649
|
+
fields: exports_external2.string().optional()
|
|
15650
|
+
});
|
|
15651
|
+
var downloadSchema = exports_external2.object({
|
|
15652
|
+
fileId: exports_external2.string(),
|
|
15653
|
+
file: exports_external2.object({
|
|
15654
|
+
id: exports_external2.string(),
|
|
15655
|
+
name: exports_external2.string(),
|
|
15656
|
+
mimeType: exports_external2.string()
|
|
15657
|
+
}).optional(),
|
|
15658
|
+
exportMimeType: exports_external2.string().optional()
|
|
15659
|
+
});
|
|
15660
|
+
var googleDriveConnector = defineConnector({
|
|
15661
|
+
meta: {
|
|
15662
|
+
name: "googledrive",
|
|
15663
|
+
displayName: "Google Drive",
|
|
15664
|
+
description: "Profile-aware Google Drive discovery and file download operations.",
|
|
15665
|
+
category: "storage",
|
|
15666
|
+
tags: ["google", "drive", "files", "storage"]
|
|
15667
|
+
},
|
|
15668
|
+
auth: {
|
|
15669
|
+
type: "oauth2",
|
|
15670
|
+
supportsProfiles: true,
|
|
15671
|
+
fields: [
|
|
15672
|
+
{ key: "clientId", env: "GOOGLE_CLIENT_ID", label: "OAuth client ID" },
|
|
15673
|
+
{ key: "clientSecret", env: "GOOGLE_CLIENT_SECRET", label: "OAuth client secret", secret: true }
|
|
15674
|
+
]
|
|
15675
|
+
},
|
|
15676
|
+
createContext: ({ profile }) => ({ profile: profile || "default" }),
|
|
15677
|
+
operations: {
|
|
15678
|
+
"profiles.list": {
|
|
15679
|
+
summary: "List configured Google Drive profiles.",
|
|
15680
|
+
execute: () => ({ profiles: listProfiles2() })
|
|
15681
|
+
},
|
|
15682
|
+
"files.list": {
|
|
15683
|
+
summary: "List Google Drive files.",
|
|
15684
|
+
inputSchema: listFilesSchema,
|
|
15685
|
+
execute: async ({ context }, input) => requestJson2(context.profile, "/files", {
|
|
15686
|
+
pageSize: input.pageSize ?? 1000,
|
|
15687
|
+
pageToken: input.pageToken,
|
|
15688
|
+
q: input.q,
|
|
15689
|
+
fields: input.fields ?? `nextPageToken,files(${DEFAULT_FILE_FIELDS})`,
|
|
15690
|
+
orderBy: input.orderBy ?? "modifiedTime desc",
|
|
15691
|
+
corpora: input.corpora,
|
|
15692
|
+
driveId: input.driveId,
|
|
15693
|
+
supportsAllDrives: input.supportsAllDrives ?? true,
|
|
15694
|
+
includeItemsFromAllDrives: input.includeItemsFromAllDrives ?? false
|
|
15695
|
+
})
|
|
15696
|
+
},
|
|
15697
|
+
"files.get": {
|
|
15698
|
+
summary: "Get Google Drive file metadata.",
|
|
15699
|
+
inputSchema: fileIdSchema,
|
|
15700
|
+
execute: async ({ context }, input) => requestJson2(context.profile, `/files/${encodeURIComponent(input.fileId)}`, {
|
|
15701
|
+
fields: input.fields ?? DEFAULT_FILE_FIELDS,
|
|
15702
|
+
supportsAllDrives: true
|
|
15703
|
+
})
|
|
15704
|
+
},
|
|
15705
|
+
"files.download": {
|
|
15706
|
+
summary: "Download or export a Google Drive file as base64 content.",
|
|
15707
|
+
inputSchema: downloadSchema,
|
|
15708
|
+
execute: async ({ context }, input) => {
|
|
15709
|
+
const file = input.file ?? await requestJson2(context.profile, `/files/${encodeURIComponent(input.fileId)}`, { fields: DEFAULT_FILE_FIELDS, supportsAllDrives: true });
|
|
15710
|
+
const exportMimeType = file.mimeType.startsWith("application/vnd.google-apps.") ? input.exportMimeType ?? defaultExportMimeType(file.mimeType) : undefined;
|
|
15711
|
+
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 });
|
|
15712
|
+
const mimeType = exportMimeType ?? file.mimeType ?? "application/octet-stream";
|
|
15713
|
+
return {
|
|
15714
|
+
dataBase64: Buffer.from(data).toString("base64"),
|
|
15715
|
+
filename: exportMimeType ? `${file.name}${extensionForMimeType(exportMimeType)}` : file.name,
|
|
15716
|
+
mimeType
|
|
15717
|
+
};
|
|
15718
|
+
}
|
|
15719
|
+
},
|
|
15720
|
+
"drives.list": {
|
|
15721
|
+
summary: "List Google shared drives.",
|
|
15722
|
+
inputSchema: listDrivesSchema,
|
|
15723
|
+
execute: async ({ context }, input) => requestJson2(context.profile, "/drives", {
|
|
15724
|
+
pageSize: input.pageSize ?? 100,
|
|
15725
|
+
pageToken: input.pageToken,
|
|
15726
|
+
q: input.q
|
|
15727
|
+
})
|
|
15728
|
+
}
|
|
15729
|
+
}
|
|
15730
|
+
});
|
|
15731
|
+
async function requestJson2(profile, path, params) {
|
|
15732
|
+
const response = await request(profile, path, params);
|
|
15733
|
+
const text = await response.text();
|
|
15734
|
+
return text ? JSON.parse(text) : {};
|
|
15735
|
+
}
|
|
15736
|
+
async function requestBinary(profile, path, params) {
|
|
15737
|
+
return (await request(profile, path, params)).arrayBuffer();
|
|
15738
|
+
}
|
|
15739
|
+
async function request(profile, path, params) {
|
|
15740
|
+
const token = await getValidAccessToken2(profile);
|
|
15741
|
+
const url = new URL(`${DRIVE_API_BASE}${path}`);
|
|
15742
|
+
for (const [key, value] of Object.entries(params)) {
|
|
15743
|
+
if (value !== undefined && value !== null && value !== "")
|
|
15744
|
+
url.searchParams.set(key, String(value));
|
|
15745
|
+
}
|
|
15746
|
+
const response = await fetch(url, { headers: { Authorization: `Bearer ${token}`, Accept: "application/json" } });
|
|
15747
|
+
if (!response.ok) {
|
|
15748
|
+
const body = await response.text().catch(() => "");
|
|
15749
|
+
throw new Error(`Google Drive request failed (${response.status}): ${extractGoogleError(body) || response.statusText}`);
|
|
15750
|
+
}
|
|
15751
|
+
return response;
|
|
15752
|
+
}
|
|
15753
|
+
async function getValidAccessToken2(profile) {
|
|
15754
|
+
if (process.env.GOOGLE_ACCESS_TOKEN)
|
|
15755
|
+
return process.env.GOOGLE_ACCESS_TOKEN;
|
|
15756
|
+
const tokens = loadTokens2(profile);
|
|
15757
|
+
if (!tokens?.accessToken && !tokens?.refreshToken) {
|
|
15758
|
+
throw new Error(`Google Drive profile "${profile}" is not authenticated. Run: connectors auth googledrive`);
|
|
15759
|
+
}
|
|
15760
|
+
if (tokens.accessToken && (!tokens.expiresAt || Date.now() < tokens.expiresAt - REFRESH_BUFFER_MS2))
|
|
15761
|
+
return tokens.accessToken;
|
|
15762
|
+
if (!tokens.refreshToken)
|
|
15763
|
+
return tokens.accessToken ?? "";
|
|
15764
|
+
return (await refreshAccessToken2(profile, tokens)).accessToken ?? "";
|
|
15765
|
+
}
|
|
15766
|
+
async function refreshAccessToken2(profile, currentTokens) {
|
|
15767
|
+
const credentials = loadCredentials2(profile);
|
|
15768
|
+
if (!credentials.clientId || !credentials.clientSecret)
|
|
15769
|
+
throw new Error("Google Drive OAuth credentials are not configured. Run: connectors auth googledrive");
|
|
15770
|
+
if (!currentTokens.refreshToken)
|
|
15771
|
+
throw new Error(`Google Drive profile "${profile}" has no refresh token. Run: connectors auth googledrive`);
|
|
15772
|
+
const response = await fetch(TOKEN_URL2, {
|
|
15773
|
+
method: "POST",
|
|
15774
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
15775
|
+
body: new URLSearchParams({
|
|
15776
|
+
client_id: credentials.clientId,
|
|
15777
|
+
client_secret: credentials.clientSecret,
|
|
15778
|
+
refresh_token: currentTokens.refreshToken,
|
|
15779
|
+
grant_type: "refresh_token"
|
|
15780
|
+
})
|
|
15781
|
+
});
|
|
15782
|
+
const data = await response.json().catch(() => ({}));
|
|
15783
|
+
if (!response.ok || !data.access_token)
|
|
15784
|
+
throw new Error(`Google Drive token refresh failed: ${data.error_description || data.error || response.statusText}`);
|
|
15785
|
+
const tokens = {
|
|
15786
|
+
accessToken: data.access_token,
|
|
15787
|
+
refreshToken: currentTokens.refreshToken,
|
|
15788
|
+
expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,
|
|
15789
|
+
tokenType: data.token_type ?? currentTokens.tokenType,
|
|
15790
|
+
scope: data.scope ?? currentTokens.scope
|
|
15791
|
+
};
|
|
15792
|
+
saveTokens2(profile, tokens);
|
|
15793
|
+
return tokens;
|
|
15794
|
+
}
|
|
15795
|
+
function listProfiles2() {
|
|
15796
|
+
const profiles = new Set;
|
|
15797
|
+
for (const baseDir of configDirs2()) {
|
|
15798
|
+
const profilesDir = join10(baseDir, "profiles");
|
|
15799
|
+
if (!existsSync9(profilesDir))
|
|
15800
|
+
continue;
|
|
15801
|
+
for (const entry of readdirSync6(profilesDir, { withFileTypes: true })) {
|
|
15802
|
+
if (entry.isDirectory())
|
|
15803
|
+
profiles.add(entry.name);
|
|
15804
|
+
if (entry.isFile() && entry.name.endsWith(".json"))
|
|
15805
|
+
profiles.add(basename2(entry.name, ".json"));
|
|
15806
|
+
}
|
|
15807
|
+
}
|
|
15808
|
+
return Array.from(profiles).sort((a, b) => a.localeCompare(b));
|
|
15809
|
+
}
|
|
15810
|
+
function loadCredentials2(profile) {
|
|
15811
|
+
const envClientId = process.env.GOOGLE_CLIENT_ID;
|
|
15812
|
+
const envClientSecret = process.env.GOOGLE_CLIENT_SECRET;
|
|
15813
|
+
if (envClientId && envClientSecret)
|
|
15814
|
+
return { clientId: envClientId, clientSecret: envClientSecret };
|
|
15815
|
+
for (const baseDir of configDirs2()) {
|
|
15816
|
+
const credentials = {
|
|
15817
|
+
...readJson2(join10(baseDir, "credentials.json")),
|
|
15818
|
+
...readJson2(join10(baseDir, "profiles", profile, "config.json"))
|
|
15819
|
+
};
|
|
15820
|
+
if (credentials.clientId || credentials.clientSecret)
|
|
15821
|
+
return credentials;
|
|
15822
|
+
}
|
|
15823
|
+
return {};
|
|
15824
|
+
}
|
|
15825
|
+
function loadTokens2(profile) {
|
|
15826
|
+
for (const baseDir of configDirs2()) {
|
|
15827
|
+
const fromProfile = readJson2(join10(baseDir, "profiles", profile, "tokens.json"));
|
|
15828
|
+
if (fromProfile)
|
|
15829
|
+
return fromProfile;
|
|
15830
|
+
const flat = readJson2(join10(baseDir, "profiles", `${profile}.json`));
|
|
15831
|
+
if (flat)
|
|
15832
|
+
return flat.tokens ?? (flat.accessToken || flat.refreshToken ? flat : null);
|
|
15833
|
+
}
|
|
15834
|
+
return null;
|
|
15835
|
+
}
|
|
15836
|
+
function saveTokens2(profile, tokens) {
|
|
15837
|
+
const baseDir = configDirs2().find((dir) => existsSync9(dir)) ?? configDirs2()[0];
|
|
15838
|
+
const profileDir = join10(baseDir, "profiles", profile);
|
|
15839
|
+
mkdirSync7(profileDir, { recursive: true });
|
|
15840
|
+
writeFileSync4(join10(profileDir, "tokens.json"), JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
15841
|
+
}
|
|
15842
|
+
function configDirs2() {
|
|
15843
|
+
const explicit = process.env.HASNA_GOOGLE_DRIVE_CONNECTOR_DIR ?? process.env.GOOGLE_DRIVE_CONNECTOR_DIR;
|
|
15844
|
+
if (explicit)
|
|
15845
|
+
return [explicit];
|
|
15846
|
+
const baseDir = process.env.HASNA_CONNECTORS_DIR ?? join10(homedir9(), ".hasna", "connectors");
|
|
15847
|
+
return [join10(baseDir, "connect-googledrive"), join10(baseDir, "googledrive")];
|
|
15848
|
+
}
|
|
15849
|
+
function readJson2(path) {
|
|
15850
|
+
if (!existsSync9(path))
|
|
15851
|
+
return null;
|
|
15852
|
+
try {
|
|
15853
|
+
return JSON.parse(readFileSync4(path, "utf8"));
|
|
15854
|
+
} catch {
|
|
15855
|
+
return null;
|
|
15856
|
+
}
|
|
15857
|
+
}
|
|
15858
|
+
function defaultExportMimeType(googleMimeType) {
|
|
15859
|
+
if (googleMimeType.endsWith(".document"))
|
|
15860
|
+
return DEFAULT_EXPORT_FORMATS.document;
|
|
15861
|
+
if (googleMimeType.endsWith(".spreadsheet"))
|
|
15862
|
+
return DEFAULT_EXPORT_FORMATS.spreadsheet;
|
|
15863
|
+
if (googleMimeType.endsWith(".presentation"))
|
|
15864
|
+
return DEFAULT_EXPORT_FORMATS.presentation;
|
|
15865
|
+
if (googleMimeType.endsWith(".drawing"))
|
|
15866
|
+
return DEFAULT_EXPORT_FORMATS.drawing;
|
|
15867
|
+
throw new Error(`Cannot export Google Workspace file type: ${googleMimeType}`);
|
|
15868
|
+
}
|
|
15869
|
+
function extensionForMimeType(mimeType) {
|
|
15870
|
+
return EXPORT_EXTENSIONS[mimeType] ?? "";
|
|
15871
|
+
}
|
|
15872
|
+
function extractGoogleError(body) {
|
|
15873
|
+
if (!body)
|
|
15874
|
+
return "";
|
|
15875
|
+
try {
|
|
15876
|
+
const parsed = JSON.parse(body);
|
|
15877
|
+
return parsed.error?.message ?? body;
|
|
15878
|
+
} catch {
|
|
15879
|
+
return body;
|
|
15880
|
+
}
|
|
15881
|
+
}
|
|
15160
15882
|
// package.json
|
|
15161
15883
|
var package_default = {
|
|
15162
15884
|
name: "@hasna/connectors",
|
|
15163
|
-
version: "1.3.
|
|
15885
|
+
version: "1.3.26",
|
|
15164
15886
|
description: "Open source connector library - Install API connectors with a single command",
|
|
15165
15887
|
type: "module",
|
|
15166
15888
|
bin: {
|
|
@@ -15248,15 +15970,15 @@ var package_default = {
|
|
|
15248
15970
|
|
|
15249
15971
|
// src/core/connectors/imessage.ts
|
|
15250
15972
|
import {
|
|
15251
|
-
existsSync as
|
|
15252
|
-
mkdirSync as
|
|
15253
|
-
readFileSync as
|
|
15254
|
-
readdirSync as
|
|
15973
|
+
existsSync as existsSync10,
|
|
15974
|
+
mkdirSync as mkdirSync8,
|
|
15975
|
+
readFileSync as readFileSync5,
|
|
15976
|
+
readdirSync as readdirSync7,
|
|
15255
15977
|
rmSync,
|
|
15256
15978
|
statSync as statSync2,
|
|
15257
|
-
writeFileSync as
|
|
15979
|
+
writeFileSync as writeFileSync5
|
|
15258
15980
|
} from "fs";
|
|
15259
|
-
import { join as
|
|
15981
|
+
import { join as join11 } from "path";
|
|
15260
15982
|
init_database();
|
|
15261
15983
|
var CONNECTOR_DIRNAME = "connect-imessage";
|
|
15262
15984
|
var COMMAND_SPECS = [
|
|
@@ -15418,36 +16140,36 @@ var messageReplyInputSchema = exports_external2.object({
|
|
|
15418
16140
|
deviceId: exports_external2.string().optional()
|
|
15419
16141
|
});
|
|
15420
16142
|
function getConfigDir2() {
|
|
15421
|
-
return
|
|
16143
|
+
return join11(getConnectorsHome(), CONNECTOR_DIRNAME);
|
|
15422
16144
|
}
|
|
15423
16145
|
function getProfilesDir() {
|
|
15424
|
-
return
|
|
16146
|
+
return join11(getConfigDir2(), "profiles");
|
|
15425
16147
|
}
|
|
15426
16148
|
function getCurrentProfile() {
|
|
15427
|
-
const currentProfileFile =
|
|
15428
|
-
if (!
|
|
16149
|
+
const currentProfileFile = join11(getConfigDir2(), "current_profile");
|
|
16150
|
+
if (!existsSync10(currentProfileFile)) {
|
|
15429
16151
|
return "default";
|
|
15430
16152
|
}
|
|
15431
16153
|
try {
|
|
15432
|
-
return
|
|
16154
|
+
return readFileSync5(currentProfileFile, "utf-8").trim() || "default";
|
|
15433
16155
|
} catch {
|
|
15434
16156
|
return "default";
|
|
15435
16157
|
}
|
|
15436
16158
|
}
|
|
15437
16159
|
function setCurrentProfile(profile) {
|
|
15438
16160
|
const configDir = getConfigDir2();
|
|
15439
|
-
|
|
15440
|
-
|
|
16161
|
+
mkdirSync8(configDir, { recursive: true });
|
|
16162
|
+
writeFileSync5(join11(configDir, "current_profile"), profile);
|
|
15441
16163
|
}
|
|
15442
16164
|
function getFlatProfilePath(profile) {
|
|
15443
|
-
return
|
|
16165
|
+
return join11(getProfilesDir(), `${profile}.json`);
|
|
15444
16166
|
}
|
|
15445
16167
|
function getDirectoryProfilePath(profile) {
|
|
15446
|
-
return
|
|
16168
|
+
return join11(getProfilesDir(), profile, "config.json");
|
|
15447
16169
|
}
|
|
15448
16170
|
function loadJsonFile(path) {
|
|
15449
16171
|
try {
|
|
15450
|
-
return JSON.parse(
|
|
16172
|
+
return JSON.parse(readFileSync5(path, "utf-8"));
|
|
15451
16173
|
} catch {
|
|
15452
16174
|
return {};
|
|
15453
16175
|
}
|
|
@@ -15463,8 +16185,8 @@ function sanitizeProfileConfig(config) {
|
|
|
15463
16185
|
};
|
|
15464
16186
|
}
|
|
15465
16187
|
function loadProfile(profile = getCurrentProfile()) {
|
|
15466
|
-
const flatConfig =
|
|
15467
|
-
const directoryConfig =
|
|
16188
|
+
const flatConfig = existsSync10(getFlatProfilePath(profile)) ? loadJsonFile(getFlatProfilePath(profile)) : {};
|
|
16189
|
+
const directoryConfig = existsSync10(getDirectoryProfilePath(profile)) ? loadJsonFile(getDirectoryProfilePath(profile)) : {};
|
|
15468
16190
|
return sanitizeProfileConfig({
|
|
15469
16191
|
...flatConfig,
|
|
15470
16192
|
...directoryConfig
|
|
@@ -15472,25 +16194,25 @@ function loadProfile(profile = getCurrentProfile()) {
|
|
|
15472
16194
|
}
|
|
15473
16195
|
function writeProfile(profile, config) {
|
|
15474
16196
|
const profilesDir = getProfilesDir();
|
|
15475
|
-
|
|
15476
|
-
|
|
16197
|
+
mkdirSync8(profilesDir, { recursive: true });
|
|
16198
|
+
writeFileSync5(getFlatProfilePath(profile), JSON.stringify(config, null, 2) + `
|
|
15477
16199
|
`);
|
|
15478
16200
|
}
|
|
15479
16201
|
function profileExists(profile) {
|
|
15480
16202
|
if (profile === "default") {
|
|
15481
16203
|
return true;
|
|
15482
16204
|
}
|
|
15483
|
-
return
|
|
16205
|
+
return existsSync10(getFlatProfilePath(profile)) || existsSync10(join11(getProfilesDir(), profile));
|
|
15484
16206
|
}
|
|
15485
|
-
function
|
|
16207
|
+
function listProfiles3() {
|
|
15486
16208
|
const profilesDir = getProfilesDir();
|
|
15487
16209
|
const seen = new Set(["default"]);
|
|
15488
|
-
if (!
|
|
16210
|
+
if (!existsSync10(profilesDir)) {
|
|
15489
16211
|
return [...seen];
|
|
15490
16212
|
}
|
|
15491
16213
|
try {
|
|
15492
|
-
for (const entry of
|
|
15493
|
-
const fullPath =
|
|
16214
|
+
for (const entry of readdirSync7(profilesDir)) {
|
|
16215
|
+
const fullPath = join11(profilesDir, entry);
|
|
15494
16216
|
const stat = statSync2(fullPath);
|
|
15495
16217
|
if (stat.isDirectory()) {
|
|
15496
16218
|
seen.add(entry);
|
|
@@ -15511,11 +16233,11 @@ function createProfile(profile, config = {}) {
|
|
|
15511
16233
|
}
|
|
15512
16234
|
function clearProfile(profile = getCurrentProfile()) {
|
|
15513
16235
|
const flatPath = getFlatProfilePath(profile);
|
|
15514
|
-
const directoryPath =
|
|
15515
|
-
if (
|
|
16236
|
+
const directoryPath = join11(getProfilesDir(), profile);
|
|
16237
|
+
if (existsSync10(flatPath)) {
|
|
15516
16238
|
rmSync(flatPath);
|
|
15517
16239
|
}
|
|
15518
|
-
if (
|
|
16240
|
+
if (existsSync10(directoryPath)) {
|
|
15519
16241
|
rmSync(directoryPath, { recursive: true, force: true });
|
|
15520
16242
|
}
|
|
15521
16243
|
}
|
|
@@ -15811,7 +16533,7 @@ async function sendMessage(context, input) {
|
|
|
15811
16533
|
direction: "outbound"
|
|
15812
16534
|
});
|
|
15813
16535
|
}
|
|
15814
|
-
async function
|
|
16536
|
+
async function replyToMessage2(context, input) {
|
|
15815
16537
|
const payload = await bridgeRequest(context, "/messages/reply", {
|
|
15816
16538
|
method: "POST",
|
|
15817
16539
|
body: {
|
|
@@ -15925,7 +16647,7 @@ async function runProfileCommand2(args, context) {
|
|
|
15925
16647
|
switch (subcommand) {
|
|
15926
16648
|
case "list": {
|
|
15927
16649
|
const current = getCurrentProfile();
|
|
15928
|
-
const profiles =
|
|
16650
|
+
const profiles = listProfiles3();
|
|
15929
16651
|
return successOutput({ current, profiles }, context.format, () => profiles.map((profile) => `${profile}${profile === current ? " (active)" : ""}`).join(`
|
|
15930
16652
|
`));
|
|
15931
16653
|
}
|
|
@@ -16099,7 +16821,7 @@ async function runMessageCommand(args, context) {
|
|
|
16099
16821
|
if (!conversationId || !text) {
|
|
16100
16822
|
return failure2("Usage: connect-imessage message reply --conversation <id> --text <text>");
|
|
16101
16823
|
}
|
|
16102
|
-
return successOutput(await
|
|
16824
|
+
return successOutput(await replyToMessage2(resolved, {
|
|
16103
16825
|
conversationId,
|
|
16104
16826
|
text,
|
|
16105
16827
|
replyToMessageId: asString2(options.replyTo),
|
|
@@ -16257,7 +16979,7 @@ var imessageConnector = defineConnector({
|
|
|
16257
16979
|
summary: "Reply to an existing conversation through the bridge",
|
|
16258
16980
|
inputSchema: messageReplyInputSchema,
|
|
16259
16981
|
async execute({ context }, input) {
|
|
16260
|
-
return
|
|
16982
|
+
return replyToMessage2(context, input);
|
|
16261
16983
|
}
|
|
16262
16984
|
}
|
|
16263
16985
|
},
|
|
@@ -16320,19 +17042,19 @@ var imessageConnector = defineConnector({
|
|
|
16320
17042
|
});
|
|
16321
17043
|
|
|
16322
17044
|
// src/core/connectors/stripe.ts
|
|
16323
|
-
import { existsSync as
|
|
16324
|
-
import { dirname as dirname4, join as
|
|
17045
|
+
import { existsSync as existsSync11 } from "fs";
|
|
17046
|
+
import { dirname as dirname4, join as join12 } from "path";
|
|
16325
17047
|
import { fileURLToPath as fileURLToPath2, pathToFileURL as pathToFileURL2 } from "url";
|
|
16326
17048
|
var __dirname3 = dirname4(fileURLToPath2(import.meta.url));
|
|
16327
17049
|
function resolveStripeConnectorDir() {
|
|
16328
17050
|
const candidates = [
|
|
16329
|
-
|
|
16330
|
-
|
|
16331
|
-
|
|
16332
|
-
|
|
17051
|
+
join12(__dirname3, "..", "..", "..", "connectors", "connect-stripe"),
|
|
17052
|
+
join12(__dirname3, "..", "..", "connectors", "connect-stripe"),
|
|
17053
|
+
join12(__dirname3, "..", "connectors", "connect-stripe"),
|
|
17054
|
+
join12(process.cwd(), "connectors", "connect-stripe")
|
|
16333
17055
|
];
|
|
16334
17056
|
for (const candidate of candidates) {
|
|
16335
|
-
if (
|
|
17057
|
+
if (existsSync11(candidate)) {
|
|
16336
17058
|
return candidate;
|
|
16337
17059
|
}
|
|
16338
17060
|
}
|
|
@@ -16571,10 +17293,10 @@ function buildCommandHelp2(spec) {
|
|
|
16571
17293
|
var ROOT_HELP3 = buildRootHelp2(COMMAND_SPECS2);
|
|
16572
17294
|
var COMMAND_HELP3 = Object.fromEntries(COMMAND_SPECS2.map((spec) => [spec.name, buildCommandHelp2(spec)]));
|
|
16573
17295
|
async function loadStripeApiModule() {
|
|
16574
|
-
return await import(pathToFileURL2(
|
|
17296
|
+
return await import(pathToFileURL2(join12(CONNECTOR_DIR2, "src", "api", "index.ts")).href);
|
|
16575
17297
|
}
|
|
16576
17298
|
async function loadStripeConfigModule() {
|
|
16577
|
-
return await import(pathToFileURL2(
|
|
17299
|
+
return await import(pathToFileURL2(join12(CONNECTOR_DIR2, "src", "utils", "config.ts")).href);
|
|
16578
17300
|
}
|
|
16579
17301
|
function extractGlobalArgs3(args) {
|
|
16580
17302
|
const remaining = [];
|
|
@@ -17186,7 +17908,9 @@ var stripeConnector = defineConnector({
|
|
|
17186
17908
|
|
|
17187
17909
|
// src/core/builtins.ts
|
|
17188
17910
|
var INTERNAL_CONNECTOR_DEFINITIONS = [
|
|
17911
|
+
gmailConnector,
|
|
17189
17912
|
githubConnector,
|
|
17913
|
+
googleDriveConnector,
|
|
17190
17914
|
imessageConnector,
|
|
17191
17915
|
stripeConnector
|
|
17192
17916
|
];
|
|
@@ -23211,17 +23935,17 @@ function loadConnectorVersions() {
|
|
|
23211
23935
|
versionsLoaded = true;
|
|
23212
23936
|
const thisDir = dirname5(fileURLToPath3(import.meta.url));
|
|
23213
23937
|
const candidates = [
|
|
23214
|
-
|
|
23215
|
-
|
|
23938
|
+
join13(thisDir, "..", "connectors"),
|
|
23939
|
+
join13(thisDir, "..", "..", "connectors")
|
|
23216
23940
|
];
|
|
23217
|
-
const connectorsDir = candidates.find((d) =>
|
|
23941
|
+
const connectorsDir = candidates.find((d) => existsSync12(d));
|
|
23218
23942
|
if (!connectorsDir)
|
|
23219
23943
|
return;
|
|
23220
23944
|
for (const connector of CONNECTORS) {
|
|
23221
23945
|
try {
|
|
23222
|
-
const pkgPath =
|
|
23223
|
-
if (
|
|
23224
|
-
const pkg = JSON.parse(
|
|
23946
|
+
const pkgPath = join13(connectorsDir, `connect-${connector.name}`, "package.json");
|
|
23947
|
+
if (existsSync12(pkgPath)) {
|
|
23948
|
+
const pkg = JSON.parse(readFileSync6(pkgPath, "utf-8"));
|
|
23225
23949
|
connector.version = pkg.version || "0.0.0";
|
|
23226
23950
|
continue;
|
|
23227
23951
|
}
|
|
@@ -23234,16 +23958,16 @@ function loadConnectorVersions() {
|
|
|
23234
23958
|
}
|
|
23235
23959
|
|
|
23236
23960
|
// src/lib/installer.ts
|
|
23237
|
-
import { existsSync as
|
|
23238
|
-
import { join as
|
|
23961
|
+
import { existsSync as existsSync13, mkdirSync as mkdirSync9, readFileSync as readFileSync7, writeFileSync as writeFileSync6, readdirSync as readdirSync8, statSync as statSync3, rmSync as rmSync2 } from "fs";
|
|
23962
|
+
import { join as join14, dirname as dirname6 } from "path";
|
|
23239
23963
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
23240
23964
|
var __dirname4 = dirname6(fileURLToPath4(import.meta.url));
|
|
23241
23965
|
function resolveConnectorsDir() {
|
|
23242
|
-
const fromBin =
|
|
23243
|
-
if (
|
|
23966
|
+
const fromBin = join14(__dirname4, "..", "connectors");
|
|
23967
|
+
if (existsSync13(fromBin))
|
|
23244
23968
|
return fromBin;
|
|
23245
|
-
const fromSrc =
|
|
23246
|
-
if (
|
|
23969
|
+
const fromSrc = join14(__dirname4, "..", "..", "connectors");
|
|
23970
|
+
if (existsSync13(fromSrc))
|
|
23247
23971
|
return fromSrc;
|
|
23248
23972
|
return fromBin;
|
|
23249
23973
|
}
|
|
@@ -23255,21 +23979,21 @@ function normalizeConnectorName(name) {
|
|
|
23255
23979
|
return name.startsWith("connect-") ? name.slice("connect-".length) : name;
|
|
23256
23980
|
}
|
|
23257
23981
|
function getProjectConnectorsDir(targetDir) {
|
|
23258
|
-
return
|
|
23982
|
+
return join14(targetDir, PROJECT_CONNECTORS_DIRNAME);
|
|
23259
23983
|
}
|
|
23260
23984
|
function getEnablementManifestPath(targetDir) {
|
|
23261
|
-
return
|
|
23985
|
+
return join14(getProjectConnectorsDir(targetDir), ENABLEMENT_MANIFEST_FILENAME);
|
|
23262
23986
|
}
|
|
23263
23987
|
function getLegacyInstallPath(targetDir, name) {
|
|
23264
|
-
return
|
|
23988
|
+
return join14(getProjectConnectorsDir(targetDir), `connect-${normalizeConnectorName(name)}`);
|
|
23265
23989
|
}
|
|
23266
23990
|
function loadEnablementManifest(targetDir) {
|
|
23267
23991
|
const manifestPath = getEnablementManifestPath(targetDir);
|
|
23268
|
-
if (!
|
|
23992
|
+
if (!existsSync13(manifestPath)) {
|
|
23269
23993
|
return null;
|
|
23270
23994
|
}
|
|
23271
23995
|
try {
|
|
23272
|
-
const raw = JSON.parse(
|
|
23996
|
+
const raw = JSON.parse(readFileSync7(manifestPath, "utf-8"));
|
|
23273
23997
|
if (!Array.isArray(raw.connectors)) {
|
|
23274
23998
|
return null;
|
|
23275
23999
|
}
|
|
@@ -23285,11 +24009,11 @@ function loadEnablementManifest(targetDir) {
|
|
|
23285
24009
|
}
|
|
23286
24010
|
function getLegacyInstalledConnectors(targetDir) {
|
|
23287
24011
|
const connectorsDir = getProjectConnectorsDir(targetDir);
|
|
23288
|
-
if (!
|
|
24012
|
+
if (!existsSync13(connectorsDir)) {
|
|
23289
24013
|
return [];
|
|
23290
24014
|
}
|
|
23291
|
-
return
|
|
23292
|
-
const fullPath =
|
|
24015
|
+
return readdirSync8(connectorsDir).filter((entry) => {
|
|
24016
|
+
const fullPath = join14(connectorsDir, entry);
|
|
23293
24017
|
return entry.startsWith("connect-") && statSync3(fullPath).isDirectory();
|
|
23294
24018
|
}).map((entry) => entry.replace("connect-", "")).sort();
|
|
23295
24019
|
}
|
|
@@ -23298,7 +24022,7 @@ function getEnabledConnectors(targetDir) {
|
|
|
23298
24022
|
return [...new Set([...manifestConnectors, ...getLegacyInstalledConnectors(targetDir)])].sort();
|
|
23299
24023
|
}
|
|
23300
24024
|
function updateConnectorsIndex(connectorsDir, connectors18) {
|
|
23301
|
-
const indexPath =
|
|
24025
|
+
const indexPath = join14(connectorsDir, ENABLEMENT_INDEX_FILENAME);
|
|
23302
24026
|
const connectorList = connectors18.map((connector) => ` "${connector}",`).join(`
|
|
23303
24027
|
`);
|
|
23304
24028
|
const content = `/**
|
|
@@ -23314,28 +24038,28 @@ ${connectorList}
|
|
|
23314
24038
|
|
|
23315
24039
|
export type EnabledConnectorName = typeof enabledConnectors[number];
|
|
23316
24040
|
`;
|
|
23317
|
-
|
|
24041
|
+
writeFileSync6(indexPath, content);
|
|
23318
24042
|
}
|
|
23319
24043
|
function writeEnablementManifest(targetDir, connectors18) {
|
|
23320
24044
|
const connectorsDir = getProjectConnectorsDir(targetDir);
|
|
23321
|
-
|
|
24045
|
+
mkdirSync9(connectorsDir, { recursive: true });
|
|
23322
24046
|
const manifest = {
|
|
23323
24047
|
version: 1,
|
|
23324
24048
|
mode: "internal",
|
|
23325
24049
|
updatedAt: new Date().toISOString(),
|
|
23326
24050
|
connectors: [...new Set(connectors18.map((value) => normalizeConnectorName(value)))].sort()
|
|
23327
24051
|
};
|
|
23328
|
-
|
|
24052
|
+
writeFileSync6(getEnablementManifestPath(targetDir), JSON.stringify(manifest, null, 2) + `
|
|
23329
24053
|
`);
|
|
23330
24054
|
updateConnectorsIndex(connectorsDir, manifest.connectors);
|
|
23331
24055
|
}
|
|
23332
24056
|
function getConnectorPath(name) {
|
|
23333
24057
|
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
23334
|
-
return
|
|
24058
|
+
return join14(CONNECTORS_DIR, connectorName);
|
|
23335
24059
|
}
|
|
23336
24060
|
function connectorExists(name) {
|
|
23337
24061
|
const normalizedName = normalizeConnectorName(name);
|
|
23338
|
-
return hasInternalConnectorDefinition(normalizedName) ||
|
|
24062
|
+
return hasInternalConnectorDefinition(normalizedName) || existsSync13(getConnectorPath(normalizedName));
|
|
23339
24063
|
}
|
|
23340
24064
|
function installConnector(name, options = {}) {
|
|
23341
24065
|
const { targetDir = process.cwd(), overwrite = false } = options;
|
|
@@ -23368,7 +24092,7 @@ function installConnector(name, options = {}) {
|
|
|
23368
24092
|
try {
|
|
23369
24093
|
const nextEnabled = [...new Set([...installed, normalizedName])].sort();
|
|
23370
24094
|
writeEnablementManifest(targetDir, nextEnabled);
|
|
23371
|
-
if (overwrite &&
|
|
24095
|
+
if (overwrite && existsSync13(legacyInstallPath)) {
|
|
23372
24096
|
rmSync2(legacyInstallPath, { recursive: true });
|
|
23373
24097
|
}
|
|
23374
24098
|
return {
|
|
@@ -23400,9 +24124,9 @@ function parseConnectorDocs(raw) {
|
|
|
23400
24124
|
function getConnectorDocs(name) {
|
|
23401
24125
|
const normalizedName = normalizeConnectorName(name);
|
|
23402
24126
|
const connectorPath = getConnectorPath(normalizedName);
|
|
23403
|
-
const claudeMdPath =
|
|
23404
|
-
if (
|
|
23405
|
-
return parseConnectorDocs(
|
|
24127
|
+
const claudeMdPath = join14(connectorPath, "CLAUDE.md");
|
|
24128
|
+
if (existsSync13(claudeMdPath)) {
|
|
24129
|
+
return parseConnectorDocs(readFileSync7(claudeMdPath, "utf-8"));
|
|
23406
24130
|
}
|
|
23407
24131
|
const internalDocs = getInternalConnectorDefinition(normalizedName)?.docsMarkdown;
|
|
23408
24132
|
if (internalDocs) {
|
|
@@ -23446,282 +24170,56 @@ function removeConnector(name, targetDir = process.cwd()) {
|
|
|
23446
24170
|
const nextEnabled = installed.filter((connector) => connector !== normalizedName);
|
|
23447
24171
|
writeEnablementManifest(targetDir, nextEnabled);
|
|
23448
24172
|
const legacyInstallPath = getLegacyInstallPath(targetDir, normalizedName);
|
|
23449
|
-
if (
|
|
24173
|
+
if (existsSync13(legacyInstallPath)) {
|
|
23450
24174
|
rmSync2(legacyInstallPath, { recursive: true });
|
|
23451
24175
|
}
|
|
23452
24176
|
return true;
|
|
23453
24177
|
}
|
|
23454
24178
|
|
|
23455
24179
|
// src/lib/runner.ts
|
|
23456
|
-
import { existsSync as
|
|
23457
|
-
import { join as
|
|
24180
|
+
import { existsSync as existsSync16, readdirSync as readdirSync10 } from "fs";
|
|
24181
|
+
import { join as join17, dirname as dirname7 } from "path";
|
|
23458
24182
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
23459
|
-
import { spawn as
|
|
24183
|
+
import { spawn as spawn2 } from "child_process";
|
|
23460
24184
|
init_database();
|
|
23461
|
-
|
|
23462
|
-
|
|
23463
|
-
|
|
23464
|
-
|
|
23465
|
-
|
|
23466
|
-
|
|
23467
|
-
|
|
23468
|
-
|
|
23469
|
-
|
|
23470
|
-
}
|
|
23471
|
-
|
|
23472
|
-
|
|
23473
|
-
|
|
23474
|
-
|
|
23475
|
-
|
|
23476
|
-
|
|
23477
|
-
|
|
23478
|
-
|
|
23479
|
-
|
|
24185
|
+
|
|
24186
|
+
// src/server/auth.ts
|
|
24187
|
+
import { existsSync as existsSync15, readFileSync as readFileSync8, writeFileSync as writeFileSync7, mkdirSync as mkdirSync11, readdirSync as readdirSync9, rmSync as rmSync3, statSync as statSync5 } from "fs";
|
|
24188
|
+
import { randomBytes } from "crypto";
|
|
24189
|
+
import { join as join16 } from "path";
|
|
24190
|
+
|
|
24191
|
+
// src/lib/lock.ts
|
|
24192
|
+
init_database();
|
|
24193
|
+
import { openSync, closeSync, unlinkSync, existsSync as existsSync14, statSync as statSync4 } from "fs";
|
|
24194
|
+
import { join as join15 } from "path";
|
|
24195
|
+
import { mkdirSync as mkdirSync10 } from "fs";
|
|
24196
|
+
var LOCK_TIMEOUT_MS = 5000;
|
|
24197
|
+
var LOCK_RETRY_MS = 100;
|
|
24198
|
+
var STALE_LOCK_MS = 30000;
|
|
24199
|
+
|
|
24200
|
+
class LockTimeoutError extends Error {
|
|
24201
|
+
connector;
|
|
24202
|
+
constructor(connector) {
|
|
24203
|
+
super(`Could not acquire write lock for connector "${connector}" within ${LOCK_TIMEOUT_MS}ms. Another agent may be writing. Try again shortly.`);
|
|
24204
|
+
this.connector = connector;
|
|
24205
|
+
this.name = "LockTimeoutError";
|
|
23480
24206
|
}
|
|
23481
|
-
return lines.join(`
|
|
23482
|
-
`);
|
|
23483
24207
|
}
|
|
23484
|
-
function
|
|
23485
|
-
|
|
24208
|
+
function lockPath(connector) {
|
|
24209
|
+
const dir = join15(getConnectorsHome(), `connect-${connector}`);
|
|
24210
|
+
mkdirSync10(dir, { recursive: true });
|
|
24211
|
+
return join15(dir, ".write.lock");
|
|
23486
24212
|
}
|
|
23487
|
-
|
|
23488
|
-
|
|
23489
|
-
|
|
23490
|
-
|
|
23491
|
-
|
|
23492
|
-
|
|
23493
|
-
};
|
|
23494
|
-
function buildEnvWithCredentials(connectorName, baseEnv) {
|
|
23495
|
-
const env = { ...baseEnv };
|
|
23496
|
-
const prefixes = ENV_VAR_NAME_OVERRIDES[connectorName] || [
|
|
23497
|
-
connectorName.toUpperCase().replace(/-/g, "_")
|
|
23498
|
-
];
|
|
23499
|
-
for (const prefix of prefixes) {
|
|
23500
|
-
const canonicalKey = `${prefix}_API_KEY`;
|
|
23501
|
-
if (env[canonicalKey])
|
|
23502
|
-
continue;
|
|
23503
|
-
const alternatives = [
|
|
23504
|
-
`HASNAXYZ_${prefix}_LIVE_API_KEY`,
|
|
23505
|
-
`HASNA_${prefix}_LIVE_API_KEY`,
|
|
23506
|
-
`${prefix}_LIVE_API_KEY`,
|
|
23507
|
-
`${prefix}_KEY`,
|
|
23508
|
-
`${prefix}_TOKEN`
|
|
23509
|
-
];
|
|
23510
|
-
for (const alt of alternatives) {
|
|
23511
|
-
const value = env[alt];
|
|
23512
|
-
if (value) {
|
|
23513
|
-
env[canonicalKey] = value;
|
|
23514
|
-
break;
|
|
23515
|
-
}
|
|
23516
|
-
}
|
|
23517
|
-
}
|
|
23518
|
-
return env;
|
|
23519
|
-
}
|
|
23520
|
-
function getConnectorCliPath(name) {
|
|
23521
|
-
const safeName = name.replace(/[^a-z0-9-]/g, "");
|
|
23522
|
-
const connectorDir = join13(CONNECTORS_DIR2, `connect-${safeName}`);
|
|
23523
|
-
const cliPath = join13(connectorDir, "src", "cli", "index.ts");
|
|
23524
|
-
if (existsSync12(cliPath))
|
|
23525
|
-
return cliPath;
|
|
23526
|
-
return null;
|
|
23527
|
-
}
|
|
23528
|
-
function hasConnectorCommandSurface(name) {
|
|
23529
|
-
return Boolean(getInternalCommandRuntime(name)?.commands.length || getConnectorCliPath(name));
|
|
23530
|
-
}
|
|
23531
|
-
function normalizeCommanderUsage(usage) {
|
|
23532
|
-
const commandToken = usage.trim().split(/\s+/)[0];
|
|
23533
|
-
if (!commandToken || commandToken === "help")
|
|
23534
|
-
return null;
|
|
23535
|
-
const aliases = commandToken.split("|").filter(Boolean);
|
|
23536
|
-
const [name, ...rest] = aliases;
|
|
23537
|
-
if (!name)
|
|
23538
|
-
return null;
|
|
23539
|
-
return {
|
|
23540
|
-
name,
|
|
23541
|
-
aliases: rest,
|
|
23542
|
-
usage: usage.trim()
|
|
23543
|
-
};
|
|
23544
|
-
}
|
|
23545
|
-
function parseCommanderHelpOperations(helpText) {
|
|
23546
|
-
const operations = [];
|
|
23547
|
-
const lines = helpText.split(`
|
|
23548
|
-
`);
|
|
23549
|
-
let inCommands = false;
|
|
23550
|
-
for (const line of lines) {
|
|
23551
|
-
if (line.trim().startsWith("Commands:")) {
|
|
23552
|
-
inCommands = true;
|
|
23553
|
-
continue;
|
|
23554
|
-
}
|
|
23555
|
-
if (!inCommands)
|
|
23556
|
-
continue;
|
|
23557
|
-
if (line.trim() === "") {
|
|
23558
|
-
if (operations.length > 0)
|
|
23559
|
-
inCommands = false;
|
|
23560
|
-
continue;
|
|
23561
|
-
}
|
|
23562
|
-
const row = line.match(/^ {2}(\S.*?)(?: {2,}(.+))?$/);
|
|
23563
|
-
if (!row)
|
|
23564
|
-
continue;
|
|
23565
|
-
const usage = row[1].trim();
|
|
23566
|
-
const summary = (row[2] ?? "").trim();
|
|
23567
|
-
const normalized = normalizeCommanderUsage(usage);
|
|
23568
|
-
if (!normalized)
|
|
23569
|
-
continue;
|
|
23570
|
-
operations.push({
|
|
23571
|
-
...normalized,
|
|
23572
|
-
summary,
|
|
23573
|
-
source: "cli"
|
|
23574
|
-
});
|
|
23575
|
-
}
|
|
23576
|
-
return operations;
|
|
23577
|
-
}
|
|
23578
|
-
function runConnectorCommand2(name, args, timeoutMs = 30000) {
|
|
23579
|
-
getConnectorsHome();
|
|
23580
|
-
const internalRuntime = getInternalCommandRuntime(name);
|
|
23581
|
-
if (internalRuntime?.run) {
|
|
23582
|
-
return Promise.resolve(internalRuntime.run(args)).then((result) => {
|
|
23583
|
-
if (result) {
|
|
23584
|
-
const stdout = result.stdout.trim();
|
|
23585
|
-
const stderr = (result.stderr ?? "").trim();
|
|
23586
|
-
const exitCode = result.exitCode ?? (result.success === false ? 1 : 0);
|
|
23587
|
-
return {
|
|
23588
|
-
stdout,
|
|
23589
|
-
stderr,
|
|
23590
|
-
exitCode,
|
|
23591
|
-
success: result.success ?? exitCode === 0
|
|
23592
|
-
};
|
|
23593
|
-
}
|
|
23594
|
-
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
23595
|
-
});
|
|
23596
|
-
}
|
|
23597
|
-
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
23598
|
-
}
|
|
23599
|
-
function runLegacyConnectorCommand(name, args, timeoutMs = 30000) {
|
|
23600
|
-
const cliPath = getConnectorCliPath(name);
|
|
23601
|
-
if (!cliPath) {
|
|
23602
|
-
return Promise.resolve({
|
|
23603
|
-
stdout: "",
|
|
23604
|
-
stderr: `Connector '${name}' not found or has no CLI.`,
|
|
23605
|
-
exitCode: 1,
|
|
23606
|
-
success: false
|
|
23607
|
-
});
|
|
23608
|
-
}
|
|
23609
|
-
return new Promise((resolve) => {
|
|
23610
|
-
const proc = spawn3("bun", ["run", cliPath, ...args], {
|
|
23611
|
-
timeout: timeoutMs,
|
|
23612
|
-
env: buildEnvWithCredentials(name, process.env),
|
|
23613
|
-
stdio: ["pipe", "pipe", "pipe"]
|
|
23614
|
-
});
|
|
23615
|
-
let stdout = "";
|
|
23616
|
-
let stderr = "";
|
|
23617
|
-
proc.stdout.on("data", (data) => {
|
|
23618
|
-
stdout += data.toString();
|
|
23619
|
-
});
|
|
23620
|
-
proc.stderr.on("data", (data) => {
|
|
23621
|
-
stderr += data.toString();
|
|
23622
|
-
});
|
|
23623
|
-
proc.on("close", (code) => {
|
|
23624
|
-
resolve({
|
|
23625
|
-
stdout: stdout.trim(),
|
|
23626
|
-
stderr: stderr.trim(),
|
|
23627
|
-
exitCode: code ?? 1,
|
|
23628
|
-
success: code === 0
|
|
23629
|
-
});
|
|
23630
|
-
});
|
|
23631
|
-
proc.on("error", (err) => {
|
|
23632
|
-
resolve({
|
|
23633
|
-
stdout: "",
|
|
23634
|
-
stderr: err.message,
|
|
23635
|
-
exitCode: 1,
|
|
23636
|
-
success: false
|
|
23637
|
-
});
|
|
23638
|
-
});
|
|
23639
|
-
});
|
|
23640
|
-
}
|
|
23641
|
-
async function getConnectorOperations(name) {
|
|
23642
|
-
const internalRuntime = getInternalCommandRuntime(name);
|
|
23643
|
-
if (internalRuntime?.commands.length) {
|
|
23644
|
-
const operations2 = internalRuntime.commands.map((command) => ({
|
|
23645
|
-
name: command.name,
|
|
23646
|
-
aliases: [],
|
|
23647
|
-
usage: command.name,
|
|
23648
|
-
summary: command.summary,
|
|
23649
|
-
source: "internal"
|
|
23650
|
-
}));
|
|
23651
|
-
return {
|
|
23652
|
-
commands: operations2.map((operation) => operation.name),
|
|
23653
|
-
operations: operations2,
|
|
23654
|
-
helpText: internalRuntime.helpText ?? buildInternalHelpText(name, internalRuntime.commands),
|
|
23655
|
-
hasCli: true
|
|
23656
|
-
};
|
|
23657
|
-
}
|
|
23658
|
-
const cliPath = getConnectorCliPath(name);
|
|
23659
|
-
if (!cliPath) {
|
|
23660
|
-
return { commands: [], operations: [], helpText: "", hasCli: false };
|
|
23661
|
-
}
|
|
23662
|
-
const result = await runConnectorCommand2(name, ["--help"]);
|
|
23663
|
-
const helpText = result.stdout || result.stderr;
|
|
23664
|
-
const operations = parseCommanderHelpOperations(helpText);
|
|
23665
|
-
return {
|
|
23666
|
-
commands: operations.map((operation) => operation.name),
|
|
23667
|
-
operations,
|
|
23668
|
-
helpText,
|
|
23669
|
-
hasCli: true
|
|
23670
|
-
};
|
|
23671
|
-
}
|
|
23672
|
-
async function getConnectorCommandHelp(name, command) {
|
|
23673
|
-
const internalRuntime = getInternalCommandRuntime(name);
|
|
23674
|
-
if (internalRuntime?.getHelp) {
|
|
23675
|
-
const help = await internalRuntime.getHelp(command);
|
|
23676
|
-
if (help) {
|
|
23677
|
-
return help;
|
|
23678
|
-
}
|
|
23679
|
-
}
|
|
23680
|
-
const runtimeCommand = internalRuntime?.commands.find((runtimeEntry) => runtimeEntry.name === command);
|
|
23681
|
-
if (runtimeCommand?.helpText) {
|
|
23682
|
-
return runtimeCommand.helpText;
|
|
23683
|
-
}
|
|
23684
|
-
const result = await runConnectorCommand2(name, [command, "--help"]);
|
|
23685
|
-
return result.stdout || result.stderr;
|
|
23686
|
-
}
|
|
23687
|
-
|
|
23688
|
-
// src/server/auth.ts
|
|
23689
|
-
import { existsSync as existsSync14, readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdirSync as mkdirSync9, readdirSync as readdirSync8, rmSync as rmSync3, statSync as statSync5 } from "fs";
|
|
23690
|
-
import { randomBytes } from "crypto";
|
|
23691
|
-
import { join as join15 } from "path";
|
|
23692
|
-
|
|
23693
|
-
// src/lib/lock.ts
|
|
23694
|
-
init_database();
|
|
23695
|
-
import { openSync, closeSync, unlinkSync, existsSync as existsSync13, statSync as statSync4 } from "fs";
|
|
23696
|
-
import { join as join14 } from "path";
|
|
23697
|
-
import { mkdirSync as mkdirSync8 } from "fs";
|
|
23698
|
-
var LOCK_TIMEOUT_MS = 5000;
|
|
23699
|
-
var LOCK_RETRY_MS = 100;
|
|
23700
|
-
var STALE_LOCK_MS = 30000;
|
|
23701
|
-
|
|
23702
|
-
class LockTimeoutError extends Error {
|
|
23703
|
-
connector;
|
|
23704
|
-
constructor(connector) {
|
|
23705
|
-
super(`Could not acquire write lock for connector "${connector}" within ${LOCK_TIMEOUT_MS}ms. Another agent may be writing. Try again shortly.`);
|
|
23706
|
-
this.connector = connector;
|
|
23707
|
-
this.name = "LockTimeoutError";
|
|
23708
|
-
}
|
|
23709
|
-
}
|
|
23710
|
-
function lockPath(connector) {
|
|
23711
|
-
const dir = join14(getConnectorsHome(), `connect-${connector}`);
|
|
23712
|
-
mkdirSync8(dir, { recursive: true });
|
|
23713
|
-
return join14(dir, ".write.lock");
|
|
23714
|
-
}
|
|
23715
|
-
function isStale(path) {
|
|
23716
|
-
try {
|
|
23717
|
-
const stat = statSync4(path);
|
|
23718
|
-
return Date.now() - stat.mtimeMs > STALE_LOCK_MS;
|
|
23719
|
-
} catch {
|
|
23720
|
-
return false;
|
|
24213
|
+
function isStale(path) {
|
|
24214
|
+
try {
|
|
24215
|
+
const stat = statSync4(path);
|
|
24216
|
+
return Date.now() - stat.mtimeMs > STALE_LOCK_MS;
|
|
24217
|
+
} catch {
|
|
24218
|
+
return false;
|
|
23721
24219
|
}
|
|
23722
24220
|
}
|
|
23723
24221
|
function tryAcquire(path) {
|
|
23724
|
-
if (
|
|
24222
|
+
if (existsSync14(path) && isStale(path)) {
|
|
23725
24223
|
try {
|
|
23726
24224
|
unlinkSync(path);
|
|
23727
24225
|
} catch {}
|
|
@@ -23814,14 +24312,14 @@ function getAuthType(name) {
|
|
|
23814
24312
|
}
|
|
23815
24313
|
function getConnectorConfigDir(name) {
|
|
23816
24314
|
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
23817
|
-
return
|
|
24315
|
+
return join16(getConnectorsHome(), connectorName);
|
|
23818
24316
|
}
|
|
23819
24317
|
function getCurrentProfile2(name) {
|
|
23820
24318
|
const configDir = getConnectorConfigDir(name);
|
|
23821
|
-
const currentProfileFile =
|
|
23822
|
-
if (
|
|
24319
|
+
const currentProfileFile = join16(configDir, "current_profile");
|
|
24320
|
+
if (existsSync15(currentProfileFile)) {
|
|
23823
24321
|
try {
|
|
23824
|
-
return
|
|
24322
|
+
return readFileSync8(currentProfileFile, "utf-8").trim() || "default";
|
|
23825
24323
|
} catch {
|
|
23826
24324
|
return "default";
|
|
23827
24325
|
}
|
|
@@ -23833,16 +24331,16 @@ function loadProfileConfig(name) {
|
|
|
23833
24331
|
const profile = getCurrentProfile2(name);
|
|
23834
24332
|
let flatConfig = {};
|
|
23835
24333
|
let dirConfig = {};
|
|
23836
|
-
const profileFile =
|
|
23837
|
-
if (
|
|
24334
|
+
const profileFile = join16(configDir, "profiles", `${profile}.json`);
|
|
24335
|
+
if (existsSync15(profileFile)) {
|
|
23838
24336
|
try {
|
|
23839
|
-
flatConfig = JSON.parse(
|
|
24337
|
+
flatConfig = JSON.parse(readFileSync8(profileFile, "utf-8"));
|
|
23840
24338
|
} catch {}
|
|
23841
24339
|
}
|
|
23842
|
-
const profileDirConfig =
|
|
23843
|
-
if (
|
|
24340
|
+
const profileDirConfig = join16(configDir, "profiles", profile, "config.json");
|
|
24341
|
+
if (existsSync15(profileDirConfig)) {
|
|
23844
24342
|
try {
|
|
23845
|
-
dirConfig = JSON.parse(
|
|
24343
|
+
dirConfig = JSON.parse(readFileSync8(profileDirConfig, "utf-8"));
|
|
23846
24344
|
} catch {}
|
|
23847
24345
|
}
|
|
23848
24346
|
if (Object.keys(flatConfig).length === 0 && Object.keys(dirConfig).length === 0) {
|
|
@@ -23850,13 +24348,13 @@ function loadProfileConfig(name) {
|
|
|
23850
24348
|
}
|
|
23851
24349
|
return { ...flatConfig, ...dirConfig };
|
|
23852
24350
|
}
|
|
23853
|
-
function
|
|
24351
|
+
function loadTokens3(name) {
|
|
23854
24352
|
const configDir = getConnectorConfigDir(name);
|
|
23855
24353
|
const profile = getCurrentProfile2(name);
|
|
23856
|
-
const tokensFile =
|
|
23857
|
-
if (
|
|
24354
|
+
const tokensFile = join16(configDir, "profiles", profile, "tokens.json");
|
|
24355
|
+
if (existsSync15(tokensFile)) {
|
|
23858
24356
|
try {
|
|
23859
|
-
return JSON.parse(
|
|
24357
|
+
return JSON.parse(readFileSync8(tokensFile, "utf-8"));
|
|
23860
24358
|
} catch {
|
|
23861
24359
|
return null;
|
|
23862
24360
|
}
|
|
@@ -23873,28 +24371,49 @@ function loadTokens(name) {
|
|
|
23873
24371
|
}
|
|
23874
24372
|
return null;
|
|
23875
24373
|
}
|
|
24374
|
+
function isStoredOAuthEnvVarSet(variable, oauthConfig, tokens, profileConfig) {
|
|
24375
|
+
if (variable.endsWith("_CLIENT_ID")) {
|
|
24376
|
+
return Boolean(oauthConfig.clientId || profileConfig.clientId);
|
|
24377
|
+
}
|
|
24378
|
+
if (variable.endsWith("_CLIENT_SECRET")) {
|
|
24379
|
+
return Boolean(oauthConfig.clientSecret || profileConfig.clientSecret);
|
|
24380
|
+
}
|
|
24381
|
+
if (variable.endsWith("_ACCESS_TOKEN")) {
|
|
24382
|
+
return Boolean(tokens?.accessToken || profileConfig.accessToken);
|
|
24383
|
+
}
|
|
24384
|
+
if (variable.endsWith("_REFRESH_TOKEN")) {
|
|
24385
|
+
return Boolean(tokens?.refreshToken || profileConfig.refreshToken);
|
|
24386
|
+
}
|
|
24387
|
+
if (variable.endsWith("_TOKEN_EXPIRES_AT")) {
|
|
24388
|
+
return Boolean(tokens?.expiresAt || profileConfig.expiresAt);
|
|
24389
|
+
}
|
|
24390
|
+
return false;
|
|
24391
|
+
}
|
|
23876
24392
|
function getAuthStatus(name) {
|
|
23877
24393
|
const authType = getAuthType(name);
|
|
23878
24394
|
const docs = getConnectorDocs(name);
|
|
24395
|
+
const oauthConfig = authType === "oauth" ? getOAuthConfig(name) : {};
|
|
24396
|
+
const tokens = authType === "oauth" ? loadTokens3(name) : null;
|
|
24397
|
+
const profileConfig = authType === "oauth" ? loadProfileConfig(name) : {};
|
|
23879
24398
|
const envVars = (docs?.envVars || []).map((v) => ({
|
|
23880
24399
|
variable: v.variable,
|
|
23881
24400
|
description: v.description,
|
|
23882
|
-
set: !!process.env[v.variable]
|
|
24401
|
+
set: !!process.env[v.variable] || authType === "oauth" && isStoredOAuthEnvVarSet(v.variable, oauthConfig, tokens, profileConfig)
|
|
23883
24402
|
}));
|
|
23884
24403
|
const envVarTotalCount = envVars.length;
|
|
23885
24404
|
const envVarSetCount = envVars.filter((v) => v.set).length;
|
|
23886
24405
|
if (authType === "oauth") {
|
|
23887
|
-
const
|
|
23888
|
-
const
|
|
23889
|
-
const
|
|
23890
|
-
const
|
|
23891
|
-
const tokenExpiry = tokens?.expiresAt || config2.expiresAt;
|
|
24406
|
+
const hasTokens = !!tokens?.accessToken || !!profileConfig.accessToken;
|
|
24407
|
+
const hasRefreshToken = !!tokens?.refreshToken || !!profileConfig.refreshToken;
|
|
24408
|
+
const tokenExpiry = tokens?.expiresAt || profileConfig.expiresAt;
|
|
24409
|
+
const hasOAuthCredentials = Boolean(oauthConfig.clientId && oauthConfig.clientSecret);
|
|
23892
24410
|
const hasEnvVar2 = envVars.some((v) => v.set);
|
|
23893
24411
|
return {
|
|
23894
24412
|
type: "oauth",
|
|
23895
|
-
configured: hasTokens || hasRefreshToken || hasEnvVar2,
|
|
24413
|
+
configured: hasTokens || hasRefreshToken || hasOAuthCredentials || hasEnvVar2,
|
|
23896
24414
|
tokenExpiry,
|
|
23897
24415
|
hasRefreshToken,
|
|
24416
|
+
hasOAuthCredentials,
|
|
23898
24417
|
envVars,
|
|
23899
24418
|
envVarSetCount,
|
|
23900
24419
|
envVarTotalCount
|
|
@@ -23911,6 +24430,10 @@ function getAuthStatus(name) {
|
|
|
23911
24430
|
envVarTotalCount
|
|
23912
24431
|
};
|
|
23913
24432
|
}
|
|
24433
|
+
function getEnvVars(name) {
|
|
24434
|
+
const docs = getConnectorDocs(name);
|
|
24435
|
+
return docs?.envVars || [];
|
|
24436
|
+
}
|
|
23914
24437
|
async function saveApiKey(name, key, field) {
|
|
23915
24438
|
return withWriteLock(name, () => _saveApiKey(name, key, field));
|
|
23916
24439
|
}
|
|
@@ -23919,43 +24442,43 @@ function _saveApiKey(name, key, field) {
|
|
|
23919
24442
|
const profile = getCurrentProfile2(name);
|
|
23920
24443
|
const keyField = field || guessKeyField(name);
|
|
23921
24444
|
if (keyField === "clientId" || keyField === "clientSecret") {
|
|
23922
|
-
const credentialsFile =
|
|
23923
|
-
|
|
24445
|
+
const credentialsFile = join16(configDir, "credentials.json");
|
|
24446
|
+
mkdirSync11(configDir, { recursive: true });
|
|
23924
24447
|
let creds = {};
|
|
23925
|
-
if (
|
|
24448
|
+
if (existsSync15(credentialsFile)) {
|
|
23926
24449
|
try {
|
|
23927
|
-
creds = JSON.parse(
|
|
24450
|
+
creds = JSON.parse(readFileSync8(credentialsFile, "utf-8"));
|
|
23928
24451
|
} catch {}
|
|
23929
24452
|
}
|
|
23930
24453
|
creds[keyField] = key;
|
|
23931
|
-
|
|
24454
|
+
writeFileSync7(credentialsFile, JSON.stringify(creds, null, 2));
|
|
23932
24455
|
return;
|
|
23933
24456
|
}
|
|
23934
|
-
const profileFile =
|
|
23935
|
-
const profileDir =
|
|
23936
|
-
if (
|
|
24457
|
+
const profileFile = join16(configDir, "profiles", `${profile}.json`);
|
|
24458
|
+
const profileDir = join16(configDir, "profiles", profile);
|
|
24459
|
+
if (existsSync15(profileFile)) {
|
|
23937
24460
|
let config = {};
|
|
23938
24461
|
try {
|
|
23939
|
-
config = JSON.parse(
|
|
24462
|
+
config = JSON.parse(readFileSync8(profileFile, "utf-8"));
|
|
23940
24463
|
} catch {}
|
|
23941
24464
|
config[keyField] = key;
|
|
23942
|
-
|
|
24465
|
+
writeFileSync7(profileFile, JSON.stringify(config, null, 2));
|
|
23943
24466
|
return;
|
|
23944
24467
|
}
|
|
23945
|
-
if (
|
|
23946
|
-
const configFile =
|
|
24468
|
+
if (existsSync15(profileDir)) {
|
|
24469
|
+
const configFile = join16(profileDir, "config.json");
|
|
23947
24470
|
let config = {};
|
|
23948
|
-
if (
|
|
24471
|
+
if (existsSync15(configFile)) {
|
|
23949
24472
|
try {
|
|
23950
|
-
config = JSON.parse(
|
|
24473
|
+
config = JSON.parse(readFileSync8(configFile, "utf-8"));
|
|
23951
24474
|
} catch {}
|
|
23952
24475
|
}
|
|
23953
24476
|
config[keyField] = key;
|
|
23954
|
-
|
|
24477
|
+
writeFileSync7(configFile, JSON.stringify(config, null, 2));
|
|
23955
24478
|
return;
|
|
23956
24479
|
}
|
|
23957
|
-
|
|
23958
|
-
|
|
24480
|
+
mkdirSync11(profileDir, { recursive: true });
|
|
24481
|
+
writeFileSync7(join16(profileDir, "config.json"), JSON.stringify({ [keyField]: key }, null, 2));
|
|
23959
24482
|
}
|
|
23960
24483
|
function guessKeyField(name) {
|
|
23961
24484
|
const docs = getConnectorDocs(name);
|
|
@@ -23973,10 +24496,10 @@ function guessKeyField(name) {
|
|
|
23973
24496
|
}
|
|
23974
24497
|
function getOAuthConfig(name) {
|
|
23975
24498
|
const configDir = getConnectorConfigDir(name);
|
|
23976
|
-
const credentialsFile =
|
|
23977
|
-
if (
|
|
24499
|
+
const credentialsFile = join16(configDir, "credentials.json");
|
|
24500
|
+
if (existsSync15(credentialsFile)) {
|
|
23978
24501
|
try {
|
|
23979
|
-
const creds = JSON.parse(
|
|
24502
|
+
const creds = JSON.parse(readFileSync8(credentialsFile, "utf-8"));
|
|
23980
24503
|
return { clientId: creds.clientId, clientSecret: creds.clientSecret };
|
|
23981
24504
|
} catch {}
|
|
23982
24505
|
}
|
|
@@ -24055,17 +24578,17 @@ async function exchangeOAuthCode(name, code, redirectUri) {
|
|
|
24055
24578
|
function saveOAuthTokens(name, tokens) {
|
|
24056
24579
|
const configDir = getConnectorConfigDir(name);
|
|
24057
24580
|
const profile = getCurrentProfile2(name);
|
|
24058
|
-
const profileDir =
|
|
24059
|
-
|
|
24060
|
-
const tokensFile =
|
|
24061
|
-
|
|
24581
|
+
const profileDir = join16(configDir, "profiles", profile);
|
|
24582
|
+
mkdirSync11(profileDir, { recursive: true });
|
|
24583
|
+
const tokensFile = join16(profileDir, "tokens.json");
|
|
24584
|
+
writeFileSync7(tokensFile, JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
24062
24585
|
}
|
|
24063
24586
|
async function refreshOAuthToken(name) {
|
|
24064
24587
|
return withWriteLock(name, () => _refreshOAuthToken(name));
|
|
24065
24588
|
}
|
|
24066
24589
|
async function _refreshOAuthToken(name) {
|
|
24067
24590
|
const oauthConfig = getOAuthConfig(name);
|
|
24068
|
-
const currentTokens =
|
|
24591
|
+
const currentTokens = loadTokens3(name);
|
|
24069
24592
|
if (!oauthConfig.clientId || !oauthConfig.clientSecret) {
|
|
24070
24593
|
throw new Error("OAuth credentials not configured for " + name);
|
|
24071
24594
|
}
|
|
@@ -24098,16 +24621,16 @@ async function _refreshOAuthToken(name) {
|
|
|
24098
24621
|
saveOAuthTokens(name, tokens);
|
|
24099
24622
|
return tokens;
|
|
24100
24623
|
}
|
|
24101
|
-
function
|
|
24624
|
+
function listProfiles4(name) {
|
|
24102
24625
|
const configDir = getConnectorConfigDir(name);
|
|
24103
|
-
const profilesDir =
|
|
24104
|
-
if (!
|
|
24626
|
+
const profilesDir = join16(configDir, "profiles");
|
|
24627
|
+
if (!existsSync15(profilesDir))
|
|
24105
24628
|
return ["default"];
|
|
24106
24629
|
const seen = new Set;
|
|
24107
24630
|
try {
|
|
24108
|
-
const entries =
|
|
24631
|
+
const entries = readdirSync9(profilesDir);
|
|
24109
24632
|
for (const entry of entries) {
|
|
24110
|
-
const fullPath =
|
|
24633
|
+
const fullPath = join16(profilesDir, entry);
|
|
24111
24634
|
const stat = statSync5(fullPath);
|
|
24112
24635
|
if (stat.isDirectory()) {
|
|
24113
24636
|
seen.add(entry);
|
|
@@ -24121,24 +24644,24 @@ function listProfiles2(name) {
|
|
|
24121
24644
|
}
|
|
24122
24645
|
function switchProfile(name, profile) {
|
|
24123
24646
|
const configDir = getConnectorConfigDir(name);
|
|
24124
|
-
|
|
24125
|
-
|
|
24647
|
+
mkdirSync11(configDir, { recursive: true });
|
|
24648
|
+
writeFileSync7(join16(configDir, "current_profile"), profile);
|
|
24126
24649
|
}
|
|
24127
24650
|
function deleteProfile2(name, profile) {
|
|
24128
24651
|
if (profile === "default")
|
|
24129
24652
|
return false;
|
|
24130
24653
|
const configDir = getConnectorConfigDir(name);
|
|
24131
|
-
const profilesDir =
|
|
24132
|
-
const profileFile =
|
|
24133
|
-
if (
|
|
24654
|
+
const profilesDir = join16(configDir, "profiles");
|
|
24655
|
+
const profileFile = join16(profilesDir, `${profile}.json`);
|
|
24656
|
+
if (existsSync15(profileFile)) {
|
|
24134
24657
|
rmSync3(profileFile);
|
|
24135
24658
|
if (getCurrentProfile2(name) === profile) {
|
|
24136
24659
|
switchProfile(name, "default");
|
|
24137
24660
|
}
|
|
24138
24661
|
return true;
|
|
24139
24662
|
}
|
|
24140
|
-
const profileDir =
|
|
24141
|
-
if (
|
|
24663
|
+
const profileDir = join16(profilesDir, profile);
|
|
24664
|
+
if (existsSync15(profileDir)) {
|
|
24142
24665
|
rmSync3(profileDir, { recursive: true });
|
|
24143
24666
|
if (getCurrentProfile2(name) === profile) {
|
|
24144
24667
|
switchProfile(name, "default");
|
|
@@ -24148,6 +24671,253 @@ function deleteProfile2(name, profile) {
|
|
|
24148
24671
|
return false;
|
|
24149
24672
|
}
|
|
24150
24673
|
|
|
24674
|
+
// src/lib/runner.ts
|
|
24675
|
+
var __dirname5 = dirname7(fileURLToPath5(import.meta.url));
|
|
24676
|
+
function resolveConnectorsDir2() {
|
|
24677
|
+
const fromBin = join17(__dirname5, "..", "connectors");
|
|
24678
|
+
if (existsSync16(fromBin))
|
|
24679
|
+
return fromBin;
|
|
24680
|
+
const fromSrc = join17(__dirname5, "..", "..", "connectors");
|
|
24681
|
+
if (existsSync16(fromSrc))
|
|
24682
|
+
return fromSrc;
|
|
24683
|
+
return fromBin;
|
|
24684
|
+
}
|
|
24685
|
+
var CONNECTORS_DIR2 = resolveConnectorsDir2();
|
|
24686
|
+
function buildInternalHelpText(name, commands) {
|
|
24687
|
+
const lines = [
|
|
24688
|
+
`Usage: connect-${name} [options] [command]`,
|
|
24689
|
+
"",
|
|
24690
|
+
"Commands:"
|
|
24691
|
+
];
|
|
24692
|
+
for (const command of commands) {
|
|
24693
|
+
lines.push(` ${command.name.padEnd(24)} ${command.summary}`);
|
|
24694
|
+
}
|
|
24695
|
+
return lines.join(`
|
|
24696
|
+
`);
|
|
24697
|
+
}
|
|
24698
|
+
function getInternalCommandRuntime(name) {
|
|
24699
|
+
return getInternalConnectorDefinition(name)?.commandRuntime;
|
|
24700
|
+
}
|
|
24701
|
+
var ENV_VAR_NAME_OVERRIDES = {
|
|
24702
|
+
googlemaps: ["GOOGLE_MAPS"],
|
|
24703
|
+
googletasks: ["GOOGLE_TASKS", "GOOGLE"],
|
|
24704
|
+
google: ["GOOGLE"],
|
|
24705
|
+
stabilityai: ["STABILITY"],
|
|
24706
|
+
openweathermap: ["OPENWEATHERMAP", "OPENWEATHER"]
|
|
24707
|
+
};
|
|
24708
|
+
function buildEnvWithCredentials(connectorName, baseEnv) {
|
|
24709
|
+
const env = { ...baseEnv };
|
|
24710
|
+
const prefixes = ENV_VAR_NAME_OVERRIDES[connectorName] || [
|
|
24711
|
+
connectorName.toUpperCase().replace(/-/g, "_")
|
|
24712
|
+
];
|
|
24713
|
+
for (const prefix of prefixes) {
|
|
24714
|
+
const canonicalKey = `${prefix}_API_KEY`;
|
|
24715
|
+
if (env[canonicalKey])
|
|
24716
|
+
continue;
|
|
24717
|
+
const alternatives = [
|
|
24718
|
+
`HASNAXYZ_${prefix}_LIVE_API_KEY`,
|
|
24719
|
+
`HASNA_${prefix}_LIVE_API_KEY`,
|
|
24720
|
+
`${prefix}_LIVE_API_KEY`,
|
|
24721
|
+
`${prefix}_KEY`,
|
|
24722
|
+
`${prefix}_TOKEN`
|
|
24723
|
+
];
|
|
24724
|
+
for (const alt of alternatives) {
|
|
24725
|
+
const value = env[alt];
|
|
24726
|
+
if (value) {
|
|
24727
|
+
env[canonicalKey] = value;
|
|
24728
|
+
break;
|
|
24729
|
+
}
|
|
24730
|
+
}
|
|
24731
|
+
}
|
|
24732
|
+
if (getAuthType(connectorName) === "oauth") {
|
|
24733
|
+
const oauthConfig = getOAuthConfig(connectorName);
|
|
24734
|
+
const tokens = loadTokens3(connectorName);
|
|
24735
|
+
for (const { variable } of getEnvVars(connectorName)) {
|
|
24736
|
+
if (env[variable])
|
|
24737
|
+
continue;
|
|
24738
|
+
if (variable.endsWith("_CLIENT_ID") && oauthConfig.clientId) {
|
|
24739
|
+
env[variable] = oauthConfig.clientId;
|
|
24740
|
+
} else if (variable.endsWith("_CLIENT_SECRET") && oauthConfig.clientSecret) {
|
|
24741
|
+
env[variable] = oauthConfig.clientSecret;
|
|
24742
|
+
} else if (variable.endsWith("_ACCESS_TOKEN") && tokens?.accessToken) {
|
|
24743
|
+
env[variable] = tokens.accessToken;
|
|
24744
|
+
} else if (variable.endsWith("_REFRESH_TOKEN") && tokens?.refreshToken) {
|
|
24745
|
+
env[variable] = tokens.refreshToken;
|
|
24746
|
+
} else if (variable.endsWith("_TOKEN_EXPIRES_AT") && tokens?.expiresAt) {
|
|
24747
|
+
env[variable] = String(tokens.expiresAt);
|
|
24748
|
+
}
|
|
24749
|
+
}
|
|
24750
|
+
}
|
|
24751
|
+
return env;
|
|
24752
|
+
}
|
|
24753
|
+
function getConnectorCliPath(name) {
|
|
24754
|
+
const safeName = name.replace(/[^a-z0-9-]/g, "");
|
|
24755
|
+
const connectorDir = join17(CONNECTORS_DIR2, `connect-${safeName}`);
|
|
24756
|
+
const cliPath = join17(connectorDir, "src", "cli", "index.ts");
|
|
24757
|
+
if (existsSync16(cliPath))
|
|
24758
|
+
return cliPath;
|
|
24759
|
+
return null;
|
|
24760
|
+
}
|
|
24761
|
+
function hasConnectorCommandSurface(name) {
|
|
24762
|
+
return Boolean(getInternalCommandRuntime(name)?.commands.length || getConnectorCliPath(name));
|
|
24763
|
+
}
|
|
24764
|
+
function normalizeCommanderUsage(usage) {
|
|
24765
|
+
const commandToken = usage.trim().split(/\s+/)[0];
|
|
24766
|
+
if (!commandToken || commandToken === "help")
|
|
24767
|
+
return null;
|
|
24768
|
+
const aliases = commandToken.split("|").filter(Boolean);
|
|
24769
|
+
const [name, ...rest] = aliases;
|
|
24770
|
+
if (!name)
|
|
24771
|
+
return null;
|
|
24772
|
+
return {
|
|
24773
|
+
name,
|
|
24774
|
+
aliases: rest,
|
|
24775
|
+
usage: usage.trim()
|
|
24776
|
+
};
|
|
24777
|
+
}
|
|
24778
|
+
function parseCommanderHelpOperations(helpText) {
|
|
24779
|
+
const operations = [];
|
|
24780
|
+
const lines = helpText.split(`
|
|
24781
|
+
`);
|
|
24782
|
+
let inCommands = false;
|
|
24783
|
+
for (const line of lines) {
|
|
24784
|
+
if (line.trim().startsWith("Commands:")) {
|
|
24785
|
+
inCommands = true;
|
|
24786
|
+
continue;
|
|
24787
|
+
}
|
|
24788
|
+
if (!inCommands)
|
|
24789
|
+
continue;
|
|
24790
|
+
if (line.trim() === "") {
|
|
24791
|
+
if (operations.length > 0)
|
|
24792
|
+
inCommands = false;
|
|
24793
|
+
continue;
|
|
24794
|
+
}
|
|
24795
|
+
const row = line.match(/^ {2}(?! )(\S.*?)(?: {2,}(.+))?$/);
|
|
24796
|
+
if (!row)
|
|
24797
|
+
continue;
|
|
24798
|
+
const usage = row[1].trim();
|
|
24799
|
+
const summary = (row[2] ?? "").trim();
|
|
24800
|
+
const normalized = normalizeCommanderUsage(usage);
|
|
24801
|
+
if (!normalized)
|
|
24802
|
+
continue;
|
|
24803
|
+
operations.push({
|
|
24804
|
+
...normalized,
|
|
24805
|
+
summary,
|
|
24806
|
+
source: "cli"
|
|
24807
|
+
});
|
|
24808
|
+
}
|
|
24809
|
+
return operations;
|
|
24810
|
+
}
|
|
24811
|
+
function runConnectorCommand2(name, args, timeoutMs = 30000) {
|
|
24812
|
+
getConnectorsHome();
|
|
24813
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24814
|
+
if (internalRuntime?.run) {
|
|
24815
|
+
return Promise.resolve(internalRuntime.run(args)).then((result) => {
|
|
24816
|
+
if (result) {
|
|
24817
|
+
const stdout = result.stdout.trim();
|
|
24818
|
+
const stderr = (result.stderr ?? "").trim();
|
|
24819
|
+
const exitCode = result.exitCode ?? (result.success === false ? 1 : 0);
|
|
24820
|
+
return {
|
|
24821
|
+
stdout,
|
|
24822
|
+
stderr,
|
|
24823
|
+
exitCode,
|
|
24824
|
+
success: result.success ?? exitCode === 0
|
|
24825
|
+
};
|
|
24826
|
+
}
|
|
24827
|
+
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
24828
|
+
});
|
|
24829
|
+
}
|
|
24830
|
+
return runLegacyConnectorCommand(name, args, timeoutMs);
|
|
24831
|
+
}
|
|
24832
|
+
function runLegacyConnectorCommand(name, args, timeoutMs = 30000) {
|
|
24833
|
+
const cliPath = getConnectorCliPath(name);
|
|
24834
|
+
if (!cliPath) {
|
|
24835
|
+
return Promise.resolve({
|
|
24836
|
+
stdout: "",
|
|
24837
|
+
stderr: `Connector '${name}' not found or has no CLI.`,
|
|
24838
|
+
exitCode: 1,
|
|
24839
|
+
success: false
|
|
24840
|
+
});
|
|
24841
|
+
}
|
|
24842
|
+
return new Promise((resolve) => {
|
|
24843
|
+
const proc = spawn2("bun", ["run", cliPath, ...args], {
|
|
24844
|
+
timeout: timeoutMs,
|
|
24845
|
+
env: buildEnvWithCredentials(name, process.env),
|
|
24846
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
24847
|
+
});
|
|
24848
|
+
let stdout = "";
|
|
24849
|
+
let stderr = "";
|
|
24850
|
+
proc.stdout.on("data", (data) => {
|
|
24851
|
+
stdout += data.toString();
|
|
24852
|
+
});
|
|
24853
|
+
proc.stderr.on("data", (data) => {
|
|
24854
|
+
stderr += data.toString();
|
|
24855
|
+
});
|
|
24856
|
+
proc.on("close", (code) => {
|
|
24857
|
+
resolve({
|
|
24858
|
+
stdout: stdout.trim(),
|
|
24859
|
+
stderr: stderr.trim(),
|
|
24860
|
+
exitCode: code ?? 1,
|
|
24861
|
+
success: code === 0
|
|
24862
|
+
});
|
|
24863
|
+
});
|
|
24864
|
+
proc.on("error", (err) => {
|
|
24865
|
+
resolve({
|
|
24866
|
+
stdout: "",
|
|
24867
|
+
stderr: err.message,
|
|
24868
|
+
exitCode: 1,
|
|
24869
|
+
success: false
|
|
24870
|
+
});
|
|
24871
|
+
});
|
|
24872
|
+
});
|
|
24873
|
+
}
|
|
24874
|
+
async function getConnectorOperations(name) {
|
|
24875
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24876
|
+
if (internalRuntime?.commands.length) {
|
|
24877
|
+
const operations2 = internalRuntime.commands.map((command) => ({
|
|
24878
|
+
name: command.name,
|
|
24879
|
+
aliases: [],
|
|
24880
|
+
usage: command.name,
|
|
24881
|
+
summary: command.summary,
|
|
24882
|
+
source: "internal"
|
|
24883
|
+
}));
|
|
24884
|
+
return {
|
|
24885
|
+
commands: operations2.map((operation) => operation.name),
|
|
24886
|
+
operations: operations2,
|
|
24887
|
+
helpText: internalRuntime.helpText ?? buildInternalHelpText(name, internalRuntime.commands),
|
|
24888
|
+
hasCli: true
|
|
24889
|
+
};
|
|
24890
|
+
}
|
|
24891
|
+
const cliPath = getConnectorCliPath(name);
|
|
24892
|
+
if (!cliPath) {
|
|
24893
|
+
return { commands: [], operations: [], helpText: "", hasCli: false };
|
|
24894
|
+
}
|
|
24895
|
+
const result = await runConnectorCommand2(name, ["--help"]);
|
|
24896
|
+
const helpText = result.stdout || result.stderr;
|
|
24897
|
+
const operations = parseCommanderHelpOperations(helpText);
|
|
24898
|
+
return {
|
|
24899
|
+
commands: operations.map((operation) => operation.name),
|
|
24900
|
+
operations,
|
|
24901
|
+
helpText,
|
|
24902
|
+
hasCli: true
|
|
24903
|
+
};
|
|
24904
|
+
}
|
|
24905
|
+
async function getConnectorCommandHelp(name, command) {
|
|
24906
|
+
const internalRuntime = getInternalCommandRuntime(name);
|
|
24907
|
+
if (internalRuntime?.getHelp) {
|
|
24908
|
+
const help = await internalRuntime.getHelp(command);
|
|
24909
|
+
if (help) {
|
|
24910
|
+
return help;
|
|
24911
|
+
}
|
|
24912
|
+
}
|
|
24913
|
+
const runtimeCommand = internalRuntime?.commands.find((runtimeEntry) => runtimeEntry.name === command);
|
|
24914
|
+
if (runtimeCommand?.helpText) {
|
|
24915
|
+
return runtimeCommand.helpText;
|
|
24916
|
+
}
|
|
24917
|
+
const result = await runConnectorCommand2(name, [command, "--help"]);
|
|
24918
|
+
return result.stdout || result.stderr;
|
|
24919
|
+
}
|
|
24920
|
+
|
|
24151
24921
|
// src/server/serve.ts
|
|
24152
24922
|
var activityLog = [];
|
|
24153
24923
|
var MAX_ACTIVITY_LOG = 100;
|
|
@@ -24161,20 +24931,20 @@ function resolveDashboardDir() {
|
|
|
24161
24931
|
const candidates = [];
|
|
24162
24932
|
try {
|
|
24163
24933
|
const scriptDir = dirname8(fileURLToPath6(import.meta.url));
|
|
24164
|
-
candidates.push(
|
|
24165
|
-
candidates.push(
|
|
24934
|
+
candidates.push(join18(scriptDir, "..", "dashboard", "dist"));
|
|
24935
|
+
candidates.push(join18(scriptDir, "..", "..", "dashboard", "dist"));
|
|
24166
24936
|
} catch {}
|
|
24167
24937
|
if (process.argv[1]) {
|
|
24168
24938
|
const mainDir = dirname8(process.argv[1]);
|
|
24169
|
-
candidates.push(
|
|
24170
|
-
candidates.push(
|
|
24939
|
+
candidates.push(join18(mainDir, "..", "dashboard", "dist"));
|
|
24940
|
+
candidates.push(join18(mainDir, "..", "..", "dashboard", "dist"));
|
|
24171
24941
|
}
|
|
24172
|
-
candidates.push(
|
|
24942
|
+
candidates.push(join18(process.cwd(), "dashboard", "dist"));
|
|
24173
24943
|
for (const candidate of candidates) {
|
|
24174
|
-
if (
|
|
24944
|
+
if (existsSync17(candidate))
|
|
24175
24945
|
return candidate;
|
|
24176
24946
|
}
|
|
24177
|
-
return
|
|
24947
|
+
return join18(process.cwd(), "dashboard", "dist");
|
|
24178
24948
|
}
|
|
24179
24949
|
var MIME_TYPES = {
|
|
24180
24950
|
".html": "text/html; charset=utf-8",
|
|
@@ -24276,7 +25046,7 @@ function oauthPage(type, title, message, hint, extra) {
|
|
|
24276
25046
|
</body></html>`;
|
|
24277
25047
|
}
|
|
24278
25048
|
function serveStaticFile(filePath) {
|
|
24279
|
-
if (!
|
|
25049
|
+
if (!existsSync17(filePath))
|
|
24280
25050
|
return null;
|
|
24281
25051
|
const ext = extname(filePath);
|
|
24282
25052
|
const contentType = MIME_TYPES[ext] || "application/octet-stream";
|
|
@@ -24313,7 +25083,7 @@ async function startServer(requestedPort, options) {
|
|
|
24313
25083
|
const strict = options?.strict ?? false;
|
|
24314
25084
|
loadConnectorVersions();
|
|
24315
25085
|
const dashboardDir = resolveDashboardDir();
|
|
24316
|
-
const dashboardExists =
|
|
25086
|
+
const dashboardExists = existsSync17(dashboardDir);
|
|
24317
25087
|
if (!dashboardExists) {
|
|
24318
25088
|
console.error(`
|
|
24319
25089
|
Dashboard not found at: ${dashboardDir}`);
|
|
@@ -24715,13 +25485,13 @@ ${result.stderr}`;
|
|
|
24715
25485
|
if (!isValidConnectorName(name))
|
|
24716
25486
|
return json({ error: "Invalid connector name" }, 400, port);
|
|
24717
25487
|
try {
|
|
24718
|
-
const profiles =
|
|
24719
|
-
const configDir =
|
|
24720
|
-
const currentProfileFile =
|
|
25488
|
+
const profiles = listProfiles4(name);
|
|
25489
|
+
const configDir = join18(getConnectorsHome(), name.startsWith("connect-") ? name : `connect-${name}`);
|
|
25490
|
+
const currentProfileFile = join18(configDir, "current_profile");
|
|
24721
25491
|
let current = "default";
|
|
24722
|
-
if (
|
|
25492
|
+
if (existsSync17(currentProfileFile)) {
|
|
24723
25493
|
try {
|
|
24724
|
-
current =
|
|
25494
|
+
current = readFileSync9(currentProfileFile, "utf-8").trim() || "default";
|
|
24725
25495
|
} catch {}
|
|
24726
25496
|
}
|
|
24727
25497
|
return json({ current, profiles }, 200, port);
|
|
@@ -24770,30 +25540,30 @@ ${result.stderr}`;
|
|
|
24770
25540
|
try {
|
|
24771
25541
|
const connectDir = getConnectorsHome();
|
|
24772
25542
|
const result = {};
|
|
24773
|
-
if (
|
|
24774
|
-
const entries =
|
|
25543
|
+
if (existsSync17(connectDir)) {
|
|
25544
|
+
const entries = readdirSync11(connectDir, { withFileTypes: true });
|
|
24775
25545
|
for (const entry of entries) {
|
|
24776
25546
|
if (!entry.isDirectory() || !entry.name.startsWith("connect-"))
|
|
24777
25547
|
continue;
|
|
24778
25548
|
const connectorName = entry.name.replace(/^connect-/, "");
|
|
24779
|
-
const profilesDir =
|
|
24780
|
-
if (!
|
|
25549
|
+
const profilesDir = join18(connectDir, entry.name, "profiles");
|
|
25550
|
+
if (!existsSync17(profilesDir))
|
|
24781
25551
|
continue;
|
|
24782
25552
|
const profiles = {};
|
|
24783
|
-
const profileEntries =
|
|
25553
|
+
const profileEntries = readdirSync11(profilesDir, { withFileTypes: true });
|
|
24784
25554
|
for (const pEntry of profileEntries) {
|
|
24785
25555
|
if (pEntry.isFile() && pEntry.name.endsWith(".json")) {
|
|
24786
|
-
const profileName =
|
|
25556
|
+
const profileName = basename3(pEntry.name, ".json");
|
|
24787
25557
|
try {
|
|
24788
|
-
const config = JSON.parse(
|
|
25558
|
+
const config = JSON.parse(readFileSync9(join18(profilesDir, pEntry.name), "utf-8"));
|
|
24789
25559
|
profiles[profileName] = config;
|
|
24790
25560
|
} catch {}
|
|
24791
25561
|
}
|
|
24792
25562
|
if (pEntry.isDirectory()) {
|
|
24793
|
-
const configPath =
|
|
24794
|
-
if (
|
|
25563
|
+
const configPath = join18(profilesDir, pEntry.name, "config.json");
|
|
25564
|
+
if (existsSync17(configPath)) {
|
|
24795
25565
|
try {
|
|
24796
|
-
const config = JSON.parse(
|
|
25566
|
+
const config = JSON.parse(readFileSync9(configPath, "utf-8"));
|
|
24797
25567
|
profiles[pEntry.name] = config;
|
|
24798
25568
|
} catch {}
|
|
24799
25569
|
}
|
|
@@ -24834,14 +25604,14 @@ ${result.stderr}`;
|
|
|
24834
25604
|
continue;
|
|
24835
25605
|
if (!data.profiles || typeof data.profiles !== "object")
|
|
24836
25606
|
continue;
|
|
24837
|
-
const connectorDir =
|
|
24838
|
-
const profilesDir =
|
|
25607
|
+
const connectorDir = join18(connectDir, `connect-${connectorName}`);
|
|
25608
|
+
const profilesDir = join18(connectorDir, "profiles");
|
|
24839
25609
|
for (const [profileName, config] of Object.entries(data.profiles)) {
|
|
24840
25610
|
if (!config || typeof config !== "object")
|
|
24841
25611
|
continue;
|
|
24842
|
-
|
|
24843
|
-
const profileFile =
|
|
24844
|
-
|
|
25612
|
+
mkdirSync12(profilesDir, { recursive: true });
|
|
25613
|
+
const profileFile = join18(profilesDir, `${profileName}.json`);
|
|
25614
|
+
writeFileSync8(profileFile, JSON.stringify(config, null, 2));
|
|
24845
25615
|
imported++;
|
|
24846
25616
|
}
|
|
24847
25617
|
}
|
|
@@ -24896,12 +25666,12 @@ ${result.stderr}`;
|
|
|
24896
25666
|
}
|
|
24897
25667
|
if (dashboardExists && (method === "GET" || method === "HEAD")) {
|
|
24898
25668
|
if (path !== "/") {
|
|
24899
|
-
const filePath =
|
|
25669
|
+
const filePath = join18(dashboardDir, path);
|
|
24900
25670
|
const res2 = serveStaticFile(filePath);
|
|
24901
25671
|
if (res2)
|
|
24902
25672
|
return res2;
|
|
24903
25673
|
}
|
|
24904
|
-
const indexPath =
|
|
25674
|
+
const indexPath = join18(dashboardDir, "index.html");
|
|
24905
25675
|
const res = serveStaticFile(indexPath);
|
|
24906
25676
|
if (res)
|
|
24907
25677
|
return res;
|