@zackbart/connecta 0.34.1 → 0.36.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 +418 -0
- package/README.md +65 -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 +2044 -1161
- 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 +751 -281
- 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 +29 -7
- package/dist/connectors/api-connector.js +145 -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/remote-mcp.d.ts +10 -30
- package/dist/connectors/remote-mcp.js +955 -563
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +3 -1
- package/dist/describe-config.js +2 -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 +227 -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 +379 -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 +218 -85
- 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 +531 -406
- 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/contract.d.ts +8 -3
- package/dist/operator-ui/generated.js +4 -4
- package/dist/operator-ui/model.d.ts +2 -3
- 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 +65 -31
- package/dist/provider.js +116 -39
- package/dist/providers/_shared/google/hatch.js +91 -0
- package/dist/providers/_shared/google/kit.js +427 -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 +6 -210
- package/dist/providers/_shared/google/workspace.js +6 -425
- package/dist/providers/_shared/rest/compact-index.js +86 -0
- package/dist/providers/_shared/rest/kit.js +146 -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/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 +1 -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 +15 -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 +5 -22
- package/dist/providers/cloudflare/index.js +79 -197
- 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 +4 -3
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
- 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 +801 -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 +1023 -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 +1 -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 +4 -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/quickbooks/api.js +299 -0
- package/dist/providers/quickbooks/index.d.ts +13 -0
- package/dist/providers/quickbooks/index.js +93 -0
- package/dist/providers/quickbooks/lib/query.js +118 -0
- package/dist/providers/quickbooks/lib/writes.js +168 -0
- package/dist/providers/quickbooks/safety.js +222 -0
- package/dist/providers/quickbooks/skill.generated.js +5 -0
- package/dist/providers/quickbooks/tools.js +117 -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 +733 -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 +5 -27
- package/dist/providers/stripe/index.js +74 -210
- 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 -11
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +17 -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 +9 -25
- package/dist/providers/vercel/index.js +65 -260
- 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 +10 -5
- package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
- 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 +21 -15
- package/dist/registry.js +409 -376
- 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 +6 -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 +21 -20
- 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 +552 -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 +322 -223
- 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 +9 -109
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +0 -1
- 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 +28 -7
- package/documentation/architecture.md +2409 -255
- package/documentation/auth.md +867 -114
- package/documentation/code-mode.md +49 -16
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +129 -144
- package/documentation/meta-tools.md +409 -32
- package/documentation/operating.md +27 -3
- package/documentation/operator-tests.md +3 -0
- package/documentation/operator-ui.md +84 -48
- package/documentation/provider-auth-migration.md +16 -63
- package/documentation/provider-migration-0.29.md +10 -5
- package/documentation/provider-migration-0.35.md +975 -0
- package/documentation/providers.md +1347 -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 +30 -50
- 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 -138
- package/dist/catalog-drift.js +0 -578
- package/dist/operator-ui/agents.d.ts +0 -74
- package/dist/operator-ui/agents.js +0 -104
- package/dist/operator-ui/config-summary.js +0 -565
- package/dist/operator-ui/connection-map.js +0 -376
- package/dist/operator-ui/endpoints.js +0 -221
- package/dist/operator-ui/fix-prompts.d.ts +0 -18
- package/dist/operator-ui/fix-prompts.js +0 -87
- package/dist/operator-ui/health.js +0 -52
- package/dist/operator-ui/member-page.js +0 -97
- package/dist/operator-ui/overview.js +0 -123
- package/dist/operator-ui/setup-commands.js +0 -51
- package/dist/operator-ui/view.d.ts +0 -401
- package/dist/operator-ui/view.js +0 -705
- package/dist/providers/_shared/request-token.js +0 -83
- package/dist/providers/_shared/rest/dispatch.js +0 -41
- 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/tools.js +0 -569
- package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
- package/dist/providers/basecamp/index.d.ts +0 -45
- 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 -1097
- 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/intercom/index.d.ts +0 -24
- package/dist/providers/intercom/index.js +0 -121
- package/dist/providers/intercom/skill.generated.js +0 -8
- package/dist/providers/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -537
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -59
- package/dist/providers/mixpanel/index.js +0 -472
- 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 -67
- 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 -51
- package/dist/providers/revenuecat/index.js +0 -697
- 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. */
|
|
@@ -143,7 +152,7 @@ export interface RegistryScope {
|
|
|
143
152
|
principalKey?: string;
|
|
144
153
|
endpoint?: string;
|
|
145
154
|
origin?: string | null;
|
|
146
|
-
currentResultAccess?:
|
|
155
|
+
currentResultAccess?: RegistryView["recheckResultAccess"];
|
|
147
156
|
/** The admitted caller, readable only by built-in connectors; see connector-caller.ts. */
|
|
148
157
|
caller?: ConnectorCaller;
|
|
149
158
|
}
|
|
@@ -163,6 +172,7 @@ export declare class Registry implements RegistryView {
|
|
|
163
172
|
private readonly catalogAccess;
|
|
164
173
|
/** Bounded tokens isolating count-only observations by catalog identity. */
|
|
165
174
|
private readonly catalogObservationPartitions;
|
|
175
|
+
private readonly overrideWarningCatalogs;
|
|
166
176
|
private readonly observedOutputSchemas;
|
|
167
177
|
/** Result-size guard cap threaded to the meta-tools. */
|
|
168
178
|
readonly maxResultBytes: number;
|
|
@@ -221,7 +231,6 @@ export declare class Registry implements RegistryView {
|
|
|
221
231
|
private catalogPartition;
|
|
222
232
|
/** Bounded, in-memory tokens; no principal or catalog data is persisted. */
|
|
223
233
|
private catalogObservationPartition;
|
|
224
|
-
private catalogDriftOf;
|
|
225
234
|
/** Reject queued/future downstream admission; active permits release safely. */
|
|
226
235
|
closeCallAdmission(): void;
|
|
227
236
|
/**
|
|
@@ -248,7 +257,7 @@ export declare class Registry implements RegistryView {
|
|
|
248
257
|
* connector's namespace. Backs connecta.result.
|
|
249
258
|
*/
|
|
250
259
|
resultIdentity(): ResultIdentity;
|
|
251
|
-
recheckResultAccess(
|
|
260
|
+
recheckResultAccess(_dependencies: readonly ProgramResultDependency[], _classification: "read" | "write", _signal?: AbortSignal): Promise<boolean>;
|
|
252
261
|
resultsStorage(): KVStorage;
|
|
253
262
|
credentialUiAvailable(): boolean;
|
|
254
263
|
bindOAuthHandoff(id: string, authorizationUrl: string, principalKey?: string): Promise<void>;
|
|
@@ -266,14 +275,11 @@ export declare class Registry implements RegistryView {
|
|
|
266
275
|
private acceptToolNames;
|
|
267
276
|
/**
|
|
268
277
|
* One connector's catalog as served: the cached downstream facts, classified
|
|
269
|
-
* on every read by
|
|
270
|
-
*
|
|
271
|
-
* stale verdict — from an older review, an older release, or a stale
|
|
272
|
-
* fallback — and nothing a caller or decorator does to a served tool reaches
|
|
273
|
-
* 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.
|
|
274
280
|
*/
|
|
275
281
|
private loadTools;
|
|
276
|
-
private
|
|
282
|
+
private publishTool;
|
|
277
283
|
/** Construction-only view for the secret-free static config description. */
|
|
278
284
|
describeStaticTools(id: string): ToolDef[] | undefined;
|
|
279
285
|
private validateClassification;
|
|
@@ -282,7 +288,7 @@ export declare class Registry implements RegistryView {
|
|
|
282
288
|
/** Age of a complete cache entry; reads never refresh it. */
|
|
283
289
|
catalogAgeMs(id: string): number | null;
|
|
284
290
|
/** Pure lookup shared by status probes and operator catalog refreshes. */
|
|
285
|
-
withCatalogObservations(id: string,
|
|
291
|
+
withCatalogObservations(id: string, _baseUrl: string, status: ConnectorStatus, _scope?: RegistryScope): ConnectorStatus;
|
|
286
292
|
/** Best-effort connector status for the operator UI. */
|
|
287
293
|
statusFor(id: string, baseUrl: string, requestScope?: object, callOptions?: ConnectorOperationOptions, scope?: RegistryScope): Promise<ConnectorStatus>;
|
|
288
294
|
/** Rotate the storage generation; in-flight old readers cannot republish it. */
|