@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
|
@@ -1,57 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google Workspace access as the person calling, with no per-user consent:
|
|
3
|
-
* a service account with domain-wide delegation mints a token *as* the user
|
|
4
|
-
* the deployment maps the admitted caller to. The foundation each Workspace
|
|
5
|
-
* product provider (`gmail()` first) builds on; never its own export.
|
|
6
|
-
*
|
|
7
|
-
* Whose account. `ConnectorContext` carries no identity, and a deployment's
|
|
8
|
-
* own connector never learns its caller (`src/connector-caller.ts`). A
|
|
9
|
-
* maintained Workspace provider is the second sanctioned reader of that
|
|
10
|
-
* channel (PRINCIPLES.md INV-3, #678): deployment config supplies
|
|
11
|
-
* `subject`, a function from the admitted `AuthenticatedIdentity` to a
|
|
12
|
-
* Workspace address, and the provider reads the identity core attached beside
|
|
13
|
-
* the context. An agent, which has no Workspace account, acts instead as the
|
|
14
|
-
* `owner` of the pool it came through, which core copies from that pool's
|
|
15
|
-
* config beside the identity; the mapping never sees an agent. In a pool
|
|
16
|
-
* without an owner the connector is absent for agents (core's scoped
|
|
17
|
-
* registry view hides it), and this provider still fails `auth_required` if
|
|
18
|
-
* one reaches it anyway (decisions/0006). A fixed
|
|
19
|
-
* `subject` address is every caller's, owners aside. No tool argument,
|
|
20
|
-
* header, or program can name the subject — every product's base URL is
|
|
21
|
-
* confined beneath `users/me`, or its product's equivalent, so the token's
|
|
22
|
-
* subject is the only account a request reaches.
|
|
23
|
-
* A call with no admitted caller, one an open deployment admitted without
|
|
24
|
-
* authentication (the mapping is never asked about it), or one the mapping
|
|
25
|
-
* answers `undefined` for, fails `auth_required` before anything leaves the
|
|
26
|
-
* host. Catalogs need no subject: tools are static.
|
|
27
|
-
*
|
|
28
|
-
* A product builds on three calls: `workspaceConnection(factory, options)` at
|
|
29
|
-
* construction, `googleWorkspaceClient({...})` once, and the client's `json`,
|
|
30
|
-
* `bytes`, or `text` per request — plus `googleReasonsOf(error)` where a
|
|
31
|
-
* product must decide on a Google reason the shared mapping leaves generic.
|
|
32
|
-
* Nothing else here is the products' to touch.
|
|
33
|
-
*
|
|
34
|
-
* Setup, once per Workspace, shared by every product:
|
|
35
|
-
*
|
|
36
|
-
* 1. In a Google Cloud project, enable each product's API (Gmail API, Google
|
|
37
|
-
* Drive API, …).
|
|
38
|
-
* 2. Create a service account. It needs no IAM role: delegation, not project
|
|
39
|
-
* permission, is what reaches user data.
|
|
40
|
-
* 3. Create a JSON key for it. An organization policy
|
|
41
|
-
* (`iam.disableServiceAccountKeyCreation`, on by default for newer
|
|
42
|
-
* organizations) may refuse; an org policy administrator can override it
|
|
43
|
-
* for this project alone.
|
|
44
|
-
* 4. Copy the service account's numeric client ID (Details → Advanced
|
|
45
|
-
* settings, or the key's `client_id`).
|
|
46
|
-
* 5. As a Workspace super admin: Admin console → Security → Access and data
|
|
47
|
-
* control → API controls → Manage Domain Wide Delegation → Add new, with
|
|
48
|
-
* that client ID and *exactly* the scopes each product provider lists, comma
|
|
49
|
-
* separated. A grant can take up to 24 hours to apply.
|
|
50
|
-
* 6. Pass the key to the provider from the deployment's secrets, and map the
|
|
51
|
-
* admitted identity to a Workspace address in `subject`. Give each pool
|
|
52
|
-
* agents use an `owner`, the address they act as there.
|
|
53
|
-
*/
|
|
54
|
-
import { type GuardedRequest } from "../../../connectors/guarded-fetch.js";
|
|
55
1
|
import type { AuthenticatedIdentity, ConnectorCallAdmissionPolicy, ConnectorContext } from "../../../types.js";
|
|
56
2
|
import { type GoogleServiceAccount, type ServiceAccountKey } from "./service-account.js";
|
|
57
3
|
export type { GoogleServiceAccount } from "./service-account.js";
|
|
@@ -146,11 +92,11 @@ export declare const GOOGLE_WORKSPACE_OPTIONS: import("../../../config-schema.js
|
|
|
146
92
|
};
|
|
147
93
|
instructions: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
148
94
|
title: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
149
|
-
readOnly: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
150
|
-
maxResultBytes: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
151
95
|
purpose: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
152
|
-
|
|
96
|
+
maxResultBytes: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
97
|
+
readOnly: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
153
98
|
baseUrl: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
99
|
+
subject: import("../../../config-schema.js").Field<unknown, unknown, true>;
|
|
154
100
|
};
|
|
155
101
|
};
|
|
156
102
|
/** The checked, construction-time half of {@link GoogleWorkspaceOptions}. */
|
|
@@ -162,157 +108,7 @@ export interface WorkspaceConnection {
|
|
|
162
108
|
/** Validate the shared options at construction; throws on a structural mistake. */
|
|
163
109
|
export declare function workspaceConnection(factory: string, options: GoogleWorkspaceOptions): WorkspaceConnection;
|
|
164
110
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* owner" for a mapping, or name a fixed subject (#837). Returns it unchanged.
|
|
168
|
-
*/
|
|
169
|
-
export declare function workspaceConnector<C extends object>(connection: WorkspaceConnection, connector: C): C;
|
|
170
|
-
/** How a product reads an HTTP 404 — see H11. */
|
|
171
|
-
type NotFoundMeaning = "absent" | "ambiguous";
|
|
172
|
-
/**
|
|
173
|
-
* Google's machine-readable reasons for a failure the shared client mapped:
|
|
174
|
-
* `errors[].reason`, `details[].reason`, and the canonical `status`, in that
|
|
175
|
-
* order, deduplicated, at most eight, and only tokens of `[A-Za-z0-9_.]` up to
|
|
176
|
-
* 64 characters — never a message or any other part of the payload. An empty
|
|
177
|
-
* array for anything else, including a failure that never reached Google.
|
|
178
|
-
*
|
|
179
|
-
* For a product that needs a decision the shared mapping does not make, such
|
|
180
|
-
* as Drive telling `cannotDownloadAbusiveFile` from another refusal. Classify
|
|
181
|
-
* on these, never on the error's message.
|
|
111
|
+
* The Workspace address this call acts as, resolved from config and the
|
|
112
|
+
* admitted caller only. Throws before any network call when there is none.
|
|
182
113
|
*/
|
|
183
|
-
export declare function
|
|
184
|
-
/**
|
|
185
|
-
* How far a failed request got, for a product that must decide whether its
|
|
186
|
-
* write may have landed:
|
|
187
|
-
*
|
|
188
|
-
* - `before-send`: nothing left connecta — no caller, no mapped account, a
|
|
189
|
-
* refused token, a local refusal. Nothing happened downstream.
|
|
190
|
-
* - `awaiting-response`: the request was sent and no HTTP status came back.
|
|
191
|
-
* Google may or may not have applied it.
|
|
192
|
-
* - `reading-body`: Google answered 2xx — it accepted the request — and the
|
|
193
|
-
* reply could not be used. A write probably applied.
|
|
194
|
-
* - `redirected`: Google answered 3xx, which is never followed. It shows
|
|
195
|
-
* neither that a write applied nor that it did not: outcome unknown.
|
|
196
|
-
* - `server-error`: Google answered a non-idempotent write with a 5xx,
|
|
197
|
-
* whatever reason it named. It may have committed before failing, so the
|
|
198
|
-
* outcome is unknown.
|
|
199
|
-
* - `refused`: Google answered with a 4xx, or a read or idempotent write
|
|
200
|
-
* with a 5xx. Nothing to repeat blindly: a 4xx applied nothing, and a
|
|
201
|
-
* repeated read or idempotent write is harmless.
|
|
202
|
-
*/
|
|
203
|
-
interface GoogleOutcome {
|
|
204
|
-
/** Whether the request left connecta for Google's API. */
|
|
205
|
-
readonly dispatched: boolean;
|
|
206
|
-
/** The HTTP status Google answered with, when one arrived. */
|
|
207
|
-
readonly status?: number;
|
|
208
|
-
readonly phase: "before-send" | "awaiting-response" | "reading-body" | "redirected" | "server-error" | "refused";
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* How far the request behind a failure from `json`, `bytes`, or `text` got —
|
|
212
|
-
* see {@link GoogleOutcome}. `undefined` for anything the client did not
|
|
213
|
-
* throw. Read it beside the error, the way `googleReasonsOf` is read; the
|
|
214
|
-
* error itself already carries the right retry verdict.
|
|
215
|
-
*/
|
|
216
|
-
export declare function googleOutcomeOf(error: unknown): GoogleOutcome | undefined;
|
|
217
|
-
/** What a Workspace product needs to reach its API as the calling user. */
|
|
218
|
-
export interface GoogleWorkspaceClientOptions {
|
|
219
|
-
/** Product name in messages: "Gmail", "Google Drive". */
|
|
220
|
-
provider: string;
|
|
221
|
-
/** The API's console name, for an "enable the API" message: "Gmail API". */
|
|
222
|
-
api: string;
|
|
223
|
-
/**
|
|
224
|
-
* Absolute base URL, confined to the delegated user's own resources — for
|
|
225
|
-
* Gmail, `…/gmail/v1/users/me` — so no path can address another account.
|
|
226
|
-
*/
|
|
227
|
-
baseUrl: string;
|
|
228
|
-
/** This product's scopes, and only these; the DWD grant must list them. */
|
|
229
|
-
scopes: readonly string[];
|
|
230
|
-
/** Response ceiling in bytes. */
|
|
231
|
-
maxResponseBytes: number;
|
|
232
|
-
/** H11: whether this API's 404 means absence or may hide a permission gap. */
|
|
233
|
-
notFound: NotFoundMeaning;
|
|
234
|
-
connection: WorkspaceConnection;
|
|
235
|
-
}
|
|
236
|
-
/** A non-JSON response body, read under the product's byte ceiling. */
|
|
237
|
-
interface GoogleBytes {
|
|
238
|
-
bytes: Uint8Array;
|
|
239
|
-
/** The response's `Content-Type`, when it sent one. */
|
|
240
|
-
contentType: string | undefined;
|
|
241
|
-
/**
|
|
242
|
-
* Whether the body went on past what was kept. Only a request with
|
|
243
|
-
* `maxBytes` keeps less than the whole body, so without it this is false.
|
|
244
|
-
*/
|
|
245
|
-
truncated: boolean;
|
|
246
|
-
/** The HTTP status: 200, 206 for an honored Range, 416 for an empty file. */
|
|
247
|
-
status: number;
|
|
248
|
-
/** The response's `Content-Range`, when it sent one. */
|
|
249
|
-
contentRange: string | undefined;
|
|
250
|
-
}
|
|
251
|
-
/** A text response body, decoded in the charset its `Content-Type` names. */
|
|
252
|
-
interface GoogleText {
|
|
253
|
-
text: string;
|
|
254
|
-
contentType: string | undefined;
|
|
255
|
-
truncated: boolean;
|
|
256
|
-
status: number;
|
|
257
|
-
contentRange: string | undefined;
|
|
258
|
-
}
|
|
259
|
-
/** {@link GoogleRequestOptions}, plus a bound on how much of the body to read. */
|
|
260
|
-
interface GoogleReadOptions extends GoogleRequestOptions {
|
|
261
|
-
/**
|
|
262
|
-
* Read at most this many bytes of the body: the result retains at most
|
|
263
|
-
* `maxBytes` (+1 to detect overflow, reported as `truncated`) and may
|
|
264
|
-
* consume at most one extra transport chunk from the stream; the rest is
|
|
265
|
-
* cancelled unread. A declared length past the client's ceiling is
|
|
266
|
-
* then no reason to refuse; the ceiling still bounds the read. With it set,
|
|
267
|
-
* a 416 carrying `Content-Range: bytes *\/0` — a Range request against an
|
|
268
|
-
* empty file — answers an empty result with that status, not a failure.
|
|
269
|
-
* A whole number of bytes, zero or more.
|
|
270
|
-
*/
|
|
271
|
-
maxBytes?: number;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* A product's request path to its API, as the calling user. Every method
|
|
275
|
-
* resolves the subject once per call context, sends the cached or a freshly
|
|
276
|
-
* minted token, maps Google's failures by what the caller does next, and
|
|
277
|
-
* answers a 401 with one fresh token and one replay — safe for a write too,
|
|
278
|
-
* since a 401 is a refusal before the request did anything. Because of that
|
|
279
|
-
* replay a `rawBody` must be sendable twice: a `ReadableStream` is refused
|
|
280
|
-
* with a `TypeError` before any request; strings, bytes, Blobs, FormData, and
|
|
281
|
-
* URLSearchParams are fine.
|
|
282
|
-
*/
|
|
283
|
-
export interface GoogleWorkspaceClient {
|
|
284
|
-
/** One JSON request; the parsed body, `undefined` for an empty one. */
|
|
285
|
-
json(request: GuardedRequest, ctx: ConnectorContext, options?: GoogleRequestOptions): Promise<unknown>;
|
|
286
|
-
/**
|
|
287
|
-
* One request whose answer is not JSON — a download, an export — as bytes,
|
|
288
|
-
* bounded by `maxResponseBytes`. `accept` is sent as `Accept`.
|
|
289
|
-
*/
|
|
290
|
-
bytes(request: GuardedRequest, ctx: ConnectorContext, accept?: string, options?: GoogleReadOptions): Promise<GoogleBytes>;
|
|
291
|
-
/**
|
|
292
|
-
* As {@link bytes}, decoded as text in the response's declared charset. A
|
|
293
|
-
* truncated prefix drops a code point the cut left incomplete.
|
|
294
|
-
*/
|
|
295
|
-
text(request: GuardedRequest, ctx: ConnectorContext, accept?: string, options?: GoogleReadOptions): Promise<GoogleText>;
|
|
296
|
-
}
|
|
297
|
-
/** How one request's failures read, beyond the product's defaults. */
|
|
298
|
-
interface GoogleRequestOptions {
|
|
299
|
-
/**
|
|
300
|
-
* The request is a write that names the revision it was made against —
|
|
301
|
-
* Docs, Slides, or Forms `writeControl.requiredRevisionId`. Google answers
|
|
302
|
-
* a stale one with HTTP 400 or 409 carrying FAILED_PRECONDITION or
|
|
303
|
-
* ABORTED, which then maps to `conflict` with fixed text telling the agent
|
|
304
|
-
* to re-read for the current revision and retry. Without it, such a refusal
|
|
305
|
-
* stays `connector_call_failed`, since the same reason also means things
|
|
306
|
-
* like a product switched off for the user.
|
|
307
|
-
*/
|
|
308
|
-
revisionGuarded?: boolean;
|
|
309
|
-
/**
|
|
310
|
-
* Sending this write twice leaves the same state as sending it once — a
|
|
311
|
-
* PUT of a whole resource, a Sheets `values.update` of fixed cells. Only
|
|
312
|
-
* then does a 5xx on a write stay a retryable `unavailable`; otherwise its
|
|
313
|
-
* outcome is unknown and it is not retried. Reads are always idempotent.
|
|
314
|
-
*/
|
|
315
|
-
idempotent?: boolean;
|
|
316
|
-
}
|
|
317
|
-
/** Build the delegated, confined, Google-error-mapped transport for one product. */
|
|
318
|
-
export declare function googleWorkspaceClient(options: GoogleWorkspaceClientOptions): GoogleWorkspaceClient;
|
|
114
|
+
export declare function subjectFor(provider: string, subject: GoogleWorkspaceSubject, ctx: ConnectorContext): Promise<string>;
|