@zackbart/connecta 0.34.0 → 0.35.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.
- package/CHANGELOG.md +393 -0
- package/README.md +62 -105
- package/SECURITY.md +3 -2
- package/bin/connecta.mjs +41 -16
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.d.ts +2 -1
- package/dist/access-tokens.js +66 -30
- package/dist/activity.d.ts +1 -1
- package/dist/activity.js +2 -0
- package/dist/agent-config.d.ts +23 -0
- package/dist/agent-config.js +59 -0
- package/dist/agent-description.js +16 -0
- package/dist/agent-identity.js +4 -4
- package/dist/agent-observation.js +39 -0
- package/dist/auth/clerk-sdk/client.d.ts +2 -0
- package/dist/auth/clerk-sdk/generated.js +554 -563
- package/dist/auth/clerk-transport.js +70 -3
- package/dist/auth/clerk.d.ts +13 -0
- package/dist/auth/clerk.js +653 -246
- package/dist/auth/cloudflare-access.js +46 -42
- package/dist/auth/downstream-client-metadata.js +2 -2
- package/dist/auth/downstream-oauth.js +2051 -1160
- package/dist/auth/downstream-revocation.js +88 -88
- package/dist/auth/native-call.js +20 -0
- package/dist/auth/native.js +184 -0
- package/dist/auth/oauth-start-reset.js +11 -5
- package/dist/auth/oauth-token-response.js +121 -102
- package/dist/auth/oauth-v2-migration.js +97 -78
- package/dist/auth/renewable-grant.js +10 -0
- package/dist/auth/static-oauth.js +663 -271
- package/dist/auth/vercel-agent.js +266 -0
- package/dist/auth-admission.js +204 -0
- package/dist/auth-elicitation.js +350 -241
- package/dist/authorization-handoff.js +164 -90
- package/dist/call-admission-context.js +3 -10
- package/dist/call-admission.js +2 -0
- package/dist/call-classification.js +9 -0
- package/dist/call-recovery.js +32 -13
- package/dist/canonical-json.js +8 -0
- package/dist/catalog-cache.js +369 -213
- package/dist/catalog-service.js +659 -530
- package/dist/catalog.js +5 -1
- package/dist/concurrency.js +0 -25
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +3 -1
- package/dist/config-schema.js +13 -3
- package/dist/config.d.ts +40 -6
- package/dist/config.js +40 -26
- package/dist/connector-caller.d.ts +4 -0
- package/dist/connector-caller.js +17 -4
- package/dist/connectors/api-connector.d.ts +15 -7
- package/dist/connectors/api-connector.js +147 -57
- package/dist/connectors/guarded-fetch.d.ts +51 -17
- package/dist/connectors/guarded-fetch.js +215 -121
- package/dist/connectors/negotiation-cache.js +20 -10
- package/dist/connectors/option-shapes.js +1 -1
- package/dist/connectors/remote-mcp.d.ts +12 -30
- package/dist/connectors/remote-mcp.js +960 -564
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +5 -1
- package/dist/describe-config.js +3 -0
- package/dist/downstream-input.js +347 -260
- package/dist/errors.d.ts +87 -6
- package/dist/errors.js +114 -4
- package/dist/execute.js +87 -50
- package/dist/executor-admission.js +3 -0
- package/dist/executors/quickjs.js +163 -112
- package/dist/guarded-transport.js +50 -0
- package/dist/guest-runtime.js +1 -1
- package/dist/http/client.js +439 -0
- package/dist/http/errors.js +558 -0
- package/dist/http/fields.js +49 -0
- package/dist/http/hatch-paging.js +318 -0
- package/dist/http/hatch.js +1279 -0
- package/dist/http/json-schema.js +267 -0
- package/dist/http/node-transport.js +241 -0
- package/dist/http/oauth.js +162 -0
- package/dist/http/paging.js +228 -0
- package/dist/http/provider.js +221 -0
- package/dist/http/safety.js +82 -0
- package/dist/http/services.js +79 -0
- package/dist/http/tools.js +383 -0
- package/dist/http/vendor-index.js +138 -0
- package/dist/http/vendor.js +448 -0
- package/dist/http/write-request.js +66 -0
- package/dist/http-policy.d.ts +11 -0
- package/dist/http-policy.js +45 -0
- package/dist/inbound-credential.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -0
- package/dist/invocation-auth.js +30 -19
- package/dist/invocation.js +221 -87
- package/dist/mcp-result.js +0 -4
- package/dist/membership.d.ts +4 -0
- package/dist/meta-output.js +1 -1
- package/dist/meta-tools.js +534 -408
- package/dist/native-recovery.js +52 -0
- package/dist/native-tools.js +382 -0
- package/dist/node.d.ts +4 -3
- package/dist/node.js +45 -8
- package/dist/oauth-handoff.js +177 -104
- package/dist/oauth-partition.js +6 -20
- package/dist/oauth-sealing.js +6 -7
- package/dist/operation-vocabulary.js +101 -0
- package/dist/operator-record.d.ts +2 -2
- package/dist/operator-record.js +17 -4
- package/dist/operator-ui/agents.d.ts +5 -4
- package/dist/operator-ui/agents.js +17 -7
- package/dist/operator-ui/config-summary.js +8 -4
- package/dist/operator-ui/connection-map.js +9 -6
- package/dist/operator-ui/contract.d.ts +7 -3
- package/dist/operator-ui/endpoints.js +5 -14
- package/dist/operator-ui/fix-prompts.d.ts +1 -1
- package/dist/operator-ui/fix-prompts.js +0 -8
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/health.js +52 -0
- package/dist/operator-ui/model.d.ts +2 -3
- package/dist/operator-ui/overview.js +11 -19
- package/dist/operator-ui/setup-commands.js +0 -4
- package/dist/operator-ui/view.d.ts +5 -29
- package/dist/operator-ui/view.js +3 -59
- package/dist/program-writes.js +47 -26
- package/dist/provider-call-facts.d.ts +115 -0
- package/dist/provider-call-facts.js +182 -0
- package/dist/provider-call.d.ts +112 -0
- package/dist/provider-call.js +271 -0
- package/dist/provider.d.ts +71 -32
- package/dist/provider.js +134 -40
- package/dist/providers/_shared/google/hatch.js +91 -0
- package/dist/providers/_shared/google/kit.js +537 -0
- package/dist/providers/_shared/google/result-size.js +15 -2
- package/dist/providers/_shared/google/service-account.d.ts +2 -1
- package/dist/providers/_shared/google/service-account.js +8 -4
- package/dist/providers/_shared/google/workspace.d.ts +8 -209
- package/dist/providers/_shared/google/workspace.js +7 -426
- package/dist/providers/_shared/rest/compact-index.js +86 -0
- package/dist/providers/_shared/rest/dispatch.js +3 -23
- package/dist/providers/_shared/rest/kit.js +546 -0
- package/dist/providers/_shared/rest/operation-index.js +230 -14
- package/dist/providers/_shared/rest/response-media.js +11 -0
- package/dist/providers/_shared/rest/tools.js +101 -78
- package/dist/providers/_shared/rest/value-safety.js +353 -195
- package/dist/providers/_shared/sensitive-fields.js +27 -0
- package/dist/providers/breeze/api.js +584 -0
- package/dist/providers/breeze/index.d.ts +3 -3
- package/dist/providers/breeze/index.js +67 -1420
- package/dist/providers/breeze/openapi.generated.js +60 -0
- package/dist/providers/breeze/skill.generated.js +2 -6
- package/dist/providers/breeze/tools.js +696 -0
- package/dist/providers/ccb/api.js +496 -0
- package/dist/providers/ccb/index.d.ts +17 -37
- package/dist/providers/ccb/index.js +77 -1702
- package/dist/providers/ccb/lib/constants.d.ts +34 -0
- package/dist/providers/ccb/lib/constants.js +74 -0
- package/dist/providers/ccb/lib/guide.js +9 -0
- package/dist/providers/ccb/lib/verdicts.js +387 -0
- package/dist/providers/ccb/openapi.generated.js +397 -0
- package/dist/providers/ccb/safety.js +295 -0
- package/dist/providers/ccb/skill.generated.js +2 -6
- package/dist/providers/ccb/tools.js +853 -0
- package/dist/providers/cloudflare/api.js +1066 -0
- package/dist/providers/cloudflare/index.d.ts +7 -22
- package/dist/providers/cloudflare/index.js +80 -194
- package/dist/providers/cloudflare/lib/config.d.ts +16 -0
- package/dist/providers/cloudflare/lib/config.js +2 -0
- package/dist/providers/cloudflare/lib/discovery.js +29 -0
- package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
- package/dist/providers/cloudflare/lib/hatch.js +103 -0
- package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
- package/dist/providers/cloudflare/lib/response-media.js +75 -0
- package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
- package/dist/providers/cloudflare/skill.generated.js +2 -10
- package/dist/providers/cloudflare/tools.js +360 -0
- package/dist/providers/docs/api.js +51 -0
- package/dist/providers/docs/index.d.ts +1 -12
- package/dist/providers/docs/index.js +53 -1165
- package/dist/providers/docs/lib/constants.d.ts +18 -0
- package/dist/providers/docs/lib/constants.js +18 -0
- package/dist/providers/docs/lib/discovery.js +26 -0
- package/dist/providers/docs/lib/requests.js +48 -0
- package/dist/providers/docs/lib/schemas.js +168 -0
- package/dist/providers/docs/openapi.generated.js +16 -0
- package/dist/providers/docs/safety.js +54 -0
- package/dist/providers/docs/skill.generated.js +2 -6
- package/dist/providers/docs/tools.js +802 -0
- package/dist/providers/drive/api.js +177 -0
- package/dist/providers/drive/index.d.ts +1 -12
- package/dist/providers/drive/index.js +38 -1448
- package/dist/providers/drive/lib/constants.d.ts +6 -0
- package/dist/providers/drive/lib/constants.js +6 -0
- package/dist/providers/drive/lib/contracts.js +532 -0
- package/dist/providers/drive/lib/hatch.js +197 -0
- package/dist/providers/drive/openapi.generated.js +77 -0
- package/dist/providers/drive/safety.js +90 -0
- package/dist/providers/drive/skill.generated.js +2 -6
- package/dist/providers/drive/tools.js +1290 -0
- package/dist/providers/forms/api.js +71 -0
- package/dist/providers/forms/index.d.ts +1 -12
- package/dist/providers/forms/index.js +49 -1145
- package/dist/providers/forms/lib/constants.d.ts +14 -0
- package/dist/providers/forms/lib/constants.js +19 -0
- package/dist/providers/forms/lib/hatch.js +72 -0
- package/dist/providers/forms/openapi.generated.js +23 -0
- package/dist/providers/forms/safety.js +34 -0
- package/dist/providers/forms/skill.generated.js +2 -8
- package/dist/providers/forms/tools.js +1024 -0
- package/dist/providers/github/api.js +150 -0
- package/dist/providers/github/index.d.ts +4 -5
- package/dist/providers/github/index.js +30 -87
- package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
- package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
- package/dist/providers/github/lib/discovery.js +132 -0
- package/dist/providers/github/lib/operations.js +58 -0
- package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
- package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
- package/dist/providers/github/openapi.generated.js +1216 -0
- package/dist/providers/github/safety.js +216 -0
- package/dist/providers/github/skill.generated.js +2 -5
- package/dist/providers/github/tools.js +506 -0
- package/dist/providers/gmail/api.js +114 -0
- package/dist/providers/gmail/index.d.ts +1 -12
- package/dist/providers/gmail/index.js +73 -1621
- package/dist/providers/gmail/lib/constants.d.ts +13 -0
- package/dist/providers/gmail/lib/constants.js +16 -0
- package/dist/providers/gmail/lib/index.js +173 -0
- package/dist/providers/gmail/lib/schemas.js +176 -0
- package/dist/providers/gmail/lib/threading.js +120 -0
- package/dist/providers/gmail/openapi.generated.js +92 -0
- package/dist/providers/gmail/safety.js +21 -0
- package/dist/providers/gmail/skill.generated.js +2 -6
- package/dist/providers/gmail/tools.js +1435 -0
- package/dist/providers/overflow/api.js +1008 -0
- package/dist/providers/overflow/index.d.ts +3 -17
- package/dist/providers/overflow/index.js +60 -1488
- package/dist/providers/overflow/skill.generated.js +2 -5
- package/dist/providers/overflow/tools.js +873 -0
- package/dist/providers/planning-center/api.js +467 -0
- package/dist/providers/planning-center/index.d.ts +6 -35
- package/dist/providers/planning-center/index.js +69 -2445
- package/dist/providers/planning-center/lib/constants.d.ts +58 -0
- package/dist/providers/planning-center/lib/constants.js +83 -0
- package/dist/providers/planning-center/lib/discovery.js +40 -0
- package/dist/providers/planning-center/lib/guide.js +39 -0
- package/dist/providers/planning-center/lib/json-api.js +83 -0
- package/dist/providers/planning-center/lib/verdicts.js +1758 -0
- package/dist/providers/planning-center/openapi.generated.js +1764 -0
- package/dist/providers/planning-center/safety.js +188 -0
- package/dist/providers/planning-center/skill.generated.js +2 -27
- package/dist/providers/planning-center/tools.js +1010 -0
- package/dist/providers/sheets/api.js +133 -0
- package/dist/providers/sheets/index.d.ts +4 -16
- package/dist/providers/sheets/index.js +61 -1172
- package/dist/providers/sheets/lib/constants.d.ts +14 -0
- package/dist/providers/sheets/lib/constants.js +14 -0
- package/dist/providers/sheets/lib/hatch.js +163 -0
- package/dist/providers/sheets/lib/requests.js +105 -0
- package/dist/providers/sheets/lib/schemas.js +138 -0
- package/dist/providers/sheets/openapi.generated.js +30 -0
- package/dist/providers/sheets/safety.js +27 -0
- package/dist/providers/sheets/skill.generated.js +2 -7
- package/dist/providers/sheets/tools.js +734 -0
- package/dist/providers/slides/api.js +147 -0
- package/dist/providers/slides/index.d.ts +2 -10
- package/dist/providers/slides/index.js +48 -2555
- package/dist/providers/slides/lib/constants.d.ts +11 -0
- package/dist/providers/slides/lib/constants.js +11 -0
- package/dist/providers/slides/lib/requests.js +60 -0
- package/dist/providers/slides/lib/schemas.js +565 -0
- package/dist/providers/slides/openapi.generated.js +18 -0
- package/dist/providers/slides/skill.generated.js +2 -6
- package/dist/providers/slides/tools.js +1968 -0
- package/dist/providers/stripe/api.js +401 -0
- package/dist/providers/stripe/index.d.ts +7 -27
- package/dist/providers/stripe/index.js +75 -191
- package/dist/providers/stripe/lib/config.d.ts +4 -0
- package/dist/providers/stripe/lib/config.js +2 -0
- package/dist/providers/stripe/openapi.generated.js +4 -3
- package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
- package/dist/providers/stripe/skill.generated.js +2 -10
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +19 -0
- package/dist/providers/tithely/index.js +86 -965
- package/dist/providers/tithely/skill.generated.js +2 -5
- package/dist/providers/tithely/tools.js +426 -0
- package/dist/providers/vercel/api.js +551 -0
- package/dist/providers/vercel/index.d.ts +11 -25
- package/dist/providers/vercel/index.js +67 -261
- package/dist/providers/vercel/lib/config.d.ts +2 -0
- package/dist/providers/vercel/lib/config.js +2 -0
- package/dist/providers/vercel/lib/index.js +117 -0
- package/dist/providers/vercel/lib/logs.js +100 -0
- package/dist/providers/vercel/lib/pin.js +270 -0
- package/dist/providers/vercel/openapi.generated.js +398 -376
- package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
- package/dist/providers/vercel/skill.generated.js +2 -7
- package/dist/providers/vercel/tools.js +642 -0
- package/dist/redaction-identity.js +47 -0
- package/dist/redaction-marker.js +125 -0
- package/dist/registry.d.ts +30 -28
- package/dist/registry.js +446 -413
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/actor-labels.js +1 -1
- package/dist/routes/connect.js +1 -1
- package/dist/routes/dispatch.js +103 -0
- package/dist/routes/mcp.js +170 -79
- package/dist/routes/oauth.js +3 -1
- package/dist/routes/operator.js +2 -2
- package/dist/routes/shared.d.ts +5 -4
- package/dist/routes/shared.js +244 -177
- package/dist/routes/skills.js +10 -8
- package/dist/routes/ui-config.js +27 -3
- package/dist/routes/ui-data.js +29 -22
- package/dist/routes/ui.js +1 -1
- package/dist/runtime/call-admission.js +0 -26
- package/dist/runtime/call-entry.js +30 -0
- package/dist/runtime/call.js +556 -0
- package/dist/runtime/connector-scope.js +7 -0
- package/dist/runtime/credential-probe.js +34 -0
- package/dist/runtime/executor.js +40 -0
- package/dist/runtime/native-storage.js +63 -0
- package/dist/runtime/registry.js +27 -0
- package/dist/runtime/request-scope.js +72 -0
- package/dist/runtime/run.js +15 -7
- package/dist/runtime/shared-read.js +34 -5
- package/dist/runtime/storage.js +34 -21
- package/dist/sent-secrets.d.ts +194 -37
- package/dist/sent-secrets.js +1743 -340
- package/dist/server.js +5 -56
- package/dist/skills.js +330 -224
- package/dist/sqlite.js +15 -14
- package/dist/storage/d1-copy.js +255 -0
- package/dist/storage/d1-driver.js +15 -0
- package/dist/storage/keys.js +28 -0
- package/dist/storage/sql-driver.js +88 -0
- package/dist/storage/sql-native.js +544 -0
- package/dist/storage/sql-schema.d.ts +6 -0
- package/dist/storage/sql-schema.js +15 -0
- package/dist/storage/sql.d.ts +14 -20
- package/dist/storage/sql.js +29 -535
- package/dist/timeout.js +0 -26
- package/dist/tool-safety.js +20 -10
- package/dist/types.d.ts +11 -99
- package/dist/upward.js +3 -0
- package/dist/usage-guide.js +3 -1
- package/dist/validate.d.ts +4 -2
- package/dist/validate.js +86 -9
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +312 -292
- package/dist/workspace-subject.js +5 -1
- package/dist/write-outcome.js +454 -34
- package/documentation/README.md +27 -7
- package/documentation/architecture.md +2550 -186
- package/documentation/auth.md +821 -98
- package/documentation/code-mode.md +56 -21
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +144 -105
- package/documentation/meta-tools.md +411 -34
- package/documentation/operating.md +28 -4
- package/documentation/operator-tests.md +11 -2
- package/documentation/operator-ui.md +103 -33
- package/documentation/provider-auth-migration.md +38 -63
- package/documentation/provider-migration-0.29.md +10 -5
- package/documentation/provider-migration-0.35.md +975 -0
- package/documentation/providers.md +965 -0
- package/examples/worker/AGENTS.md +23 -9
- package/examples/worker/README.md +254 -135
- package/examples/worker/alchemy.run.ts +116 -0
- package/examples/worker/gitignore +10 -0
- package/examples/worker/src/connecta.config.ts +23 -21
- package/examples/worker/wrangler.jsonc +14 -5
- package/guides/connecting-agents.md +157 -0
- package/guides/how-it-works.md +156 -0
- package/guides/safety-and-trust.md +153 -0
- package/package.json +27 -42
- package/templates/node/.env.example +3 -0
- package/templates/node/README.md +22 -2
- package/templates/node/docker-compose.yml +1 -0
- package/templates/node/package.json +3 -2
- package/templates/node/src/connecta.config.ts +8 -0
- package/dist/catalog-drift.d.ts +0 -134
- package/dist/catalog-drift.js +0 -493
- package/dist/providers/_shared/request-token.js +0 -83
- package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
- package/dist/providers/_shared/rest/tools.d.ts +0 -141
- package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
- package/dist/providers/basecamp/index.d.ts +0 -43
- package/dist/providers/basecamp/index.js +0 -997
- package/dist/providers/basecamp/skill.generated.js +0 -9
- package/dist/providers/cloudflare/rest.d.ts +0 -37
- package/dist/providers/cloudflare/rest.js +0 -1078
- package/dist/providers/github/hosted.js +0 -218
- package/dist/providers/github/rest.js +0 -321
- package/dist/providers/infisical/index.d.ts +0 -7
- package/dist/providers/infisical/index.js +0 -713
- package/dist/providers/infisical/skill.generated.js +0 -8
- package/dist/providers/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -352
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -57
- package/dist/providers/mixpanel/index.js +0 -468
- package/dist/providers/mixpanel/operations.js +0 -20
- package/dist/providers/mixpanel/rest.js +0 -603
- package/dist/providers/mixpanel/skill.generated.js +0 -10
- package/dist/providers/mixpanel/value-safety.js +0 -16
- package/dist/providers/notion/index.d.ts +0 -65
- package/dist/providers/notion/index.js +0 -368
- package/dist/providers/notion/openapi.generated.js +0 -75
- package/dist/providers/notion/rest.d.ts +0 -24
- package/dist/providers/notion/rest.js +0 -1226
- package/dist/providers/notion/skill.generated.js +0 -11
- package/dist/providers/notion/value-safety.js +0 -56
- package/dist/providers/revenuecat/index.d.ts +0 -49
- package/dist/providers/revenuecat/index.js +0 -557
- package/dist/providers/revenuecat/skill.generated.js +0 -11
- package/dist/providers/stripe/rest.d.ts +0 -14
- package/dist/providers/stripe/rest.js +0 -402
- package/dist/providers/vercel/rest.d.ts +0 -20
- package/dist/providers/vercel/rest.js +0 -1020
- package/dist/providers/wispr-flow/index.d.ts +0 -14
- package/dist/providers/wispr-flow/index.js +0 -117
- package/dist/providers/wispr-flow/skill.generated.js +0 -8
- /package/dist/providers/github/{key.js → lib/key.js} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const stores = [];
|
|
2
|
+
/** Keep `store`'s entry for a value on every redacted copy of that value. */
|
|
3
|
+
export function followRedactedCopies(store) {
|
|
4
|
+
stores.push(store);
|
|
5
|
+
return store;
|
|
6
|
+
}
|
|
7
|
+
/** `to`, a redacted copy of `from`, takes every registered fact about `from`. */
|
|
8
|
+
export function redactedCopyOf(from, to) {
|
|
9
|
+
for (const store of stores) {
|
|
10
|
+
if (!store.has(from))
|
|
11
|
+
continue;
|
|
12
|
+
if (store instanceof WeakMap)
|
|
13
|
+
store.set(to, store.get(from));
|
|
14
|
+
else
|
|
15
|
+
store.add(to);
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
}
|
|
19
|
+
// Error classes whose instances' `name` redaction keeps whatever was sent, by identity: the
|
|
20
|
+
// built-in errors, DOMException, and connecta's and the pinned MCP SDK's own classes, each
|
|
21
|
+
// registered with literals beside its class. Any other name an error carries, including one a
|
|
22
|
+
// custom class gives itself, is checked like other text.
|
|
23
|
+
const errorNames = new Map();
|
|
24
|
+
/** Keep `names` as the `name` of `ctor`'s instances and its subclasses'. */
|
|
25
|
+
export function keepErrorName(ctor, ...names) {
|
|
26
|
+
errorNames.set(ctor.prototype, new Set(names));
|
|
27
|
+
}
|
|
28
|
+
/** Whether a registered class on `prototype`'s chain gives its instances `name`. */
|
|
29
|
+
export function keptErrorName(prototype, name) {
|
|
30
|
+
for (let at = prototype; at; at = Object.getPrototypeOf(at))
|
|
31
|
+
if (errorNames.get(at)?.has(name))
|
|
32
|
+
return true;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
for (const [ctor, name] of [
|
|
36
|
+
[Error, "Error"],
|
|
37
|
+
[TypeError, "TypeError"],
|
|
38
|
+
[RangeError, "RangeError"],
|
|
39
|
+
[SyntaxError, "SyntaxError"],
|
|
40
|
+
[ReferenceError, "ReferenceError"],
|
|
41
|
+
[EvalError, "EvalError"],
|
|
42
|
+
[URIError, "URIError"],
|
|
43
|
+
[AggregateError, "AggregateError"],
|
|
44
|
+
])
|
|
45
|
+
keepErrorName(ctor, name);
|
|
46
|
+
if (typeof DOMException === "function")
|
|
47
|
+
keepErrorName(DOMException, "DOMException", "AbortError", "TimeoutError");
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// The placeholder redaction leaves where it removed a value. Sent-secret redaction (sent-secrets.ts)
|
|
2
|
+
// and REST value safety (providers/_shared/rest/value-safety.ts) write the same text.
|
|
3
|
+
/** What a removed value reads as. */
|
|
4
|
+
export const REDACTED = "[redacted]";
|
|
5
|
+
/**
|
|
6
|
+
* Whether redaction altered a value: it carries the placeholder. The provider kit redacts sent
|
|
7
|
+
* secrets from every value of a vendor body before result safety reads it, so a rule that decides
|
|
8
|
+
* on a value (a type discriminator, a record's label or type, a URL's scheme or parameter names,
|
|
9
|
+
* a Content-Type) can find the placeholder where the vendor wrote what the rule matches.
|
|
10
|
+
* Such a decision takes its most protective outcome (#703).
|
|
11
|
+
*/
|
|
12
|
+
export function redactionAltered(value) {
|
|
13
|
+
return typeof value === "string" && value.includes(REDACTED);
|
|
14
|
+
}
|
|
15
|
+
// Numeric references may omit `;`; named HTML references have at most 31 characters. Require
|
|
16
|
+
// their `;` so a real query separator such as `&=value` remains a separator. Legacy `amp`
|
|
17
|
+
// may omit its semicolon only before the `#` of a nested numeric reference.
|
|
18
|
+
const CHARACTER_REFERENCE = /(?:#([0-9]+);?|#x([0-9a-f]+);?|([a-z][a-z0-9]{1,30});|(amp)(?=#))/iy;
|
|
19
|
+
// Named references whose decoded characters all belong to a credential's alphabet (`fjlig` is `fj`).
|
|
20
|
+
const CREDENTIAL_REFERENCE = /^(?:plus|sol|equals|percnt|lowbar|underbar|fjlig)$/;
|
|
21
|
+
/**
|
|
22
|
+
* The end of a character reference at `at`, or `at` itself. A reference is value data, including
|
|
23
|
+
* one spelling a delimiter. Decode only to find nested-reference boundaries and, when
|
|
24
|
+
* `credentialOnly`, to require credential data or an ampersand. No decoded text is returned.
|
|
25
|
+
* Known signing values read possible named references fail-closed without a browser entity table.
|
|
26
|
+
* Each successful read advances over disjoint source characters.
|
|
27
|
+
*/
|
|
28
|
+
export function characterReferenceEnd(text, at, credentialOnly = false) {
|
|
29
|
+
if (text.charCodeAt(at) !== 0x26)
|
|
30
|
+
return at;
|
|
31
|
+
return referenceBodyEnd(text, at + 1, at, credentialOnly);
|
|
32
|
+
}
|
|
33
|
+
/** A numeric reference body whose leading characters redaction may have taken, including its `&`. */
|
|
34
|
+
export function bareReferenceEnd(text, at, credentialOnly = false) {
|
|
35
|
+
if (text.charCodeAt(at) !== 0x23 || !/[0-9x]/i.test(text[at + 1] ?? ""))
|
|
36
|
+
return at;
|
|
37
|
+
return referenceBodyEnd(text, at, at, credentialOnly);
|
|
38
|
+
}
|
|
39
|
+
function referenceBodyEnd(text, from, at, credentialOnly) {
|
|
40
|
+
let end = at;
|
|
41
|
+
let readable = false;
|
|
42
|
+
while (from < text.length) {
|
|
43
|
+
CHARACTER_REFERENCE.lastIndex = from;
|
|
44
|
+
const reference = CHARACTER_REFERENCE.exec(text);
|
|
45
|
+
if (!reference)
|
|
46
|
+
break;
|
|
47
|
+
end = CHARACTER_REFERENCE.lastIndex;
|
|
48
|
+
const name = (reference[3] ?? reference[4])?.toLowerCase();
|
|
49
|
+
const code = reference[1] !== undefined
|
|
50
|
+
? Number(reference[1])
|
|
51
|
+
: reference[2] !== undefined
|
|
52
|
+
? Number.parseInt(reference[2], 16)
|
|
53
|
+
: name === "amp"
|
|
54
|
+
? 0x26
|
|
55
|
+
: -1;
|
|
56
|
+
const ampersand = code === 0x26;
|
|
57
|
+
readable = ampersand || credentialUnit(code) || (name !== undefined && CREDENTIAL_REFERENCE.test(name));
|
|
58
|
+
if (!readable && name === undefined && text.charCodeAt(end - 1) !== 0x3b)
|
|
59
|
+
readable = prefixSpellsCredential(reference[1] ?? reference[2], reference[1] === undefined ? 16 : 10);
|
|
60
|
+
if (!ampersand)
|
|
61
|
+
break;
|
|
62
|
+
from = end;
|
|
63
|
+
}
|
|
64
|
+
return credentialOnly && !readable ? at : end;
|
|
65
|
+
}
|
|
66
|
+
// Without its `;`, a numeric reference's digits may run into the value's next characters (`/`
|
|
67
|
+
// then `9` reads as `ǟ`), so a short digit prefix spelling credential data counts.
|
|
68
|
+
function prefixSpellsCredential(digits, radix) {
|
|
69
|
+
let at = 0;
|
|
70
|
+
while (digits.charCodeAt(at) === 0x30)
|
|
71
|
+
at++;
|
|
72
|
+
const limit = radix === 16 ? 2 : 3;
|
|
73
|
+
for (let length = 1; length <= limit && at + length <= digits.length; length++)
|
|
74
|
+
if (credentialUnit(Number.parseInt(digits.slice(at, at + length), radix)))
|
|
75
|
+
return true;
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A credential's data: the base64 and base64url alphabets (letters, digits, `+`, `/`, `=`, `-`,
|
|
80
|
+
* `_`) and `%` escapes. A remainder of `+/` alone is still the end of a base64 value.
|
|
81
|
+
*/
|
|
82
|
+
function credentialUnit(code) {
|
|
83
|
+
return ((code >= 0x30 && code <= 0x39) ||
|
|
84
|
+
(code >= 0x41 && code <= 0x5a) ||
|
|
85
|
+
(code >= 0x61 && code <= 0x7a) ||
|
|
86
|
+
code === 0x2b ||
|
|
87
|
+
code === 0x2f ||
|
|
88
|
+
code === 0x3d ||
|
|
89
|
+
code === 0x2d ||
|
|
90
|
+
code === 0x5f ||
|
|
91
|
+
code === 0x25);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The text right after the placeholder at `at` that may be the rest of a credential whose public
|
|
95
|
+
* prefix redaction took (#703): up to the first unit `ends` accepts, reading later placeholders
|
|
96
|
+
* whole so none is split. Redaction can take `sk_live_`, `whsec_`, `Bearer `, or a signing
|
|
97
|
+
* parameter's name and `=`, leaving what follows; with that prefix known, any remainder rebuilds
|
|
98
|
+
* the credential, however short or encoded, so `readable` holds whenever it carries any base64 or
|
|
99
|
+
* base64url character, a `%` escape or a reference spelling credential data or an ampersand.
|
|
100
|
+
* Other references end the inferred remainder. Other punctuation alone (`.`, `,`, `;`, `!`) is no
|
|
101
|
+
* credential's data. References, including bare numeric bodies, are read before consulting `ends`.
|
|
102
|
+
* The run still ends where `ends` says a value does. One forward pass.
|
|
103
|
+
*/
|
|
104
|
+
export function splitRemainder(text, at, ends) {
|
|
105
|
+
if (!redactionAltered(text.slice(at, at + REDACTED.length)))
|
|
106
|
+
return { end: at, readable: false };
|
|
107
|
+
let end = at + REDACTED.length;
|
|
108
|
+
let readable = false;
|
|
109
|
+
while (end < text.length) {
|
|
110
|
+
const reference = Math.max(characterReferenceEnd(text, end, true), bareReferenceEnd(text, end, true));
|
|
111
|
+
if (text.startsWith(REDACTED, end))
|
|
112
|
+
end += REDACTED.length;
|
|
113
|
+
else if (reference > end) {
|
|
114
|
+
readable = true;
|
|
115
|
+
end = reference;
|
|
116
|
+
}
|
|
117
|
+
else if (ends(text, end))
|
|
118
|
+
break;
|
|
119
|
+
else {
|
|
120
|
+
readable ||= credentialUnit(text.charCodeAt(end));
|
|
121
|
+
end++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { end, readable };
|
|
125
|
+
}
|
package/dist/registry.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CatalogDriftActivityContext } from "./activity.js";
|
|
2
|
-
import type { CredentialVault } from "./credential-contract.js";
|
|
3
|
-
import type { Connector, ConnectorContext, ConnectorStatus, KVStorage, Logger, ToolDef } from "./types.js";
|
|
4
2
|
import { type CallAdmissionPermit, type ConnectorCallAdmissionSnapshot } from "./call-admission.js";
|
|
5
3
|
import { type ConnectorCaller } from "./connector-caller.js";
|
|
4
|
+
import type { CredentialVault } from "./credential-contract.js";
|
|
5
|
+
import type { Connector, ConnectorContext, ConnectorStatus, KVStorage, Logger, ToolDef } from "./types.js";
|
|
6
6
|
/**
|
|
7
7
|
* Split `"<connectorId>.<toolName>"` on the first dot. Connector ids contain
|
|
8
8
|
* no dots, so a downstream tool name may. Exported because an address that
|
|
@@ -45,8 +45,10 @@ export declare function resolveMaxResultBytes(value: number | undefined, inherit
|
|
|
45
45
|
export interface RegistryOptions {
|
|
46
46
|
publicUrl?: string | undefined;
|
|
47
47
|
oauthClientName?: string | undefined;
|
|
48
|
-
classification?: Readonly<Record<string, Readonly<Record<string, "read" | "write">>>> | undefined;
|
|
48
|
+
classification?: Readonly<Record<string, Readonly<Record<string, "read" | "write" | "hidden">>>> | undefined;
|
|
49
49
|
storage: KVStorage;
|
|
50
|
+
/** Internal deployment root, preserved when a personal registry partitions storage. */
|
|
51
|
+
rootStorage?: KVStorage;
|
|
50
52
|
catalogStorage?: KVStorage;
|
|
51
53
|
logger: Logger;
|
|
52
54
|
credentialVault?: CredentialVault | undefined;
|
|
@@ -87,6 +89,13 @@ export interface ResultIdentity {
|
|
|
87
89
|
endpoint: string;
|
|
88
90
|
origin: string | null;
|
|
89
91
|
}
|
|
92
|
+
export interface ProgramResultDependency {
|
|
93
|
+
/** Catalog metadata needs visibility, not permission to invoke a write. */
|
|
94
|
+
access?: "catalog";
|
|
95
|
+
connector: string;
|
|
96
|
+
tool?: string;
|
|
97
|
+
classification: "read" | "write";
|
|
98
|
+
}
|
|
90
99
|
export interface RegistryView {
|
|
91
100
|
credentialUiAvailable(): boolean;
|
|
92
101
|
/** Deployment-wide result-size cap threaded to the meta-tools. */
|
|
@@ -111,8 +120,8 @@ export interface RegistryView {
|
|
|
111
120
|
}): Promise<CallAdmissionPermit>;
|
|
112
121
|
resultsStorage(): KVStorage;
|
|
113
122
|
resultIdentity(): ResultIdentity;
|
|
114
|
-
/**
|
|
115
|
-
recheckResultAccess(
|
|
123
|
+
/** One validation pass: admit once, then check every dependency under that scope. */
|
|
124
|
+
recheckResultAccess(dependencies: readonly ProgramResultDependency[], classification: "read" | "write", signal?: AbortSignal): Promise<boolean>;
|
|
116
125
|
/** Reserve deployment-wide capacity before writing a paging envelope's chunks. */
|
|
117
126
|
stashResult(id: string, chunks: readonly string[], ttlSeconds: number): Promise<boolean>;
|
|
118
127
|
/** Local declared-vs-stored credential mismatch, with no downstream I/O. */
|
|
@@ -124,6 +133,8 @@ export interface RegistryView {
|
|
|
124
133
|
/** Age of the complete cached catalog; null for static or unobserved catalogs. */
|
|
125
134
|
catalogAgeMs(id: string): number | null;
|
|
126
135
|
statusFor(id: string, baseUrl: string, requestScope?: object, callOptions?: ConnectorOperationOptions): Promise<ConnectorStatus>;
|
|
136
|
+
/** Rebuild a status with this partition's latest bounded observations, without probing. */
|
|
137
|
+
withCatalogObservations(id: string, baseUrl: string, status: ConnectorStatus): ConnectorStatus;
|
|
127
138
|
invalidateStored(id: string): Promise<void>;
|
|
128
139
|
/** Bind returned OAuth state to its initiating user for either owner scope. */
|
|
129
140
|
bindOAuthHandoff(id: string, authorizationUrl: string, principalKey?: string): Promise<void>;
|
|
@@ -141,7 +152,7 @@ export interface RegistryScope {
|
|
|
141
152
|
principalKey?: string;
|
|
142
153
|
endpoint?: string;
|
|
143
154
|
origin?: string | null;
|
|
144
|
-
currentResultAccess?:
|
|
155
|
+
currentResultAccess?: RegistryView["recheckResultAccess"];
|
|
145
156
|
/** The admitted caller, readable only by built-in connectors; see connector-caller.ts. */
|
|
146
157
|
caller?: ConnectorCaller;
|
|
147
158
|
}
|
|
@@ -159,13 +170,9 @@ export declare class Registry implements RegistryView {
|
|
|
159
170
|
private readonly catalogObservedAt;
|
|
160
171
|
/** Last payload-free agent catalog access in this runtime. */
|
|
161
172
|
private readonly catalogAccess;
|
|
162
|
-
/**
|
|
163
|
-
private
|
|
164
|
-
|
|
165
|
-
* Schema digest verification per reviewed facts array. Only the registry's
|
|
166
|
-
* own deep-frozen arrays are keys, so an entry stays true while they live.
|
|
167
|
-
*/
|
|
168
|
-
private readonly verifiedFacts;
|
|
173
|
+
/** Bounded tokens isolating count-only observations by catalog identity. */
|
|
174
|
+
private readonly catalogObservationPartitions;
|
|
175
|
+
private readonly overrideWarningCatalogs;
|
|
169
176
|
private readonly observedOutputSchemas;
|
|
170
177
|
/** Result-size guard cap threaded to the meta-tools. */
|
|
171
178
|
readonly maxResultBytes: number;
|
|
@@ -220,12 +227,10 @@ export declare class Registry implements RegistryView {
|
|
|
220
227
|
}): Promise<CallAdmissionPermit>;
|
|
221
228
|
/** Connector totals across root and personal controllers; health removes ids. */
|
|
222
229
|
callAdmissionSnapshot(): Record<string, ConnectorCallAdmissionSnapshot>;
|
|
223
|
-
/**
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
*/
|
|
228
|
-
private catalogDriftOf;
|
|
230
|
+
/** The admitted identity fields used by both catalog caching and reporting. */
|
|
231
|
+
private catalogPartition;
|
|
232
|
+
/** Bounded, in-memory tokens; no principal or catalog data is persisted. */
|
|
233
|
+
private catalogObservationPartition;
|
|
229
234
|
/** Reject queued/future downstream admission; active permits release safely. */
|
|
230
235
|
closeCallAdmission(): void;
|
|
231
236
|
/**
|
|
@@ -252,7 +257,7 @@ export declare class Registry implements RegistryView {
|
|
|
252
257
|
* connector's namespace. Backs connecta.result.
|
|
253
258
|
*/
|
|
254
259
|
resultIdentity(): ResultIdentity;
|
|
255
|
-
recheckResultAccess(
|
|
260
|
+
recheckResultAccess(_dependencies: readonly ProgramResultDependency[], _classification: "read" | "write", _signal?: AbortSignal): Promise<boolean>;
|
|
256
261
|
resultsStorage(): KVStorage;
|
|
257
262
|
credentialUiAvailable(): boolean;
|
|
258
263
|
bindOAuthHandoff(id: string, authorizationUrl: string, principalKey?: string): Promise<void>;
|
|
@@ -268,18 +273,13 @@ export declare class Registry implements RegistryView {
|
|
|
268
273
|
private loadDownstreamTools;
|
|
269
274
|
/** The served catalog excludes control-character names; raw caches stay complete. */
|
|
270
275
|
private acceptToolNames;
|
|
271
|
-
/** Observe intake once, never while serving an older cached listing. */
|
|
272
|
-
private observeDroppedToolNames;
|
|
273
276
|
/**
|
|
274
277
|
* One connector's catalog as served: the cached downstream facts, classified
|
|
275
|
-
* on every read by
|
|
276
|
-
*
|
|
277
|
-
* stale verdict — from an older review, an older release, or a stale
|
|
278
|
-
* fallback — and nothing a caller or decorator does to a served tool reaches
|
|
279
|
-
* the next read.
|
|
278
|
+
* on every read by annotations and deployment overrides, into fresh objects.
|
|
279
|
+
* No cache or caller mutation can carry a stale verdict into the next read.
|
|
280
280
|
*/
|
|
281
281
|
private loadTools;
|
|
282
|
-
private
|
|
282
|
+
private publishTool;
|
|
283
283
|
/** Construction-only view for the secret-free static config description. */
|
|
284
284
|
describeStaticTools(id: string): ToolDef[] | undefined;
|
|
285
285
|
private validateClassification;
|
|
@@ -287,6 +287,8 @@ export declare class Registry implements RegistryView {
|
|
|
287
287
|
credentialDriftFor(id: string): Promise<string | undefined>;
|
|
288
288
|
/** Age of a complete cache entry; reads never refresh it. */
|
|
289
289
|
catalogAgeMs(id: string): number | null;
|
|
290
|
+
/** Pure lookup shared by status probes and operator catalog refreshes. */
|
|
291
|
+
withCatalogObservations(id: string, _baseUrl: string, status: ConnectorStatus, _scope?: RegistryScope): ConnectorStatus;
|
|
290
292
|
/** Best-effort connector status for the operator UI. */
|
|
291
293
|
statusFor(id: string, baseUrl: string, requestScope?: object, callOptions?: ConnectorOperationOptions, scope?: RegistryScope): Promise<ConnectorStatus>;
|
|
292
294
|
/** Rotate the storage generation; in-flight old readers cannot republish it. */
|