@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,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Sheets API root. Every path the tools send is beneath
|
|
3
|
+
* `/spreadsheets`; the delegated token decides which ones the user can open.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SHEETS_API_BASE_URL = "https://sheets.googleapis.com/v4";
|
|
6
|
+
/**
|
|
7
|
+
* Exactly the scope this connection requests, and what the Admin console's
|
|
8
|
+
* domain-wide delegation entry must add for it. One scope reads and writes
|
|
9
|
+
* every spreadsheet the user can open; Google offers no narrower one that
|
|
10
|
+
* writes.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SHEETS_SCOPES: readonly ["https://www.googleapis.com/auth/spreadsheets"];
|
|
13
|
+
/** A wide values read; Google itself recommends payloads under 2 MB. */
|
|
14
|
+
export declare const SHEETS_MAX_RESPONSE_BYTES: number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Sheets API root. Every path the tools send is beneath
|
|
3
|
+
* `/spreadsheets`; the delegated token decides which ones the user can open.
|
|
4
|
+
*/
|
|
5
|
+
export const SHEETS_API_BASE_URL = "https://sheets.googleapis.com/v4";
|
|
6
|
+
/**
|
|
7
|
+
* Exactly the scope this connection requests, and what the Admin console's
|
|
8
|
+
* domain-wide delegation entry must add for it. One scope reads and writes
|
|
9
|
+
* every spreadsheet the user can open; Google offers no narrower one that
|
|
10
|
+
* writes.
|
|
11
|
+
*/
|
|
12
|
+
export const SHEETS_SCOPES = ["https://www.googleapis.com/auth/spreadsheets"];
|
|
13
|
+
/** A wide values read; Google itself recommends payloads under 2 MB. */
|
|
14
|
+
export const SHEETS_MAX_RESPONSE_BYTES = 16 * 1024 * 1024;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { codePoints } from "../../../http/json-schema.js";
|
|
2
|
+
import { googleBatchGuard, googleHatchBinding } from "../../_shared/google/hatch.js";
|
|
3
|
+
import { OperationIndex } from "../../_shared/rest/operation-index.js";
|
|
4
|
+
import { openapi } from "../openapi.generated.js";
|
|
5
|
+
import { SHEETS_ADMITTED_KINDS, SHEETS_REFUSED_KINDS, sheetsExternalDataProblem } from "./requests.js";
|
|
6
|
+
// Keep range/header nouns searchable alongside the reviewed 115-character action summary.
|
|
7
|
+
// This discovery-only category changes no method, path, schema or execution verdict.
|
|
8
|
+
const sheetsDiscovery = {
|
|
9
|
+
...openapi,
|
|
10
|
+
tags: [...openapi.tags, "spreadsheets ranges headers", "spreadsheets.values rows headers"],
|
|
11
|
+
ops: openapi.ops.map((row) => {
|
|
12
|
+
const [method, path, operationId, summary, , ...server] = row;
|
|
13
|
+
if (row[2] === "sheets.spreadsheets.values.get" || row[2] === "sheets.spreadsheets.values.batchGet")
|
|
14
|
+
return [method, path, operationId, summary, openapi.tags.length + 1, ...server];
|
|
15
|
+
if (row[2] !== "sheets.spreadsheets.batchUpdate")
|
|
16
|
+
return row;
|
|
17
|
+
return [method, path, operationId, summary, openapi.tags.length, ...server];
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
export const sheetsIndex = new OperationIndex(sheetsDiscovery, {
|
|
21
|
+
vendor: "sheets",
|
|
22
|
+
title: "Google Sheets",
|
|
23
|
+
pathMatching: "uri-template",
|
|
24
|
+
});
|
|
25
|
+
/** Decode range colons only. Encoded actions, ids and unreserved bytes still fail the shared backstop. */
|
|
26
|
+
export function sheetsPath(path) {
|
|
27
|
+
const match = /^(\/spreadsheets\/[A-Za-z0-9_-]+\/values\/)([^/?#]+)$/.exec(path);
|
|
28
|
+
if (!match)
|
|
29
|
+
return path;
|
|
30
|
+
const tail = match[2];
|
|
31
|
+
const action = /:(append|clear)$/.exec(tail)?.[0] ?? "";
|
|
32
|
+
const range = action ? tail.slice(0, -action.length) : tail;
|
|
33
|
+
// An encoded trailing action could change the matched method; preserve its refusal.
|
|
34
|
+
if (/%3a(?:append|clear)$/i.test(range))
|
|
35
|
+
return path;
|
|
36
|
+
return `${match[1]}${range.replace(/%3a/gi, ":")}${action}`;
|
|
37
|
+
}
|
|
38
|
+
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
39
|
+
/** Same scalar, range and write-cell ceilings as the named workflows, including filter-selected writes. */
|
|
40
|
+
export function sheetsRequestProblem(call) {
|
|
41
|
+
const body = record(call.body);
|
|
42
|
+
if (call.op.path === "/spreadsheets/{spreadsheetId}:batchUpdate") {
|
|
43
|
+
const requests = body["requests"];
|
|
44
|
+
if (Array.isArray(requests))
|
|
45
|
+
for (const request of requests) {
|
|
46
|
+
for (const kind of Object.keys(record(request)))
|
|
47
|
+
if (Object.hasOwn(SHEETS_REFUSED_KINDS, kind))
|
|
48
|
+
return SHEETS_REFUSED_KINDS[kind];
|
|
49
|
+
}
|
|
50
|
+
const problem = googleBatchGuard(body, { kinds: SHEETS_ADMITTED_KINDS, revision: false });
|
|
51
|
+
if (problem)
|
|
52
|
+
return problem;
|
|
53
|
+
}
|
|
54
|
+
if (call.method !== "GET" &&
|
|
55
|
+
SHEETS_HATCH.verdicts[`${call.method} ${call.op.path}`] !== "read") {
|
|
56
|
+
const problem = sheetsExternalDataProblem(body);
|
|
57
|
+
if (problem)
|
|
58
|
+
return problem;
|
|
59
|
+
}
|
|
60
|
+
const isValue = call.op.path.includes("/values");
|
|
61
|
+
for (const [key, max] of [
|
|
62
|
+
["ranges", 20],
|
|
63
|
+
["dataFilters", 20],
|
|
64
|
+
["data", 100],
|
|
65
|
+
]) {
|
|
66
|
+
const list = body[key] ?? call.query[key];
|
|
67
|
+
if (Array.isArray(list) && (!list.length || list.length > max))
|
|
68
|
+
return `${key} needs 1–${max} entries.`;
|
|
69
|
+
}
|
|
70
|
+
const rangeProblem = (value) => typeof value !== "string" ||
|
|
71
|
+
!value.length ||
|
|
72
|
+
codePoints(value) > 512 ||
|
|
73
|
+
/[\r\n]/.test(value) ||
|
|
74
|
+
/^\.+$/.test(value);
|
|
75
|
+
const ranges = [
|
|
76
|
+
...(Array.isArray(body["ranges"]) ? body["ranges"] : []),
|
|
77
|
+
...(Array.isArray(call.query["ranges"]) ? call.query["ranges"] : []),
|
|
78
|
+
];
|
|
79
|
+
if (call.params["range"] !== undefined)
|
|
80
|
+
ranges.push(call.params["range"]);
|
|
81
|
+
if (ranges.some(rangeProblem))
|
|
82
|
+
return "Ranges must be nonempty single-line A1 strings of at most 512 characters.";
|
|
83
|
+
let cells = 0;
|
|
84
|
+
const stack = [body];
|
|
85
|
+
while (stack.length) {
|
|
86
|
+
const value = stack.pop();
|
|
87
|
+
if (Array.isArray(value)) {
|
|
88
|
+
stack.push(...value);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const obj = record(value);
|
|
92
|
+
if (typeof obj["a1Range"] === "string" && rangeProblem(obj["a1Range"]))
|
|
93
|
+
return "Data-filter A1 ranges must be nonempty single-line strings of at most 512 characters.";
|
|
94
|
+
if (isValue && obj["range"] !== undefined && rangeProblem(obj["range"]))
|
|
95
|
+
return "Value ranges must be nonempty single-line strings of at most 512 characters.";
|
|
96
|
+
if (isValue && obj["values"] !== undefined) {
|
|
97
|
+
const rows = obj["values"];
|
|
98
|
+
if (!Array.isArray(rows) || !rows.length || rows.length > (obj["majorDimension"] === "COLUMNS" ? 18278 : 10000))
|
|
99
|
+
return "Values need 1–10000 rows or columns.";
|
|
100
|
+
for (const row of rows) {
|
|
101
|
+
if (!Array.isArray(row) || row.length > (obj["majorDimension"] === "COLUMNS" ? 10000 : 18278))
|
|
102
|
+
return "Values must be a bounded two-dimensional cell array.";
|
|
103
|
+
cells += row.length;
|
|
104
|
+
for (const cell of row)
|
|
105
|
+
if (!(cell === null ||
|
|
106
|
+
typeof cell === "boolean" ||
|
|
107
|
+
(typeof cell === "number" && Number.isFinite(cell)) ||
|
|
108
|
+
(typeof cell === "string" && codePoints(cell) <= 50000)))
|
|
109
|
+
return "Cells must be scalar strings (at most 50000 characters), finite numbers, booleans or null.";
|
|
110
|
+
}
|
|
111
|
+
if (cells > 50000)
|
|
112
|
+
return "A values write carries at most 50000 cells; split it into several calls.";
|
|
113
|
+
}
|
|
114
|
+
stack.push(...Object.values(obj));
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
export function sheetsBinding(connection) {
|
|
119
|
+
return {
|
|
120
|
+
...googleHatchBinding(connection, {
|
|
121
|
+
index: sheetsIndex,
|
|
122
|
+
review: "Seventeen explicitly reviewed Sheets JSON methods, seven reads including three side-effect-free POST reads; bounded scalar value writes and reviewed non-preview batch kinds, delegated subject and permanent value safety.",
|
|
123
|
+
refuse: sheetsRequestProblem,
|
|
124
|
+
}),
|
|
125
|
+
// A1 references supply cell addresses, not resource nouns; technical nouns in other providers stay searchable.
|
|
126
|
+
searchNoun: (term) => !/^[a-z]{1,3}[1-9]\d*$/.test(term),
|
|
127
|
+
path: sheetsPath,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export const SHEETS_HATCH = {
|
|
131
|
+
name: "sheets",
|
|
132
|
+
title: "Google Sheets",
|
|
133
|
+
index: sheetsIndex,
|
|
134
|
+
pathExample: "/spreadsheets/sheet_123",
|
|
135
|
+
verdicts: {
|
|
136
|
+
"GET /spreadsheets/{spreadsheetId}": "read",
|
|
137
|
+
"GET /spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}": "read",
|
|
138
|
+
"POST /spreadsheets/{spreadsheetId}/developerMetadata:search": "read",
|
|
139
|
+
"POST /spreadsheets/{spreadsheetId}:getByDataFilter": "read",
|
|
140
|
+
"GET /spreadsheets/{spreadsheetId}/values/{range}": "read",
|
|
141
|
+
"GET /spreadsheets/{spreadsheetId}/values:batchGet": "read",
|
|
142
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchGetByDataFilter": "read",
|
|
143
|
+
"POST /spreadsheets": "write",
|
|
144
|
+
"POST /spreadsheets/{spreadsheetId}:batchUpdate": "destructive",
|
|
145
|
+
"POST /spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo": "write",
|
|
146
|
+
"PUT /spreadsheets/{spreadsheetId}/values/{range}": "destructive",
|
|
147
|
+
"POST /spreadsheets/{spreadsheetId}/values/{range}:append": "destructive",
|
|
148
|
+
"POST /spreadsheets/{spreadsheetId}/values/{range}:clear": "destructive",
|
|
149
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchUpdate": "destructive",
|
|
150
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter": "destructive",
|
|
151
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchClear": "destructive",
|
|
152
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchClearByDataFilter": "destructive",
|
|
153
|
+
},
|
|
154
|
+
named: {
|
|
155
|
+
"GET /spreadsheets/{spreadsheetId}": "get_spreadsheet",
|
|
156
|
+
"GET /spreadsheets/{spreadsheetId}/values:batchGet": "get_values",
|
|
157
|
+
"POST /spreadsheets": "create_spreadsheet",
|
|
158
|
+
"POST /spreadsheets/{spreadsheetId}:batchUpdate": "batch_update_spreadsheet",
|
|
159
|
+
"POST /spreadsheets/{spreadsheetId}/values/{range}:append": "append_values",
|
|
160
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchUpdate": "batch_update_values",
|
|
161
|
+
"POST /spreadsheets/{spreadsheetId}/values:batchClear": "clear_values",
|
|
162
|
+
},
|
|
163
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export const SHEETS_REQUEST_KINDS = [
|
|
2
|
+
"addBanding",
|
|
3
|
+
"addChart",
|
|
4
|
+
"addCommentReply",
|
|
5
|
+
"addConditionalFormatRule",
|
|
6
|
+
"addDataSource",
|
|
7
|
+
"addDimensionGroup",
|
|
8
|
+
"addFilterView",
|
|
9
|
+
"addNamedRange",
|
|
10
|
+
"addProtectedRange",
|
|
11
|
+
"addSheet",
|
|
12
|
+
"addSlicer",
|
|
13
|
+
"addTable",
|
|
14
|
+
"appendCells",
|
|
15
|
+
"appendDimension",
|
|
16
|
+
"autoFill",
|
|
17
|
+
"autoResizeDimensions",
|
|
18
|
+
"cancelDataSourceRefresh",
|
|
19
|
+
"clearBasicFilter",
|
|
20
|
+
"copyPaste",
|
|
21
|
+
"createDeveloperMetadata",
|
|
22
|
+
"cutPaste",
|
|
23
|
+
"deleteBanding",
|
|
24
|
+
"deleteComment",
|
|
25
|
+
"deleteCommentReply",
|
|
26
|
+
"deleteConditionalFormatRule",
|
|
27
|
+
"deleteDataSource",
|
|
28
|
+
"deleteDeveloperMetadata",
|
|
29
|
+
"deleteDimension",
|
|
30
|
+
"deleteDimensionGroup",
|
|
31
|
+
"deleteDuplicates",
|
|
32
|
+
"deleteEmbeddedObject",
|
|
33
|
+
"deleteFilterView",
|
|
34
|
+
"deleteNamedRange",
|
|
35
|
+
"deleteProtectedRange",
|
|
36
|
+
"deleteRange",
|
|
37
|
+
"deleteSheet",
|
|
38
|
+
"deleteTable",
|
|
39
|
+
"duplicateFilterView",
|
|
40
|
+
"duplicateSheet",
|
|
41
|
+
"findReplace",
|
|
42
|
+
"insertComment",
|
|
43
|
+
"insertDimension",
|
|
44
|
+
"insertRange",
|
|
45
|
+
"mergeCells",
|
|
46
|
+
"moveDimension",
|
|
47
|
+
"pasteData",
|
|
48
|
+
"randomizeRange",
|
|
49
|
+
"refreshDataSource",
|
|
50
|
+
"repeatCell",
|
|
51
|
+
"setBasicFilter",
|
|
52
|
+
"setDataValidation",
|
|
53
|
+
"sortRange",
|
|
54
|
+
"textToColumns",
|
|
55
|
+
"trimWhitespace",
|
|
56
|
+
"unmergeCells",
|
|
57
|
+
"updateBanding",
|
|
58
|
+
"updateBorders",
|
|
59
|
+
"updateCells",
|
|
60
|
+
"updateChartSpec",
|
|
61
|
+
"updateCommentPost",
|
|
62
|
+
"updateConditionalFormatRule",
|
|
63
|
+
"updateDataSource",
|
|
64
|
+
"updateDeveloperMetadata",
|
|
65
|
+
"updateDimensionGroup",
|
|
66
|
+
"updateDimensionProperties",
|
|
67
|
+
"updateEmbeddedObjectBorder",
|
|
68
|
+
"updateEmbeddedObjectPosition",
|
|
69
|
+
"updateFilterView",
|
|
70
|
+
"updateNamedRange",
|
|
71
|
+
"updateProtectedRange",
|
|
72
|
+
"updateSheetProperties",
|
|
73
|
+
"updateSlicerSpec",
|
|
74
|
+
"updateSpreadsheetProperties",
|
|
75
|
+
"updateTable",
|
|
76
|
+
];
|
|
77
|
+
export const SHEETS_REFUSED_KINDS = {
|
|
78
|
+
addDataSource: "External data-source creation and execution are outside this connection.",
|
|
79
|
+
updateDataSource: "External data-source configuration and execution are outside this connection.",
|
|
80
|
+
deleteDataSource: "External data-source administration is outside this connection.",
|
|
81
|
+
refreshDataSource: "External data-source execution is outside this connection.",
|
|
82
|
+
cancelDataSourceRefresh: "External data-source execution is outside this connection.",
|
|
83
|
+
insertComment: "Preview comment mutations require separate product review.",
|
|
84
|
+
addCommentReply: "Preview comment mutations require separate product review.",
|
|
85
|
+
updateCommentPost: "Preview comment mutations require separate product review.",
|
|
86
|
+
deleteComment: "Preview comment mutations require separate product review.",
|
|
87
|
+
deleteCommentReply: "Preview comment mutations require separate product review.",
|
|
88
|
+
};
|
|
89
|
+
export const SHEETS_ADMITTED_KINDS = SHEETS_REQUEST_KINDS.filter((kind) => !SHEETS_REFUSED_KINDS[kind]);
|
|
90
|
+
/** Creation and ordinary batch kinds must not smuggle external data-source configuration. */
|
|
91
|
+
export function sheetsExternalDataProblem(body) {
|
|
92
|
+
const stack = [body];
|
|
93
|
+
while (stack.length) {
|
|
94
|
+
const value = stack.pop();
|
|
95
|
+
if (!value || typeof value !== "object")
|
|
96
|
+
continue;
|
|
97
|
+
if (!Array.isArray(value))
|
|
98
|
+
for (const key of ["dataSources", "dataSourceSheetProperties", "dataSourceId"]) {
|
|
99
|
+
if (Object.hasOwn(value, key))
|
|
100
|
+
return "External data-source configuration and execution are outside this connection.";
|
|
101
|
+
}
|
|
102
|
+
stack.push(...Object.values(value));
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { Integer, isMinChars, isMaxChars } from "../../../http/json-schema.js";
|
|
3
|
+
const optional = (fields) => Schema.Struct(Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, Schema.optionalKey(value)])));
|
|
4
|
+
const str = (description, max, pattern) => Schema.String.check(isMinChars(1), isMaxChars(max), ...(pattern
|
|
5
|
+
? [
|
|
6
|
+
Schema.makeFilter((value) => pattern.test(value), {
|
|
7
|
+
expected: `matching ${pattern.source}`,
|
|
8
|
+
toJsonSchema: () => ({ pattern: pattern.source }),
|
|
9
|
+
}),
|
|
10
|
+
]
|
|
11
|
+
: [])).annotate({ description });
|
|
12
|
+
const int = (description, min, max) => Integer.check(Schema.isGreaterThanOrEqualTo(min), Schema.isLessThanOrEqualTo(max)).annotate({ description });
|
|
13
|
+
const id = str("Use a supplied spreadsheet id as is; search Drive only for a name.", 256, /^[A-Za-z0-9_-]+$/);
|
|
14
|
+
const range = str("A1 range or named range; quote sheet titles and double internal apostrophes.", 512, /^[^\r\n]*[^.\r\n][^\r\n]*$/);
|
|
15
|
+
const ranges = Schema.Array(range).check(Schema.isMinLength(1), Schema.isMaxLength(20));
|
|
16
|
+
const cell = Schema.Union([Schema.String.check(isMaxChars(50000)), Schema.Finite, Schema.Boolean, Schema.Null]);
|
|
17
|
+
const rows = Schema.Array(Schema.Array(cell).check(Schema.isMaxLength(18278)))
|
|
18
|
+
.check(Schema.isMinLength(1), Schema.isMaxLength(10000))
|
|
19
|
+
.annotate({
|
|
20
|
+
description: "Rows of scalar cells, at most 50000 cells total. null skips a cell; empty string clears it.",
|
|
21
|
+
});
|
|
22
|
+
const mode = Schema.Literals(["RAW", "USER_ENTERED"]).annotate({
|
|
23
|
+
description: "RAW stores literals; USER_ENTERED parses formulas, dates and numbers as typed.",
|
|
24
|
+
});
|
|
25
|
+
const title = (max) => str("Title on one line.", max, /^[^\r\n]*$/);
|
|
26
|
+
const sheetFields = {
|
|
27
|
+
sheetId: Integer,
|
|
28
|
+
title: Schema.String,
|
|
29
|
+
index: Integer,
|
|
30
|
+
type: Schema.String,
|
|
31
|
+
hidden: Schema.Boolean,
|
|
32
|
+
rowCount: Integer,
|
|
33
|
+
columnCount: Integer,
|
|
34
|
+
frozenRowCount: Integer,
|
|
35
|
+
frozenColumnCount: Integer,
|
|
36
|
+
};
|
|
37
|
+
const updateFields = {
|
|
38
|
+
updatedRange: Schema.String,
|
|
39
|
+
updatedRows: Integer,
|
|
40
|
+
updatedColumns: Integer,
|
|
41
|
+
updatedCells: Integer,
|
|
42
|
+
};
|
|
43
|
+
const cuts = { truncated: Schema.Array(Schema.String) };
|
|
44
|
+
const AnyObject = Schema.Record(Schema.String, Schema.Unknown);
|
|
45
|
+
export const inputs = {
|
|
46
|
+
get_spreadsheet: Schema.Struct({ spreadsheetId: id }),
|
|
47
|
+
get_values: Schema.Struct({
|
|
48
|
+
spreadsheetId: id,
|
|
49
|
+
ranges,
|
|
50
|
+
valueRenderOption: Schema.optionalKey(Schema.Literals(["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"])),
|
|
51
|
+
dateTimeRenderOption: Schema.optionalKey(Schema.Literals(["SERIAL_NUMBER", "FORMATTED_STRING"])),
|
|
52
|
+
maxCells: Schema.optionalKey(int("Whole-row content budget; defaults to 2000 cells.", 1, 10000)),
|
|
53
|
+
maxBytes: Schema.optionalKey(int("Whole-page JSON byte budget; defaults to 192 KiB. Above that use a direct call.", 1024, 4194304)),
|
|
54
|
+
maxCellChars: Schema.optionalKey(int("Characters kept per cell; defaults to 5000. Read a cut cell alone with up to 50000.", 1, 50000)),
|
|
55
|
+
cursor: Schema.optionalKey(str("Opaque page.nextCursor; keep spreadsheet, ranges and render options unchanged.", 1024)),
|
|
56
|
+
}),
|
|
57
|
+
update_values: Schema.Struct({ spreadsheetId: id, range, values: rows, valueInputOption: mode }),
|
|
58
|
+
batch_update_values: Schema.Struct({
|
|
59
|
+
spreadsheetId: id,
|
|
60
|
+
data: Schema.Array(Schema.Struct({ range, values: rows })).check(Schema.isMinLength(1), Schema.isMaxLength(100)),
|
|
61
|
+
valueInputOption: mode,
|
|
62
|
+
}),
|
|
63
|
+
append_values: Schema.Struct({ spreadsheetId: id, range, values: rows, valueInputOption: mode }),
|
|
64
|
+
clear_values: Schema.Struct({ spreadsheetId: id, ranges }),
|
|
65
|
+
create_spreadsheet: Schema.Struct({
|
|
66
|
+
title: title(255),
|
|
67
|
+
sheetTitles: Schema.optionalKey(Schema.Array(title(100)).check(Schema.isMinLength(1), Schema.isMaxLength(50), Schema.makeFilter((values) => new Set(values).size === values.length, {
|
|
68
|
+
expected: "unique sheet titles",
|
|
69
|
+
toJsonSchema: () => ({ uniqueItems: true }),
|
|
70
|
+
}))),
|
|
71
|
+
}),
|
|
72
|
+
add_sheet: Schema.Struct({
|
|
73
|
+
spreadsheetId: id,
|
|
74
|
+
title: title(100),
|
|
75
|
+
index: Schema.optionalKey(int("Zero-based tab position; omit for last.", 0, 1000)),
|
|
76
|
+
rowCount: Schema.optionalKey(int("Grid rows.", 1, 1000000)),
|
|
77
|
+
columnCount: Schema.optionalKey(int("Grid columns.", 1, 18278)),
|
|
78
|
+
}),
|
|
79
|
+
batch_update_spreadsheet: Schema.Struct({
|
|
80
|
+
spreadsheetId: id,
|
|
81
|
+
requests: Schema.Array(Schema.Record(Schema.String, AnyObject)
|
|
82
|
+
.annotate({
|
|
83
|
+
description: "One reviewed Sheets Request kind and its object body; details provides nested contracts.",
|
|
84
|
+
})
|
|
85
|
+
.check(Schema.makeFilter((value) => Object.keys(value).length === 1, {
|
|
86
|
+
expected: "exactly one reviewed Sheets request kind",
|
|
87
|
+
toJsonSchema: () => ({ minProperties: 1, maxProperties: 1 }),
|
|
88
|
+
}))).check(Schema.isMinLength(1), Schema.isMaxLength(100)),
|
|
89
|
+
}),
|
|
90
|
+
};
|
|
91
|
+
export const outputs = {
|
|
92
|
+
get_spreadsheet: optional({
|
|
93
|
+
spreadsheetId: Schema.String,
|
|
94
|
+
title: Schema.String,
|
|
95
|
+
url: Schema.String,
|
|
96
|
+
locale: Schema.String,
|
|
97
|
+
timeZone: Schema.String,
|
|
98
|
+
sheets: Schema.Array(optional(sheetFields)),
|
|
99
|
+
namedRanges: Schema.Array(optional({ namedRangeId: Schema.String, name: Schema.String, sheetId: Integer, range: Schema.String })),
|
|
100
|
+
...cuts,
|
|
101
|
+
}),
|
|
102
|
+
get_values: optional({
|
|
103
|
+
spreadsheetId: Schema.String,
|
|
104
|
+
valueRanges: Schema.Array(optional({
|
|
105
|
+
range: Schema.String,
|
|
106
|
+
values: Schema.Array(Schema.Array(cell)),
|
|
107
|
+
rowOffset: Integer,
|
|
108
|
+
rowCount: Integer,
|
|
109
|
+
})),
|
|
110
|
+
cellCount: Integer,
|
|
111
|
+
page: Schema.Struct({ hasMore: Schema.Boolean, nextCursor: Schema.optionalKey(Schema.String) }),
|
|
112
|
+
...cuts,
|
|
113
|
+
}),
|
|
114
|
+
update_values: optional({ spreadsheetId: Schema.String, ...updateFields }),
|
|
115
|
+
batch_update_values: optional({
|
|
116
|
+
spreadsheetId: Schema.String,
|
|
117
|
+
totalUpdatedRows: Integer,
|
|
118
|
+
totalUpdatedColumns: Integer,
|
|
119
|
+
totalUpdatedCells: Integer,
|
|
120
|
+
totalUpdatedSheets: Integer,
|
|
121
|
+
updates: Schema.Array(optional(updateFields)),
|
|
122
|
+
}),
|
|
123
|
+
append_values: optional({ spreadsheetId: Schema.String, tableRange: Schema.String, ...updateFields }),
|
|
124
|
+
clear_values: optional({ spreadsheetId: Schema.String, clearedRanges: Schema.Array(Schema.String) }),
|
|
125
|
+
create_spreadsheet: optional({
|
|
126
|
+
spreadsheetId: Schema.String,
|
|
127
|
+
title: Schema.String,
|
|
128
|
+
url: Schema.String,
|
|
129
|
+
sheets: Schema.Array(optional({ sheetId: Integer, title: Schema.String })),
|
|
130
|
+
}),
|
|
131
|
+
add_sheet: optional({ spreadsheetId: Schema.String, ...sheetFields }),
|
|
132
|
+
batch_update_spreadsheet: optional({
|
|
133
|
+
spreadsheetId: Schema.String,
|
|
134
|
+
replies: Schema.Array(AnyObject),
|
|
135
|
+
note: Schema.String,
|
|
136
|
+
...cuts,
|
|
137
|
+
}),
|
|
138
|
+
};
|