@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,12 +1,23 @@
|
|
|
1
|
+
import { Effect, Exit } from "effect";
|
|
2
|
+
import { registerConnectorVocabulary } from "../operation-vocabulary.js";
|
|
3
|
+
import { causeError, runEdge } from "../runtime/run.js";
|
|
4
|
+
import { credentialProbe } from "../runtime/credential-probe.js";
|
|
5
|
+
import { ContinuationBinding, serviceFor, setViewService, settleOnClose, duringViewEffect } from "../runtime/call.js";
|
|
6
|
+
import { registerCallEntry, toolEntry } from "../runtime/call-entry.js";
|
|
1
7
|
import { ConnectorCallError, networkErrorCode, unavailableCallError, WithheldTextError } from "../errors.js";
|
|
2
8
|
import { attachFailureFacts, carryFailureFacts, errorLabel } from "../operator-record.js";
|
|
3
|
-
import { compileValidator, validateCatalogToolInput } from "../validate.js";
|
|
9
|
+
import { compileValidator, normalizeToolInput, validateCatalogToolInput } from "../validate.js";
|
|
4
10
|
import { array, assertKnownOptions, instance, keys, optionsOf, strings } from "../config-schema.js";
|
|
5
11
|
import { describedEndpoint, describedOrigin, describedTools } from "../described.js";
|
|
6
12
|
import { READ_ONLY, CALL_ADMISSION, CREDENTIAL, USAGE_GUIDE } from "./option-shapes.js";
|
|
7
13
|
import { assertStaticToolNames } from "../tool-name.js";
|
|
8
14
|
import { registerInvocationAuth } from "../invocation-auth.js";
|
|
9
15
|
import { redactCatalog, redactSentSecrets, sentSecretsFetch, trackCredentialReads } from "../sent-secrets.js";
|
|
16
|
+
import { callClassification } from "../call-classification.js";
|
|
17
|
+
import { classifyTool } from "../tool-safety.js";
|
|
18
|
+
import { closeProviderCall, enterProviderBoundary, inLogicalCall, knownProviderFailure, nestedProviderRequests, providerBoundary, providerCallContext, providerFetch, providerRequests, tracksRequests, } from "../provider-call.js";
|
|
19
|
+
import { providerCallFailure, providerCallResult } from "../write-outcome.js";
|
|
20
|
+
import { deriveContext } from "../derived-context.js";
|
|
10
21
|
export function defined(value) {
|
|
11
22
|
return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
|
|
12
23
|
}
|
|
@@ -46,8 +57,9 @@ export const API_OPTIONS = optionsOf()({
|
|
|
46
57
|
usageGuide: USAGE_GUIDE,
|
|
47
58
|
credential: CREDENTIAL,
|
|
48
59
|
oauth: optionsOf()({
|
|
49
|
-
...keys("authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenEndpointAuthMethod", "scope", "pkce", "apiOrigins"),
|
|
60
|
+
...keys("authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenEndpointAuthMethod", "scope", "pkce", "apiOrigins", "revocationEndpoint", "revocationRequestFormat"),
|
|
50
61
|
authorizationParams: strings(),
|
|
62
|
+
expectedCallbackParameters: strings(),
|
|
51
63
|
tokenRequestHeaders: strings(),
|
|
52
64
|
}),
|
|
53
65
|
// A tool's annotations stay open: MCP lets a tool carry hints Connecta
|
|
@@ -132,31 +144,63 @@ export function apiConnector(id, opts, oauth) {
|
|
|
132
144
|
callAdmission: opts.callAdmission,
|
|
133
145
|
usageGuide: opts.usageGuide,
|
|
134
146
|
credential: opts.credential,
|
|
135
|
-
testCredential: opts.testCredential
|
|
136
|
-
|
|
147
|
+
testCredential: opts.testCredential
|
|
148
|
+
? (value, ctx) => credentialProbe(ctx, { value }, (view) => settleOnClose(view, () => opts.testCredential(value, view)))
|
|
149
|
+
: undefined,
|
|
150
|
+
testCredentials: opts.testCredentials
|
|
151
|
+
? (values, ctx) => credentialProbe(ctx, values, (view) => settleOnClose(view, () => opts.testCredentials(values, view)))
|
|
152
|
+
: undefined,
|
|
137
153
|
}),
|
|
138
154
|
...(oauth
|
|
139
155
|
? {
|
|
140
|
-
status: oauth.status,
|
|
141
|
-
startAuth: oauth.startAuth,
|
|
142
|
-
disconnectAuth: oauth.disconnectAuth,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
156
|
+
status: (ctx) => settleOnClose(ctx, () => oauth.status(ctx)),
|
|
157
|
+
startAuth: (ctx, options) => settleOnClose(ctx, () => oauth.startAuth(ctx, options)),
|
|
158
|
+
disconnectAuth: (ctx) => settleOnClose(ctx, () => oauth.disconnectAuth(ctx)),
|
|
159
|
+
// Callback work belongs to its request, including the route's
|
|
160
|
+
// uninterruptible exchange, rather than any resource call.
|
|
161
|
+
verifyState: (state, ctx) => settleOnClose(ctx, () => oauth.verifyState(state, ctx), true),
|
|
162
|
+
verifyCallbackParameters: (params, ctx) => settleOnClose(ctx, () => oauth.verifyCallbackParameters(params, ctx), true),
|
|
163
|
+
verifyCallbackIssuer: (issuer, ctx) => settleOnClose(ctx, () => oauth.verifyCallbackIssuer(issuer, ctx), true),
|
|
164
|
+
consumeAuthError: (ctx) => settleOnClose(ctx, () => oauth.consumeAuthError(ctx), true),
|
|
165
|
+
finishAuth: (code, ctx, callbackParams) => settleOnClose(ctx, () => oauth.finishAuth(code, ctx, callbackParams), true),
|
|
147
166
|
}
|
|
148
167
|
: {}),
|
|
149
168
|
staticTools: defs,
|
|
150
169
|
async listTools(ctx) {
|
|
151
|
-
return redactCatalog(ctx, defs);
|
|
170
|
+
return settleOnClose(ctx, async () => redactCatalog(ctx, defs));
|
|
152
171
|
},
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
172
|
+
callTool: (name, args, ctx, options) => runEdge(core(name, args, ctx, options)),
|
|
173
|
+
};
|
|
174
|
+
const core = (name, args, ctx) => Effect.gen(function* () {
|
|
175
|
+
trackCredentialReads(ctx);
|
|
176
|
+
enterProviderBoundary(ctx, connector);
|
|
177
|
+
const tool = byName.get(name);
|
|
178
|
+
// Refusals before the handler runs are known failures: nothing was sent.
|
|
179
|
+
if (!tool) {
|
|
180
|
+
throw knownProviderFailure(new Error(`Unknown tool "${name}" on connector "${id}"`));
|
|
181
|
+
}
|
|
182
|
+
// `await` (not a bare promise return) so a handler that throws before
|
|
183
|
+
// its first await never sits handler-less for the thenable-adoption
|
|
184
|
+
// microtask — workerd and vitest both report that gap as an unhandled
|
|
185
|
+
// rejection even though the caller catches the failure.
|
|
186
|
+
// Derived, never mutated: the registry's context stays as it was, and
|
|
187
|
+
// the call state beside it (caller, admission permit, recovery facts,
|
|
188
|
+
// sent secrets) resolves through the handler's copy. The grant sends a
|
|
189
|
+
// write once: the registry's classification of this call decides, else
|
|
190
|
+
// the rule the registry would apply to the tool (INV-1).
|
|
191
|
+
const write = (callClassification(ctx) ?? classifyTool(tool)) === "write";
|
|
192
|
+
const callCtx = providerCallContext(ctx, providerRequests(ctx) ? classifyTool(tool) : write ? "write" : "read");
|
|
193
|
+
const handlerCtx = deriveContext(callCtx, {
|
|
194
|
+
fetch: providerFetch(callCtx, opts.title ?? id, false, sentSecretsFetch(ctx)),
|
|
195
|
+
...(oauth ? { oauth: oauth.access(callCtx, { write }) } : {}),
|
|
196
|
+
});
|
|
197
|
+
setViewService(handlerCtx, ContinuationBinding, {
|
|
198
|
+
connection: serviceFor(ctx, ContinuationBinding)?.connection || id,
|
|
199
|
+
principal: serviceFor(ctx, ContinuationBinding)?.principal ?? null,
|
|
200
|
+
});
|
|
201
|
+
let handlerStarted = false;
|
|
202
|
+
const handled = yield* Effect.exit(Effect.gen(function* () {
|
|
203
|
+
const input = normalizeToolInput(args ?? {});
|
|
160
204
|
if (validateArgs && tool.inputSchema) {
|
|
161
205
|
const invalid = validateCatalogToolInput(tool.inputSchema, input, {
|
|
162
206
|
address: `${id}.${name}`,
|
|
@@ -167,54 +211,98 @@ export function apiConnector(id, opts, oauth) {
|
|
|
167
211
|
failClosed: true,
|
|
168
212
|
}, { connector: id, tool });
|
|
169
213
|
if (invalid)
|
|
170
|
-
throw invalid;
|
|
214
|
+
throw knownProviderFailure(invalid);
|
|
171
215
|
}
|
|
172
|
-
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
216
|
+
handlerStarted = true;
|
|
217
|
+
// The opaque handler may await a helper, swallow its rejection, or
|
|
218
|
+
// wait elsewhere. Its boundary remains call-owned; auxiliary helpers
|
|
219
|
+
// retain their separate request ownership. Ledger settlement below
|
|
220
|
+
// must see the close reason before this call's Promise rejects.
|
|
221
|
+
const native = toolEntry(tool);
|
|
222
|
+
return yield* native
|
|
223
|
+
? duringViewEffect(callCtx, () => native(input, handlerCtx))
|
|
224
|
+
: Effect.tryPromise({
|
|
225
|
+
// Custom handlers retain their Promise revocation bridge and
|
|
226
|
+
// synchronous entry, including their helpers' fact ordering.
|
|
227
|
+
try: () => settleOnClose(callCtx, () => Promise.resolve(tool.handler(input, handlerCtx))),
|
|
228
|
+
catch: (error) => error,
|
|
229
|
+
});
|
|
230
|
+
}));
|
|
231
|
+
if (Exit.isFailure(handled)) {
|
|
232
|
+
const error = causeError(handled.cause, callCtx.signal);
|
|
233
|
+
// Settled before anything is decided or reported: a request that has
|
|
234
|
+
// not left by now (a sibling awaiting its credential) never will.
|
|
235
|
+
closeProviderCall(callCtx);
|
|
236
|
+
if (!handlerStarted) {
|
|
237
|
+
throw knownProviderFailure(error instanceof ConnectorCallError
|
|
238
|
+
? error
|
|
239
|
+
: new ConnectorCallError("invalid_args", `Cannot validate arguments for "${id}.${name}": its inputSchema could not be evaluated`));
|
|
184
240
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
241
|
+
// A handler owns its destinations. ctx.baseUrl is Connecta's inbound
|
|
242
|
+
// URL, so it must never masquerade as the failed downstream host.
|
|
243
|
+
const settle = (failure) => redactSentSecrets(ctx, providerCallFailure(handlerCtx, { title: opts.title ?? id }, failure, {
|
|
244
|
+
dispatched: true,
|
|
245
|
+
fallback: write ? "write" : "read",
|
|
246
|
+
finalize: true,
|
|
247
|
+
// Only a declared provider's ledger can see every request.
|
|
248
|
+
untracked: !tracksRequests(connector),
|
|
249
|
+
}));
|
|
250
|
+
// The request's own abort reason, by identity, is the caller's. The
|
|
251
|
+
// invocation reports it for its logical call; any other write's is
|
|
252
|
+
// settled like any other failure: it may have left.
|
|
253
|
+
if (ctx.signal?.aborted === true && error === ctx.signal.reason) {
|
|
254
|
+
if (!write || inLogicalCall(ctx))
|
|
188
255
|
throw error;
|
|
189
|
-
|
|
190
|
-
// URL, so it must never masquerade as the failed downstream host.
|
|
191
|
-
if (error instanceof ConnectorCallError)
|
|
192
|
-
throw redactSentSecrets(ctx, error);
|
|
193
|
-
if (!networkErrorCode(error)) {
|
|
194
|
-
// Anything else is a runtime's, parser's, or stream's account of
|
|
195
|
-
// what the handler read (a JSON parser quotes the reply it choked
|
|
196
|
-
// on; a body stream rejects with whatever the runtime says), so it
|
|
197
|
-
// is told in connecta's words, classified as the original would
|
|
198
|
-
// have been, and rebuilt without its cause or nested errors. A
|
|
199
|
-
// handler that means the agent to read its words throws a
|
|
200
|
-
// ConnectorCallError. No host is named: connecta does not know
|
|
201
|
-
// which destination the handler read.
|
|
202
|
-
const kind = errorLabel(error);
|
|
203
|
-
throw attachFailureFacts(carryFailureFacts(error, new WithheldTextError(`Connector "${id}" tool "${name}" handler failed` +
|
|
204
|
-
`${kind ? ` (${kind})` : ""}. Its text is withheld because it ` +
|
|
205
|
-
"can quote what the downstream sent.", error)), { step: "handler" });
|
|
206
|
-
}
|
|
207
|
-
throw unavailableCallError(error, undefined, undefined, ctx.signal);
|
|
256
|
+
throw settle(error);
|
|
208
257
|
}
|
|
209
|
-
|
|
210
|
-
|
|
258
|
+
if (error instanceof ConnectorCallError)
|
|
259
|
+
throw settle(error);
|
|
260
|
+
if (!networkErrorCode(error)) {
|
|
261
|
+
// Anything else is a runtime's, parser's, or stream's account of
|
|
262
|
+
// what the handler read (a JSON parser quotes the reply it choked
|
|
263
|
+
// on; a body stream rejects with whatever the runtime says), so it
|
|
264
|
+
// is told in connecta's words, classified as the original would
|
|
265
|
+
// have been, and rebuilt without its cause or nested errors. A
|
|
266
|
+
// handler that means the agent to read its words throws a
|
|
267
|
+
// ConnectorCallError. No host is named: connecta does not know
|
|
268
|
+
// which destination the handler read.
|
|
269
|
+
const kind = errorLabel(error);
|
|
270
|
+
throw settle(attachFailureFacts(carryFailureFacts(error, new WithheldTextError(`Connector "${id}" tool "${name}" handler failed` +
|
|
271
|
+
`${kind ? ` (${kind})` : ""}. Its text is withheld because it ` +
|
|
272
|
+
"can quote what the downstream sent.", error)), { step: "handler" }));
|
|
273
|
+
}
|
|
274
|
+
// A handler is opaque: by the time its fetch failed it may already
|
|
275
|
+
// have sent the write, so no network code proves a write unsent.
|
|
276
|
+
const unreachable = unavailableCallError(error, undefined, undefined, ctx.signal);
|
|
277
|
+
// A raw handler with no tracked requests remains opaque, as before.
|
|
278
|
+
// Once guarded requests exist, its own or a nested api() boundary's,
|
|
279
|
+
// the ledgers supply the dispatch proof.
|
|
280
|
+
if (providerRequests(handlerCtx)?.length || nestedProviderRequests(handlerCtx).length)
|
|
281
|
+
throw settle(unreachable);
|
|
282
|
+
throw providerCallFailure(ctx, { title: opts.title ?? id }, unreachable, {
|
|
283
|
+
dispatched: true,
|
|
284
|
+
fallback: classifyTool(tool),
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
closeProviderCall(callCtx);
|
|
288
|
+
// A write an undeclared 401 left unknown fails however its handler returned.
|
|
289
|
+
const unknown = providerCallResult(handlerCtx, write ? "write" : "read");
|
|
290
|
+
if (unknown)
|
|
291
|
+
throw redactSentSecrets(ctx, unknown);
|
|
292
|
+
return redactSentSecrets(ctx, handled.value);
|
|
293
|
+
}).pipe(Effect.catchDefect((error) => Effect.fail(error)));
|
|
294
|
+
// This boundary's identity in a logical call, fixed now: this object with
|
|
295
|
+
// this function, never whatever the property or a copy holds by then.
|
|
296
|
+
providerBoundary(connector);
|
|
297
|
+
registerCallEntry(connector, core);
|
|
211
298
|
if (oauth)
|
|
212
299
|
registerInvocationAuth(connector, async (ctx) => {
|
|
213
300
|
// The built-in static OAuth status only reads the stored grant. It never
|
|
214
301
|
// refreshes, invokes a handler, or sends a downstream request.
|
|
215
|
-
if ((await oauth.status(ctx)).state === "auth_required") {
|
|
302
|
+
if ((await settleOnClose(ctx, () => oauth.status(ctx))).state === "auth_required") {
|
|
216
303
|
throw new ConnectorCallError("downstream_oauth_required", `Connector "${id}" requires authorization. Call authorize_connector.`);
|
|
217
304
|
}
|
|
218
305
|
});
|
|
306
|
+
registerConnectorVocabulary(connector, opts.tools);
|
|
219
307
|
return connector;
|
|
220
308
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { retryAfterMs } from "../http-policy.js";
|
|
2
|
+
import { type ProviderRequest } from "../provider-call.js";
|
|
1
3
|
import type { ConnectorContext } from "../types.js";
|
|
2
4
|
/** The methods a hand-written provider surface actually uses. */
|
|
3
5
|
type GuardedMethod = "GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
@@ -43,6 +45,18 @@ export interface GuardedRequest {
|
|
|
43
45
|
* up front: the ceiling still bounds what is read, never what is sent.
|
|
44
46
|
*/
|
|
45
47
|
prefixOnly?: boolean;
|
|
48
|
+
/** Trusted per-operation evidence (e.g. Breeze writes use GET); otherwise the tool's verdict applies. */
|
|
49
|
+
classification?: "read" | "write";
|
|
50
|
+
/** Provider-declared request that cannot perform the logical resource write. */
|
|
51
|
+
auxiliary?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Replay proof for direct transport users: the genuine, legal idempotency
|
|
54
|
+
* key its vendor honors that this request carries (among `visibleHeaders`),
|
|
55
|
+
* set only then. An operation hint (a PUT, a content address) is never
|
|
56
|
+
* this proof. Never overrides a served write, and recorded on the logical
|
|
57
|
+
* call so key-reuse advice can name it (`keyProtectsCall`).
|
|
58
|
+
*/
|
|
59
|
+
idempotencyKey?: string;
|
|
46
60
|
}
|
|
47
61
|
/**
|
|
48
62
|
* One downstream response, read under the connector's byte ceiling.
|
|
@@ -84,8 +98,6 @@ interface GuardedResponse {
|
|
|
84
98
|
truncated: boolean;
|
|
85
99
|
}>;
|
|
86
100
|
}
|
|
87
|
-
/** Parse delta-seconds or an HTTP-date into a non-negative wait window. */
|
|
88
|
-
export declare function retryAfterMs(headers: Headers): number | undefined;
|
|
89
101
|
/**
|
|
90
102
|
* Turn one response into the provider's own result, or throw the provider's
|
|
91
103
|
* own typed failure. This is where status codes acquire meaning, and it is
|
|
@@ -95,9 +107,11 @@ type GuardedResponseMapper<T> = (response: GuardedResponse, ctx: ConnectorContex
|
|
|
95
107
|
export interface GuardedFetchOptions {
|
|
96
108
|
/**
|
|
97
109
|
* Provider name as it appears in normalized failure prose — "Cloudflare",
|
|
98
|
-
* "
|
|
110
|
+
* "Vercel". Used for messages only; it is never parsed.
|
|
99
111
|
*/
|
|
100
112
|
provider: string;
|
|
113
|
+
/** Provider-declared auth/metadata work that cannot perform the logical write. */
|
|
114
|
+
auxiliary?: boolean;
|
|
101
115
|
/**
|
|
102
116
|
* Absolute base URL. Its origin and path prefix are the confinement: every
|
|
103
117
|
* request resolves beneath it or is refused.
|
|
@@ -133,29 +147,49 @@ export interface GuardedFetchOptions {
|
|
|
133
147
|
* authentication, so a refused request never resolves a credential.
|
|
134
148
|
*/
|
|
135
149
|
admit?: (url: URL, request: GuardedRequest) => void;
|
|
150
|
+
/**
|
|
151
|
+
* Reviewed vendor evidence that the vendor authenticates a request before
|
|
152
|
+
* it acts on it. Without it, a write answered 401 has an unknown outcome:
|
|
153
|
+
* a server may act on a request before it rejects the credential. With it,
|
|
154
|
+
* a 401 that `matches` is that write's refusal. Declare it only where the
|
|
155
|
+
* vendor's documentation says so, cite that documentation in `evidence` and
|
|
156
|
+
* in the provider's evidence review, and keep `matches` narrow. Of the
|
|
157
|
+
* maintained providers only Stripe declares it. Checked at construction.
|
|
158
|
+
*/
|
|
159
|
+
authBeforeExecution?: AuthBeforeExecution;
|
|
136
160
|
}
|
|
137
|
-
/** Sends one already-guarded request on behalf of one call's context. */
|
|
138
|
-
type GuardedFetcher = (url: string, init: RequestInit, ctx: ConnectorContext) => Promise<Response>;
|
|
139
161
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* sent through `ctx.oauth.fetch`, which adds the calling owner's bearer token,
|
|
143
|
-
* refuses any origin outside the grant's `apiOrigins`, and spends one
|
|
144
|
-
* coordinated refresh and one replay on a 401 before answering
|
|
145
|
-
* `auth_required`. Spread it into the options:
|
|
146
|
-
* `guardedFetch({ provider, baseUrl, maxResponseBytes, ...oauthBearer(provider) })`.
|
|
147
|
-
*
|
|
148
|
-
* Confinement still happens here first, so a request reaches the grant only
|
|
149
|
-
* once it is provably beneath `baseUrl`; the grant's origin check is the second
|
|
150
|
-
* fence, not the only one.
|
|
162
|
+
* A trusted per-vendor review: types cannot verify what a vendor does, so the
|
|
163
|
+
* reviewer checks the cited documentation and the predicate against it.
|
|
151
164
|
*/
|
|
165
|
+
interface AuthBeforeExecution {
|
|
166
|
+
/** The vendor's documented guarantee: its URL and what it says. Never empty. */
|
|
167
|
+
evidence: string;
|
|
168
|
+
/**
|
|
169
|
+
* Whether this raw 401 is one the evidence covers, from its status and
|
|
170
|
+
* headers and the request's method and provider-relative path only: never a
|
|
171
|
+
* mapped code or prose.
|
|
172
|
+
*/
|
|
173
|
+
matches: (answer: {
|
|
174
|
+
status: 401;
|
|
175
|
+
headers: Headers;
|
|
176
|
+
method: string;
|
|
177
|
+
path: string;
|
|
178
|
+
}) => boolean;
|
|
179
|
+
}
|
|
180
|
+
/** Sends one already-guarded request on behalf of one call's context. */
|
|
181
|
+
type GuardedFetcher = (url: string, init: RequestInit, ctx: ConnectorContext) => Promise<Response>;
|
|
152
182
|
export declare function oauthBearer(provider: string): Pick<GuardedFetchOptions, "authenticate" | "fetch">;
|
|
153
183
|
/** Send one guarded request and map its response with provider knowledge. */
|
|
154
184
|
export type GuardedTransport = <T>(request: GuardedRequest, ctx: ConnectorContext, map: GuardedResponseMapper<T>) => Promise<T>;
|
|
185
|
+
/**
|
|
186
|
+
* Test-only legacy response lookup for renewal-provenance fixtures outside
|
|
187
|
+
* the kit. Production renewal uses the kit ledger. Undefined for other objects.
|
|
188
|
+
*/
|
|
189
|
+
export declare function answeredRequest(response: object): ProviderRequest | undefined;
|
|
155
190
|
/**
|
|
156
191
|
* Build the transport a connector sends every request through. `maxResponseBytes`
|
|
157
192
|
* is required rather than defaulted: what counts as an absurd response is a fact
|
|
158
193
|
* about the API, not about HTTP.
|
|
159
194
|
*/
|
|
160
195
|
export declare function guardedFetch(options: GuardedFetchOptions): GuardedTransport;
|
|
161
|
-
export {};
|