@opengeni/contracts 5.5.0 → 5.5.2-canary.40656248492001
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/dist/agent-authored-durable-text.d.ts +9 -9
- package/dist/agent-config.d.ts +148 -37
- package/dist/api-key-presets.d.ts +19 -0
- package/dist/app-action-catalog-types.d.ts +32 -0
- package/dist/app-action-catalog.gen.d.ts +2 -0
- package/dist/app-actions.d.ts +91 -0
- package/dist/app-actions.js +10130 -0
- package/dist/app-actions.js.map +1 -0
- package/dist/app-shot.d.ts +55 -0
- package/dist/artifact-catalog.d.ts +33 -0
- package/dist/artifacts.d.ts +166 -0
- package/dist/atlassian-native-retirement.d.ts +16 -0
- package/dist/atlassian-native-retirement.js +30 -0
- package/dist/atlassian-native-retirement.js.map +1 -0
- package/dist/atlassian.js +48 -23
- package/dist/automation-templates.d.ts +434 -0
- package/dist/automation-templates.js +31 -0
- package/dist/automation-templates.js.map +1 -0
- package/dist/billing-subscriptions.d.ts +61 -0
- package/dist/bots.d.ts +583 -0
- package/dist/bundled-skills.d.ts +58 -2
- package/dist/canonical-human-identities.js +3 -1
- package/dist/child-lifecycle-notice-protocol.d.ts +45 -0
- package/dist/chunk-2QKIEAGY.js +396 -0
- package/dist/chunk-2QKIEAGY.js.map +1 -0
- package/dist/chunk-2WOWEWXV.js +426 -0
- package/dist/chunk-2WOWEWXV.js.map +1 -0
- package/dist/chunk-2ZIHHL72.js +153 -0
- package/dist/chunk-2ZIHHL72.js.map +1 -0
- package/dist/chunk-32U6NKQQ.js +389 -0
- package/dist/chunk-32U6NKQQ.js.map +1 -0
- package/dist/chunk-4YDDHSO2.js +799 -0
- package/dist/chunk-4YDDHSO2.js.map +1 -0
- package/dist/chunk-56SNIMDO.js +9 -0
- package/dist/chunk-56SNIMDO.js.map +1 -0
- package/dist/chunk-5RWB6QVL.js +101 -0
- package/dist/chunk-5RWB6QVL.js.map +1 -0
- package/dist/chunk-5UGUOT3L.js +243 -0
- package/dist/chunk-5UGUOT3L.js.map +1 -0
- package/dist/chunk-6LAT33BH.js +130 -0
- package/dist/chunk-6LAT33BH.js.map +1 -0
- package/dist/chunk-7272KVWZ.js +60 -0
- package/dist/chunk-7272KVWZ.js.map +1 -0
- package/dist/chunk-72QC2GTL.js +36 -0
- package/dist/chunk-72QC2GTL.js.map +1 -0
- package/dist/chunk-7EQGGZBY.js +105 -0
- package/dist/chunk-7EQGGZBY.js.map +1 -0
- package/dist/chunk-A3LXWVYU.js +382 -0
- package/dist/chunk-A3LXWVYU.js.map +1 -0
- package/dist/chunk-AQYDZUJV.js +34 -0
- package/dist/chunk-AQYDZUJV.js.map +1 -0
- package/dist/chunk-BHCEVVUP.js +93 -0
- package/dist/chunk-BHCEVVUP.js.map +1 -0
- package/dist/chunk-BMUTAZX5.js +486 -0
- package/dist/chunk-BMUTAZX5.js.map +1 -0
- package/dist/chunk-DGG6IBBK.js +150 -0
- package/dist/chunk-DGG6IBBK.js.map +1 -0
- package/dist/{chunk-YBW5JSA3.js → chunk-FBCTUMHI.js} +123 -102
- package/dist/chunk-FBCTUMHI.js.map +1 -0
- package/dist/chunk-G2KJTFIC.js +97 -0
- package/dist/chunk-G2KJTFIC.js.map +1 -0
- package/dist/chunk-G4RKARXZ.js +1167 -0
- package/dist/chunk-G4RKARXZ.js.map +1 -0
- package/dist/chunk-H6UJJIUM.js +350 -0
- package/dist/chunk-H6UJJIUM.js.map +1 -0
- package/dist/chunk-JOTHDW4H.js +18 -0
- package/dist/chunk-JOTHDW4H.js.map +1 -0
- package/dist/chunk-L4GUEP7K.js +56480 -0
- package/dist/chunk-L4GUEP7K.js.map +1 -0
- package/dist/{chunk-SIOU2K4U.js → chunk-LJH2EYGT.js} +23 -23
- package/dist/chunk-MTJKSIGA.js +161 -0
- package/dist/chunk-MTJKSIGA.js.map +1 -0
- package/dist/chunk-MYHMB6GZ.js +202 -0
- package/dist/chunk-MYHMB6GZ.js.map +1 -0
- package/dist/chunk-PI5VIKJY.js +660 -0
- package/dist/chunk-PI5VIKJY.js.map +1 -0
- package/dist/{chunk-RIY7GYQS.js → chunk-PTSROVDG.js} +2 -2
- package/dist/chunk-PUIUXIOL.js +189 -0
- package/dist/chunk-PUIUXIOL.js.map +1 -0
- package/dist/chunk-R6VXJIMB.js +19 -0
- package/dist/chunk-R6VXJIMB.js.map +1 -0
- package/dist/chunk-RLJUNVAM.js +15 -0
- package/dist/chunk-RLJUNVAM.js.map +1 -0
- package/dist/chunk-RR6APCBK.js +213 -0
- package/dist/chunk-RR6APCBK.js.map +1 -0
- package/dist/{chunk-TXTQIYCV.js → chunk-RUQ4I6DO.js} +59 -13
- package/dist/chunk-RUQ4I6DO.js.map +1 -0
- package/dist/{chunk-WYBDERIY.js → chunk-RWEEUDHD.js} +53 -42
- package/dist/chunk-RWEEUDHD.js.map +1 -0
- package/dist/chunk-S7MSQQL6.js +158 -0
- package/dist/chunk-S7MSQQL6.js.map +1 -0
- package/dist/{chunk-5Q54VCCH.js → chunk-SHO4YO4B.js} +20 -36
- package/dist/chunk-SHO4YO4B.js.map +1 -0
- package/dist/{chunk-HHZSZYYF.js → chunk-T3HSWMA5.js} +20 -4
- package/dist/chunk-T3HSWMA5.js.map +1 -0
- package/dist/{chunk-YRKRZ6OF.js → chunk-TOOJIBJC.js} +2 -2
- package/dist/chunk-UCUOTRS6.js +431 -0
- package/dist/chunk-UCUOTRS6.js.map +1 -0
- package/dist/chunk-UH4K7GP7.js +424 -0
- package/dist/chunk-UH4K7GP7.js.map +1 -0
- package/dist/chunk-UIZWGPHV.js +120 -0
- package/dist/chunk-UIZWGPHV.js.map +1 -0
- package/dist/chunk-VLUKBV6Y.js +1170 -0
- package/dist/chunk-VLUKBV6Y.js.map +1 -0
- package/dist/chunk-W2QQ5Y6K.js +55 -0
- package/dist/chunk-W2QQ5Y6K.js.map +1 -0
- package/dist/{chunk-Y3KNXVTD.js → chunk-W3NBPR4E.js} +131 -31
- package/dist/chunk-W3NBPR4E.js.map +1 -0
- package/dist/{chunk-NRMCVHAU.js → chunk-WMGO4HJU.js} +11 -9
- package/dist/chunk-WMGO4HJU.js.map +1 -0
- package/dist/{chunk-MYBZRDTY.js → chunk-WQI7VNN4.js} +19 -9
- package/dist/chunk-WQI7VNN4.js.map +1 -0
- package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
- package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
- package/dist/chunk-XB6GQLBH.js +76 -0
- package/dist/chunk-XB6GQLBH.js.map +1 -0
- package/dist/{chunk-D2HKF2EF.js → chunk-XP5M3IKT.js} +2 -2
- package/dist/{chunk-O77VSFYZ.js → chunk-ZMPU5BWE.js} +12 -2
- package/dist/chunk-ZMPU5BWE.js.map +1 -0
- package/dist/{chunk-3SIZGL3O.js → chunk-ZYVEJFNU.js} +22 -18
- package/dist/chunk-ZYVEJFNU.js.map +1 -0
- package/dist/claude-provider-account-authority.d.ts +18 -0
- package/dist/claude-subscription-oauth.d.ts +25 -0
- package/dist/claude-subscription-usage.d.ts +95 -1
- package/dist/client-error-report.d.ts +154 -8
- package/dist/client-error-report.js +157 -2
- package/dist/client-error-report.js.map +1 -1
- package/dist/code-search.d.ts +1 -1
- package/dist/code-search.js.map +1 -1
- package/dist/codex-provider-account-authority.js +23 -12
- package/dist/codex-provider-account-authority.js.map +1 -1
- package/dist/company-profile.d.ts +144 -0
- package/dist/connect.d.ts +38 -0
- package/dist/connect.js +244 -164
- package/dist/connect.js.map +1 -1
- package/dist/connection-account-label.d.ts +2 -0
- package/dist/connection-account-label.js +34 -0
- package/dist/connection-account-label.js.map +1 -0
- package/dist/connection-authority.js +49 -24
- package/dist/connector-attachments.js +3 -1
- package/dist/connector-destinations.js +3 -1
- package/dist/connector-tool-permissions.d.ts +68 -4
- package/dist/credential-profiles.d.ts +166 -0
- package/dist/cua-desktop-tools.d.ts +19 -0
- package/dist/define-schema.d.ts +8 -0
- package/dist/desktop-app.d.ts +28 -0
- package/dist/direct-model-provider.d.ts +38 -0
- package/dist/document-artifact-commands.js +2 -2
- package/dist/document-artifact-query.js +2 -2
- package/dist/editable-artifact-binary.d.ts +7 -0
- package/dist/editable-artifact-causal-frontier.js +2 -2
- package/dist/editable-artifact-codec-registry.js +7 -7
- package/dist/editable-artifact-committed-transaction.js +4 -2
- package/dist/editable-artifact-live.js +8 -8
- package/dist/editable-artifact-serialized-commit.js +9 -9
- package/dist/editable-artifact-versions.d.ts +7 -1
- package/dist/editable-artifact-versions.js +1 -1
- package/dist/editable-artifacts.js +49 -43
- package/dist/event-preview.d.ts +22 -0
- package/dist/event-triggers.d.ts +1253 -0
- package/dist/event-triggers.js +148 -0
- package/dist/event-triggers.js.map +1 -0
- package/dist/external-identities.d.ts +34 -0
- package/dist/external-identities.js +4 -2
- package/dist/feedback.d.ts +181 -0
- package/dist/file-access.d.ts +23 -0
- package/dist/first-party-tool-authorization.d.ts +852 -0
- package/dist/github-repository-contracts.js +64 -43
- package/dist/github-repository-contracts.js.map +1 -1
- package/dist/google-drive-native-retirement.d.ts +12 -0
- package/dist/google-drive-native-retirement.js +20 -0
- package/dist/google-drive-native-retirement.js.map +1 -0
- package/dist/google-drive.d.ts +1 -1
- package/dist/google-drive.js +323 -239
- package/dist/google-drive.js.map +1 -1
- package/dist/host-mcp-bindings.js +250 -198
- package/dist/host-mcp-bindings.js.map +1 -1
- package/dist/index.d.ts +29072 -20593
- package/dist/index.js +2432 -366
- package/dist/inference-residency.d.ts +22 -0
- package/dist/insights-usage.d.ts +948 -0
- package/dist/insights-usage.js +608 -0
- package/dist/insights-usage.js.map +1 -0
- package/dist/integration-capability-id.d.ts +8 -0
- package/dist/interaction-action-deadline.d.ts +48 -0
- package/dist/interaction-driver-diagnostic.d.ts +28 -0
- package/dist/interaction.d.ts +2126 -881
- package/dist/knowledge-entries.d.ts +38 -0
- package/dist/knowledge-preparation.d.ts +4 -0
- package/dist/learning-refusal.d.ts +43 -0
- package/dist/learning-refusal.js +49 -0
- package/dist/learning-refusal.js.map +1 -0
- package/dist/managed-auth-session-sets.d.ts +1 -0
- package/dist/managed-auth-session-sets.js +207 -146
- package/dist/managed-auth-session-sets.js.map +1 -1
- package/dist/managed-sign-in-methods.d.ts +96 -0
- package/dist/managed-sign-in-methods.js +157 -35
- package/dist/managed-sign-in-methods.js.map +1 -1
- package/dist/mcp-structured-content.d.ts +25 -0
- package/dist/message-time-zone.d.ts +38 -0
- package/dist/message-time-zone.js +19 -0
- package/dist/message-time-zone.js.map +1 -0
- package/dist/modal-native-proof-v2.d.ts +587 -0
- package/dist/modal-native-proof-v2.js +39 -0
- package/dist/modal-native-proof-v2.js.map +1 -0
- package/dist/model-account-choice.d.ts +237 -0
- package/dist/model-account-settings.d.ts +422 -0
- package/dist/model-availability.d.ts +15 -0
- package/dist/model-connection-access.d.ts +13 -0
- package/dist/model-context-inspector.d.ts +8 -0
- package/dist/model-display.d.ts +43 -0
- package/dist/model-display.js +17 -0
- package/dist/model-display.js.map +1 -0
- package/dist/model-picker-order.js.map +1 -1
- package/dist/model-residency.d.ts +304 -0
- package/dist/organization-access.d.ts +416 -0
- package/dist/organization-access.js +40 -0
- package/dist/organization-access.js.map +1 -0
- package/dist/organization-integration-policy.d.ts +18 -0
- package/dist/organization-membership-lifecycle.d.ts +66 -0
- package/dist/organization-model-usage.d.ts +146 -0
- package/dist/organization-model-usage.js +87 -0
- package/dist/organization-model-usage.js.map +1 -0
- package/dist/organization-recovery.js +3 -1
- package/dist/organization-usage.d.ts +12 -0
- package/dist/passkey-only-account.d.ts +14 -0
- package/dist/passkey-only-account.js +13 -0
- package/dist/passkey-only-account.js.map +1 -0
- package/dist/permissions.d.ts +19 -0
- package/dist/personal-github.js +220 -148
- package/dist/personal-github.js.map +1 -1
- package/dist/personal-integration-setup.d.ts +81 -0
- package/dist/personal-integration-setup.js +42 -0
- package/dist/personal-integration-setup.js.map +1 -0
- package/dist/prepared-mcp-setup.d.ts +54 -0
- package/dist/prepared-mcp-setup.js +13 -0
- package/dist/prepared-mcp-setup.js.map +1 -0
- package/dist/presentation-artifact-commands.js +2 -2
- package/dist/presentation-artifact-query.js +2 -2
- package/dist/primitives.d.ts +18 -0
- package/dist/product-analytics.d.ts +27 -10
- package/dist/product-lifecycle-facts.d.ts +26 -3
- package/dist/prompt-cache-diagnostics.d.ts +92 -0
- package/dist/recordings.d.ts +1371 -0
- package/dist/remember.d.ts +98 -2
- package/dist/retained-output.d.ts +4 -2
- package/dist/sandbox-file-artifacts.d.ts +19 -2
- package/dist/sandbox-provider-command.d.ts +5 -44
- package/dist/sandbox-recovery.d.ts +139 -8
- package/dist/secret-generator.d.ts +44 -0
- package/dist/secret-mask-strings.d.ts +32 -0
- package/dist/secret-references.d.ts +90 -0
- package/dist/secret-resolution.d.ts +143 -0
- package/dist/secret-shape-masking.d.ts +52 -0
- package/dist/secret-shape-masking.js +19 -0
- package/dist/secret-shape-masking.js.map +1 -0
- package/dist/secret-totp.d.ts +41 -0
- package/dist/secret-use-approval-question.d.ts +11 -0
- package/dist/secret-use-approval-question.js +11 -0
- package/dist/secret-use-approval-question.js.map +1 -0
- package/dist/secret-use-approvals.d.ts +106 -0
- package/dist/secret-value-masking.d.ts +299 -0
- package/dist/secret-value-masking.js +62 -0
- package/dist/secret-value-masking.js.map +1 -0
- package/dist/secret-value.d.ts +19 -0
- package/dist/session-history-import.d.ts +444 -8
- package/dist/session-history.d.ts +111 -0
- package/dist/session-history.js +35 -0
- package/dist/session-history.js.map +1 -0
- package/dist/session-list-entries.d.ts +8 -0
- package/dist/session-list-entries.js +61 -0
- package/dist/session-list-entries.js.map +1 -0
- package/dist/session-mcp-projections.d.ts +13 -1
- package/dist/session-mcp-tool-permissions.d.ts +62 -0
- package/dist/session-target.d.ts +18 -0
- package/dist/session-titles.d.ts +8 -0
- package/dist/session-titles.js +5 -1
- package/dist/session-usage-limit-refusal.d.ts +34 -0
- package/dist/session-usage-limit-refusal.js +15 -0
- package/dist/session-usage-limit-refusal.js.map +1 -0
- package/dist/session-usage-limits.d.ts +127 -0
- package/dist/session-usage-limits.js +43 -0
- package/dist/session-usage-limits.js.map +1 -0
- package/dist/site-data.d.ts +286 -0
- package/dist/site-operations.d.ts +39 -0
- package/dist/site-publishing.d.ts +813 -0
- package/dist/site-session-http.d.ts +103 -4
- package/dist/site-session-http.js +27 -1
- package/dist/site-sql.d.ts +425 -0
- package/dist/skills.d.ts +38 -0
- package/dist/slack-bot-scopes.d.ts +9 -7
- package/dist/slack-bot-scopes.js +6 -3
- package/dist/slack-rest-mcp.d.ts +36 -0
- package/dist/slack-rest-mcp.js +25 -0
- package/dist/slack-rest-mcp.js.map +1 -0
- package/dist/spreadsheet-artifact-commands.d.ts +14 -1
- package/dist/spreadsheet-artifact-commands.js +9 -2
- package/dist/spreadsheet-artifact-query.d.ts +13 -6
- package/dist/spreadsheet-artifact-query.js +4 -3
- package/dist/subscription-account-actions.d.ts +83 -0
- package/dist/subscription-account-pools.d.ts +326 -0
- package/dist/subscription-personal-authority-v2.d.ts +28 -0
- package/dist/subscription-personal-authority-v2.js +13 -0
- package/dist/subscription-personal-authority-v2.js.map +1 -0
- package/dist/subscription-plans.d.ts +38 -0
- package/dist/subscription-usage-pool.d.ts +89 -0
- package/dist/tool-action-review.d.ts +141 -0
- package/dist/tool-catalog.d.ts +479 -0
- package/dist/tool-policy.d.ts +5 -0
- package/dist/tool-review-presentation.d.ts +29 -0
- package/dist/tool-review-presentation.js +21 -0
- package/dist/tool-review-presentation.js.map +1 -0
- package/dist/turn-serving-policy.d.ts +223 -0
- package/dist/usage-allowances.d.ts +30 -0
- package/dist/usage-allowances.js +5 -1
- package/dist/values.d.ts +11 -0
- package/dist/values.js +19 -0
- package/dist/values.js.map +1 -0
- package/dist/vault-provider-wire.d.ts +907 -0
- package/dist/vault-provider-wire.js +74 -0
- package/dist/vault-provider-wire.js.map +1 -0
- package/dist/vaults.d.ts +2185 -0
- package/dist/video-generation.d.ts +75 -0
- package/dist/video-generation.js +8 -1
- package/dist/workspace-control-event.d.ts +18 -0
- package/dist/workspace-control-event.js +18 -0
- package/dist/workspace-control-event.js.map +1 -0
- package/dist/workspace-governance-context.d.ts +18 -0
- package/dist/workspace-integration-wire.d.ts +1 -1
- package/dist/workspace-integration-wire.js +1 -1
- package/dist/workspace-integrations.d.ts +212 -12
- package/dist/xai-provider-account-authority.js +3 -1
- package/package.json +121 -4
- package/src/agent-authored-durable-text.ts +14 -11
- package/src/agent-config.ts +382 -203
- package/src/agent-instruction-changes.ts +94 -74
- package/src/agent-learning.ts +94 -66
- package/src/agent-topology.ts +58 -52
- package/src/api-key-presets.ts +28 -0
- package/src/app-action-catalog-types.ts +32 -0
- package/src/app-action-catalog.gen.ts +9905 -0
- package/src/app-actions.ts +365 -0
- package/src/app-shot.ts +176 -0
- package/src/artifact-catalog.ts +81 -46
- package/src/artifacts.ts +360 -227
- package/src/atlassian-native-retirement.ts +33 -0
- package/src/atlassian.ts +136 -108
- package/src/automation-templates.ts +201 -0
- package/src/billing-subscriptions.ts +48 -0
- package/src/bots.ts +238 -0
- package/src/bundled-skills.ts +79 -22
- package/src/canonical-human-identities.ts +65 -62
- package/src/child-lifecycle-notice-protocol.gen.json +1310 -0
- package/src/child-lifecycle-notice-protocol.ts +224 -0
- package/src/claude-provider-account-authority.ts +12 -0
- package/src/claude-subscription-oauth.ts +61 -19
- package/src/claude-subscription-usage.ts +64 -35
- package/src/client-error-report.ts +344 -9
- package/src/code-search.ts +1 -1
- package/src/codex-provider-account-authority.ts +22 -16
- package/src/company-brain-governed-writes.ts +265 -244
- package/src/company-brain.ts +165 -154
- package/src/company-profile.ts +362 -297
- package/src/connect.ts +222 -173
- package/src/connection-account-label.ts +45 -0
- package/src/connection-authority.ts +172 -152
- package/src/connector-attachments.ts +139 -123
- package/src/connector-destinations.ts +48 -43
- package/src/connector-tool-permissions.ts +104 -46
- package/src/credential-profiles.ts +161 -0
- package/src/cua-desktop-tools.gen.json +6722 -0
- package/src/cua-desktop-tools.linux.gen.json +6798 -0
- package/src/cua-desktop-tools.ts +42 -0
- package/src/cua-desktop-tools.windows.gen.json +6739 -0
- package/src/define-schema.ts +10 -0
- package/src/desktop-app.ts +50 -0
- package/src/direct-model-provider.ts +112 -0
- package/src/editable-artifact-binary.ts +29 -8
- package/src/editable-artifact-committed-transaction.ts +19 -18
- package/src/editable-artifact-serialized-commit.ts +8 -2
- package/src/editable-artifact-versions.ts +7 -1
- package/src/event-preview.ts +53 -3
- package/src/event-triggers.ts +891 -0
- package/src/external-identities.ts +239 -195
- package/src/feedback.ts +125 -30
- package/src/file-access.ts +26 -0
- package/src/first-party-tool-authorization.ts +383 -0
- package/src/github-repository-contracts.ts +78 -64
- package/src/google-drive-native-retirement.ts +20 -0
- package/src/google-drive.ts +286 -234
- package/src/governed-learning-activation.ts +159 -137
- package/src/governed-learning-evaluator.ts +141 -133
- package/src/host-mcp-bindings.ts +244 -221
- package/src/image-generation.ts +105 -95
- package/src/index.ts +13928 -9899
- package/src/inference-residency.ts +36 -0
- package/src/insights-usage.ts +774 -0
- package/src/integration-capability-id.ts +16 -0
- package/src/interaction-action-deadline.ts +143 -0
- package/src/interaction-driver-diagnostic.ts +89 -0
- package/src/interaction.ts +3527 -2427
- package/src/knowledge-entries.ts +386 -299
- package/src/knowledge-preparation.ts +49 -41
- package/src/knowledge.ts +242 -213
- package/src/learning-refusal.ts +90 -0
- package/src/managed-auth-session-sets.ts +180 -133
- package/src/managed-sign-in-methods.ts +156 -34
- package/src/mcp-oauth.ts +58 -46
- package/src/mcp-receipts.ts +199 -194
- package/src/mcp-structured-content.ts +81 -0
- package/src/memory-slack-delivery.ts +172 -142
- package/src/message-time-zone.ts +109 -0
- package/src/modal-native-proof-v2.ts +430 -0
- package/src/model-account-choice.ts +178 -0
- package/src/model-account-settings.ts +210 -0
- package/src/model-availability.ts +22 -0
- package/src/model-connection-access.ts +62 -14
- package/src/model-context-inspector.ts +130 -109
- package/src/model-display.ts +221 -0
- package/src/model-picker-order.ts +1 -1
- package/src/model-residency.ts +535 -0
- package/src/organization-access.ts +216 -0
- package/src/organization-integration-policy.ts +47 -28
- package/src/organization-membership-lifecycle.ts +558 -384
- package/src/organization-model-usage.ts +82 -0
- package/src/organization-recovery.ts +148 -135
- package/src/organization-usage.ts +84 -52
- package/src/passkey-only-account.ts +29 -0
- package/src/permissions.ts +94 -52
- package/src/personal-github.ts +211 -171
- package/src/personal-integration-setup.ts +150 -0
- package/src/preference-registry.ts +319 -263
- package/src/prepared-mcp-setup.ts +190 -0
- package/src/primitives.ts +22 -0
- package/src/product-analytics.ts +40 -15
- package/src/product-lifecycle-facts.ts +50 -20
- package/src/prompt-cache-diagnostics.ts +212 -0
- package/src/recordings.ts +1153 -0
- package/src/remember.ts +184 -172
- package/src/retained-output.ts +181 -168
- package/src/sandbox-file-artifacts.ts +78 -57
- package/src/sandbox-provider-command.ts +55 -72
- package/src/sandbox-recovery.ts +163 -77
- package/src/scoped-knowledge.ts +62 -43
- package/src/secret-generator.ts +156 -0
- package/src/secret-mask-strings.ts +175 -0
- package/src/secret-references.ts +414 -0
- package/src/secret-resolution.ts +322 -0
- package/src/secret-shape-masking.ts +573 -0
- package/src/secret-totp.ts +188 -0
- package/src/secret-use-approval-question.ts +22 -0
- package/src/secret-use-approvals.ts +219 -0
- package/src/secret-value-masking.ts +1283 -0
- package/src/secret-value.ts +22 -0
- package/src/session-goal-reports.ts +55 -49
- package/src/session-history-import.ts +84 -68
- package/src/session-history.ts +197 -0
- package/src/session-list-entries.ts +106 -0
- package/src/session-mcp-projections.ts +21 -3
- package/src/session-mcp-tool-permissions.ts +109 -0
- package/src/session-message-search.ts +46 -38
- package/src/session-target.ts +58 -0
- package/src/session-titles.ts +40 -4
- package/src/session-topology-primitives.ts +20 -12
- package/src/session-usage-limit-refusal.ts +101 -0
- package/src/session-usage-limits.ts +169 -0
- package/src/signup-attribution.ts +20 -15
- package/src/site-data.ts +337 -0
- package/src/site-operations.ts +154 -0
- package/src/site-publishing.ts +903 -0
- package/src/site-session-http.ts +344 -16
- package/src/site-sql.ts +1120 -0
- package/src/skill-use.ts +18 -17
- package/src/skills.ts +105 -50
- package/src/slack-bot-scopes.ts +18 -35
- package/src/slack-rest-mcp.ts +222 -0
- package/src/slack-task-policy.ts +97 -73
- package/src/spreadsheet-artifact-commands.ts +74 -13
- package/src/spreadsheet-artifact-query.ts +188 -50
- package/src/subscription-account-actions.ts +103 -0
- package/src/subscription-account-pools.ts +74 -0
- package/src/subscription-personal-authority-v2.ts +69 -0
- package/src/subscription-plans.ts +51 -0
- package/src/subscription-usage-pool.ts +44 -0
- package/src/task-notes.ts +70 -68
- package/src/tool-action-review.ts +271 -0
- package/src/tool-catalog.ts +694 -379
- package/src/tool-policy.ts +82 -0
- package/src/tool-result-spill.ts +13 -9
- package/src/tool-review-presentation.ts +643 -0
- package/src/turn-serving-policy.ts +167 -0
- package/src/usage-allowances.ts +212 -136
- package/src/values.ts +25 -0
- package/src/vault-provider-wire.ts +580 -0
- package/src/vaults.ts +1296 -0
- package/src/video-generation.ts +430 -361
- package/src/work-claims.ts +183 -166
- package/src/workspace-control-event.ts +134 -0
- package/src/workspace-governance-context.ts +63 -0
- package/src/workspace-instruction-policies.ts +346 -279
- package/src/workspace-integration-wire.ts +10 -0
- package/src/workspace-integrations.ts +488 -398
- package/src/workspace-learning-administration.ts +58 -44
- package/src/workspace-learning-policy.ts +126 -99
- package/src/workspace-state.ts +239 -220
- package/src/xai-provider-account-authority.ts +23 -17
- package/dist/chunk-3SIZGL3O.js.map +0 -1
- package/dist/chunk-566IFOVP.js +0 -26133
- package/dist/chunk-566IFOVP.js.map +0 -1
- package/dist/chunk-5IXYF6XN.js +0 -728
- package/dist/chunk-5IXYF6XN.js.map +0 -1
- package/dist/chunk-5Q54VCCH.js.map +0 -1
- package/dist/chunk-BCS7WHCK.js +0 -139
- package/dist/chunk-BCS7WHCK.js.map +0 -1
- package/dist/chunk-EK7NDGFR.js +0 -128
- package/dist/chunk-EK7NDGFR.js.map +0 -1
- package/dist/chunk-GRG7PHWQ.js +0 -25
- package/dist/chunk-GRG7PHWQ.js.map +0 -1
- package/dist/chunk-HHZSZYYF.js.map +0 -1
- package/dist/chunk-ICDZGUX2.js +0 -186
- package/dist/chunk-ICDZGUX2.js.map +0 -1
- package/dist/chunk-JUFK3T4Q.js +0 -80
- package/dist/chunk-JUFK3T4Q.js.map +0 -1
- package/dist/chunk-MYBZRDTY.js.map +0 -1
- package/dist/chunk-NRMCVHAU.js.map +0 -1
- package/dist/chunk-O77VSFYZ.js.map +0 -1
- package/dist/chunk-P3HLDT77.js +0 -59
- package/dist/chunk-P3HLDT77.js.map +0 -1
- package/dist/chunk-TXTQIYCV.js.map +0 -1
- package/dist/chunk-WYBDERIY.js.map +0 -1
- package/dist/chunk-Y3KNXVTD.js.map +0 -1
- package/dist/chunk-YBW5JSA3.js.map +0 -1
- package/dist/chunk-YRXAWWCU.js +0 -45
- package/dist/chunk-YRXAWWCU.js.map +0 -1
- package/dist/chunk-YWMOIZ6A.js +0 -185
- package/dist/chunk-YWMOIZ6A.js.map +0 -1
- package/dist/site-request-headers.test.d.ts +0 -1
- package/dist/transcription-recordings.d.ts +0 -300
- package/src/transcription-recordings.ts +0 -169
- /package/dist/{chunk-SIOU2K4U.js.map → chunk-LJH2EYGT.js.map} +0 -0
- /package/dist/{chunk-RIY7GYQS.js.map → chunk-PTSROVDG.js.map} +0 -0
- /package/dist/{chunk-YRKRZ6OF.js.map → chunk-TOOJIBJC.js.map} +0 -0
- /package/dist/{chunk-D2HKF2EF.js.map → chunk-XP5M3IKT.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/spreadsheet-artifact-date.ts","../src/spreadsheet-artifact-commands.ts"],"sourcesContent":["const ECMASCRIPT_DATE_MAX_MILLISECONDS = 8_640_000_000_000_000n;\n\n/** Parses only the exact string form emitted by `Date.prototype.toISOString`. */\nexport function canonicalSpreadsheetDateMilliseconds(value: unknown): number {\n const milliseconds = typeof value === \"string\" ? Date.parse(value) : Number.NaN;\n if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {\n throw new TypeError(\"date must be canonical ISO\");\n }\n return milliseconds;\n}\n\n/** Converts a signed wire integer to a canonical ISO instant without lossy coercion. */\nexport function canonicalSpreadsheetDateFromMilliseconds(milliseconds: bigint): string {\n if (\n milliseconds < -ECMASCRIPT_DATE_MAX_MILLISECONDS ||\n milliseconds > ECMASCRIPT_DATE_MAX_MILLISECONDS\n ) {\n throw new RangeError(\"date outside supported range\");\n }\n return new Date(Number(milliseconds)).toISOString();\n}\n","import {\n canonicalSpreadsheetDateFromMilliseconds,\n canonicalSpreadsheetDateMilliseconds,\n} from \"./spreadsheet-artifact-date\";\nimport { SPREADSHEET_ARTIFACT_COMMAND_VERSION } from \"./editable-artifact-versions\";\n\n/**\n * Canonical, identity-free spreadsheet mutation commands nested inside\n * `OGATX001`. Artifact, actor, transaction, delivery, and causal identity must\n * never be added here: the outer authored-intent envelope is their sole wire\n * authority.\n */\n\nexport { SPREADSHEET_ARTIFACT_COMMAND_VERSION } from \"./editable-artifact-versions\";\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS = 4_096;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS = 1_000_000;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES = 1 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS = 31;\n\nconst MAGIC = new TextEncoder().encode(\"OGASC002\");\nconst HEADER_BYTES = 8 + 2 + 2 + 4 + 8;\nconst CHECKSUM_BYTES = 8;\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nconst LOWER_HEX_ID = /^[0-9a-f]{32}$/u;\nconst UINT64_HEX_ZERO = \"0\".repeat(16);\nconst UINT32_MAX = 0xffff_ffff;\nconst FNV_OFFSET = 0xcbf29ce484222325n;\nconst FNV_PRIME = 0x100000001b3n;\n\ndeclare const stableIdBrand: unique symbol;\n\n/** Fixed-width lowercase hexadecimal 128-bit id. Runtime helpers enforce use. */\nexport type EditableArtifactStableId = string & {\n readonly [stableIdBrand]: \"EditableArtifactStableId\";\n};\n\n/**\n * A concrete sheet generation. The object id follows the offline allocator\n * invariant (both 64-bit halves nonzero); a derived operation id reserves only\n * the all-zero 128-bit value.\n */\nexport type SpreadsheetSheetGeneration = Readonly<{\n kind: \"generation\";\n sheetId: EditableArtifactStableId;\n creationOperationId: EditableArtifactStableId;\n}>;\n\n/**\n * Reference to a sheet created by an earlier command in this same batch.\n * This avoids recursively embedding the creation operation id, which is\n * derived from the hash of the complete outer intent.\n */\nexport type SpreadsheetPriorCreatePrecondition = Readonly<{\n kind: \"created-in-batch\";\n sheetId: EditableArtifactStableId;\n createCommandIndex: number;\n}>;\n\nexport type SpreadsheetSheetPrecondition =\n | SpreadsheetSheetGeneration\n | SpreadsheetPriorCreatePrecondition;\n\nexport type SpreadsheetCellPoint = Readonly<{ row: number; column: number }>;\nexport type SpreadsheetCellRange = Readonly<{\n start: SpreadsheetCellPoint;\n end: SpreadsheetCellPoint;\n}>;\n\nexport type SpreadsheetFormulaError = Readonly<{ error: string }>;\nexport type SpreadsheetDateValue = Readonly<{ date: string }>;\nexport type SpreadsheetCellScalar =\n | null\n | boolean\n | number\n | string\n | SpreadsheetDateValue\n | SpreadsheetFormulaError;\nexport type SpreadsheetFormulaCell = Readonly<{\n formula: string;\n}>;\nexport type SpreadsheetCellInput = SpreadsheetCellScalar | SpreadsheetFormulaCell;\n\nexport type SpreadsheetCreateSheetCommand = Readonly<{\n kind: \"sheet.create\";\n sheetId: EditableArtifactStableId;\n name: string;\n after: SpreadsheetSheetPrecondition | null;\n}>;\n\nexport type SpreadsheetRenameSheetCommand = Readonly<{\n kind: \"sheet.rename\";\n sheet: SpreadsheetSheetPrecondition;\n name: string;\n}>;\n\nexport type SpreadsheetDeleteSheetCommand = Readonly<{\n kind: \"sheet.delete\";\n sheet: SpreadsheetSheetPrecondition;\n}>;\n\n/** Row-major rectangular write; `cells.length === rows * columns`. */\nexport type SpreadsheetSetCellsCommand = Readonly<{\n kind: \"cells.set\";\n sheet: SpreadsheetSheetPrecondition;\n anchor: SpreadsheetCellPoint;\n rows: number;\n columns: number;\n cells: readonly SpreadsheetCellInput[];\n}>;\n\nexport type SpreadsheetClearRangeCommand = Readonly<{\n kind: \"range.clear\";\n sheet: SpreadsheetSheetPrecondition;\n range: SpreadsheetCellRange;\n}>;\n\nexport type SpreadsheetArtifactCommand =\n | SpreadsheetCreateSheetCommand\n | SpreadsheetRenameSheetCommand\n | SpreadsheetDeleteSheetCommand\n | SpreadsheetSetCellsCommand\n | SpreadsheetClearRangeCommand;\n\nexport type SpreadsheetArtifactCommandBatch = Readonly<{\n version: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;\n commands: readonly SpreadsheetArtifactCommand[];\n}>;\n\n/** Validates a generic nonzero 128-bit id and returns its nominal type. */\nexport function editableArtifactStableId(value: string): EditableArtifactStableId {\n return genericStableId(value, \"stable id\");\n}\n\n/** Validates a sheet object id with nonzero allocator namespace and counter. */\nexport function spreadsheetSheetId(value: string): EditableArtifactStableId {\n return sheetObjectId(value, \"sheet id\");\n}\n\nexport function encodeSpreadsheetArtifactCommandBatch(\n input: SpreadsheetArtifactCommandBatch,\n): Uint8Array {\n const batch = batchRecord(input);\n const payload = new BinaryWriter(\n SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES,\n );\n const context = new CommandContext();\n for (let index = 0; index < batch.commands.length; index += 1) {\n const command = ownArrayElement(batch.commands, index, \"commands\");\n encodeCommand(payload, command, index, context);\n }\n\n const payloadBytes = payload.finish();\n const output = new BinaryWriter(SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES);\n output.bytes(MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_COMMAND_VERSION);\n output.u16(0);\n output.u32(batch.commands.length);\n output.u64(BigInt(payloadBytes.byteLength));\n output.bytes(payloadBytes);\n output.u64(fnv1a64(output.view()));\n return output.finish();\n}\n\nexport function decodeSpreadsheetArtifactCommandBatch(\n bytes: Uint8Array,\n): SpreadsheetArtifactCommandBatch {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError(\"spreadsheet command bytes must be a Uint8Array\");\n }\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES) {\n throw new RangeError(\"spreadsheet command envelope exceeds its byte limit\");\n }\n if (bytes.byteLength < HEADER_BYTES + CHECKSUM_BYTES) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n const header = new BinaryReader(bytes);\n if (!equalBytes(header.bytes(MAGIC.byteLength), MAGIC)) {\n throw new TypeError(\"invalid spreadsheet command magic\");\n }\n const version = header.u16();\n if (version !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {\n throw new TypeError(`unsupported spreadsheet command version: ${version}`);\n }\n if (header.u16() !== 0) {\n throw new TypeError(\"spreadsheet command reserved flags must be zero\");\n }\n const commandCount = header.u32();\n if (commandCount < 1 || commandCount > SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS) {\n throw new RangeError(\"spreadsheet command count is outside its limit\");\n }\n const payloadLength = safeLength(header.u64(), \"spreadsheet command payload\");\n const expectedLength = HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expectedLength) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n if (bytes.byteLength > expectedLength) {\n throw new TypeError(\"spreadsheet command envelope contains trailing bytes\");\n }\n const advertisedChecksum = readU64At(bytes, expectedLength - CHECKSUM_BYTES);\n const actualChecksum = fnv1a64(bytes.subarray(0, expectedLength - CHECKSUM_BYTES));\n if (advertisedChecksum !== actualChecksum) {\n throw new TypeError(\"spreadsheet command checksum does not match\");\n }\n\n const payload = new BinaryReader(bytes.subarray(HEADER_BYTES, HEADER_BYTES + payloadLength));\n const context = new CommandContext();\n const commands: SpreadsheetArtifactCommand[] = [];\n for (let index = 0; index < commandCount; index += 1) {\n commands.push(decodeCommand(payload, index, context));\n }\n payload.done(\"spreadsheet command payload contains trailing bytes\");\n return Object.freeze({\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commands: Object.freeze(commands),\n });\n}\n\n/** Decodes, re-encodes, and proves byte-for-byte canonicality. */\nexport function assertCanonicalSpreadsheetArtifactCommandBytes(bytes: Uint8Array): Uint8Array {\n const canonical = encodeSpreadsheetArtifactCommandBatch(\n decodeSpreadsheetArtifactCommandBatch(bytes),\n );\n if (!equalBytes(bytes, canonical)) {\n throw new TypeError(\"spreadsheet command envelope is not canonical\");\n }\n return bytes;\n}\n\nclass CommandContext {\n readonly createdByIndex = new Map<number, string>();\n readonly createdSheetIds = new Set<string>();\n totalCells = 0;\n\n registerCreate(index: number, sheetId: string): void {\n if (this.createdSheetIds.has(sheetId)) {\n throw commandError(index, \"sheet id is created more than once in the batch\");\n }\n this.createdByIndex.set(index, sheetId);\n this.createdSheetIds.add(sheetId);\n }\n\n addCells(index: number, rows: number, columns: number): number {\n const count = rows * columns;\n if (!Number.isSafeInteger(count) || count < 1) {\n throw commandError(index, \"cell block dimensions are invalid\");\n }\n const next = this.totalCells + count;\n if (!Number.isSafeInteger(next) || next > SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS) {\n throw commandError(index, \"cell count exceeds its transaction limit\");\n }\n this.totalCells = next;\n return count;\n }\n}\n\nfunction encodeCommand(\n writer: BinaryWriter,\n value: unknown,\n index: number,\n context: CommandContext,\n): void {\n const command = plainRecord(value, `spreadsheet command ${index}`);\n switch (command.kind) {\n case \"sheet.create\": {\n exactKeys(command, [\"after\", \"kind\", \"name\", \"sheetId\"], `spreadsheet command ${index}`);\n const sheetId = sheetObjectId(command.sheetId, `spreadsheet command ${index} sheetId`);\n const name = sheetName(command.name, index);\n writer.u8(0);\n writer.stableId(sheetId);\n writer.string(name, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n if (command.after === null) {\n writer.u8(0);\n } else {\n writer.u8(1);\n encodeSheetPrecondition(writer, command.after, index, context);\n }\n context.registerCreate(index, sheetId);\n break;\n }\n case \"sheet.rename\": {\n exactKeys(command, [\"kind\", \"name\", \"sheet\"], `spreadsheet command ${index}`);\n writer.u8(1);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.string(sheetName(command.name, index), SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n break;\n }\n case \"sheet.delete\": {\n exactKeys(command, [\"kind\", \"sheet\"], `spreadsheet command ${index}`);\n writer.u8(2);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n break;\n }\n case \"cells.set\": {\n exactKeys(\n command,\n [\"anchor\", \"cells\", \"columns\", \"kind\", \"rows\", \"sheet\"],\n `spreadsheet command ${index}`,\n );\n const anchor = point(command.anchor, `spreadsheet command ${index} anchor`);\n const rows = positiveU32(command.rows, `spreadsheet command ${index} rows`);\n const columns = positiveU32(command.columns, `spreadsheet command ${index} columns`);\n assertExtent(anchor.row, rows, \"row\", index);\n assertExtent(anchor.column, columns, \"column\", index);\n const count = context.addCells(index, rows, columns);\n if (!Array.isArray(command.cells) || command.cells.length !== count) {\n throw commandError(index, `cells must contain exactly ${count} row-major values`);\n }\n writer.u8(3);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.u32(anchor.row);\n writer.u32(anchor.column);\n writer.u32(rows);\n writer.u32(columns);\n for (let cellIndex = 0; cellIndex < count; cellIndex += 1) {\n writer.cell(\n ownArrayElement(command.cells, cellIndex, `spreadsheet command ${index} cells`),\n );\n }\n break;\n }\n case \"range.clear\": {\n exactKeys(command, [\"kind\", \"range\", \"sheet\"], `spreadsheet command ${index}`);\n const range = cellRange(command.range, index);\n writer.u8(4);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.u32(range.start.row);\n writer.u32(range.start.column);\n writer.u32(range.end.row);\n writer.u32(range.end.column);\n break;\n }\n default:\n throw commandError(index, \"unknown command kind\");\n }\n}\n\nfunction decodeCommand(\n reader: BinaryReader,\n index: number,\n context: CommandContext,\n): SpreadsheetArtifactCommand {\n switch (reader.u8()) {\n case 0: {\n const sheetId = reader.sheetObjectId();\n const name = decodedSheetName(\n reader.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES),\n index,\n );\n const afterFlag = reader.u8();\n if (afterFlag > 1) throw commandError(index, \"after presence flag is invalid\");\n const after = afterFlag === 1 ? decodeSheetPrecondition(reader, index, context) : null;\n context.registerCreate(index, sheetId);\n return Object.freeze({ kind: \"sheet.create\", sheetId, name, after });\n }\n case 1:\n return Object.freeze({\n kind: \"sheet.rename\",\n sheet: decodeSheetPrecondition(reader, index, context),\n name: decodedSheetName(reader.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES), index),\n });\n case 2:\n return Object.freeze({\n kind: \"sheet.delete\",\n sheet: decodeSheetPrecondition(reader, index, context),\n });\n case 3: {\n const sheet = decodeSheetPrecondition(reader, index, context);\n const anchor = frozenPoint(reader.u32(), reader.u32());\n const rows = reader.u32();\n const columns = reader.u32();\n if (rows === 0 || columns === 0) {\n throw commandError(index, \"cell block dimensions must be nonzero\");\n }\n assertExtent(anchor.row, rows, \"row\", index);\n assertExtent(anchor.column, columns, \"column\", index);\n const count = context.addCells(index, rows, columns);\n const cells: SpreadsheetCellInput[] = [];\n for (let cellIndex = 0; cellIndex < count; cellIndex += 1) cells.push(reader.cell());\n return Object.freeze({\n kind: \"cells.set\",\n sheet,\n anchor,\n rows,\n columns,\n cells: Object.freeze(cells),\n });\n }\n case 4: {\n const sheet = decodeSheetPrecondition(reader, index, context);\n const start = frozenPoint(reader.u32(), reader.u32());\n const end = frozenPoint(reader.u32(), reader.u32());\n if (start.row > end.row || start.column > end.column) {\n throw commandError(index, \"clear range endpoints are not ordered\");\n }\n return Object.freeze({\n kind: \"range.clear\",\n sheet,\n range: Object.freeze({ start, end }),\n });\n }\n default:\n throw commandError(index, \"unknown binary command tag\");\n }\n}\n\nfunction encodeSheetPrecondition(\n writer: BinaryWriter,\n value: unknown,\n commandIndex: number,\n context: CommandContext,\n): void {\n const input = plainRecord(value, `spreadsheet command ${commandIndex} sheet precondition`);\n if (input.kind === \"generation\") {\n exactKeys(\n input,\n [\"creationOperationId\", \"kind\", \"sheetId\"],\n `spreadsheet command ${commandIndex} sheet generation`,\n );\n writer.u8(0);\n writer.stableId(sheetObjectId(input.sheetId, \"sheet generation sheetId\"));\n writer.stableId(genericStableId(input.creationOperationId, \"sheet creation operation id\"));\n return;\n }\n if (input.kind === \"created-in-batch\") {\n exactKeys(\n input,\n [\"createCommandIndex\", \"kind\", \"sheetId\"],\n `spreadsheet command ${commandIndex} prior-create precondition`,\n );\n const sheetId = sheetObjectId(input.sheetId, \"prior-create sheetId\");\n const createCommandIndex = nonnegativeU32(\n input.createCommandIndex,\n \"prior-create command index\",\n );\n assertPriorCreate(context, commandIndex, createCommandIndex, sheetId);\n writer.u8(1);\n writer.stableId(sheetId);\n writer.u32(createCommandIndex);\n return;\n }\n throw commandError(commandIndex, \"unknown sheet precondition kind\");\n}\n\nfunction decodeSheetPrecondition(\n reader: BinaryReader,\n commandIndex: number,\n context: CommandContext,\n): SpreadsheetSheetPrecondition {\n switch (reader.u8()) {\n case 0:\n return Object.freeze({\n kind: \"generation\",\n sheetId: reader.sheetObjectId(),\n creationOperationId: reader.genericStableId(),\n });\n case 1: {\n const sheetId = reader.sheetObjectId();\n const createCommandIndex = reader.u32();\n assertPriorCreate(context, commandIndex, createCommandIndex, sheetId);\n return Object.freeze({\n kind: \"created-in-batch\",\n sheetId,\n createCommandIndex,\n });\n }\n default:\n throw commandError(commandIndex, \"unknown sheet precondition tag\");\n }\n}\n\nfunction assertPriorCreate(\n context: CommandContext,\n commandIndex: number,\n createCommandIndex: number,\n sheetId: string,\n): void {\n if (createCommandIndex >= commandIndex) {\n throw commandError(commandIndex, \"prior-create reference must point to an earlier command\");\n }\n if (context.createdByIndex.get(createCommandIndex) !== sheetId) {\n throw commandError(\n commandIndex,\n \"prior-create reference must match the referenced create command and sheet id\",\n );\n }\n}\n\nfunction batchRecord(input: unknown): SpreadsheetArtifactCommandBatch {\n const batch = plainRecord(input, \"spreadsheet command batch\");\n exactKeys(batch, [\"commands\", \"version\"], \"spreadsheet command batch\");\n if (batch.version !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {\n throw new TypeError(\"spreadsheet command batch version must be 2\");\n }\n if (!Array.isArray(batch.commands)) throw new TypeError(\"commands must be an array\");\n if (\n batch.commands.length < 1 ||\n batch.commands.length > SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS\n ) {\n throw new RangeError(\"spreadsheet command count is outside its limit\");\n }\n return input as SpreadsheetArtifactCommandBatch;\n}\n\nfunction cellRange(value: unknown, index: number): SpreadsheetCellRange {\n const range = plainRecord(value, `spreadsheet command ${index} range`);\n exactKeys(range, [\"end\", \"start\"], `spreadsheet command ${index} range`);\n const start = point(range.start, `spreadsheet command ${index} range start`);\n const end = point(range.end, `spreadsheet command ${index} range end`);\n if (start.row > end.row || start.column > end.column) {\n throw commandError(index, \"clear range endpoints are not ordered\");\n }\n return { start, end };\n}\n\nfunction point(value: unknown, label: string): SpreadsheetCellPoint {\n const input = plainRecord(value, label);\n exactKeys(input, [\"column\", \"row\"], label);\n return {\n row: nonnegativeU32(input.row, `${label} row`),\n column: nonnegativeU32(input.column, `${label} column`),\n };\n}\n\nfunction frozenPoint(row: number, column: number): SpreadsheetCellPoint {\n return Object.freeze({ row, column });\n}\n\nfunction sheetName(value: unknown, index: number): string {\n if (typeof value !== \"string\") throw commandError(index, \"sheet name must be a string\");\n return decodedSheetName(value, index);\n}\n\nfunction decodedSheetName(value: string, index: number): string {\n const bytes = strictUtf8(value, \"sheet name\");\n const forbidden = /[\\\\/?*[\\]:\\0]/u.test(value);\n if (\n bytes.byteLength === 0 ||\n value.trim() !== value ||\n value.length > SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS ||\n forbidden\n ) {\n throw commandError(index, \"sheet name does not match the public spreadsheet model\");\n }\n return value;\n}\n\nfunction genericStableId(value: unknown, label: string): EditableArtifactStableId {\n if (typeof value !== \"string\" || !LOWER_HEX_ID.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);\n }\n return value as EditableArtifactStableId;\n}\n\nfunction sheetObjectId(value: unknown, label: string): EditableArtifactStableId {\n const id = genericStableId(value, label);\n if (id.slice(0, 16) === UINT64_HEX_ZERO || id.slice(16) === UINT64_HEX_ZERO) {\n throw new TypeError(`${label} must have a nonzero namespace and counter`);\n }\n return id;\n}\n\nfunction positiveU32(value: unknown, label: string): number {\n const output = nonnegativeU32(value, label);\n if (output === 0) throw new TypeError(`${label} must be positive`);\n return output;\n}\n\nfunction nonnegativeU32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction assertExtent(start: number, length: number, axis: string, index: number): void {\n if (length - 1 > UINT32_MAX - start) {\n throw commandError(index, `${axis} extent exceeds uint32 coordinates`);\n }\n}\n\nfunction safeLength(value: bigint, label: string): number {\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError(`${label} length is unsafe`);\n const length = Number(value);\n if (length > SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES) {\n throw new RangeError(`${label} exceeds its byte limit`);\n }\n return length;\n}\n\nfunction plainRecord(value: unknown, label: string): Record<string, unknown> {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n ) {\n throw new TypeError(`${label} must be a plain record`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n label: string,\n): void {\n const keys = Reflect.ownKeys(value);\n if (keys.some((key) => typeof key !== \"string\")) {\n throw new TypeError(`${label} contains unsupported symbol fields`);\n }\n const actual = (keys as string[]).sort(compareCodeUnits);\n if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {\n throw new TypeError(`${label} fields must be exactly: ${expected.join(\", \")}`);\n }\n for (const key of actual) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} fields must be enumerable data properties`);\n }\n }\n}\n\nfunction ownArrayElement(value: readonly unknown[], index: number, label: string): unknown {\n if (!Object.hasOwn(value, index)) throw new TypeError(`${label} must be dense`);\n return value[index];\n}\n\nfunction commandError(index: number, message: string): TypeError {\n return new TypeError(`spreadsheet command ${index}: ${message}`);\n}\n\nfunction strictUtf8(value: string, label: string): Uint8Array {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n }\n return textEncoder.encode(value);\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction fnv1a64(bytes: Uint8Array): bigint {\n let hash = FNV_OFFSET;\n for (const byte of bytes) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * FNV_PRIME);\n }\n return hash;\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return (\n left.byteLength === right.byteLength && left.every((value, index) => value === right[index])\n );\n}\n\nfunction readU64At(bytes: Uint8Array, offset: number): bigint {\n let value = 0n;\n for (let index = 0; index < 8; index += 1) {\n value |= BigInt(bytes[offset + index]!) << BigInt(index * 8);\n }\n return value;\n}\n\nconst STANDARD_ERROR_TAGS = Object.freeze({\n \"#NULL!\": 0,\n \"#DIV/0!\": 1,\n \"#VALUE!\": 2,\n \"#REF!\": 3,\n \"#NAME?\": 4,\n \"#NUM!\": 5,\n \"#N/A\": 6,\n \"#SPILL!\": 7,\n \"#CALC!\": 8,\n} satisfies Record<string, number>);\n\nconst STANDARD_ERRORS = Object.freeze([\n \"#NULL!\",\n \"#DIV/0!\",\n \"#VALUE!\",\n \"#REF!\",\n \"#NAME?\",\n \"#NUM!\",\n \"#N/A\",\n \"#SPILL!\",\n \"#CALC!\",\n] as const);\n\nclass BinaryWriter {\n private buffer: Uint8Array;\n private viewBuffer: DataView;\n private length = 0;\n\n constructor(private readonly maximum: number) {\n this.buffer = new Uint8Array(Math.min(1_024, maximum));\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n view(): Uint8Array {\n return this.buffer.subarray(0, this.length);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.length);\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.length, value);\n this.length += 1;\n }\n\n u16(value: number): void {\n this.reserve(2);\n this.viewBuffer.setUint16(this.length, value, true);\n this.length += 2;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.length, value, true);\n this.length += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.length, value, true);\n this.length += 8;\n }\n\n i64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigInt64(this.length, value, true);\n this.length += 8;\n }\n\n f64(value: number): void {\n this.reserve(8);\n this.viewBuffer.setFloat64(this.length, value === 0 ? 0 : value, true);\n this.length += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n // Text is namespace || counter; canonical model bytes are counter LE then\n // namespace LE, matching Rust `StableId::to_le_bytes`.\n this.u64(BigInt(`0x${value.slice(16)}`));\n this.u64(BigInt(`0x${value.slice(0, 16)}`));\n }\n\n string(value: string, maximum: number): void {\n const bytes = strictUtf8(value, \"spreadsheet string\");\n if (bytes.byteLength > maximum)\n throw new RangeError(\"spreadsheet string exceeds its byte limit\");\n this.u32(bytes.byteLength);\n this.bytes(bytes);\n }\n\n cell(value: unknown): void {\n if (isFormulaCell(value)) {\n const cell = plainRecord(value, \"formula cell\");\n exactKeys(cell, [\"formula\"], \"formula cell\");\n if (typeof cell.formula !== \"string\" || cell.formula.length === 0) {\n throw new TypeError(\"formula source must be a nonempty string\");\n }\n this.u8(1);\n this.string(cell.formula, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n return;\n }\n this.u8(0);\n this.scalar(value);\n }\n\n private scalar(value: unknown): void {\n if (value === null) {\n this.u8(0);\n } else if (value === false) {\n this.u8(1);\n } else if (value === true) {\n this.u8(2);\n } else if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"spreadsheet numbers must be finite\");\n this.u8(3);\n this.f64(value);\n } else if (typeof value === \"string\") {\n this.u8(4);\n this.string(value, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n } else if (isDateValue(value)) {\n const date = plainRecord(value, \"date cell\");\n exactKeys(date, [\"date\"], \"date cell\");\n this.u8(6);\n this.i64(BigInt(canonicalDateMilliseconds(date.date)));\n } else if (isFormulaError(value)) {\n const error = plainRecord(value, \"formula error\");\n exactKeys(error, [\"error\"], \"formula error\");\n this.u8(5);\n const tag = STANDARD_ERROR_TAGS[error.error as keyof typeof STANDARD_ERROR_TAGS];\n if (tag !== undefined) {\n this.u8(tag);\n } else {\n this.u8(9);\n this.string(error.error as string, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n }\n } else {\n throw new TypeError(\"spreadsheet cell has an unsupported value shape\");\n }\n }\n\n bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.length);\n this.length += value.byteLength;\n }\n\n private reserve(additional: number): void {\n const needed = this.length + additional;\n if (!Number.isSafeInteger(needed) || needed > this.maximum) {\n throw new RangeError(\"spreadsheet command envelope exceeds its byte limit\");\n }\n if (needed <= this.buffer.byteLength) return;\n let size = Math.max(1, this.buffer.byteLength);\n while (size < needed) size = Math.min(this.maximum, size * 2);\n const next = new Uint8Array(size);\n next.set(this.buffer.subarray(0, this.length));\n this.buffer = next;\n this.viewBuffer = new DataView(next.buffer);\n }\n}\n\nclass BinaryReader {\n private offset = 0;\n\n constructor(private readonly input: Uint8Array) {}\n\n u8(): number {\n return this.bytes(1)[0]!;\n }\n\n u16(): number {\n const bytes = this.bytes(2);\n return bytes[0]! | (bytes[1]! << 8);\n }\n\n u32(): number {\n const bytes = this.bytes(4);\n return bytes[0]! + bytes[1]! * 2 ** 8 + bytes[2]! * 2 ** 16 + bytes[3]! * 2 ** 24;\n }\n\n u64(): bigint {\n const bytes = this.bytes(8);\n let value = 0n;\n for (let index = 0; index < 8; index += 1) {\n value |= BigInt(bytes[index]!) << BigInt(index * 8);\n }\n return value;\n }\n\n i64(): bigint {\n const bytes = this.bytes(8);\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getBigInt64(0, true);\n }\n\n f64(): number {\n const bytes = this.bytes(8);\n const value = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getFloat64(\n 0,\n true,\n );\n if (!Number.isFinite(value)) throw new TypeError(\"spreadsheet numbers must be finite\");\n if (Object.is(value, -0)) {\n throw new TypeError(\"spreadsheet numbers must encode zero with a positive sign\");\n }\n return value;\n }\n\n sheetObjectId(): EditableArtifactStableId {\n return sheetObjectId(this.stableIdText(), \"sheet id\");\n }\n\n genericStableId(): EditableArtifactStableId {\n return genericStableId(this.stableIdText(), \"stable id\");\n }\n\n string(maximum: number): string {\n const length = this.u32();\n if (length > maximum) throw new RangeError(\"spreadsheet string exceeds its byte limit\");\n return textDecoder.decode(this.bytes(length));\n }\n\n cell(): SpreadsheetCellInput {\n const formulaTag = this.u8();\n if (formulaTag > 1) throw new TypeError(\"spreadsheet formula presence tag is invalid\");\n if (formulaTag === 1) {\n return Object.freeze({\n formula: this.nonemptyFormula(this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES)),\n });\n }\n return this.scalar();\n }\n\n done(message: string): void {\n if (this.offset !== this.input.byteLength) throw new TypeError(message);\n }\n\n bytes(length: number): Uint8Array {\n const end = this.offset + length;\n if (!Number.isSafeInteger(length) || length < 0 || end > this.input.byteLength) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n const result = this.input.subarray(this.offset, end);\n this.offset = end;\n return result;\n }\n\n private stableIdText(): string {\n const counter = this.u64().toString(16).padStart(16, \"0\");\n const namespace = this.u64().toString(16).padStart(16, \"0\");\n return `${namespace}${counter}`;\n }\n\n private nonemptyFormula(value: string): string {\n if (value.length === 0) throw new TypeError(\"formula source must not be empty\");\n return value;\n }\n\n private scalar(): SpreadsheetCellScalar {\n switch (this.u8()) {\n case 0:\n return null;\n case 1:\n return false;\n case 2:\n return true;\n case 3:\n return this.f64();\n case 4:\n return this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n case 5: {\n const tag = this.u8();\n if (tag <= 8) return Object.freeze({ error: STANDARD_ERRORS[tag]! });\n if (tag === 9) {\n return Object.freeze({\n error: this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES),\n });\n }\n throw new TypeError(\"spreadsheet formula error tag is invalid\");\n }\n case 6:\n return Object.freeze({\n date: canonicalSpreadsheetDateFromMilliseconds(this.i64()),\n });\n default:\n throw new TypeError(\"spreadsheet scalar tag is invalid\");\n }\n }\n}\n\nfunction isFormulaCell(value: unknown): value is SpreadsheetFormulaCell {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"formula\")\n );\n}\n\nfunction isFormulaError(value: unknown): value is SpreadsheetFormulaError {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"error\")\n );\n}\n\nfunction isDateValue(value: unknown): value is SpreadsheetDateValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"date\")\n );\n}\n\nfunction canonicalDateMilliseconds(value: unknown): number {\n return canonicalSpreadsheetDateMilliseconds(value);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connector-destinations.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ConnectorDocumentDestinationAuthority = z.enum([\n \"organization\",\n \"workspace\",\n \"personal\",\n]);\nexport type ConnectorDocumentDestinationAuthority = z.infer<\n typeof ConnectorDocumentDestinationAuthority\n>;\n\nexport const ConnectorDocumentDestinationSelection = z.object({\n authorityKind: ConnectorDocumentDestinationAuthority,\n collectionId: z.string().uuid().nullable().default(null),\n});\nexport type ConnectorDocumentDestinationSelection = z.infer<\n typeof ConnectorDocumentDestinationSelection\n>;\n\nexport const ConnectorDocumentDestination = z\n .object({\n authorityKind: ConnectorDocumentDestinationAuthority,\n authorityAccountId: z.string().uuid(),\n authorityWorkspaceId: z.string().uuid().nullable(),\n authoritySubjectId: z.string().trim().min(1).max(1024).nullable(),\n collectionId: z.string().uuid().nullable().default(null),\n })\n .superRefine((destination, context) => {\n if (destination.authorityKind === \"organization\") {\n if (destination.authorityWorkspaceId !== null || destination.authoritySubjectId !== null) {\n context.addIssue({\n code: \"custom\",\n message: \"organization connector destinations cannot bind workspace or subject authority\",\n });\n }\n return;\n }\n if (destination.authorityWorkspaceId === null) {\n context.addIssue({\n code: \"custom\",\n message: \"workspace and personal connector destinations require workspace authority\",\n });\n }\n if (destination.authorityKind === \"workspace\" && destination.authoritySubjectId !== null) {\n context.addIssue({\n code: \"custom\",\n message: \"workspace connector destinations cannot bind subject authority\",\n });\n }\n if (destination.authorityKind === \"personal\" && destination.authoritySubjectId === null) {\n context.addIssue({\n code: \"custom\",\n message: \"personal connector destinations require immutable subject authority\",\n });\n }\n });\nexport type ConnectorDocumentDestination = z.infer<typeof ConnectorDocumentDestination>;\n\nexport function bindConnectorDocumentDestination(\n selection: ConnectorDocumentDestinationSelection,\n context: { accountId: string; workspaceId: string; initiatingSubjectId: string },\n): ConnectorDocumentDestination {\n return ConnectorDocumentDestination.parse({\n authorityKind: selection.authorityKind,\n authorityAccountId: context.accountId,\n authorityWorkspaceId: selection.authorityKind === \"organization\" ? null : context.workspaceId,\n authoritySubjectId: selection.authorityKind === \"personal\" ? context.initiatingSubjectId : null,\n collectionId: selection.collectionId,\n });\n}\n\nexport function legacyWorkspaceConnectorDocumentDestination(context: {\n accountId: string;\n workspaceId: string;\n}): ConnectorDocumentDestination {\n return ConnectorDocumentDestination.parse({\n authorityKind: \"workspace\",\n authorityAccountId: context.accountId,\n authorityWorkspaceId: context.workspaceId,\n authoritySubjectId: null,\n collectionId: null,\n });\n}\n\nexport function resolveConnectorDocumentDestination(\n value: unknown,\n context: {\n accountId: string;\n workspaceId: string;\n connectionSubjectId?: string | null | undefined;\n },\n): ConnectorDocumentDestination {\n if (value === undefined || value === null) {\n return legacyWorkspaceConnectorDocumentDestination(context);\n }\n const destination = ConnectorDocumentDestination.parse(value);\n if (destination.authorityAccountId !== context.accountId) {\n throw new Error(\"connector destination organization authority mismatch\");\n }\n if (\n destination.authorityKind !== \"organization\" &&\n destination.authorityWorkspaceId !== context.workspaceId\n ) {\n throw new Error(\"connector destination workspace authority mismatch\");\n }\n if (\n destination.authorityKind === \"personal\" &&\n destination.authoritySubjectId !== context.connectionSubjectId\n ) {\n throw new Error(\"connector destination personal authority mismatch\");\n }\n return destination;\n}\n\nexport function connectorDestinationDocumentAuthority(destination: ConnectorDocumentDestination): {\n authorityKind: ConnectorDocumentDestinationAuthority;\n authorityWorkspaceId: string | null;\n authoritySubjectId: string | null;\n} {\n return {\n authorityKind: destination.authorityKind,\n authorityWorkspaceId: destination.authorityWorkspaceId,\n authoritySubjectId: destination.authoritySubjectId,\n };\n}\n\nexport function connectorDocumentDestinationCollectionId(\n destination: ConnectorDocumentDestination,\n defaultCollectionId: string,\n): string {\n return destination.collectionId ?? z.string().uuid().parse(defaultCollectionId);\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,wCAAwC,EAAE,KAAK;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,wCAAwC,EAAE,OAAO;AAAA,EAC5D,eAAe;AAAA,EACf,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI;AACzD,CAAC;AAKM,IAAM,+BAA+B,EACzC,OAAO;AAAA,EACN,eAAe;AAAA,EACf,oBAAoB,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,sBAAsB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACjD,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,EAChE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI;AACzD,CAAC,EACA,YAAY,CAAC,aAAa,YAAY;AACrC,MAAI,YAAY,kBAAkB,gBAAgB;AAChD,QAAI,YAAY,yBAAyB,QAAQ,YAAY,uBAAuB,MAAM;AACxF,cAAQ,SAAS;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA;AAAA,EACF;AACA,MAAI,YAAY,yBAAyB,MAAM;AAC7C,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,YAAY,kBAAkB,eAAe,YAAY,uBAAuB,MAAM;AACxF,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,YAAY,kBAAkB,cAAc,YAAY,uBAAuB,MAAM;AACvF,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAGI,SAAS,iCACd,WACA,SAC8B;AAC9B,SAAO,6BAA6B,MAAM;AAAA,IACxC,eAAe,UAAU;AAAA,IACzB,oBAAoB,QAAQ;AAAA,IAC5B,sBAAsB,UAAU,kBAAkB,iBAAiB,OAAO,QAAQ;AAAA,IAClF,oBAAoB,UAAU,kBAAkB,aAAa,QAAQ,sBAAsB;AAAA,IAC3F,cAAc,UAAU;AAAA,EAC1B,CAAC;AACH;AAEO,SAAS,4CAA4C,SAG3B;AAC/B,SAAO,6BAA6B,MAAM;AAAA,IACxC,eAAe;AAAA,IACf,oBAAoB,QAAQ;AAAA,IAC5B,sBAAsB,QAAQ;AAAA,IAC9B,oBAAoB;AAAA,IACpB,cAAc;AAAA,EAChB,CAAC;AACH;AAEO,SAAS,oCACd,OACA,SAK8B;AAC9B,MAAI,UAAU,UAAa,UAAU,MAAM;AACzC,WAAO,4CAA4C,OAAO;AAAA,EAC5D;AACA,QAAM,cAAc,6BAA6B,MAAM,KAAK;AAC5D,MAAI,YAAY,uBAAuB,QAAQ,WAAW;AACxD,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACA,MACE,YAAY,kBAAkB,kBAC9B,YAAY,yBAAyB,QAAQ,aAC7C;AACA,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACA,MACE,YAAY,kBAAkB,cAC9B,YAAY,uBAAuB,QAAQ,qBAC3C;AACA,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,sCAAsC,aAIpD;AACA,SAAO;AAAA,IACL,eAAe,YAAY;AAAA,IAC3B,sBAAsB,YAAY;AAAA,IAClC,oBAAoB,YAAY;AAAA,EAClC;AACF;AAEO,SAAS,yCACd,aACA,qBACQ;AACR,SAAO,YAAY,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB;AAChF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/spreadsheet-artifact-query.ts"],"sourcesContent":["import { spreadsheetSheetId, type EditableArtifactStableId } from \"./spreadsheet-artifact-commands\";\nimport {\n canonicalSpreadsheetDateFromMilliseconds,\n canonicalSpreadsheetDateMilliseconds,\n} from \"./spreadsheet-artifact-date\";\n\n/** Canonical private kernel query/projection ABI shared by browser and native bindings. */\nexport const SPREADSHEET_ARTIFACT_QUERY_VERSION = 1 as const;\nexport const SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES = 68;\nexport const SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES = 8 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MAX_AREA = 1_048_576;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS = 262_144;\nexport const SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS = 10_000;\nexport const SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES = 4 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES = 92;\nexport const SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES = 48;\n\nconst QUERY_MAGIC = new TextEncoder().encode(\"OGAKQ001\");\nconst PROJECTION_MAGIC = new TextEncoder().encode(\"OGAKV001\");\nconst QUERY_HEADER_BYTES = 28;\nconst PROJECTION_HEADER_BYTES = 36;\nconst CHECKSUM_BYTES = 8;\nconst VIEWPORT_QUERY_PAYLOAD_BYTES = 32;\nconst VIEWPORT_PROJECTION_PREFIX_BYTES = 48;\nconst METADATA_PROJECTION_PREFIX_BYTES = 4;\nconst GENERATIONS_FLAG = 1;\nconst UINT32_MAX = 0xffff_ffff;\nconst UINT64_MAX = 0xffff_ffff_ffff_ffffn;\nconst FNV_OFFSET = 0xcbf29ce484222325n;\nconst FNV_PRIME = 0x100000001b3n;\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport type SpreadsheetArtifactViewportQuery = Readonly<{\n sheetId: EditableArtifactStableId;\n startRow: number;\n startColumn: number;\n rowCount: number;\n columnCount: number;\n maxCells: number;\n /** Entire OGAKV001 envelope, not merely its payload. */\n maxBytes: number;\n}>;\n\nexport type SpreadsheetArtifactMetadataQuery = Readonly<{\n maxSheets: number;\n /** Entire OGAKV001 envelope, not merely its payload. */\n maxBytes: number;\n}>;\n\nexport type SpreadsheetArtifactKernelQuery =\n | Readonly<{ kind: \"viewport\"; query: SpreadsheetArtifactViewportQuery }>\n | Readonly<{\n kind: \"workbook-metadata\";\n query: SpreadsheetArtifactMetadataQuery;\n }>;\n\nexport type SpreadsheetArtifactFormulaError =\n | \"null\"\n | \"divide_by_zero\"\n | \"value\"\n | \"reference\"\n | \"name\"\n | \"number\"\n | \"not_available\"\n | \"spill\"\n | \"calculation\"\n | Readonly<{ custom: string }>;\n\nexport type SpreadsheetArtifactProjectedCellValue =\n | Readonly<{ kind: \"empty\" }>\n | Readonly<{ kind: \"boolean\"; value: boolean }>\n | Readonly<{ kind: \"number\"; value: number }>\n | Readonly<{ kind: \"date\"; value: string }>\n | Readonly<{ kind: \"text\"; value: string }>\n | Readonly<{ kind: \"error\"; value: SpreadsheetArtifactFormulaError }>;\n\nexport type SpreadsheetArtifactProjectedCell = Readonly<{\n /** Absolute zero-based row, reconstructed from the relative wire coordinate. */\n row: number;\n /** Absolute zero-based column, reconstructed from the relative wire coordinate. */\n column: number;\n formula: string | null;\n value: SpreadsheetArtifactProjectedCellValue;\n}>;\n\n/** Complete and non-truncated. A limit breach is an error, never a partial response. */\nexport type SpreadsheetArtifactViewportProjection = Readonly<{\n revision: bigint;\n sheetId: EditableArtifactStableId;\n generationId: EditableArtifactStableId | null;\n startRow: number;\n startColumn: number;\n rowCount: number;\n columnCount: number;\n cells: readonly SpreadsheetArtifactProjectedCell[];\n}>;\n\nexport type SpreadsheetArtifactUsedBounds = Readonly<{\n startRow: number;\n startColumn: number;\n endRow: number;\n endColumn: number;\n}>;\n\nexport type SpreadsheetArtifactSheetMetadata = Readonly<{\n sheetId: EditableArtifactStableId;\n generationId: EditableArtifactStableId | null;\n name: string;\n usedBounds: SpreadsheetArtifactUsedBounds | null;\n}>;\n\n/**\n * Version 1 deliberately models no row/column dimensions, hidden state, or\n * merges. It also carries no style projection. These are false capability\n * facts, not omitted authoritative data.\n */\nexport type SpreadsheetArtifactModeledFeatures = Readonly<{\n dimensions: false;\n hidden: false;\n merges: false;\n}>;\n\n/** Complete ordered workbook catalog; never a truncated prefix. */\nexport type SpreadsheetArtifactMetadataProjection = Readonly<{\n revision: bigint;\n modeledFeatures: SpreadsheetArtifactModeledFeatures;\n sheets: readonly SpreadsheetArtifactSheetMetadata[];\n}>;\n\nexport type SpreadsheetArtifactKernelProjection =\n | Readonly<{\n kind: \"viewport\";\n projection: SpreadsheetArtifactViewportProjection;\n }>\n | Readonly<{\n kind: \"workbook-metadata\";\n projection: SpreadsheetArtifactMetadataProjection;\n }>;\n\nexport function encodeSpreadsheetViewportKernelQuery(\n input: SpreadsheetArtifactViewportQuery,\n): Uint8Array {\n const query = normalizeViewportQuery(input);\n const payload = new FixedWriter(VIEWPORT_QUERY_PAYLOAD_BYTES);\n payload.stableId(query.sheetId);\n payload.u32(query.startRow);\n payload.u32(query.startColumn);\n payload.u32(query.rowCount);\n payload.u32(query.columnCount);\n return encodeQueryFrame(0, query.maxCells, query.maxBytes, payload.finish());\n}\n\nexport function encodeSpreadsheetMetadataKernelQuery(\n input: SpreadsheetArtifactMetadataQuery,\n): Uint8Array {\n const query = normalizeMetadataQuery(input);\n return encodeQueryFrame(1, query.maxSheets, query.maxBytes, new Uint8Array());\n}\n\nexport function encodeSpreadsheetArtifactKernelQuery(\n input: SpreadsheetArtifactKernelQuery,\n): Uint8Array {\n const envelope = exactRecord(input, \"spreadsheet kernel query\");\n exactKeys(envelope, [\"kind\", \"query\"], \"spreadsheet kernel query\");\n if (envelope.kind === \"viewport\") {\n return encodeSpreadsheetViewportKernelQuery(envelope.query as SpreadsheetArtifactViewportQuery);\n }\n if (envelope.kind === \"workbook-metadata\") {\n return encodeSpreadsheetMetadataKernelQuery(envelope.query as SpreadsheetArtifactMetadataQuery);\n }\n throw queryError(\"unknown spreadsheet kernel query kind\");\n}\n\nexport function decodeSpreadsheetArtifactKernelQuery(\n bytes: Uint8Array,\n): SpreadsheetArtifactKernelQuery {\n const frame = decodeQueryFrame(bytes);\n if (frame.kind === 0) {\n if (frame.payload.byteLength < VIEWPORT_QUERY_PAYLOAD_BYTES) {\n throw queryError(\"spreadsheet viewport query is truncated\");\n }\n if (frame.payload.byteLength > VIEWPORT_QUERY_PAYLOAD_BYTES) {\n throw queryError(\"spreadsheet viewport query contains trailing bytes\");\n }\n const reader = new Reader(frame.payload);\n const query = normalizeViewportQuery({\n sheetId: reader.stableId(\"viewport sheet id\"),\n startRow: reader.u32(),\n startColumn: reader.u32(),\n rowCount: reader.u32(),\n columnCount: reader.u32(),\n maxCells: frame.maxItems,\n maxBytes: frame.maxBytes,\n });\n reader.done(\"spreadsheet viewport query contains trailing bytes\");\n return Object.freeze({ kind: \"viewport\", query });\n }\n if (frame.payload.byteLength !== 0) {\n throw queryError(\"spreadsheet metadata query contains trailing bytes\");\n }\n return Object.freeze({\n kind: \"workbook-metadata\",\n query: normalizeMetadataQuery({\n maxSheets: frame.maxItems,\n maxBytes: frame.maxBytes,\n }),\n });\n}\n\nexport function assertCanonicalSpreadsheetArtifactKernelQueryBytes(bytes: Uint8Array): Uint8Array {\n const canonical = encodeSpreadsheetArtifactKernelQuery(\n decodeSpreadsheetArtifactKernelQuery(bytes),\n );\n if (!equalBytes(bytes, canonical)) throw queryError(\"spreadsheet kernel query is not canonical\");\n return bytes;\n}\n\nexport function encodeSpreadsheetViewportKernelProjection(\n input: SpreadsheetArtifactViewportProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const projection = normalizeViewportProjection(input);\n const maximum = effectiveProjectionMaximum(\n maximumBytes,\n SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES,\n );\n const payload = new DynamicWriter(maximum - PROJECTION_HEADER_BYTES - CHECKSUM_BYTES);\n payload.stableId(projection.sheetId);\n payload.optionalStableId(projection.generationId);\n payload.u32(projection.startRow);\n payload.u32(projection.startColumn);\n payload.u32(projection.rowCount);\n payload.u32(projection.columnCount);\n for (const cell of projection.cells) {\n payload.u32(cell.row - projection.startRow);\n payload.u32(cell.column - projection.startColumn);\n payload.cell(cell);\n }\n return encodeProjectionFrame(\n 0,\n projection.revision,\n projection.generationId === null ? 0 : GENERATIONS_FLAG,\n projection.cells.length,\n payload.finish(),\n maximum,\n );\n}\n\nexport function encodeSpreadsheetMetadataKernelProjection(\n input: SpreadsheetArtifactMetadataProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const projection = normalizeMetadataProjection(input);\n const maximum = effectiveProjectionMaximum(\n maximumBytes,\n SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES,\n );\n const payload = new DynamicWriter(maximum - PROJECTION_HEADER_BYTES - CHECKSUM_BYTES);\n payload.u32(0);\n for (const sheet of projection.sheets) {\n payload.stableId(sheet.sheetId);\n payload.optionalStableId(sheet.generationId);\n payload.string(sheet.name);\n if (sheet.usedBounds === null) {\n payload.u8(0);\n } else {\n payload.u8(1);\n payload.u32(sheet.usedBounds.startRow);\n payload.u32(sheet.usedBounds.startColumn);\n payload.u32(sheet.usedBounds.endRow);\n payload.u32(sheet.usedBounds.endColumn);\n }\n }\n const generations = projection.sheets.length > 0 && projection.sheets[0]!.generationId !== null;\n return encodeProjectionFrame(\n 1,\n projection.revision,\n generations ? GENERATIONS_FLAG : 0,\n projection.sheets.length,\n payload.finish(),\n maximum,\n );\n}\n\nexport function encodeSpreadsheetArtifactKernelProjection(\n input: SpreadsheetArtifactKernelProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const envelope = exactRecord(input, \"spreadsheet kernel projection\");\n exactKeys(envelope, [\"kind\", \"projection\"], \"spreadsheet kernel projection\");\n if (envelope.kind === \"viewport\") {\n return encodeSpreadsheetViewportKernelProjection(\n envelope.projection as SpreadsheetArtifactViewportProjection,\n maximumBytes,\n );\n }\n if (envelope.kind === \"workbook-metadata\") {\n return encodeSpreadsheetMetadataKernelProjection(\n envelope.projection as SpreadsheetArtifactMetadataProjection,\n maximumBytes,\n );\n }\n throw projectionError(\"unknown spreadsheet kernel projection kind\");\n}\n\nexport function decodeSpreadsheetArtifactKernelProjection(\n bytes: Uint8Array,\n): SpreadsheetArtifactKernelProjection {\n const frame = decodeProjectionFrame(bytes);\n if (frame.kind === 0) {\n return Object.freeze({\n kind: \"viewport\",\n projection: decodeViewportPayload(frame),\n });\n }\n return Object.freeze({\n kind: \"workbook-metadata\",\n projection: decodeMetadataPayload(frame),\n });\n}\n\nexport function decodeSpreadsheetViewportKernelProjection(\n bytes: Uint8Array,\n expected?: SpreadsheetArtifactViewportQuery,\n): SpreadsheetArtifactViewportProjection {\n const decoded = decodeSpreadsheetArtifactKernelProjection(bytes);\n if (decoded.kind !== \"viewport\") throw projectionError(\"expected a viewport projection\");\n if (expected !== undefined) {\n const query = normalizeViewportQuery(expected);\n enforceProjectionEnvelopeLimit(bytes, query.maxBytes);\n if (\n decoded.projection.cells.length >\n Math.min(query.maxCells, SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS)\n ) {\n throw projectionError(\"viewport projection exceeds its requested cell limit\");\n }\n if (\n decoded.projection.sheetId !== query.sheetId ||\n decoded.projection.startRow !== query.startRow ||\n decoded.projection.startColumn !== query.startColumn ||\n decoded.projection.rowCount !== query.rowCount ||\n decoded.projection.columnCount !== query.columnCount\n ) {\n throw projectionError(\"viewport projection does not match its query\");\n }\n }\n return decoded.projection;\n}\n\nexport function decodeSpreadsheetMetadataKernelProjection(\n bytes: Uint8Array,\n expected?: SpreadsheetArtifactMetadataQuery,\n): SpreadsheetArtifactMetadataProjection {\n const decoded = decodeSpreadsheetArtifactKernelProjection(bytes);\n if (decoded.kind !== \"workbook-metadata\") {\n throw projectionError(\"expected a workbook metadata projection\");\n }\n if (expected !== undefined) {\n const query = normalizeMetadataQuery(expected);\n enforceProjectionEnvelopeLimit(bytes, query.maxBytes);\n if (\n decoded.projection.sheets.length >\n Math.min(query.maxSheets, SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS)\n ) {\n throw projectionError(\"metadata projection exceeds its requested sheet limit\");\n }\n }\n return decoded.projection;\n}\n\nexport function assertCanonicalSpreadsheetArtifactKernelProjectionBytes(\n bytes: Uint8Array,\n): Uint8Array {\n const canonical = encodeSpreadsheetArtifactKernelProjection(\n decodeSpreadsheetArtifactKernelProjection(bytes),\n );\n if (!equalBytes(bytes, canonical)) {\n throw projectionError(\"spreadsheet kernel projection is not canonical\");\n }\n return bytes;\n}\n\ntype ProjectionFrame = Readonly<{\n kind: 0 | 1;\n flags: number;\n revision: bigint;\n itemCount: number;\n payload: Uint8Array;\n}>;\n\nfunction encodeQueryFrame(\n kind: 0 | 1,\n maxItems: number,\n maxBytes: number,\n payload: Uint8Array,\n): Uint8Array {\n const output = new FixedWriter(QUERY_HEADER_BYTES + payload.byteLength + CHECKSUM_BYTES);\n output.bytes(QUERY_MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_QUERY_VERSION);\n output.u16(0);\n output.u8(kind);\n output.bytes(new Uint8Array(3));\n output.u32(maxItems);\n output.u32(maxBytes);\n output.u32(payload.byteLength);\n output.bytes(payload);\n output.u64(fnv1a64(output.view()));\n const bytes = output.finish();\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES) {\n throw queryError(\"spreadsheet kernel query exceeds its byte limit\");\n }\n return bytes;\n}\n\nfunction decodeQueryFrame(bytes: Uint8Array): Readonly<{\n kind: 0 | 1;\n maxItems: number;\n maxBytes: number;\n payload: Uint8Array;\n}> {\n requireBytes(bytes, \"spreadsheet kernel query\");\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES) {\n throw queryError(\"spreadsheet kernel query exceeds its byte limit\");\n }\n if (bytes.byteLength < QUERY_HEADER_BYTES + CHECKSUM_BYTES) {\n throw queryError(\"spreadsheet kernel query is truncated\");\n }\n const reader = new Reader(bytes);\n if (!equalBytes(reader.bytes(8), QUERY_MAGIC))\n throw queryError(\"spreadsheet query magic is invalid\");\n const version = reader.u16();\n if (version !== SPREADSHEET_ARTIFACT_QUERY_VERSION) {\n throw queryError(`unsupported spreadsheet query version: ${version}`);\n }\n if (reader.u16() !== 0) throw queryError(\"spreadsheet query reserved flags must be zero\");\n const kindTag = reader.u8();\n if (kindTag > 1) throw queryError(\"spreadsheet query kind is invalid\");\n if (reader.u8() !== 0 || reader.u8() !== 0 || reader.u8() !== 0) {\n throw queryError(\"spreadsheet query reserved bytes must be zero\");\n }\n const maxItems = reader.u32();\n const maxBytes = reader.u32();\n const payloadLength = reader.u32();\n const expected = QUERY_HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expected) throw queryError(\"spreadsheet kernel query is truncated\");\n if (bytes.byteLength > expected)\n throw queryError(\"spreadsheet kernel query contains trailing bytes\");\n const payload = reader.bytes(payloadLength);\n const checksum = reader.u64();\n reader.done(\"spreadsheet kernel query contains trailing bytes\");\n if (checksum !== fnv1a64(bytes.subarray(0, -CHECKSUM_BYTES))) {\n throw queryError(\"spreadsheet kernel query checksum does not match\");\n }\n return Object.freeze({ kind: kindTag as 0 | 1, maxItems, maxBytes, payload });\n}\n\nfunction encodeProjectionFrame(\n kind: 0 | 1,\n revision: bigint,\n flags: number,\n itemCount: number,\n payload: Uint8Array,\n maximum: number,\n): Uint8Array {\n const output = new FixedWriter(PROJECTION_HEADER_BYTES + payload.byteLength + CHECKSUM_BYTES);\n output.bytes(PROJECTION_MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_QUERY_VERSION);\n output.u16(flags);\n output.u8(kind);\n output.bytes(new Uint8Array(3));\n output.u64(revision);\n output.u32(itemCount);\n output.u64(BigInt(payload.byteLength));\n output.bytes(payload);\n output.u64(fnv1a64(output.view()));\n const bytes = output.finish();\n if (bytes.byteLength > maximum || bytes.byteLength > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw projectionError(\"spreadsheet kernel projection exceeds its byte limit\");\n }\n return bytes;\n}\n\nfunction decodeProjectionFrame(bytes: Uint8Array): ProjectionFrame {\n requireBytes(bytes, \"spreadsheet kernel projection\");\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw projectionError(\"spreadsheet kernel projection exceeds its byte limit\");\n }\n if (bytes.byteLength < PROJECTION_HEADER_BYTES + CHECKSUM_BYTES) {\n throw projectionError(\"spreadsheet kernel projection is truncated\");\n }\n const reader = new Reader(bytes);\n if (!equalBytes(reader.bytes(8), PROJECTION_MAGIC)) {\n throw projectionError(\"spreadsheet projection magic is invalid\");\n }\n const version = reader.u16();\n if (version !== SPREADSHEET_ARTIFACT_QUERY_VERSION) {\n throw projectionError(`unsupported spreadsheet projection version: ${version}`);\n }\n const flags = reader.u16();\n if ((flags & ~GENERATIONS_FLAG) !== 0) {\n throw projectionError(\"spreadsheet projection flags are noncanonical\");\n }\n const kindTag = reader.u8();\n if (kindTag > 1) throw projectionError(\"spreadsheet projection kind is invalid\");\n if (reader.u8() !== 0 || reader.u8() !== 0 || reader.u8() !== 0) {\n throw projectionError(\"spreadsheet projection reserved bytes must be zero\");\n }\n const revision = reader.u64();\n const itemCount = reader.u32();\n const payloadLengthBig = reader.u64();\n if (payloadLengthBig > BigInt(SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES)) {\n throw projectionError(\"spreadsheet projection payload exceeds its byte limit\");\n }\n const payloadLength = Number(payloadLengthBig);\n const expected = PROJECTION_HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expected)\n throw projectionError(\"spreadsheet kernel projection is truncated\");\n if (bytes.byteLength > expected) {\n throw projectionError(\"spreadsheet kernel projection contains trailing bytes\");\n }\n const payload = reader.bytes(payloadLength);\n const checksum = reader.u64();\n reader.done(\"spreadsheet kernel projection contains trailing bytes\");\n if (checksum !== fnv1a64(bytes.subarray(0, -CHECKSUM_BYTES))) {\n throw projectionError(\"spreadsheet kernel projection checksum does not match\");\n }\n return Object.freeze({\n kind: kindTag as 0 | 1,\n flags,\n revision,\n itemCount,\n payload,\n });\n}\n\nfunction decodeViewportPayload(frame: ProjectionFrame): SpreadsheetArtifactViewportProjection {\n if (frame.itemCount > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw projectionError(\"viewport projection exceeds its hard cell limit\");\n }\n if (frame.payload.byteLength < VIEWPORT_PROJECTION_PREFIX_BYTES + frame.itemCount * 10) {\n throw projectionError(\"viewport projection payload is truncated\");\n }\n const reader = new Reader(frame.payload);\n const sheetId = reader.stableId(\"viewport sheet id\");\n const generationId = reader.optionalStableId((frame.flags & GENERATIONS_FLAG) !== 0);\n const startRow = reader.u32();\n const startColumn = reader.u32();\n const rowCount = reader.u32();\n const columnCount = reader.u32();\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n const cells: SpreadsheetArtifactProjectedCell[] = [];\n let previousOrdinal = -1;\n for (let index = 0; index < frame.itemCount; index += 1) {\n const relativeRow = reader.u32();\n const relativeColumn = reader.u32();\n if (relativeRow >= rowCount || relativeColumn >= columnCount) {\n throw projectionError(\"viewport cell lies outside its response extent\");\n }\n const ordinal = relativeRow * columnCount + relativeColumn;\n if (!Number.isSafeInteger(ordinal) || ordinal <= previousOrdinal) {\n throw projectionError(\"viewport cells are not unique strict row-major entries\");\n }\n previousOrdinal = ordinal;\n const formula = reader.formula();\n const value = reader.cellValue();\n if (formula === null && value.kind === \"empty\") {\n throw projectionError(\"sparse viewport contains an empty cell\");\n }\n cells.push(\n Object.freeze({\n row: startRow + relativeRow,\n column: startColumn + relativeColumn,\n formula,\n value,\n }),\n );\n }\n reader.done(\"viewport projection payload contains trailing bytes\");\n return Object.freeze({\n revision: frame.revision,\n sheetId,\n generationId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n cells: Object.freeze(cells),\n });\n}\n\nfunction decodeMetadataPayload(frame: ProjectionFrame): SpreadsheetArtifactMetadataProjection {\n if (frame.itemCount > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw projectionError(\"metadata projection exceeds its hard sheet limit\");\n }\n if (frame.payload.byteLength < METADATA_PROJECTION_PREFIX_BYTES + frame.itemCount * 37) {\n throw projectionError(\"metadata projection payload is truncated\");\n }\n const reader = new Reader(frame.payload);\n if (reader.u32() !== 0) {\n throw projectionError(\"metadata projection contains unknown modeled feature bits\");\n }\n const hasGenerations = (frame.flags & GENERATIONS_FLAG) !== 0;\n if (frame.itemCount === 0 && hasGenerations) {\n throw projectionError(\"empty metadata projection must not set the generations flag\");\n }\n const sheets: SpreadsheetArtifactSheetMetadata[] = [];\n const ids = new Set<string>();\n const names = new Set<string>();\n for (let index = 0; index < frame.itemCount; index += 1) {\n const sheetId = reader.stableId(\"metadata sheet id\");\n if (ids.has(sheetId)) throw projectionError(\"metadata projection contains duplicate sheet ids\");\n ids.add(sheetId);\n const generationId = reader.optionalStableId(hasGenerations);\n const name = validateSheetName(reader.string(), \"metadata sheet name\");\n const foldedName = name.toLowerCase();\n if (names.has(foldedName)) {\n throw projectionError(\"metadata projection contains duplicate case-insensitive sheet names\");\n }\n names.add(foldedName);\n const boundsTag = reader.u8();\n if (boundsTag > 1) throw projectionError(\"metadata used-bounds tag is invalid\");\n let usedBounds: SpreadsheetArtifactUsedBounds | null = null;\n if (boundsTag === 1) {\n const startRow = reader.u32();\n const startColumn = reader.u32();\n const endRow = reader.u32();\n const endColumn = reader.u32();\n if (startRow > endRow || startColumn > endColumn) {\n throw projectionError(\"metadata used bounds are not ordered\");\n }\n usedBounds = Object.freeze({ startRow, startColumn, endRow, endColumn });\n }\n sheets.push(Object.freeze({ sheetId, generationId, name, usedBounds }));\n }\n reader.done(\"metadata projection payload contains trailing bytes\");\n return Object.freeze({\n revision: frame.revision,\n modeledFeatures: MODELED_FEATURES_NONE,\n sheets: Object.freeze(sheets),\n });\n}\n\nfunction normalizeViewportQuery(input: unknown): SpreadsheetArtifactViewportQuery {\n const query = exactRecord(input, \"spreadsheet viewport query\");\n exactKeys(\n query,\n [\"columnCount\", \"maxBytes\", \"maxCells\", \"rowCount\", \"sheetId\", \"startColumn\", \"startRow\"],\n \"spreadsheet viewport query\",\n );\n const sheetId = spreadsheetSheetId(requireString(query.sheetId, \"viewport sheetId\"));\n const startRow = uint32(query.startRow, \"viewport startRow\");\n const startColumn = uint32(query.startColumn, \"viewport startColumn\");\n const rowCount = positiveUint32(query.rowCount, \"viewport rowCount\");\n const columnCount = positiveUint32(query.columnCount, \"viewport columnCount\");\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n const maxCells = positiveUint32(query.maxCells, \"viewport maxCells\");\n const maxBytes = positiveUint32(query.maxBytes, \"viewport maxBytes\");\n if (maxBytes < SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES) {\n throw queryError(\"viewport maxBytes cannot fit an empty response\");\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction normalizeMetadataQuery(input: unknown): SpreadsheetArtifactMetadataQuery {\n const query = exactRecord(input, \"spreadsheet metadata query\");\n exactKeys(query, [\"maxBytes\", \"maxSheets\"], \"spreadsheet metadata query\");\n const maxSheets = positiveUint32(query.maxSheets, \"metadata maxSheets\");\n const maxBytes = positiveUint32(query.maxBytes, \"metadata maxBytes\");\n if (maxBytes < SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES) {\n throw queryError(\"metadata maxBytes cannot fit an empty response\");\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction normalizeViewportProjection(input: unknown): SpreadsheetArtifactViewportProjection {\n const projection = exactRecord(input, \"spreadsheet viewport projection\");\n exactKeys(\n projection,\n [\n \"cells\",\n \"columnCount\",\n \"generationId\",\n \"revision\",\n \"rowCount\",\n \"sheetId\",\n \"startColumn\",\n \"startRow\",\n ],\n \"spreadsheet viewport projection\",\n );\n const revision = uint64(projection.revision, \"viewport revision\");\n const sheetId = spreadsheetSheetId(requireString(projection.sheetId, \"viewport sheetId\"));\n const generationId = nullableGenerationId(projection.generationId, \"viewport generationId\");\n const startRow = uint32(projection.startRow, \"viewport startRow\");\n const startColumn = uint32(projection.startColumn, \"viewport startColumn\");\n const rowCount = positiveUint32(projection.rowCount, \"viewport rowCount\");\n const columnCount = positiveUint32(projection.columnCount, \"viewport columnCount\");\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n if (!Array.isArray(projection.cells)) throw projectionError(\"viewport cells must be an array\");\n if (projection.cells.length > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw projectionError(\"viewport projection exceeds its hard cell limit\");\n }\n const cells: SpreadsheetArtifactProjectedCell[] = [];\n let previousOrdinal = -1;\n for (let index = 0; index < projection.cells.length; index += 1) {\n const cell = normalizeProjectedCell(ownArrayElement(projection.cells, index, \"viewport cells\"));\n if (\n cell.row < startRow ||\n cell.row >= startRow + rowCount ||\n cell.column < startColumn ||\n cell.column >= startColumn + columnCount\n ) {\n throw projectionError(\"viewport cell lies outside its response extent\");\n }\n const ordinal = (cell.row - startRow) * columnCount + (cell.column - startColumn);\n if (!Number.isSafeInteger(ordinal) || ordinal <= previousOrdinal) {\n throw projectionError(\"viewport cells are not unique strict row-major entries\");\n }\n previousOrdinal = ordinal;\n if (cell.formula === null && cell.value.kind === \"empty\") {\n throw projectionError(\"sparse viewport contains an empty cell\");\n }\n cells.push(cell);\n }\n return Object.freeze({\n revision,\n sheetId,\n generationId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n cells: Object.freeze(cells),\n });\n}\n\nfunction normalizeMetadataProjection(input: unknown): SpreadsheetArtifactMetadataProjection {\n const projection = exactRecord(input, \"spreadsheet metadata projection\");\n exactKeys(\n projection,\n [\"modeledFeatures\", \"revision\", \"sheets\"],\n \"spreadsheet metadata projection\",\n );\n const revision = uint64(projection.revision, \"metadata revision\");\n const features = exactRecord(projection.modeledFeatures, \"metadata modeledFeatures\");\n exactKeys(features, [\"dimensions\", \"hidden\", \"merges\"], \"metadata modeledFeatures\");\n if (features.dimensions !== false || features.hidden !== false || features.merges !== false) {\n throw projectionError(\"version 1 metadata modeled features must all be false\");\n }\n if (!Array.isArray(projection.sheets)) throw projectionError(\"metadata sheets must be an array\");\n if (projection.sheets.length > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw projectionError(\"metadata projection exceeds its hard sheet limit\");\n }\n const ids = new Set<string>();\n const names = new Set<string>();\n const sheets: SpreadsheetArtifactSheetMetadata[] = [];\n let generationPresence: boolean | null = null;\n for (let index = 0; index < projection.sheets.length; index += 1) {\n const value = exactRecord(\n ownArrayElement(projection.sheets, index, \"metadata sheets\"),\n \"metadata sheet\",\n );\n exactKeys(value, [\"generationId\", \"name\", \"sheetId\", \"usedBounds\"], \"metadata sheet\");\n const sheetId = spreadsheetSheetId(requireString(value.sheetId, \"metadata sheetId\"));\n if (ids.has(sheetId)) throw projectionError(\"metadata projection contains duplicate sheet ids\");\n ids.add(sheetId);\n const generationId = nullableGenerationId(value.generationId, \"metadata generationId\");\n const present = generationId !== null;\n if (generationPresence !== null && generationPresence !== present) {\n throw projectionError(\"metadata generations must be uniformly present or absent\");\n }\n generationPresence = present;\n const name = validateSheetName(\n requireString(value.name, \"metadata sheet name\"),\n \"metadata sheet name\",\n );\n const foldedName = name.toLowerCase();\n if (names.has(foldedName)) {\n throw projectionError(\"metadata projection contains duplicate case-insensitive sheet names\");\n }\n names.add(foldedName);\n const usedBounds = value.usedBounds === null ? null : normalizeUsedBounds(value.usedBounds);\n sheets.push(Object.freeze({ sheetId, generationId, name, usedBounds }));\n }\n return Object.freeze({\n revision,\n modeledFeatures: MODELED_FEATURES_NONE,\n sheets: Object.freeze(sheets),\n });\n}\n\nfunction normalizeProjectedCell(input: unknown): SpreadsheetArtifactProjectedCell {\n const cell = exactRecord(input, \"projected cell\");\n exactKeys(cell, [\"column\", \"formula\", \"row\", \"value\"], \"projected cell\");\n const row = uint32(cell.row, \"projected cell row\");\n const column = uint32(cell.column, \"projected cell column\");\n let formula: string | null;\n if (cell.formula === null) {\n formula = null;\n } else {\n formula = requireString(cell.formula, \"projected cell formula\");\n if (formula.length === 0) throw projectionError(\"projected cell formula must not be empty\");\n boundedUtf8(\n formula,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES,\n \"projected cell formula\",\n );\n }\n return Object.freeze({\n row,\n column,\n formula,\n value: normalizeProjectedValue(cell.value),\n });\n}\n\nfunction normalizeProjectedValue(input: unknown): SpreadsheetArtifactProjectedCellValue {\n const value = exactRecord(input, \"projected cell value\");\n if (value.kind === \"empty\") {\n exactKeys(value, [\"kind\"], \"empty projected cell value\");\n return EMPTY_VALUE;\n }\n if (value.kind === \"boolean\") {\n exactKeys(value, [\"kind\", \"value\"], \"boolean projected cell value\");\n if (typeof value.value !== \"boolean\") throw projectionError(\"boolean cell value is invalid\");\n return Object.freeze({ kind: \"boolean\", value: value.value });\n }\n if (value.kind === \"number\") {\n exactKeys(value, [\"kind\", \"value\"], \"number projected cell value\");\n if (typeof value.value !== \"number\" || !Number.isFinite(value.value)) {\n throw projectionError(\"number cell value must be finite\");\n }\n return Object.freeze({\n kind: \"number\",\n value: value.value === 0 ? 0 : value.value,\n });\n }\n if (value.kind === \"date\") {\n exactKeys(value, [\"kind\", \"value\"], \"date projected cell value\");\n return Object.freeze({\n kind: \"date\",\n value: canonicalDateString(value.value),\n });\n }\n if (value.kind === \"text\") {\n exactKeys(value, [\"kind\", \"value\"], \"text projected cell value\");\n const text = requireString(value.value, \"text cell value\");\n boundedUtf8(text, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, \"text cell value\");\n return Object.freeze({ kind: \"text\", value: text });\n }\n if (value.kind === \"error\") {\n exactKeys(value, [\"kind\", \"value\"], \"error projected cell value\");\n return Object.freeze({\n kind: \"error\",\n value: normalizeFormulaError(value.value),\n });\n }\n throw projectionError(\"projected cell value kind is invalid\");\n}\n\nfunction canonicalDateString(input: unknown): string {\n canonicalSpreadsheetDateMilliseconds(input);\n return input as string;\n}\n\nfunction normalizeFormulaError(input: unknown): SpreadsheetArtifactFormulaError {\n if (typeof input === \"string\" && FORMULA_ERROR_TAGS.has(input)) {\n return input as Exclude<SpreadsheetArtifactFormulaError, { custom: string }>;\n }\n const error = exactRecord(input, \"custom formula error\");\n exactKeys(error, [\"custom\"], \"custom formula error\");\n const custom = requireString(error.custom, \"custom formula error\");\n boundedUtf8(custom, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, \"custom formula error\");\n return Object.freeze({ custom });\n}\n\nfunction normalizeUsedBounds(input: unknown): SpreadsheetArtifactUsedBounds {\n const bounds = exactRecord(input, \"metadata used bounds\");\n exactKeys(bounds, [\"endColumn\", \"endRow\", \"startColumn\", \"startRow\"], \"metadata used bounds\");\n const startRow = uint32(bounds.startRow, \"used bounds startRow\");\n const startColumn = uint32(bounds.startColumn, \"used bounds startColumn\");\n const endRow = uint32(bounds.endRow, \"used bounds endRow\");\n const endColumn = uint32(bounds.endColumn, \"used bounds endColumn\");\n if (startRow > endRow || startColumn > endColumn) {\n throw projectionError(\"metadata used bounds are not ordered\");\n }\n return Object.freeze({ startRow, startColumn, endRow, endColumn });\n}\n\nfunction validateViewportGeometry(\n startRow: number,\n startColumn: number,\n rowCount: number,\n columnCount: number,\n): void {\n if (rowCount < 1 || columnCount < 1) {\n throw queryError(\"viewport extents must be nonzero\");\n }\n if (rowCount - 1 > UINT32_MAX - startRow || columnCount - 1 > UINT32_MAX - startColumn) {\n throw queryError(\"viewport extent exceeds uint32 coordinates\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_AREA) {\n throw queryError(\"viewport area exceeds its hard limit\");\n }\n}\n\nfunction validateSheetName(value: string, label: string): string {\n boundedUtf8(value, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, label);\n if (\n value.length === 0 ||\n value.trim() !== value ||\n value.length > 31 ||\n /[\\\\/?*[\\]:\\0]/u.test(value)\n ) {\n throw projectionError(`${label} does not match the public spreadsheet model`);\n }\n return value;\n}\n\nfunction nullableGenerationId(value: unknown, label: string): EditableArtifactStableId | null {\n return value === null ? null : spreadsheetSheetId(requireString(value, label));\n}\n\nfunction enforceProjectionEnvelopeLimit(bytes: Uint8Array, requested: number): void {\n if (bytes.byteLength > Math.min(requested, SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES)) {\n throw projectionError(\"spreadsheet projection exceeds its requested byte limit\");\n }\n}\n\nfunction effectiveProjectionMaximum(value: number, minimum: number): number {\n const maximum = positiveUint32(value, \"projection maximumBytes\");\n const effective = Math.min(maximum, SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES);\n if (effective < minimum) throw projectionError(\"projection maximum cannot fit an empty response\");\n return effective;\n}\n\nfunction requireBytes(value: unknown, label: string): asserts value is Uint8Array {\n if (!(value instanceof Uint8Array)) throw new TypeError(`${label} must be a Uint8Array`);\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be a string`);\n return value;\n}\n\nfunction uint32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction positiveUint32(value: unknown, label: string): number {\n const number = uint32(value, label);\n if (number === 0) throw new TypeError(`${label} must be nonzero`);\n return number;\n}\n\nfunction uint64(value: unknown, label: string): bigint {\n if (typeof value !== \"bigint\" || value < 0n || value > UINT64_MAX) {\n throw new TypeError(`${label} must be a uint64 bigint`);\n }\n return value;\n}\n\nfunction exactRecord(value: unknown, label: string): Record<string, unknown> {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n ) {\n throw new TypeError(`${label} must be a plain record`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n label: string,\n): void {\n const keys = Reflect.ownKeys(value);\n if (keys.some((key) => typeof key !== \"string\"))\n throw new TypeError(`${label} has symbol fields`);\n const actual = (keys as string[]).sort(compareCodeUnits);\n if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {\n throw new TypeError(`${label} fields must be exactly: ${expected.join(\", \")}`);\n }\n for (const key of actual) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} fields must be enumerable data properties`);\n }\n }\n}\n\nfunction ownArrayElement(value: readonly unknown[], index: number, label: string): unknown {\n if (!Object.hasOwn(value, index)) throw new TypeError(`${label} must be dense`);\n return value[index];\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction boundedUtf8(value: string, maximum: number, label: string): Uint8Array {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n }\n const bytes = textEncoder.encode(value);\n if (bytes.byteLength > maximum) throw new RangeError(`${label} exceeds its byte limit`);\n return bytes;\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n\nfunction fnv1a64(bytes: Uint8Array): bigint {\n let hash = FNV_OFFSET;\n for (const byte of bytes) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * FNV_PRIME);\n }\n return hash;\n}\n\nfunction queryError(message: string): TypeError {\n return new TypeError(message);\n}\n\nfunction projectionError(message: string): TypeError {\n return new TypeError(message);\n}\n\nconst MODELED_FEATURES_NONE: SpreadsheetArtifactModeledFeatures = Object.freeze({\n dimensions: false,\n hidden: false,\n merges: false,\n});\n\nconst EMPTY_VALUE: SpreadsheetArtifactProjectedCellValue = Object.freeze({\n kind: \"empty\",\n});\n\nconst FORMULA_ERRORS = [\n \"null\",\n \"divide_by_zero\",\n \"value\",\n \"reference\",\n \"name\",\n \"number\",\n \"not_available\",\n \"spill\",\n \"calculation\",\n] as const;\n\nconst FORMULA_ERROR_TAGS = new Set<string>(FORMULA_ERRORS);\n\nclass FixedWriter {\n private readonly buffer: Uint8Array;\n private readonly viewBuffer: DataView;\n private offset = 0;\n\n constructor(length: number) {\n this.buffer = new Uint8Array(length);\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n view(): Uint8Array {\n return this.buffer.subarray(0, this.offset);\n }\n\n finish(): Uint8Array {\n if (this.offset !== this.buffer.byteLength)\n throw new TypeError(\"fixed binary writer is incomplete\");\n return this.buffer;\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.offset, value);\n this.offset += 1;\n }\n\n u16(value: number): void {\n this.reserve(2);\n this.viewBuffer.setUint16(this.offset, value, true);\n this.offset += 2;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.offset, value, true);\n this.offset += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.offset, value, true);\n this.offset += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n const id = spreadsheetSheetId(value);\n this.u64(BigInt(`0x${id.slice(16)}`));\n this.u64(BigInt(`0x${id.slice(0, 16)}`));\n }\n\n bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.offset);\n this.offset += value.byteLength;\n }\n\n private reserve(length: number): void {\n if (this.offset + length > this.buffer.byteLength)\n throw new RangeError(\"fixed binary writer overflow\");\n }\n}\n\nclass DynamicWriter {\n private buffer: Uint8Array;\n private viewBuffer: DataView;\n private offset = 0;\n\n constructor(private readonly maximum: number) {\n this.buffer = new Uint8Array(Math.min(1_024, maximum));\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.offset);\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.offset, value);\n this.offset += 1;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.offset, value, true);\n this.offset += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.offset, value, true);\n this.offset += 8;\n }\n\n f64(value: number): void {\n this.reserve(8);\n this.viewBuffer.setFloat64(this.offset, value === 0 ? 0 : value, true);\n this.offset += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n const id = spreadsheetSheetId(value);\n this.u64(BigInt(`0x${id.slice(16)}`));\n this.u64(BigInt(`0x${id.slice(0, 16)}`));\n }\n\n optionalStableId(value: EditableArtifactStableId | null): void {\n if (value === null) this.bytes(new Uint8Array(16));\n else this.stableId(value);\n }\n\n string(value: string): void {\n const bytes = boundedUtf8(\n value,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES,\n \"projection string\",\n );\n this.u32(bytes.byteLength);\n this.bytes(bytes);\n }\n\n cell(cell: SpreadsheetArtifactProjectedCell): void {\n if (cell.formula === null) {\n this.u8(0);\n } else {\n this.u8(1);\n this.string(cell.formula);\n }\n const value = cell.value;\n switch (value.kind) {\n case \"empty\":\n this.u8(0);\n break;\n case \"boolean\":\n this.u8(value.value ? 2 : 1);\n break;\n case \"number\":\n this.u8(3);\n this.f64(value.value);\n break;\n case \"date\":\n this.u8(6);\n this.i64(BigInt(Date.parse(value.value)));\n break;\n case \"text\":\n this.u8(4);\n this.string(value.value);\n break;\n case \"error\":\n this.u8(5);\n this.formulaError(value.value);\n break;\n }\n }\n\n private formulaError(error: SpreadsheetArtifactFormulaError): void {\n if (typeof error === \"string\") {\n this.u8(FORMULA_ERRORS.indexOf(error as (typeof FORMULA_ERRORS)[number]));\n } else {\n this.u8(9);\n this.string(error.custom);\n }\n }\n\n private bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.offset);\n this.offset += value.byteLength;\n }\n\n private i64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigInt64(this.offset, value, true);\n this.offset += 8;\n }\n\n private reserve(additional: number): void {\n const required = this.offset + additional;\n if (!Number.isSafeInteger(required) || required > this.maximum) {\n throw projectionError(\"spreadsheet projection exceeds its byte limit\");\n }\n if (required <= this.buffer.byteLength) return;\n let size = Math.max(1, this.buffer.byteLength);\n while (size < required) size = Math.min(this.maximum, size * 2);\n const next = new Uint8Array(size);\n next.set(this.buffer.subarray(0, this.offset));\n this.buffer = next;\n this.viewBuffer = new DataView(next.buffer);\n }\n}\n\nclass Reader {\n private readonly viewBuffer: DataView;\n private offset = 0;\n\n constructor(private readonly input: Uint8Array) {\n this.viewBuffer = new DataView(input.buffer, input.byteOffset, input.byteLength);\n }\n\n u8(): number {\n this.reserve(1);\n return this.input[this.offset++]!;\n }\n\n u16(): number {\n this.reserve(2);\n const value = this.viewBuffer.getUint16(this.offset, true);\n this.offset += 2;\n return value;\n }\n\n u32(): number {\n this.reserve(4);\n const value = this.viewBuffer.getUint32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n u64(): bigint {\n this.reserve(8);\n const value = this.viewBuffer.getBigUint64(this.offset, true);\n this.offset += 8;\n return value;\n }\n\n f64(): number {\n this.reserve(8);\n const value = this.viewBuffer.getFloat64(this.offset, true);\n this.offset += 8;\n if (!Number.isFinite(value) || Object.is(value, -0)) {\n throw projectionError(\"spreadsheet projection number is noncanonical\");\n }\n return value;\n }\n\n stableId(label: string): EditableArtifactStableId {\n const counter = this.u64().toString(16).padStart(16, \"0\");\n const namespace = this.u64().toString(16).padStart(16, \"0\");\n try {\n return spreadsheetSheetId(`${namespace}${counter}`);\n } catch {\n throw projectionError(`${label} is reserved or noncanonical`);\n }\n }\n\n optionalStableId(present: boolean): EditableArtifactStableId | null {\n if (present) return this.stableId(\"projection generation id\");\n const bytes = this.bytes(16);\n if (bytes.some((byte) => byte !== 0)) {\n throw projectionError(\"projection has a generation id without its flag\");\n }\n return null;\n }\n\n string(): string {\n const length = this.u32();\n if (length > SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES) {\n throw projectionError(\"projection string exceeds its byte limit\");\n }\n try {\n return textDecoder.decode(this.bytes(length));\n } catch {\n throw projectionError(\"projection string is not canonical UTF-8\");\n }\n }\n\n formula(): string | null {\n const tag = this.u8();\n if (tag === 0) return null;\n if (tag !== 1) throw projectionError(\"projection formula tag is invalid\");\n const formula = this.string();\n if (formula.length === 0) throw projectionError(\"projection formula must not be empty\");\n return formula;\n }\n\n cellValue(): SpreadsheetArtifactProjectedCellValue {\n switch (this.u8()) {\n case 0:\n return EMPTY_VALUE;\n case 1:\n return Object.freeze({ kind: \"boolean\", value: false });\n case 2:\n return Object.freeze({ kind: \"boolean\", value: true });\n case 3:\n return Object.freeze({ kind: \"number\", value: this.f64() });\n case 4:\n return Object.freeze({ kind: \"text\", value: this.string() });\n case 5:\n return Object.freeze({ kind: \"error\", value: this.formulaError() });\n case 6:\n return Object.freeze({\n kind: \"date\",\n value: canonicalSpreadsheetDateFromMilliseconds(this.i64()),\n });\n default:\n throw projectionError(\"projection cell value tag is invalid\");\n }\n }\n\n done(message: string): void {\n if (this.offset !== this.input.byteLength) throw new TypeError(message);\n }\n\n private i64(): bigint {\n const bytes = this.bytes(8);\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getBigInt64(0, true);\n }\n\n bytes(length: number): Uint8Array {\n this.reserve(length);\n const bytes = this.input.subarray(this.offset, this.offset + length);\n this.offset += length;\n return bytes;\n }\n\n private formulaError(): SpreadsheetArtifactFormulaError {\n const tag = this.u8();\n if (tag <= 8) return FORMULA_ERRORS[tag]!;\n if (tag === 9) return Object.freeze({ custom: this.string() });\n throw projectionError(\"projection formula error tag is invalid\");\n }\n\n private reserve(length: number): void {\n if (\n !Number.isSafeInteger(length) ||\n length < 0 ||\n this.offset + length > this.input.byteLength\n ) {\n throw projectionError(\"spreadsheet projection payload is truncated\");\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connector-attachments.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const CONNECTOR_ATTACHMENT_TRANSFER_VERSION = 1 as const;\nexport const CONNECTOR_ATTACHMENT_RECEIPT_VERSION = 1 as const;\nexport const CONNECTOR_ATTACHMENT_TRANSFER_META_KEY =\n \"opengeni/connector-attachment-transfers\" as const;\nexport const CONNECTOR_ATTACHMENT_RECEIPT_META_KEY =\n \"opengeni/connector-attachment-receipts\" as const;\nexport const CONNECTOR_ATTACHMENT_MAX_COUNT = 16;\n// Must remain byte-for-byte aligned with Channel A's exact workspace importer.\nexport const CONNECTOR_ATTACHMENT_MAX_BYTES = 5_000_000_000;\nexport const CONNECTOR_ATTACHMENT_FILENAME_MAX_UTF8_BYTES = 255;\nexport const CONNECTOR_ATTACHMENT_MEDIA_TYPE_MAX_UTF8_BYTES = 256;\nexport const CONNECTOR_ATTACHMENT_PROVIDER_MAX_UTF8_BYTES = 128;\nexport const CONNECTOR_ATTACHMENT_PROVIDER_ID_MAX_UTF8_BYTES = 512;\nexport const CONNECTOR_ATTACHMENT_SOURCE_URL_MAX_UTF8_BYTES = 8 * 1024;\nexport const CONNECTOR_ATTACHMENT_SANDBOX_PATH_MAX_UTF8_BYTES = 2 * 1024;\n\nconst PROVIDER_PATTERN = /^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u;\nconst SHA256_PATTERN = /^[0-9a-f]{64}$/u;\nconst MEDIA_TYPE_PATTERN =\n /^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+(?:\\s*;\\s*[a-z0-9!#$&^_.+-]+=(?:[a-z0-9!#$&^_.+-]+|\"[^\"\\r\\n]*\"))*$/iu;\nconst CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u001f\\u007f]/u;\nconst HTTP_URL_REFERENCE_PATTERN = /(?:https?:)?\\/\\/[^\\s]/iu;\nconst PORTABLE_FILENAME_FORBIDDEN_PATTERN = /[<>:\"|?*]/u;\nconst PORTABLE_FILENAME_RESERVED_PATTERN = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\\.|$)/iu;\nconst textEncoder = new TextEncoder();\n\nfunction utf8Bytes(value: string): number {\n return textEncoder.encode(value).byteLength;\n}\n\nfunction boundedString(maxUtf8Bytes: number) {\n return z.string().refine((value) => utf8Bytes(value) <= maxUtf8Bytes, {\n message: `must be at most ${maxUtf8Bytes} UTF-8 bytes`,\n });\n}\n\nfunction isHttpUrl(value: string): boolean {\n try {\n const parsed = new URL(value);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction containsHttpUrlReference(value: string): boolean {\n return HTTP_URL_REFERENCE_PATTERN.test(value);\n}\n\nfunction isPrivateUrlCredentialQueryName(value: string): boolean {\n const normalized = value.toLowerCase().replace(/[^a-z0-9]/gu, \"\");\n return (\n normalized === \"sig\" ||\n normalized === \"auth\" ||\n normalized.endsWith(\"signature\") ||\n normalized.endsWith(\"token\") ||\n normalized.endsWith(\"credential\") ||\n normalized.endsWith(\"secret\") ||\n normalized.endsWith(\"password\") ||\n normalized.endsWith(\"passcode\") ||\n normalized.endsWith(\"authorization\") ||\n normalized.endsWith(\"apikey\") ||\n normalized.endsWith(\"accesskey\") ||\n normalized.endsWith(\"securitytoken\") ||\n normalized.endsWith(\"sas\") ||\n normalized === \"googleaccessid\"\n );\n}\n\nfunction privateUrlCredentialValues(value: string): string[] {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return [];\n }\n const credentials = new Set<string>();\n for (const [name, credential] of parsed.searchParams) {\n if (credential && isPrivateUrlCredentialQueryName(name)) credentials.add(credential);\n }\n for (const pair of parsed.search.slice(1).split(\"&\")) {\n if (!pair) continue;\n const separator = pair.indexOf(\"=\");\n const rawName = separator === -1 ? pair : pair.slice(0, separator);\n const rawCredential = separator === -1 ? \"\" : pair.slice(separator + 1);\n let decodedName: string;\n try {\n decodedName = decodeURIComponent(rawName.replace(/\\+/gu, \" \"));\n } catch {\n continue;\n }\n if (rawCredential && isPrivateUrlCredentialQueryName(decodedName)) {\n credentials.add(rawCredential);\n }\n }\n return [...credentials];\n}\n\nfunction publicMetadataContainsCredential(publicValue: string, credential: string): boolean {\n return publicValue.includes(credential);\n}\n\nexport const ConnectorAttachmentProviderIdentity = z\n .object({\n provider: boundedString(CONNECTOR_ATTACHMENT_PROVIDER_MAX_UTF8_BYTES).regex(PROVIDER_PATTERN),\n kind: z.literal(\"attachment\"),\n value: boundedString(CONNECTOR_ATTACHMENT_PROVIDER_ID_MAX_UTF8_BYTES)\n .min(1)\n .refine((value) => !CONTROL_CHARACTER_PATTERN.test(value), {\n message: \"must not contain control characters\",\n })\n .refine((value) => !isHttpUrl(value) && !containsHttpUrlReference(value), {\n message: \"must be an opaque provider attachment identity, not a URL\",\n }),\n })\n .strict();\nexport type ConnectorAttachmentProviderIdentity = z.infer<\n typeof ConnectorAttachmentProviderIdentity\n>;\n\nexport const ConnectorAttachmentFileName = boundedString(\n CONNECTOR_ATTACHMENT_FILENAME_MAX_UTF8_BYTES,\n)\n .min(1)\n .refine(\n (value) =>\n value !== \".\" &&\n value !== \"..\" &&\n value === value.trim() &&\n !value.includes(\"/\") &&\n !value.includes(\"\\\\\") &&\n !CONTROL_CHARACTER_PATTERN.test(value) &&\n !PORTABLE_FILENAME_FORBIDDEN_PATTERN.test(value) &&\n !/[ .]$/u.test(value) &&\n !PORTABLE_FILENAME_RESERVED_PATTERN.test(value),\n { message: \"must be a safe leaf filename\" },\n );\n\nexport const ConnectorAttachmentMediaType = boundedString(\n CONNECTOR_ATTACHMENT_MEDIA_TYPE_MAX_UTF8_BYTES,\n)\n .regex(MEDIA_TYPE_PATTERN)\n .refine((value) => !containsHttpUrlReference(value), {\n message: \"must not contain an HTTP URL reference\",\n });\n\nexport const ConnectorAttachmentSha256 = z.string().regex(SHA256_PATTERN);\n\nexport const ConnectorAttachmentPrivateSource = z\n .object({\n url: boundedString(CONNECTOR_ATTACHMENT_SOURCE_URL_MAX_UTF8_BYTES).superRefine(\n (value, context) => {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n context.addIssue({\n code: \"custom\",\n message: \"must be an absolute URL\",\n });\n return;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n context.addIssue({ code: \"custom\", message: \"must use http or https\" });\n }\n if (parsed.username || parsed.password) {\n context.addIssue({\n code: \"custom\",\n message: \"must not contain URL userinfo\",\n });\n }\n if (parsed.hash) {\n context.addIssue({\n code: \"custom\",\n message: \"must not contain a URL fragment\",\n });\n }\n },\n ),\n expiresAt: z.iso.datetime({ offset: true }),\n })\n .strict();\nexport type ConnectorAttachmentPrivateSource = z.infer<typeof ConnectorAttachmentPrivateSource>;\n\nexport const ConnectorAttachmentTransfer = z\n .object({\n providerAttachmentId: ConnectorAttachmentProviderIdentity,\n fileName: ConnectorAttachmentFileName,\n mediaType: ConnectorAttachmentMediaType,\n byteSize: z.number().int().min(0).max(CONNECTOR_ATTACHMENT_MAX_BYTES),\n contentSha256: ConnectorAttachmentSha256,\n source: ConnectorAttachmentPrivateSource,\n })\n .strict()\n .superRefine((attachment, context) => {\n const publicValues = [\n attachment.providerAttachmentId.value,\n attachment.fileName,\n attachment.mediaType,\n ];\n for (const credential of privateUrlCredentialValues(attachment.source.url)) {\n if (publicValues.some((value) => publicMetadataContainsCredential(value, credential))) {\n context.addIssue({\n code: \"custom\",\n message: \"private source credentials must not appear in public attachment metadata\",\n });\n return;\n }\n }\n });\nexport type ConnectorAttachmentTransfer = z.infer<typeof ConnectorAttachmentTransfer>;\n\nexport const ConnectorAttachmentTransferEnvelope = z\n .object({\n version: z.literal(CONNECTOR_ATTACHMENT_TRANSFER_VERSION),\n attachments: z.array(ConnectorAttachmentTransfer).min(1).max(CONNECTOR_ATTACHMENT_MAX_COUNT),\n })\n .strict()\n .superRefine((envelope, context) => {\n const identities = new Set<string>();\n for (const [index, attachment] of envelope.attachments.entries()) {\n const identity = `${attachment.providerAttachmentId.provider}\\0${attachment.providerAttachmentId.value}`;\n if (identities.has(identity)) {\n context.addIssue({\n code: \"custom\",\n message: \"provider attachment identities must be unique\",\n path: [\"attachments\", index, \"providerAttachmentId\"],\n });\n }\n identities.add(identity);\n }\n });\nexport type ConnectorAttachmentTransferEnvelope = z.infer<\n typeof ConnectorAttachmentTransferEnvelope\n>;\n\nexport const ConnectorAttachmentSandboxPath = boundedString(\n CONNECTOR_ATTACHMENT_SANDBOX_PATH_MAX_UTF8_BYTES,\n)\n .min(1)\n .refine(\n (value) => {\n if (\n value !== value.trim() ||\n value.startsWith(\"/\") ||\n /^[A-Za-z]:[\\\\/]/u.test(value) ||\n value.includes(\"\\\\\") ||\n CONTROL_CHARACTER_PATTERN.test(value)\n ) {\n return false;\n }\n const segments = value.split(\"/\");\n if (\n segments.length !== 5 ||\n segments[0] !== \".opengeni\" ||\n segments[1] !== \"connector-attachments\" ||\n !PROVIDER_PATTERN.test(segments[2] ?? \"\") ||\n !/^[0-9a-f]{32}$/u.test(segments[3] ?? \"\") ||\n !ConnectorAttachmentFileName.safeParse(segments[4]).success\n ) {\n return false;\n }\n return segments.every(\n (segment) =>\n segment.length > 0 &&\n segment !== \".\" &&\n segment !== \"..\" &&\n !PORTABLE_FILENAME_FORBIDDEN_PATTERN.test(segment) &&\n !/[ .]$/u.test(segment) &&\n !PORTABLE_FILENAME_RESERVED_PATTERN.test(segment),\n );\n },\n { message: \"must be a confined connector attachment sandbox path\" },\n );\n\nexport const ConnectorAttachmentReceipt = z\n .object({\n providerAttachmentId: ConnectorAttachmentProviderIdentity,\n fileName: ConnectorAttachmentFileName,\n mediaType: ConnectorAttachmentMediaType,\n byteSize: z.number().int().min(0).max(CONNECTOR_ATTACHMENT_MAX_BYTES),\n contentSha256: ConnectorAttachmentSha256,\n sandboxPath: ConnectorAttachmentSandboxPath,\n })\n .strict()\n .superRefine((receipt, context) => {\n const segments = receipt.sandboxPath.split(\"/\");\n if (segments[2] !== receipt.providerAttachmentId.provider) {\n context.addIssue({\n code: \"custom\",\n message: \"sandbox path provider must match the provider attachment identity\",\n path: [\"sandboxPath\"],\n });\n }\n if (segments[4] !== receipt.fileName) {\n context.addIssue({\n code: \"custom\",\n message: \"sandbox path filename must match the attachment filename\",\n path: [\"sandboxPath\"],\n });\n }\n });\nexport type ConnectorAttachmentReceipt = z.infer<typeof ConnectorAttachmentReceipt>;\n\nexport const ConnectorAttachmentReceiptEnvelope = z\n .object({\n version: z.literal(CONNECTOR_ATTACHMENT_RECEIPT_VERSION),\n attachments: z.array(ConnectorAttachmentReceipt).min(1).max(CONNECTOR_ATTACHMENT_MAX_COUNT),\n })\n .strict();\nexport type ConnectorAttachmentReceiptEnvelope = z.infer<typeof ConnectorAttachmentReceiptEnvelope>;\n\nexport function parseConnectorAttachmentTransferEnvelope(\n value: unknown,\n options: { nowMs?: number } = {},\n): ConnectorAttachmentTransferEnvelope {\n const envelope = ConnectorAttachmentTransferEnvelope.parse(value);\n const nowMs = options.nowMs ?? Date.now();\n for (const attachment of envelope.attachments) {\n if (Date.parse(attachment.source.expiresAt) <= nowMs) {\n throw new Error(\"connector attachment source is expired\");\n }\n }\n return envelope;\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-YRXAWWCU.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// src/site-session-http.ts
|
|
2
|
-
var SITE_WORKSPACE_PREFIX = "/v1/workspaces/site-host";
|
|
3
|
-
var SiteSessionPathError = class extends Error {
|
|
4
|
-
code = "site_session_path_unsupported";
|
|
5
|
-
constructor() {
|
|
6
|
-
super("Unsupported Site session API path");
|
|
7
|
-
this.name = "SiteSessionPathError";
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
function siteSessionPath(path, workspaceId, _method = "GET", siteId) {
|
|
11
|
-
const pathname = path.split("?")[0];
|
|
12
|
-
const workspace = pathname === SITE_WORKSPACE_PREFIX || pathname.startsWith(`${SITE_WORKSPACE_PREFIX}/`);
|
|
13
|
-
const context = pathname === "/v1/config/client";
|
|
14
|
-
if (!workspace && !context || /[%\\#\u0000-\u0020\u007f]/u.test(pathname) || pathname.split("/").some((p) => p === "." || p === "..")) {
|
|
15
|
-
throw new SiteSessionPathError();
|
|
16
|
-
}
|
|
17
|
-
const rewritten = path.replace(
|
|
18
|
-
"/workspaces/site-host",
|
|
19
|
-
`/workspaces/${encodeURIComponent(workspaceId)}`
|
|
20
|
-
);
|
|
21
|
-
const url = new URL(rewritten, "http://site.invalid");
|
|
22
|
-
if (url.searchParams.get("originSiteId") === "current" && workspaceId !== "site-host") {
|
|
23
|
-
url.searchParams.set("originSiteId", siteId ?? "00000000-0000-0000-0000-000000000000");
|
|
24
|
-
return url.pathname + url.search;
|
|
25
|
-
}
|
|
26
|
-
return rewritten;
|
|
27
|
-
}
|
|
28
|
-
function siteRequestHeaders(input) {
|
|
29
|
-
const headers = new Headers(input);
|
|
30
|
-
const connectionHeaders = (headers.get("connection") ?? "").split(",").map((value) => value.trim().toLowerCase());
|
|
31
|
-
for (const name of [...headers.keys()]) {
|
|
32
|
-
if (connectionHeaders.includes(name) || /^(authorization|proxy-authorization|cookie|cookie2|host|origin|referer|connection|keep-alive|proxy-connection|te|trailer|transfer-encoding|upgrade|content-length|accept-encoding|forwarded|x-api-key)$/i.test(
|
|
33
|
-
name
|
|
34
|
-
) || /^(sec-|x-forwarded-|x-opengeni-(access-key|external-actor|site-|managed-actor))/i.test(name))
|
|
35
|
-
headers.delete(name);
|
|
36
|
-
}
|
|
37
|
-
return headers;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export {
|
|
41
|
-
SiteSessionPathError,
|
|
42
|
-
siteSessionPath,
|
|
43
|
-
siteRequestHeaders
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=chunk-YRXAWWCU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/site-session-http.ts"],"sourcesContent":["const SITE_WORKSPACE_PREFIX = \"/v1/workspaces/site-host\";\n\n/** A Site/Codemode SDK request named a route outside the proxied surface. */\nexport class SiteSessionPathError extends Error {\n readonly code = \"site_session_path_unsupported\";\n\n constructor() {\n super(\"Unsupported Site session API path\");\n this.name = \"SiteSessionPathError\";\n }\n}\n\n/** Route browser/preview SDK requests to the host workspace. This is a URL\n * boundary, not an endpoint or HTTP-method allowlist. Ordinary API handlers\n * authorize every operation with the viewer or agent's existing authority. */\nexport function siteSessionPath(\n path: string,\n workspaceId: string,\n _method = \"GET\",\n siteId?: string,\n): string {\n const pathname = path.split(\"?\")[0]!;\n const workspace =\n pathname === SITE_WORKSPACE_PREFIX || pathname.startsWith(`${SITE_WORKSPACE_PREFIX}/`);\n const context = pathname === \"/v1/config/client\";\n if (\n (!workspace && !context) ||\n /[%\\\\#\\u0000-\\u0020\\u007f]/u.test(pathname) ||\n pathname.split(\"/\").some((p) => p === \".\" || p === \"..\")\n ) {\n throw new SiteSessionPathError();\n }\n const rewritten = path.replace(\n \"/workspaces/site-host\",\n `/workspaces/${encodeURIComponent(workspaceId)}`,\n );\n // Preview has no published Site identity. Never widen a Site-only list to the workspace.\n const url = new URL(rewritten, \"http://site.invalid\");\n if (url.searchParams.get(\"originSiteId\") === \"current\" && workspaceId !== \"site-host\") {\n url.searchParams.set(\"originSiteId\", siteId ?? \"00000000-0000-0000-0000-000000000000\");\n return url.pathname + url.search;\n }\n return rewritten;\n}\n\n/** Preserve SDK request semantics while the host supplies identity and transport headers. */\nexport function siteRequestHeaders(input: HeadersInit): Headers {\n const headers = new Headers(input);\n const connectionHeaders = (headers.get(\"connection\") ?? \"\")\n .split(\",\")\n .map((value) => value.trim().toLowerCase());\n for (const name of [...headers.keys()]) {\n if (\n connectionHeaders.includes(name) ||\n /^(authorization|proxy-authorization|cookie|cookie2|host|origin|referer|connection|keep-alive|proxy-connection|te|trailer|transfer-encoding|upgrade|content-length|accept-encoding|forwarded|x-api-key)$/i.test(\n name,\n ) ||\n /^(sec-|x-forwarded-|x-opengeni-(access-key|external-actor|site-|managed-actor))/i.test(name)\n )\n headers.delete(name);\n }\n return headers;\n}\n"],"mappings":";AAAA,IAAM,wBAAwB;AAGvB,IAAM,uBAAN,cAAmC,MAAM;AAAA,EACrC,OAAO;AAAA,EAEhB,cAAc;AACZ,UAAM,mCAAmC;AACzC,SAAK,OAAO;AAAA,EACd;AACF;AAKO,SAAS,gBACd,MACA,aACA,UAAU,OACV,QACQ;AACR,QAAM,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC;AAClC,QAAM,YACJ,aAAa,yBAAyB,SAAS,WAAW,GAAG,qBAAqB,GAAG;AACvF,QAAM,UAAU,aAAa;AAC7B,MACG,CAAC,aAAa,CAAC,WAChB,6BAA6B,KAAK,QAAQ,KAC1C,SAAS,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,MAAM,OAAO,MAAM,IAAI,GACvD;AACA,UAAM,IAAI,qBAAqB;AAAA,EACjC;AACA,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,IACA,eAAe,mBAAmB,WAAW,CAAC;AAAA,EAChD;AAEA,QAAM,MAAM,IAAI,IAAI,WAAW,qBAAqB;AACpD,MAAI,IAAI,aAAa,IAAI,cAAc,MAAM,aAAa,gBAAgB,aAAa;AACrF,QAAI,aAAa,IAAI,gBAAgB,UAAU,sCAAsC;AACrF,WAAO,IAAI,WAAW,IAAI;AAAA,EAC5B;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,OAA6B;AAC9D,QAAM,UAAU,IAAI,QAAQ,KAAK;AACjC,QAAM,qBAAqB,QAAQ,IAAI,YAAY,KAAK,IACrD,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,EAAE,YAAY,CAAC;AAC5C,aAAW,QAAQ,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG;AACtC,QACE,kBAAkB,SAAS,IAAI,KAC/B,2MAA2M;AAAA,MACzM;AAAA,IACF,KACA,mFAAmF,KAAK,IAAI;AAE5F,cAAQ,OAAO,IAAI;AAAA,EACvB;AACA,SAAO;AACT;","names":[]}
|