@zackbart/connecta 0.28.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CHANGELOG.md +855 -5
  2. package/README.md +125 -116
  3. package/bin/connecta.mjs +121 -139
  4. package/bin/meta-tool-names.d.mts +2 -0
  5. package/bin/meta-tool-names.mjs +9 -0
  6. package/bin/version.mjs +3 -0
  7. package/dist/access-tokens.js +53 -63
  8. package/dist/activity-request.js +8 -0
  9. package/dist/activity.d.ts +76 -42
  10. package/dist/activity.js +110 -42
  11. package/dist/argument-redaction.js +230 -0
  12. package/dist/auth/clerk-sdk/client.d.ts +65 -0
  13. package/dist/auth/clerk-sdk/client.js +5 -0
  14. package/dist/auth/clerk-sdk/generated.js +1845 -0
  15. package/dist/auth/clerk-transport.js +19 -0
  16. package/dist/auth/clerk.d.ts +17 -7
  17. package/dist/auth/clerk.js +189 -107
  18. package/dist/auth/cloudflare-access.js +25 -26
  19. package/dist/auth/downstream-client-metadata.d.ts +29 -0
  20. package/dist/auth/downstream-client-metadata.js +133 -0
  21. package/dist/auth/downstream-oauth.js +1584 -1580
  22. package/dist/auth/downstream-revocation.js +106 -0
  23. package/dist/auth/oauth-token-response.js +231 -0
  24. package/dist/auth/oauth-v2-migration.js +116 -0
  25. package/dist/auth/static-oauth.js +93 -71
  26. package/dist/auth-elicitation.js +288 -0
  27. package/dist/authorization-handoff.js +111 -0
  28. package/dist/branding.d.ts +8 -16
  29. package/dist/branding.js +26 -59
  30. package/dist/byte-read-response.js +39 -0
  31. package/dist/call-admission.js +12 -16
  32. package/dist/catalog-cache.js +739 -0
  33. package/dist/catalog-drift.d.ts +50 -15
  34. package/dist/catalog-drift.js +365 -128
  35. package/dist/catalog-fingerprint.js +2 -4
  36. package/dist/catalog-freshness.js +13 -0
  37. package/dist/catalog-limits.js +2 -2
  38. package/dist/catalog-service.js +409 -225
  39. package/dist/catalog.js +43 -84
  40. package/dist/concurrency.js +3 -4
  41. package/dist/config-defaults.d.ts +39 -0
  42. package/dist/config-defaults.js +46 -0
  43. package/dist/config-schema.d.ts +181 -0
  44. package/dist/config-schema.js +435 -0
  45. package/dist/config-value-sources.js +102 -0
  46. package/dist/config.d.ts +633 -0
  47. package/dist/config.js +508 -0
  48. package/dist/connector-access.d.ts +1 -0
  49. package/dist/connector-access.js +13 -15
  50. package/dist/connector-caller.d.ts +8 -0
  51. package/dist/connector-caller.js +15 -6
  52. package/dist/connector-scope.js +1 -1
  53. package/dist/connectors/api-connector.d.ts +59 -7
  54. package/dist/connectors/api-connector.js +106 -19
  55. package/dist/connectors/api.js +4 -1
  56. package/dist/connectors/guarded-fetch.d.ts +144 -0
  57. package/dist/connectors/guarded-fetch.js +87 -38
  58. package/dist/connectors/negotiation-cache.js +46 -0
  59. package/dist/connectors/option-shapes.js +27 -0
  60. package/dist/connectors/remote-mcp.d.ts +30 -4
  61. package/dist/connectors/remote-mcp.js +1774 -320
  62. package/dist/connectors/resource-uri.js +335 -0
  63. package/dist/credential-contract.d.ts +10 -0
  64. package/dist/credential-rules.js +1 -3
  65. package/dist/credential-url.js +108 -0
  66. package/dist/credentials.d.ts +6 -1
  67. package/dist/credentials.js +27 -18
  68. package/dist/d1.d.ts +130 -0
  69. package/dist/d1.js +290 -0
  70. package/dist/describe-config.d.ts +165 -0
  71. package/dist/describe-config.js +315 -0
  72. package/dist/described.js +106 -0
  73. package/dist/downstream-input-context.js +128 -0
  74. package/dist/downstream-input.js +325 -0
  75. package/dist/errors.d.ts +132 -31
  76. package/dist/errors.js +175 -87
  77. package/dist/execute.js +798 -318
  78. package/dist/executor-admission.d.ts +1 -0
  79. package/dist/executor-admission.js +11 -15
  80. package/dist/executor-contract.d.ts +20 -0
  81. package/dist/executor-contract.js +48 -0
  82. package/dist/executor-result.js +30 -13
  83. package/dist/executors/quickjs-child.js +15 -9
  84. package/dist/executors/quickjs-protocol.js +5 -6
  85. package/dist/executors/quickjs-runtime.js +152 -59
  86. package/dist/executors/quickjs.js +49 -39
  87. package/dist/favicon.js +1 -2
  88. package/dist/fix-prompt.js +1 -3
  89. package/dist/guest-runtime.js +238 -0
  90. package/dist/guest-types.d.ts +218 -0
  91. package/dist/guest-types.js +1 -0
  92. package/dist/html-security.js +24 -0
  93. package/dist/identity.js +1 -3
  94. package/dist/inbound-credential.js +52 -0
  95. package/dist/index.d.ts +24 -256
  96. package/dist/index.js +65 -478
  97. package/dist/invocation-auth.js +69 -0
  98. package/dist/invocation.js +262 -79
  99. package/dist/json-schema.d.ts +1 -1
  100. package/dist/mcp-client-context.js +35 -0
  101. package/dist/mcp-result.js +11 -7
  102. package/dist/meta-output.js +61 -0
  103. package/dist/meta-tool-names.d.ts +2 -0
  104. package/dist/meta-tool-names.js +3 -0
  105. package/dist/meta-tools.js +419 -272
  106. package/dist/module-contracts.d.ts +8 -23
  107. package/dist/node.d.ts +0 -2
  108. package/dist/node.js +2 -2
  109. package/dist/oauth-callback-outcome.js +1 -3
  110. package/dist/oauth-handoff.js +194 -0
  111. package/dist/oauth-sealing.js +20 -0
  112. package/dist/operator-record.d.ts +137 -0
  113. package/dist/operator-record.js +420 -0
  114. package/dist/operator-ui/assets.js +31 -0
  115. package/dist/operator-ui/contract.d.ts +72 -0
  116. package/dist/operator-ui/contract.js +1 -0
  117. package/dist/operator-ui/fix-prompts.d.ts +18 -0
  118. package/dist/operator-ui/generated.js +5 -4
  119. package/dist/operator-ui/model.d.ts +12 -87
  120. package/dist/operator-ui/model.js +2 -9
  121. package/dist/operator-ui/setup-commands.js +1 -3
  122. package/dist/operator-ui/view.d.ts +323 -0
  123. package/dist/operator-ui/view.js +62 -189
  124. package/dist/page-styles.js +2 -3
  125. package/dist/program-result.js +5 -0
  126. package/dist/program-source.js +14 -2
  127. package/dist/{exempt-writes.js → program-writes.js} +60 -19
  128. package/dist/provider.d.ts +142 -0
  129. package/dist/provider.js +187 -0
  130. package/dist/providers/_shared/google/result-size.js +57 -0
  131. package/dist/providers/_shared/google/service-account.d.ts +58 -0
  132. package/dist/providers/_shared/google/service-account.js +500 -0
  133. package/dist/providers/_shared/google/workspace.d.ts +276 -0
  134. package/dist/providers/_shared/google/workspace.js +518 -0
  135. package/dist/providers/_shared/request-token.js +83 -0
  136. package/dist/providers/{basecamp.d.ts → basecamp/index.d.ts} +6 -28
  137. package/dist/providers/basecamp/index.js +997 -0
  138. package/dist/providers/basecamp/skill.generated.js +9 -0
  139. package/dist/providers/{breeze.d.ts → breeze/index.d.ts} +2 -2
  140. package/dist/providers/{breeze.js → breeze/index.js} +184 -140
  141. package/dist/providers/breeze/skill.generated.js +9 -0
  142. package/dist/providers/{ccb.d.ts → ccb/index.d.ts} +2 -2
  143. package/dist/providers/{ccb.js → ccb/index.js} +271 -116
  144. package/dist/providers/ccb/skill.generated.js +9 -0
  145. package/dist/providers/{cloudflare.d.ts → cloudflare/index.d.ts} +8 -7
  146. package/dist/providers/{cloudflare.js → cloudflare/index.js} +171 -738
  147. package/dist/providers/cloudflare/skill.generated.js +10 -0
  148. package/dist/providers/docs/index.d.ts +54 -0
  149. package/dist/providers/docs/index.js +1237 -0
  150. package/dist/providers/docs/skill.generated.js +9 -0
  151. package/dist/providers/drive/index.d.ts +53 -0
  152. package/dist/providers/drive/index.js +1523 -0
  153. package/dist/providers/drive/skill.generated.js +9 -0
  154. package/dist/providers/forms/index.d.ts +54 -0
  155. package/dist/providers/forms/index.js +1217 -0
  156. package/dist/providers/forms/skill.generated.js +11 -0
  157. package/dist/providers/github/auth.d.ts +32 -0
  158. package/dist/providers/github/auth.js +361 -0
  159. package/dist/providers/github/hosted.js +218 -0
  160. package/dist/providers/github/index.d.ts +13 -0
  161. package/dist/providers/github/index.js +140 -0
  162. package/dist/providers/github/key.js +100 -0
  163. package/dist/providers/github/rest.js +321 -0
  164. package/dist/providers/github/scope.d.ts +29 -0
  165. package/dist/providers/github/scope.js +124 -0
  166. package/dist/providers/github/skill.generated.js +8 -0
  167. package/dist/providers/gmail/index.d.ts +51 -0
  168. package/dist/providers/gmail/index.js +1436 -0
  169. package/dist/providers/gmail/skill.generated.js +9 -0
  170. package/dist/providers/infisical/index.d.ts +7 -0
  171. package/dist/providers/infisical/index.js +713 -0
  172. package/dist/providers/infisical/skill.generated.js +8 -0
  173. package/dist/providers/{linear.d.ts → linear/index.d.ts} +11 -14
  174. package/dist/providers/linear/index.js +352 -0
  175. package/dist/providers/linear/skill.generated.js +8 -0
  176. package/dist/providers/{mixpanel.d.ts → mixpanel/index.d.ts} +5 -10
  177. package/dist/providers/mixpanel/index.js +416 -0
  178. package/dist/providers/mixpanel/skill.generated.js +9 -0
  179. package/dist/providers/{notion.d.ts → notion/index.d.ts} +8 -8
  180. package/dist/providers/{notion.js → notion/index.js} +226 -239
  181. package/dist/providers/notion/skill.generated.js +10 -0
  182. package/dist/providers/{overflow.d.ts → overflow/index.d.ts} +2 -2
  183. package/dist/providers/{overflow.js → overflow/index.js} +74 -111
  184. package/dist/providers/overflow/skill.generated.js +8 -0
  185. package/dist/providers/{planning-center.d.ts → planning-center/index.d.ts} +2 -2
  186. package/dist/providers/{planning-center.js → planning-center/index.js} +264 -104
  187. package/dist/providers/planning-center/skill.generated.js +10 -0
  188. package/dist/providers/{revenuecat.d.ts → revenuecat/index.d.ts} +5 -10
  189. package/dist/providers/revenuecat/index.js +557 -0
  190. package/dist/providers/revenuecat/skill.generated.js +11 -0
  191. package/dist/providers/sheets/index.d.ts +54 -0
  192. package/dist/providers/sheets/index.js +1237 -0
  193. package/dist/providers/sheets/skill.generated.js +10 -0
  194. package/dist/providers/slides/index.d.ts +53 -0
  195. package/dist/providers/slides/index.js +2645 -0
  196. package/dist/providers/slides/skill.generated.js +9 -0
  197. package/dist/providers/{stripe.d.ts → stripe/index.d.ts} +5 -12
  198. package/dist/providers/stripe/index.js +266 -0
  199. package/dist/providers/stripe/skill.generated.js +11 -0
  200. package/dist/providers/{tithely.d.ts → tithely/index.d.ts} +2 -2
  201. package/dist/providers/{tithely.js → tithely/index.js} +60 -91
  202. package/dist/providers/tithely/skill.generated.js +8 -0
  203. package/dist/providers/{vercel.d.ts → vercel/index.d.ts} +8 -8
  204. package/dist/providers/vercel/index.js +1038 -0
  205. package/dist/providers/vercel/mcp-ownership.js +212 -0
  206. package/dist/providers/vercel/skill.generated.js +11 -0
  207. package/dist/registry.d.ts +110 -171
  208. package/dist/registry.js +588 -927
  209. package/dist/request-state.js +21 -0
  210. package/dist/resource-read.js +103 -0
  211. package/dist/result-shapes.js +17 -49
  212. package/dist/retired-toolkits.js +1 -1
  213. package/dist/routes/access-tokens.js +3 -6
  214. package/dist/routes/activity-context.js +21 -0
  215. package/dist/routes/activity-disclosure.js +40 -0
  216. package/dist/routes/activity.js +59 -21
  217. package/dist/routes/actor-labels.js +3 -50
  218. package/dist/routes/connect.js +221 -0
  219. package/dist/routes/credentials.js +15 -27
  220. package/dist/routes/mcp.js +365 -130
  221. package/dist/routes/oauth-client-metadata.js +15 -0
  222. package/dist/routes/oauth-management.js +45 -107
  223. package/dist/routes/oauth.js +110 -57
  224. package/dist/routes/operator.js +3 -3
  225. package/dist/routes/shared.d.ts +25 -64
  226. package/dist/routes/shared.js +160 -80
  227. package/dist/routes/skills.js +30 -0
  228. package/dist/routes/ui-config.js +225 -0
  229. package/dist/routes/ui-data.js +40 -35
  230. package/dist/routes/ui.js +66 -56
  231. package/dist/runtime/admission.js +4 -2
  232. package/dist/runtime/call-admission.js +3 -1
  233. package/dist/runtime/connector-scope.js +1 -4
  234. package/dist/runtime/run.js +10 -39
  235. package/dist/runtime/services.js +12 -117
  236. package/dist/runtime/shared-read.js +1 -3
  237. package/dist/runtime/storage.js +8 -1
  238. package/dist/sent-secrets.d.ts +93 -0
  239. package/dist/sent-secrets.js +1013 -0
  240. package/dist/server.js +28 -71
  241. package/dist/skills.js +416 -174
  242. package/dist/sqlite.d.ts +48 -0
  243. package/dist/sqlite.js +181 -0
  244. package/dist/storage/keys.js +443 -0
  245. package/dist/storage/memory.js +16 -4
  246. package/dist/storage/sql.d.ts +66 -0
  247. package/dist/storage/sql.js +543 -0
  248. package/dist/timeout.js +4 -2
  249. package/dist/tool-name.js +17 -0
  250. package/dist/tool-safety.d.ts +9 -35
  251. package/dist/tool-safety.js +20 -40
  252. package/dist/types.d.ts +336 -56
  253. package/dist/types.js +0 -1
  254. package/dist/ui.d.ts +7 -19
  255. package/dist/ui.js +76 -90
  256. package/dist/url-safety.js +3 -6
  257. package/dist/usage-guide.js +146 -0
  258. package/dist/validate.d.ts +7 -0
  259. package/dist/validate.js +309 -47
  260. package/dist/version.d.ts +1 -7
  261. package/dist/version.js +3 -7
  262. package/dist/worker.d.ts +11 -0
  263. package/dist/worker.js +435 -0
  264. package/documentation/README.md +63 -0
  265. package/documentation/architecture.md +696 -231
  266. package/documentation/auth.md +1069 -546
  267. package/documentation/code-mode.md +662 -356
  268. package/documentation/deploying.md +146 -0
  269. package/documentation/integrating.md +159 -0
  270. package/documentation/meta-tools.md +570 -216
  271. package/documentation/operating.md +135 -0
  272. package/documentation/operator-tests.md +97 -0
  273. package/documentation/operator-ui.md +132 -0
  274. package/documentation/provider-migration-0.29.md +65 -0
  275. package/examples/worker/AGENTS.md +34 -12
  276. package/examples/worker/README.md +293 -255
  277. package/examples/worker/kv-to-d1.wrangler.jsonc +26 -0
  278. package/examples/worker/scripts/copy-kv-to-d1.mjs +162 -0
  279. package/examples/worker/src/connecta.config.ts +151 -0
  280. package/examples/worker/src/index.ts +14 -197
  281. package/examples/worker/wrangler.jsonc +15 -35
  282. package/package.json +126 -54
  283. package/templates/node/.dockerignore +1 -2
  284. package/templates/node/.env.example +20 -21
  285. package/templates/node/AGENTS.md +21 -17
  286. package/templates/node/Dockerfile +3 -5
  287. package/templates/node/README.md +140 -58
  288. package/templates/node/docker-compose.yml +11 -12
  289. package/templates/node/package.json +4 -2
  290. package/templates/node/src/connecta.config.ts +119 -0
  291. package/templates/node/src/index.ts +9 -154
  292. package/templates/node/src/provision-token.ts +17 -0
  293. package/AGENTS.md +0 -170
  294. package/dist/artifacts/connector.d.ts +0 -58
  295. package/dist/artifacts/connector.js +0 -730
  296. package/dist/artifacts/document.js +0 -86
  297. package/dist/artifacts/guide.js +0 -140
  298. package/dist/artifacts/html-scan.js +0 -329
  299. package/dist/artifacts/json.js +0 -78
  300. package/dist/artifacts/kv-store.d.ts +0 -20
  301. package/dist/artifacts/kv-store.js +0 -140
  302. package/dist/artifacts/markdown.js +0 -478
  303. package/dist/artifacts/module.d.ts +0 -37
  304. package/dist/artifacts/module.js +0 -66
  305. package/dist/artifacts/operations.d.ts +0 -197
  306. package/dist/artifacts/operations.js +0 -1002
  307. package/dist/artifacts/refresh.d.ts +0 -55
  308. package/dist/artifacts/refresh.js +0 -236
  309. package/dist/artifacts/routes.js +0 -206
  310. package/dist/artifacts/types.d.ts +0 -214
  311. package/dist/artifacts/types.js +0 -22
  312. package/dist/artifacts/validate.d.ts +0 -62
  313. package/dist/artifacts/validate.js +0 -651
  314. package/dist/artifacts.d.ts +0 -6
  315. package/dist/artifacts.js +0 -9
  316. package/dist/auth/bearer.d.ts +0 -11
  317. package/dist/auth/bearer.js +0 -50
  318. package/dist/providers/basecamp.js +0 -445
  319. package/dist/providers/linear.js +0 -217
  320. package/dist/providers/mixpanel.js +0 -247
  321. package/dist/providers/revenuecat.js +0 -317
  322. package/dist/providers/stripe.js +0 -253
  323. package/dist/providers/vercel.js +0 -1253
  324. package/dist/storage/file.d.ts +0 -15
  325. package/dist/storage/file.js +0 -455
  326. package/ethos.md +0 -93
  327. package/examples/worker/src/cloudflare-kv.ts +0 -43
  328. package/examples/worker/src/d1-activity-row.ts +0 -155
  329. package/examples/worker/src/d1-activity.ts +0 -147
  330. package/examples/worker/src/d1-storage.ts +0 -138
  331. package/examples/worker/src/r2-artifact-blobs.ts +0 -29
  332. package/templates/node/src/file-activity.ts +0 -182
@@ -0,0 +1,24 @@
1
+ /** Common headers for HTML, including script-free status and error pages. */
2
+ export function htmlSecurityHeaders(initial, options = {}) {
3
+ const headers = new Headers(initial);
4
+ const { clerkOrigin, nonce } = options;
5
+ // Clerk's CAPTCHA host is exact and only admitted with a validated loader
6
+ // origin. No wildcard or general HTTPS script permission is needed.
7
+ const scripts = `${nonce ? `'nonce-${nonce}' ` : ""}'self'` +
8
+ (clerkOrigin ? ` ${clerkOrigin} https://challenges.cloudflare.com` : "");
9
+ if (!headers.has("Content-Security-Policy")) {
10
+ headers.set("Content-Security-Policy", `script-src ${scripts}; object-src 'none'; base-uri 'none'; frame-ancestors 'none'` +
11
+ (clerkOrigin
12
+ ? `; connect-src 'self' ${clerkOrigin}; img-src 'self' https://img.clerk.com; worker-src 'self' blob:; style-src 'self' 'unsafe-inline'`
13
+ : "") +
14
+ (clerkOrigin ? "; frame-src https://challenges.cloudflare.com" : ""));
15
+ }
16
+ if (headers.get("Content-Security-Policy").includes("frame-ancestors 'none'")) {
17
+ headers.set("X-Frame-Options", "DENY");
18
+ }
19
+ headers.set("X-Content-Type-Options", "nosniff");
20
+ headers.set("Referrer-Policy", "no-referrer");
21
+ if (!headers.has("Cache-Control"))
22
+ headers.set("Cache-Control", "no-store");
23
+ return headers;
24
+ }
package/dist/identity.js CHANGED
@@ -8,9 +8,7 @@ export function validIdentityReference(value) {
8
8
  IDENTITY_PART_RE.test(value.id));
9
9
  }
10
10
  function bytesToHex(bytes) {
11
- return [...bytes]
12
- .map((byte) => byte.toString(16).padStart(2, "0"))
13
- .join("");
11
+ return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
14
12
  }
15
13
  /** Deterministic pseudonymous partition; raw emails and ids do not enter keys. */
16
14
  export async function identityStorageKey(identity) {
@@ -0,0 +1,52 @@
1
+ const parsed = new WeakMap();
2
+ /** One strict parse shared by recognition and verification. Schemes ignore case. */
3
+ export function authorizationCredential(request) {
4
+ const header = request.headers.get("authorization");
5
+ const cached = parsed.get(request);
6
+ if (cached?.header === header)
7
+ return cached.credential;
8
+ // Exactly one separator and one token68 value. Reject combined duplicate
9
+ // headers and malformed spacing rather than letting an SDK repair them.
10
+ const match = header === null ? null : /^Bearer ([A-Za-z0-9._~+/-]+=*)$/i.exec(header);
11
+ const credential = header === null
12
+ ? { kind: "absent" }
13
+ : match
14
+ ? { kind: "bearer", token: match[1], value: `Bearer ${match[1]}` }
15
+ : { kind: "invalid" };
16
+ parsed.set(request, { header, credential });
17
+ return credential;
18
+ }
19
+ /** Explicit headers exclude cookies and Clerk's browser handshake credentials. */
20
+ export function authorizationRequest(request) {
21
+ const credential = authorizationCredential(request);
22
+ if (credential.kind === "absent")
23
+ return request;
24
+ const headers = new Headers(request.headers);
25
+ headers.delete("cookie");
26
+ if (credential.kind === "bearer")
27
+ headers.set("authorization", credential.value);
28
+ const url = new URL(request.url);
29
+ for (const key of new Set(url.searchParams.keys())) {
30
+ if (key.startsWith("__clerk") || key === "__session" || key === "__dev_session")
31
+ url.searchParams.delete(key);
32
+ }
33
+ if (url.href === request.url &&
34
+ !request.headers.has("cookie") &&
35
+ headers.get("authorization") === request.headers.get("authorization"))
36
+ return request;
37
+ // Share the body without cloning/teeing or transferring the original
38
+ // request: the route must still be able to read it after authentication.
39
+ const normalized = new Request(url, {
40
+ method: request.method,
41
+ headers,
42
+ signal: request.signal,
43
+ ...(request.body ? { body: request.body, duplex: "half" } : {}),
44
+ });
45
+ parsed.set(normalized, { header: headers.get("authorization"), credential });
46
+ return normalized;
47
+ }
48
+ /** Reserved machine syntax, even when the optional verifier is not installed. */
49
+ export function isMachineCredential(request) {
50
+ const credential = authorizationCredential(request);
51
+ return credential.kind === "bearer" && credential.token.startsWith("cta_");
52
+ }
package/dist/index.d.ts CHANGED
@@ -1,276 +1,44 @@
1
- import type { CredentialVault } from "./credential-contract.js";
2
1
  import { Registry } from "./registry.js";
3
- import type { ConnectorGrant } from "./connector-access.js";
4
- import type { AccessTokensModule, ActivityModule, ArtifactsModule, OperatorSurface } from "./module-contracts.js";
5
- export type { AccessTokensModule, ActivityModule, ArtifactsModule, OperatorSurface, } from "./module-contracts.js";
2
+ import { type ConnectaConfig } from "./config.js";
3
+ import { type ConnectaConfigDescription } from "./describe-config.js";
4
+ export { customExecutor, type CustomExecutorOptions } from "./executor-contract.js";
5
+ export type { AccessTokensModule, ActivityModule, OperatorSurface } from "./module-contracts.js";
6
6
  export type { CredentialVault, CredentialMetadata } from "./credential-contract.js";
7
- import type { AuthenticatedIdentity, Connector, Executor, IdentityReference, InboundAuth, KVStorage, Logger } from "./types.js";
8
- /** Tool-catalog caching, persistence, stale fallback, and probe deadlines. */
9
- export interface ConnectaDiscoveryConfig {
10
- /**
11
- * Maximum connector catalogs/status probes fetched at once by discovery
12
- * operations. Default 4.
13
- */
14
- concurrency?: number;
15
- /** Tool-list cache TTL (seconds). Default 300. */
16
- catalogTtlSeconds?: number;
17
- /**
18
- * Persist serializable remote tool catalogs in storage so cold isolates can
19
- * discover tools without a downstream handshake. Default true.
20
- */
21
- persistCatalog?: boolean;
22
- /**
23
- * How long an expired persisted catalog remains available as a fallback
24
- * when a live refresh fails. Default 3600 seconds.
25
- */
26
- staleCatalogSeconds?: number;
27
- /**
28
- * Deadline (ms) for each downstream probe/catalog call fanned out by
29
- * `search_tools` and by `connecta.search`/`connecta.describe` inside
30
- * `execute_code`. Defaults to 30_000. A timed-out connector degrades
31
- * independently; this does not apply to tool calls. Catalog walks receive the
32
- * same cancellation signal, which aborts an in-flight page where supported and
33
- * prevents another from starting.
34
- */
35
- probeTimeoutMs?: number;
36
- }
37
- /** Deployment-wide call deadlines and inline-result paging thresholds. */
38
- export interface ConnectaCallsConfig {
39
- /**
40
- * Deadline (ms) for `call_tool`/`call_destructive_tool` calls that pass no
41
- * `timeoutMs`. An explicit per-call value wins. Opt-in: unset by default, so
42
- * existing long-running calls gain no surprise deadline.
43
- *
44
- * Each call makes one attempt. `execute_code` host calls are
45
- * unaffected because they already carry their own bound.
46
- */
47
- defaultTimeoutMs?: number;
48
- /**
49
- * Max inline result size (bytes) before truncation and `get_result` paging.
50
- * Must be a finite whole number >= 1; invalid values warn and fall back to
51
- * 24_000. Connectors may override it individually.
52
- */
53
- maxResultBytes?: number;
54
- }
55
- /** Runtime-wide bounds for transient direct-call result paging. */
56
- export interface ConnectaResultsConfig {
57
- /** Stored bytes, including the paging envelope. Default 8 MiB. Zero disables stashing. */
58
- maxStashBytes?: number;
59
- /** Stored or in-flight entries. Default 64. Zero disables stashing. */
60
- maxStashEntries?: number;
61
- }
62
- /** Budgets for execute_code programs: host calls and rich output (`connecta.emit`). */
63
- export interface ConnectaExecuteConfig {
64
- /**
65
- * Aggregate serialized bytes `connecta.emit` accepts per run. Default
66
- * 4_000_000 — a transport bound, not a context bound: emitted image/audio
67
- * blocks reach the model as media, not base64 text. Invalid values fall
68
- * back to the default.
69
- */
70
- maxEmittedBytes?: number;
71
- /** Content blocks `connecta.emit` accepts per run. Default 32. */
72
- maxEmittedBlocks?: number;
73
- /**
74
- * Host calls one program may make. Default 20. Invalid values fall back to
75
- * the default.
76
- */
77
- maxHostCalls?: number;
78
- /**
79
- * Deadline for each host call a program makes, in milliseconds. Default
80
- * 15_000. Raise it for providers whose legitimate calls run longer, such as
81
- * analytics queries; `call_tool`'s own `timeoutMs` is unaffected. Invalid
82
- * values fall back to the default.
83
- */
84
- hostCallTimeoutMs?: number;
85
- /**
86
- * Hard ceiling on one execution, in milliseconds, enforced outside the
87
- * sandbox. Default 120_000, above both executors' own deadlines (QuickJS
88
- * 30_000, the Dynamic Worker 60_000), so it only ends a run whose executor
89
- * never settled; that run fails as unresponsive and its admission slot is
90
- * released. Keep it above any raised executor deadline. Invalid values
91
- * fall back to the default.
92
- */
93
- watchdogMs?: number;
94
- /**
95
- * Config-exempt writes one program may send, on top of the host-call
96
- * budget every call already spends. Default 10. Invalid values fall back
97
- * to the default.
98
- */
99
- maxWrites?: number;
100
- /**
101
- * Which writes a program may make without asking. A program runs only
102
- * explicitly read-only tools and these; every other write is refused and
103
- * goes through `call_destructive_tool`, where the host asks. Keys are
104
- * connector ids (all of that connector's tools) or `connector.tool`
105
- * addresses (that tool); values are `"never"` (never ask) or `"ask"`. The
106
- * most specific key wins, and `"ask"` switches off a connector's own
107
- * default. An exempt write still spends the write budget and is recorded
108
- * in activity; it is never read-only anywhere else — discovery still lists
109
- * it as approval-required and `call_tool` still refuses it. An unknown
110
- * connector id, or an `api()` address its tools do not include, refuses to
111
- * construct; a remote connector's tool names load later, so an address
112
- * naming one it never serves simply never matches.
113
- */
114
- approval?: Readonly<Record<string, "never" | "ask">>;
115
- }
116
- export interface AdmissionPoolConfig {
117
- /** Simultaneous work admitted to this pool. */
118
- concurrency?: number;
119
- /** Callers allowed to wait behind active work. Set zero to fail fast. */
120
- maxQueueSize?: number;
121
- /** Maximum queue wait in milliseconds. */
122
- queueTimeoutMs?: number;
123
- /** Retry hint returned with overload failures, in milliseconds. */
124
- retryAfterMs?: number;
125
- }
126
- export interface RequestAdmissionConfig extends AdmissionPoolConfig {
127
- /** Hard lifetime of an admitted /mcp request. Default 300,000 ms. */
128
- maxDurationMs?: number;
129
- }
130
- /**
131
- * Runtime-portable server-memory boundaries. `/health` and operator routes do
132
- * not consume these permits, so they remain responsive during MCP saturation.
133
- */
134
- export interface ConnectaAdmissionConfig {
135
- /**
136
- * The `/mcp` request boundary. Defaults to 16 active, 32 queued, and a
137
- * 5-second maximum wait.
138
- */
139
- requests?: RequestAdmissionConfig;
140
- /**
141
- * Fallback pool for an `executor` that does not implement its own `acquire`.
142
- * Defaults to 2 active, 8 queued, and a 5-second maximum wait. Bounded
143
- * executors (including `quickJsExecutor`) keep their own tighter pool.
144
- */
145
- code?: AdmissionPoolConfig;
146
- }
147
- /** Config-owned identity rules for one deployment and tenant. */
148
- export type ConnectorPermission = "all" | "none" | readonly string[];
149
- export interface ConnectaIdentityConfig {
150
- /**
151
- * What this admitted identity may discover and call: `"all"`, or a list
152
- * whose entries are connector ids (the whole connector) and `connector.tool`
153
- * addresses (that tool only), or `{ tool: "connector.tool",
154
- * requireReadOnly: true }` for an exact tool only while its loaded catalog
155
- * explicitly classifies it read-only. Grants are additive: an unrestricted
156
- * connector or address grant wins over the guarded form. An address naming
157
- * a tool the catalog lacks is unreachable and warned once, never widened.
158
- */
159
- connectorAccess?(identity: Readonly<AuthenticatedIdentity>): "all" | readonly ConnectorGrant[] | Promise<"all" | readonly ConnectorGrant[]>;
160
- /** Global payload-free activity reads. Defaults to interactive humans. */
161
- activityAccess?(principal: Readonly<IdentityReference>): boolean | Promise<boolean>;
162
- /** Shared credential and OAuth administration. Defaults to none. */
163
- credentialAdministration?(identity: Readonly<AuthenticatedIdentity>): ConnectorPermission | Promise<ConnectorPermission>;
164
- /** Client-token lifecycle management by interactive humans. Defaults to false. */
165
- accessTokenManagement?(identity: Readonly<AuthenticatedIdentity>): boolean | Promise<boolean>;
166
- /** Connecting or changing the caller's personal account. Defaults to none. */
167
- personalConnection?(identity: Readonly<AuthenticatedIdentity>): ConnectorPermission | Promise<ConnectorPermission>;
168
- }
169
- /**
170
- * A named tool pool served at `/mcp/<name>`. The pool is the slice a client
171
- * pointed at that endpoint may see; the identity's own `connectorAccess`
172
- * remains its ceiling and the pool can only narrow it.
173
- */
174
- export interface ConnectaPoolConfig {
175
- /** Connector ids and exact `connector.tool` addresses in this pool. */
176
- tools: readonly string[];
177
- /**
178
- * Whether this admitted identity may open the pool. Denied by default:
179
- * a pool with no grant serves nobody. A false return, a throw, and an
180
- * undeclared pool name are the same 404.
181
- */
182
- grant?(identity: Readonly<AuthenticatedIdentity>): boolean | Promise<boolean>;
183
- }
184
- export interface ConnectaConfig {
185
- connectors: Connector[];
186
- /** Inbound auth adapters. Includes bearerToken(...); omit for open (dev). */
187
- auth?: InboundAuth | InboundAuth[];
188
- /** Code-derived connection visibility and independent management permissions. */
189
- identity?: ConnectaIdentityConfig;
190
- /** Named tool pools, each served at `/mcp/<name>` to identities its grant admits. */
191
- pools?: Record<string, ConnectaPoolConfig>;
192
- /** KVStorage impl. Defaults to memoryStorage(). */
193
- storage?: KVStorage;
194
- /**
195
- * Public base URL. Defaults to the request origin per-request. Configuring an
196
- * HTTPS URL also redirects matching inbound HTTP requests to HTTPS.
197
- */
198
- publicUrl?: string;
199
- /**
200
- * Exact browser MCP origins, or "*". Defaults to publicUrl's origin and
201
- * HTTP(S) loopback origins at any port. Originless clients are admitted.
202
- */
203
- allowedOrigins?: readonly string[] | "*";
204
- /** Optional recorder and reader, created by activityHistory() from /activity. */
205
- activity?: ActivityModule;
206
- /** Replaceable owner-partitioned credential storage. Omit for config-owned secrets. */
207
- vault?: CredentialVault;
208
- /** Optional connection UI, created by operatorUi() from /ui. */
209
- ui?: OperatorSurface;
210
- /**
211
- * Optional team pages over stored data, created by artifacts() from
212
- * /artifacts. Adds the built-in `artifacts` connector; needs `publicUrl`,
213
- * because the links it hands out are shared.
214
- */
215
- artifacts?: ArtifactsModule;
216
- /** Optional managed client tokens, created by accessTokens() from /auth/access-tokens. */
217
- accessTokens?: AccessTokensModule;
218
- /** Optional dedicated HTTPS origin that serves only artifact pages and their library. */
219
- artifactOrigin?: string;
220
- /** Tool-catalog caching, persistence, stale fallback, and probe deadlines. */
221
- discovery?: ConnectaDiscoveryConfig;
222
- /** Deployment-wide call deadlines and result paging threshold. */
223
- calls?: ConnectaCallsConfig;
224
- /** Runtime-wide transient result stash limits, shared across subjects. */
225
- results?: ConnectaResultsConfig;
226
- /** Budgets for the `connecta.emit` rich-output channel in execute_code. */
227
- execute?: ConnectaExecuteConfig;
228
- /** Bounded MCP and fallback code-mode admission. */
229
- admission?: ConnectaAdmissionConfig;
230
- /** Diagnostic output. Use "silent" to disable all diagnostic logging. */
231
- logger?: Logger | "silent";
232
- serverInfo?: {
233
- name?: string;
234
- version?: string;
235
- /** Human-readable name clients may show instead of `name`. */
236
- title?: string;
237
- /** Homepage clients may link from the server listing. */
238
- websiteUrl?: string;
239
- /** MCP icons-spec entries; clients render these instead of a scraped favicon. */
240
- icons?: Array<{
241
- src: string;
242
- mimeType?: string;
243
- sizes?: string[];
244
- }>;
245
- };
246
- /** Deployment metadata exposed by /health (for example a Worker version). */
247
- deploymentInfo?: Record<string, unknown>;
248
- /**
249
- * Required sandbox for `execute_code`. Workers use
250
- * `new DynamicWorkerExecutor({ loader: env.LOADER })` from
251
- * `@cloudflare/codemode`; Node uses `quickJsExecutor()` from
252
- * `@zackbart/connecta/quickjs`.
253
- */
254
- executor: Executor;
255
- }
7
+ export { defineConfig } from "./config.js";
8
+ export type { AdmissionPoolConfig, ConnectaAdmissionConfig, ConnectaCallsConfig, ConnectaConfig, ConnectaDiscoveryConfig, ConnectaExecuteConfig, ConnectaIdentityConfig, ConnectaPoolConfig, ConnectaResultsConfig, ConnectorPermission, RequestAdmissionConfig, } from "./config.js";
9
+ export type { ConfigValueSource, ConnectaConfigDescription, DescribedConnector, DescribedLimit, } from "./describe-config.js";
256
10
  export interface Connecta {
257
11
  /** Web-standard fetch handler. Usable as `export default { fetch: connecta.fetch }`. */
258
12
  fetch: (request: Request, env?: unknown, ctx?: unknown) => Promise<Response>;
259
13
  registry: Registry;
14
+ /**
15
+ * A secret-free snapshot of the configuration this deployment runs with,
16
+ * built once at construction: limits and where each came from, auth
17
+ * providers, identity rules, pools, modules, and every connector's source,
18
+ * endpoint, auth mode, and static tools. Header values, keys, client
19
+ * secrets, credentials, and functions never appear. The same object is
20
+ * returned on every call.
21
+ */
22
+ describeConfig: () => ConnectaConfigDescription;
260
23
  /** Drain and release configured executor resources. Idempotent. */
261
24
  close: () => Promise<void>;
262
25
  }
263
26
  export declare function createConnecta(config: ConnectaConfig): Connecta;
264
27
  export { remoteMcp } from "./connectors/remote-mcp.js";
265
28
  export { api } from "./connectors/api.js";
29
+ export { keys, optionsOf, array, opaque, instance, strings, variants } from "./config-schema.js";
30
+ export { defineProvider, PROVIDER_COMMON } from "./provider.js";
31
+ export type { ProviderContext, ProviderDefinition, ProviderFactory, ProviderGuideInput, ProviderKind, ProviderOptions, ProviderSkill, } from "./provider.js";
266
32
  export { ConnectorCallError } from "./errors.js";
267
33
  export type { ConnectorCallErrorCode, CallErrorDetails } from "./errors.js";
268
34
  export { validateToolInput } from "./validate.js";
269
35
  export type { ValidateToolInputOptions } from "./validate.js";
270
36
  export { memoryStorage } from "./storage/memory.js";
271
37
  export { CONNECTA_VERSION } from "./version.js";
38
+ export type { GuestApi, GuestResourceResult, GuestResult, GuestResultPage, GuestBlock, GuestNativeBlock, } from "./guest-types.js";
272
39
  export type { Registry } from "./registry.js";
273
- export type { RemoteMcpOptions, RemoteMcpAuth, RemoteMcpRedirectPolicy, } from "./connectors/remote-mcp.js";
40
+ export type { RemoteMcpOptions, RemoteMcpAuth, RemoteMcpRedirectPolicy } from "./connectors/remote-mcp.js";
274
41
  export type { ApiHandlerContext, ApiOAuthAccess, ApiOAuthClientAuthentication, ApiOAuthConfig, ApiOptions, ApiTool, } from "./connectors/api.js";
275
- export type { CatalogDriftCounts, CatalogDriftReport, ConnectaBranding, ConnectaTheme, Connector, ConnectorCallAdmissionInput, ConnectorCallAdmissionPolicy, ConnectorCallAdmissionRule, ConnectorRollingWindowBudget, ConnectorCredentialAccess, ConnectorCredentialConfig, ConnectorCredentialFieldConfig, ConnectorCredentialValues, ConnectorContext, ConnectorUsageGuide, ConnectorStatus, CredentialTestResult, AdmittingExecutor, AdmissionSnapshot, ExecuteResult, Executor, ExecutorLease, ExecutorProvider, InboundAuth, InboundAuthRuntimeContext, UiAuthConfig, AuthResult, AuthenticatedIdentity, IdentityReference, JsonSchema, KVStorage, Logger, ToolDef, ToolAnnotations, } from "./types.js";
276
- export type { ActivityActor, ActivityCallSource, ActivityOutcome, ActivityPage, ActivityReadActor, ActivityReadEvent, ActivityReader, ActivityReadGate, ActivityReadPage, ActivitySink, ActivityStore, AgentFriction, CatalogDriftActivityEvent, ToolCallActivityEvent, } from "./activity.js";
42
+ export type { CatalogDriftCounts, CatalogDriftReport, ConnectaBranding, ConnectaTheme, Connector, ConnectorCallAdmissionInput, ConnectorCallAdmissionPolicy, ConnectorCallAdmissionRule, ConnectorRollingWindowBudget, ConnectorCredentialAccess, ConnectorCredentialConfig, ConnectorCredentialFieldConfig, ConnectorCredentialValues, ConnectorContext, ConnectorAuthDescription, ConnectorDescription, ConnectorToolDescription, ConnectorUsageGuide, ConnectorSkill, ConnectorSkillResourceContents, DescribedEndpoint, ConnectorStatus, CredentialTestResult, AdmittingExecutor, AdmissionSnapshot, ExecuteResult, Executor, ExecutorLease, ExecutorProvider, InboundAuth, InboundAuthRuntimeContext, UiAuthConfig, AuthResult, AuthenticatedIdentity, IdentityReference, JsonSchema, KVStorage, Logger, ReviewedTool, ToolClassification, ToolDef, ToolAnnotations, ToolVerdict, } from "./types.js";
43
+ export type { ActivityActor, ActivityCatalogChange, ActivityCallSource, ActivityOutcome, ActivityPage, ActivityReadActor, ActivityReadEvent, ActivityReader, ActivityReadGate, ActivityReadPage, ActivitySink, ActivityStore, AgentFriction, ToolCallActivityEvent, } from "./activity.js";
44
+ export { META_TOOL_NAMES } from "./meta-tool-names.js";