@opengeni/contracts 3.1.0-canary.2 → 3.1.2
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 +971 -0
- package/dist/agent-instruction-changes.d.ts +0 -2
- package/dist/allowance-refusal.d.ts +9 -0
- package/dist/allowance-refusal.js +50 -0
- package/dist/allowance-refusal.js.map +1 -0
- package/dist/analytics-consent-report.d.ts +19 -0
- package/dist/analytics-consent-report.js +10 -0
- package/dist/analytics-consent-report.js.map +1 -0
- package/dist/api-key-presets.d.ts +19 -0
- package/dist/artifact-catalog.d.ts +188 -0
- package/dist/artifacts.d.ts +86 -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.d.ts +1 -0
- package/dist/atlassian.js +34 -19
- package/dist/browser-storage.d.ts +5 -0
- package/dist/browser-storage.js +9 -0
- package/dist/browser-storage.js.map +1 -0
- package/dist/bundled-skills.d.ts +24 -1
- package/dist/canonical-human-identities.js +2 -1
- package/dist/chunk-2ZIHHL72.js +153 -0
- package/dist/chunk-2ZIHHL72.js.map +1 -0
- package/dist/{chunk-5LYFSZ7O.js → chunk-352X6ENP.js} +31 -31
- package/dist/chunk-4JGHSSB7.js +11 -0
- package/dist/chunk-4JGHSSB7.js.map +1 -0
- package/dist/chunk-4QO6GJUX.js +85 -0
- package/dist/chunk-4QO6GJUX.js.map +1 -0
- package/dist/chunk-4VDMHLLL.js +49 -0
- package/dist/chunk-4VDMHLLL.js.map +1 -0
- package/dist/chunk-56SNIMDO.js +9 -0
- package/dist/chunk-56SNIMDO.js.map +1 -0
- package/dist/chunk-6C2HKFTU.js +207 -0
- package/dist/chunk-6C2HKFTU.js.map +1 -0
- package/dist/chunk-6IXO76Z6.js +72 -0
- package/dist/chunk-6IXO76Z6.js.map +1 -0
- package/dist/chunk-7272KVWZ.js +60 -0
- package/dist/chunk-7272KVWZ.js.map +1 -0
- package/dist/{chunk-7ABONTXE.js → chunk-E3GGUBHS.js} +49 -5
- package/dist/chunk-E3GGUBHS.js.map +1 -0
- package/dist/chunk-EFZYKUE2.js +767 -0
- package/dist/chunk-EFZYKUE2.js.map +1 -0
- package/dist/chunk-EKWNTOG3.js +154 -0
- package/dist/chunk-EKWNTOG3.js.map +1 -0
- package/dist/chunk-HABQ7ADB.js +234 -0
- package/dist/chunk-HABQ7ADB.js.map +1 -0
- package/dist/chunk-HRRU4QPI.js +91 -0
- package/dist/chunk-HRRU4QPI.js.map +1 -0
- package/dist/{chunk-3SIZGL3O.js → chunk-IK36LXKC.js} +18 -2
- package/dist/chunk-IK36LXKC.js.map +1 -0
- package/dist/{chunk-TXTQIYCV.js → chunk-ILJ72KPO.js} +56 -3
- package/dist/chunk-ILJ72KPO.js.map +1 -0
- package/dist/chunk-J4HQ3UKY.js +93 -0
- package/dist/chunk-J4HQ3UKY.js.map +1 -0
- package/dist/chunk-KHHZTBP7.js +11 -0
- package/dist/chunk-KHHZTBP7.js.map +1 -0
- package/dist/{chunk-WYBDERIY.js → chunk-LZ2LAHIX.js} +47 -41
- package/dist/chunk-LZ2LAHIX.js.map +1 -0
- package/dist/chunk-NDZHPTCL.js +400 -0
- package/dist/chunk-NDZHPTCL.js.map +1 -0
- package/dist/chunk-OF6OKOBF.js +54793 -0
- package/dist/chunk-OF6OKOBF.js.map +1 -0
- package/dist/chunk-OL23ARTF.js +94 -0
- package/dist/chunk-OL23ARTF.js.map +1 -0
- package/dist/chunk-PUIUXIOL.js +189 -0
- package/dist/chunk-PUIUXIOL.js.map +1 -0
- package/dist/{chunk-Y3KNXVTD.js → chunk-RMWXDZEO.js} +128 -21
- package/dist/chunk-RMWXDZEO.js.map +1 -0
- package/dist/{chunk-MRWYRAS5.js → chunk-SHO4YO4B.js} +27 -35
- package/dist/chunk-SHO4YO4B.js.map +1 -0
- package/dist/chunk-SWRN2DJ3.js +153 -0
- package/dist/chunk-SWRN2DJ3.js.map +1 -0
- package/dist/chunk-TCXCRBPF.js +267 -0
- package/dist/chunk-TCXCRBPF.js.map +1 -0
- package/dist/chunk-TLU3UEMD.js +324 -0
- package/dist/chunk-TLU3UEMD.js.map +1 -0
- package/dist/chunk-TSWWZMUS.js +186 -0
- package/dist/chunk-TSWWZMUS.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-XDLAGX66.js +127 -0
- package/dist/chunk-XDLAGX66.js.map +1 -0
- package/dist/chunk-YKZ4WU4P.js +33 -0
- package/dist/chunk-YKZ4WU4P.js.map +1 -0
- package/dist/{chunk-O5LEQHDM.js → chunk-Z7WEVGCL.js} +3 -3
- package/dist/{chunk-YBW5JSA3.js → chunk-ZDCRWCGZ.js} +119 -101
- package/dist/chunk-ZDCRWCGZ.js.map +1 -0
- package/dist/claude-provider-account-authority.d.ts +18 -0
- package/dist/claude-subscription-oauth.d.ts +42 -0
- package/dist/claude-subscription-usage.d.ts +159 -0
- package/dist/client-error-report.d.ts +158 -0
- package/dist/client-error-report.js +164 -0
- package/dist/client-error-report.js.map +1 -0
- package/dist/code-search.d.ts +52 -0
- package/dist/code-search.js +40 -0
- package/dist/code-search.js.map +1 -0
- package/dist/codex-provider-account-authority.js +20 -12
- package/dist/codex-provider-account-authority.js.map +1 -1
- package/dist/company-profile.d.ts +144 -6
- package/dist/connect.d.ts +37 -0
- package/dist/connect.js +216 -159
- package/dist/connect.js.map +1 -1
- package/dist/connection-account-label.d.ts +2 -0
- package/dist/connection-account-label.js +35 -0
- package/dist/connection-account-label.js.map +1 -0
- package/dist/connection-authority.d.ts +9 -317
- package/dist/connection-authority.js +37 -42
- package/dist/connector-attachments.js +2 -1
- package/dist/connector-destinations.js +2 -1
- package/dist/connector-tool-permissions.d.ts +137 -0
- package/dist/cua-desktop-tools.d.ts +17 -0
- package/dist/define-schema.d.ts +8 -0
- package/dist/direct-model-provider.d.ts +36 -0
- package/dist/editable-artifact-codec-registry.js +5 -5
- package/dist/editable-artifact-committed-transaction.js +3 -2
- package/dist/editable-artifact-live.js +5 -5
- package/dist/editable-artifact-serialized-commit.js +6 -6
- package/dist/editable-artifact-versions.d.ts +7 -1
- package/dist/editable-artifact-versions.js +1 -1
- package/dist/editable-artifacts.js +62 -56
- package/dist/event-preview.d.ts +22 -0
- package/dist/external-identities.d.ts +138 -0
- package/dist/external-identities.js +9 -4
- package/dist/first-party-tool-authorization.d.ts +815 -0
- package/dist/github-repository-contracts.js +60 -43
- package/dist/github-repository-contracts.js.map +1 -1
- package/dist/google-drive.d.ts +2 -1
- package/dist/google-drive.js +305 -238
- package/dist/google-drive.js.map +1 -1
- package/dist/host-mcp-bindings.d.ts +5 -0
- package/dist/host-mcp-bindings.js +233 -170
- package/dist/host-mcp-bindings.js.map +1 -1
- package/dist/image-generation.d.ts +1 -0
- package/dist/index.d.ts +16761 -5946
- package/dist/index.js +1973 -260
- package/dist/insights-usage.d.ts +877 -0
- package/dist/insights-usage.js +559 -0
- package/dist/insights-usage.js.map +1 -0
- package/dist/interaction.d.ts +1176 -829
- package/dist/knowledge-entries.d.ts +81 -2
- package/dist/knowledge-preparation.d.ts +239 -0
- package/dist/managed-auth-session-sets.d.ts +7 -0
- package/dist/managed-auth-session-sets.js +198 -132
- package/dist/managed-auth-session-sets.js.map +1 -1
- package/dist/managed-sign-in-methods.d.ts +56 -0
- package/dist/managed-sign-in-methods.js +64 -0
- package/dist/managed-sign-in-methods.js.map +1 -0
- package/dist/mcp-catalog-limits.d.ts +2 -0
- package/dist/mcp-oauth.d.ts +2 -2
- package/dist/mcp-structured-content.d.ts +25 -0
- package/dist/modal-native-proof-v2.d.ts +587 -0
- package/dist/modal-native-proof-v2.js +38 -0
- package/dist/modal-native-proof-v2.js.map +1 -0
- package/dist/model-account-choice.d.ts +235 -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 +98 -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.d.ts +3 -1
- package/dist/model-picker-order.js +3 -0
- package/dist/model-picker-order.js.map +1 -1
- package/dist/organization-access.d.ts +412 -0
- package/dist/organization-access.js +39 -0
- package/dist/organization-access.js.map +1 -0
- package/dist/organization-integration-policy.d.ts +27 -0
- package/dist/organization-membership-lifecycle.d.ts +38 -0
- package/dist/organization-model-usage.d.ts +146 -0
- package/dist/organization-model-usage.js +78 -0
- package/dist/organization-model-usage.js.map +1 -0
- package/dist/organization-recovery.js +2 -1
- package/dist/organization-usage.d.ts +138 -0
- package/dist/permissions.d.ts +18 -0
- package/dist/personal-github.d.ts +1 -0
- package/dist/personal-github.js +199 -144
- package/dist/personal-github.js.map +1 -1
- package/dist/prepared-mcp-setup.d.ts +54 -0
- package/dist/prepared-mcp-setup.js +12 -0
- package/dist/prepared-mcp-setup.js.map +1 -0
- package/dist/product-analytics.d.ts +116 -0
- package/dist/product-lifecycle-facts.d.ts +73 -0
- package/dist/remember.d.ts +98 -6
- package/dist/retained-output.d.ts +8 -0
- package/dist/sandbox-file-artifacts.d.ts +1 -0
- package/dist/sandbox-provider-command.d.ts +91 -1
- package/dist/sandbox-recovery.d.ts +146 -0
- package/dist/secret-generator.d.ts +44 -0
- package/dist/secret-references.d.ts +90 -0
- package/dist/secret-resolution.d.ts +111 -0
- package/dist/secret-totp.d.ts +41 -0
- package/dist/session-final-reply.d.ts +6 -0
- package/dist/session-final-reply.js +9 -0
- package/dist/session-final-reply.js.map +1 -0
- package/dist/session-goal-reports.d.ts +21 -0
- package/dist/session-history-import.d.ts +1272 -0
- package/dist/session-list-entries.d.ts +4 -0
- package/dist/session-list-entries.js +56 -0
- package/dist/session-list-entries.js.map +1 -0
- package/dist/session-mcp-projections.d.ts +6 -0
- package/dist/session-mcp-tool-permissions.d.ts +62 -0
- package/dist/session-message-search.d.ts +68 -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 +41 -0
- package/dist/session-usage-limits.js.map +1 -0
- package/dist/signup-attribution.d.ts +39 -0
- package/dist/site-data.d.ts +286 -0
- package/dist/site-operations.d.ts +39 -0
- package/dist/site-publishing.d.ts +778 -0
- package/dist/site-session-http.d.ts +89 -4
- package/dist/site-session-http.js +25 -1
- package/dist/site-sql.d.ts +421 -0
- package/dist/skill-catalog-context.d.ts +7 -0
- package/dist/skill-files.d.ts +1 -1
- package/dist/skill-use.d.ts +61 -0
- package/dist/skills.d.ts +15 -0
- package/dist/slack-bot-scopes.d.ts +17 -12
- package/dist/slack-bot-scopes.js +10 -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 +8 -2
- package/dist/spreadsheet-artifact-query.d.ts +13 -6
- package/dist/spreadsheet-artifact-query.js +3 -3
- package/dist/subscription-account-actions.d.ts +64 -0
- package/dist/subscription-account-pools.d.ts +292 -0
- package/dist/subscription-personal-authority-v2.d.ts +28 -0
- package/dist/subscription-personal-authority-v2.js +12 -0
- package/dist/subscription-personal-authority-v2.js.map +1 -0
- package/dist/tool-action-review.d.ts +132 -0
- package/dist/tool-catalog.d.ts +408 -0
- package/dist/tool-policy.d.ts +5 -0
- package/dist/tool-review-presentation.d.ts +12 -0
- package/dist/tool-review-presentation.js +17 -0
- package/dist/tool-review-presentation.js.map +1 -0
- package/dist/transcription-recordings.d.ts +21 -0
- package/dist/turn-serving-policy.d.ts +221 -0
- package/dist/usage-allowances.d.ts +314 -0
- package/dist/usage-allowances.js +52 -0
- package/dist/usage-allowances.js.map +1 -0
- package/dist/vaults.d.ts +1286 -0
- package/dist/video-generation.d.ts +3 -0
- package/dist/video-generation.js +2 -1
- package/dist/workspace-integration-wire.d.ts +36 -0
- package/dist/workspace-integration-wire.js +23 -0
- package/dist/workspace-integration-wire.js.map +1 -0
- package/dist/workspace-integrations.d.ts +1028 -0
- package/dist/xai-provider-account-authority.js +2 -1
- package/package.json +93 -5
- package/src/agent-authored-durable-text.ts +14 -11
- package/src/agent-config.ts +1698 -0
- package/src/agent-instruction-changes.ts +91 -74
- package/src/agent-learning.ts +94 -67
- package/src/agent-topology.ts +57 -52
- package/src/allowance-refusal.ts +81 -0
- package/src/analytics-consent-report.ts +20 -0
- package/src/api-key-presets.ts +28 -0
- package/src/artifact-catalog.ts +82 -0
- package/src/artifacts.ts +299 -227
- package/src/atlassian-native-retirement.ts +33 -0
- package/src/atlassian.ts +135 -108
- package/src/browser-storage.ts +10 -0
- package/src/bundled-skills.ts +60 -17
- package/src/canonical-human-identities.ts +60 -58
- package/src/claude-provider-account-authority.ts +12 -0
- package/src/claude-subscription-oauth.ts +73 -0
- package/src/claude-subscription-usage.ts +68 -0
- package/src/client-error-report.ts +343 -0
- package/src/code-search.ts +105 -0
- package/src/codex-provider-account-authority.ts +21 -16
- package/src/company-brain-governed-writes.ts +255 -233
- package/src/company-brain.ts +164 -153
- package/src/company-profile.ts +365 -292
- package/src/connect.ts +212 -173
- package/src/connection-account-label.ts +46 -0
- package/src/connection-authority.ts +183 -364
- package/src/connector-attachments.ts +137 -122
- package/src/connector-destinations.ts +46 -42
- package/src/connector-tool-permissions.ts +117 -0
- package/src/cua-desktop-tools.gen.json +6512 -0
- package/src/cua-desktop-tools.linux.gen.json +6600 -0
- package/src/cua-desktop-tools.ts +36 -0
- package/src/cua-desktop-tools.windows.gen.json +6353 -0
- package/src/define-schema.ts +10 -0
- package/src/direct-model-provider.ts +108 -0
- package/src/editable-artifact-committed-transaction.ts +17 -0
- package/src/editable-artifact-versions.ts +7 -1
- package/src/event-preview.ts +53 -3
- package/src/external-identities.ts +249 -176
- package/src/feedback.ts +43 -30
- package/src/first-party-tool-authorization.ts +356 -0
- package/src/github-repository-contracts.ts +78 -64
- package/src/google-drive.ts +285 -234
- package/src/governed-learning-activation.ts +152 -131
- package/src/governed-learning-evaluator.ts +140 -133
- package/src/host-mcp-bindings.ts +252 -198
- package/src/image-generation.ts +104 -95
- package/src/index.ts +13235 -8687
- package/src/insights-usage.ts +727 -0
- package/src/interaction.ts +3070 -2326
- package/src/knowledge-entries.ts +361 -276
- package/src/knowledge-preparation.ts +57 -0
- package/src/knowledge.ts +246 -213
- package/src/managed-auth-session-sets.ts +220 -144
- package/src/managed-sign-in-methods.ts +52 -0
- package/src/mcp-catalog-limits.ts +2 -0
- package/src/mcp-oauth.ts +43 -34
- package/src/mcp-receipts.ts +192 -192
- package/src/mcp-structured-content.ts +81 -0
- package/src/memory-slack-delivery.ts +171 -142
- package/src/modal-native-proof-v2.ts +429 -0
- package/src/model-account-choice.ts +177 -0
- package/src/model-account-settings.ts +210 -0
- package/src/model-availability.ts +22 -0
- package/src/model-connection-access.ts +61 -14
- package/src/model-context-inspector.ts +133 -99
- package/src/model-display.ts +221 -0
- package/src/model-picker-order.ts +12 -1
- package/src/organization-access.ts +217 -0
- package/src/organization-integration-policy.ts +63 -0
- package/src/organization-membership-lifecycle.ts +528 -382
- package/src/organization-model-usage.ts +81 -0
- package/src/organization-recovery.ts +147 -135
- package/src/organization-usage.ts +94 -0
- package/src/permissions.ts +88 -52
- package/src/personal-github.ts +210 -171
- package/src/preference-registry.ts +314 -258
- package/src/prepared-mcp-setup.ts +189 -0
- package/src/product-analytics.ts +261 -0
- package/src/product-lifecycle-facts.ts +122 -0
- package/src/remember.ts +181 -167
- package/src/retained-output.ts +194 -165
- package/src/sandbox-file-artifacts.ts +60 -47
- package/src/sandbox-provider-command.ts +88 -20
- package/src/sandbox-recovery.ts +129 -0
- package/src/scoped-knowledge.ts +61 -43
- package/src/secret-generator.ts +155 -0
- package/src/secret-references.ts +414 -0
- package/src/secret-resolution.ts +274 -0
- package/src/secret-totp.ts +188 -0
- package/src/session-final-reply.ts +16 -0
- package/src/session-goal-reports.ts +64 -0
- package/src/session-history-import.ts +177 -0
- package/src/session-list-entries.ts +96 -0
- package/src/session-mcp-projections.ts +11 -0
- package/src/session-mcp-tool-permissions.ts +108 -0
- package/src/session-message-search.ts +61 -0
- package/src/session-target.ts +57 -0
- package/src/session-titles.ts +80 -10
- package/src/session-topology-primitives.ts +19 -12
- package/src/session-usage-limit-refusal.ts +101 -0
- package/src/session-usage-limits.ts +171 -0
- package/src/signup-attribution.ts +86 -0
- package/src/site-data.ts +339 -0
- package/src/site-operations.ts +154 -0
- package/src/site-publishing.ts +876 -0
- package/src/site-session-http.ts +294 -16
- package/src/site-sql.ts +1123 -0
- package/src/skill-catalog-context.ts +50 -0
- package/src/skill-files.ts +3 -3
- package/src/skill-use.ts +80 -0
- package/src/skills.ts +82 -54
- package/src/slack-bot-scopes.ts +31 -39
- package/src/slack-rest-mcp.ts +222 -0
- package/src/slack-task-policy.ts +96 -73
- package/src/spreadsheet-artifact-commands.ts +73 -2
- package/src/spreadsheet-artifact-query.ts +187 -39
- package/src/subscription-account-actions.ts +84 -0
- package/src/subscription-account-pools.ts +53 -0
- package/src/subscription-personal-authority-v2.ts +66 -0
- package/src/task-notes.ts +55 -51
- package/src/tool-action-review.ts +258 -0
- package/src/tool-catalog.ts +609 -372
- package/src/tool-policy.ts +82 -0
- package/src/tool-result-spill.ts +12 -9
- package/src/tool-review-presentation.ts +385 -0
- package/src/transcription-recordings.ts +145 -131
- package/src/turn-serving-policy.ts +166 -0
- package/src/usage-allowances.ts +248 -0
- package/src/vaults.ts +850 -0
- package/src/video-generation.ts +385 -360
- package/src/work-claims.ts +173 -149
- package/src/workspace-instruction-policies.ts +349 -276
- package/src/workspace-integration-wire.ts +101 -0
- package/src/workspace-integrations.ts +724 -0
- package/src/workspace-learning-administration.ts +57 -44
- package/src/workspace-learning-policy.ts +127 -96
- package/src/workspace-state.ts +250 -220
- package/src/xai-provider-account-authority.ts +22 -17
- package/dist/chunk-2AC63F4S.js +0 -171
- package/dist/chunk-2AC63F4S.js.map +0 -1
- package/dist/chunk-3SIZGL3O.js.map +0 -1
- package/dist/chunk-7ABONTXE.js.map +0 -1
- package/dist/chunk-BCS7WHCK.js +0 -139
- package/dist/chunk-BCS7WHCK.js.map +0 -1
- package/dist/chunk-GRG7PHWQ.js +0 -25
- package/dist/chunk-GRG7PHWQ.js.map +0 -1
- package/dist/chunk-JUFK3T4Q.js +0 -80
- package/dist/chunk-JUFK3T4Q.js.map +0 -1
- package/dist/chunk-M5ZGRVIQ.js +0 -719
- package/dist/chunk-M5ZGRVIQ.js.map +0 -1
- package/dist/chunk-MRWYRAS5.js.map +0 -1
- package/dist/chunk-OVFORMPW.js +0 -348
- package/dist/chunk-OVFORMPW.js.map +0 -1
- package/dist/chunk-P3HLDT77.js +0 -59
- package/dist/chunk-P3HLDT77.js.map +0 -1
- package/dist/chunk-QQUJ6NPW.js +0 -23093
- package/dist/chunk-QQUJ6NPW.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/host-mcp-resolvers.d.ts +0 -32
- package/dist/host-mcp-resolvers.js +0 -34
- package/dist/host-mcp-resolvers.js.map +0 -1
- package/src/host-mcp-resolvers.ts +0 -50
- /package/dist/{chunk-5LYFSZ7O.js.map → chunk-352X6ENP.js.map} +0 -0
- /package/dist/{chunk-O5LEQHDM.js.map → chunk-Z7WEVGCL.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/video-generation.ts","../src/retained-output.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n GENERATED_VIDEO_MAX_BYTES,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n RetainedArtifactReferenceSchema,\n} from \"./retained-output\";\n\nexport const VIDEO_GENERATION_SCHEMA_VERSION = 1 as const;\nexport const SEEDANCE_2_5_MODEL_ID = \"bytedance/seedance-2.5\" as const;\nexport const GROK_IMAGINE_VIDEO_1_5_MODEL_ID = \"xai/grok-imagine-video-1.5\" as const;\n\nexport const VideoGenerationSourceMode = z.enum([\n \"text\",\n \"first_frame\",\n \"first_and_last_frames\",\n \"image_reference\",\n \"video_reference\",\n]);\nexport type VideoGenerationSourceMode = z.infer<typeof VideoGenerationSourceMode>;\n\nexport const VideoGenerationResolution = z.enum([\"480p\", \"720p\"]);\nexport type VideoGenerationResolution = z.infer<typeof VideoGenerationResolution>;\n\nexport const VideoGenerationFundingSource = z.enum([\n \"opengeni_credits\",\n \"workspace_gateway\",\n \"supergrok_subscription\",\n]);\nexport type VideoGenerationFundingSource = z.infer<typeof VideoGenerationFundingSource>;\n\nexport const VideoGenerationAspectRatio = z.enum([\n \"16:9\",\n \"4:3\",\n \"1:1\",\n \"3:4\",\n \"9:16\",\n \"21:9\",\n \"adaptive\",\n]);\nexport type VideoGenerationAspectRatio = z.infer<typeof VideoGenerationAspectRatio>;\n\nconst SandboxVideoReferencePath = z\n .string()\n .min(1)\n .max(1_024)\n .refine((value) => value.startsWith(\"/workspace/\"), {\n message: \"video references must use an absolute /workspace path\",\n });\n\nexport const VideoGenerationSource = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"text\") }).strict(),\n z\n .object({\n mode: z.literal(\"first_frame\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"first_and_last_frames\"),\n firstFramePath: SandboxVideoReferencePath,\n lastFramePath: SandboxVideoReferencePath,\n })\n .strict()\n .refine((value) => value.firstFramePath !== value.lastFramePath, {\n path: [\"lastFramePath\"],\n message: \"first and last frame paths must differ\",\n }),\n z\n .object({\n mode: z.literal(\"image_reference\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"video_reference\"),\n videoPath: SandboxVideoReferencePath,\n })\n .strict(),\n]);\nexport type VideoGenerationSource = z.infer<typeof VideoGenerationSource>;\n\n/** Stable provider-neutral function-tool input. Dynamic capability facts never enter this schema. */\nexport const GenerateVideoToolInput = z\n .object({\n prompt: z\n .string()\n .min(1)\n .max(32_000)\n .refine((value) => value.trim().length > 0),\n modelId: z.string().min(1).max(256).optional(),\n source: VideoGenerationSource.optional(),\n durationSeconds: z.number().int().min(4).max(30).optional(),\n aspectRatio: VideoGenerationAspectRatio.optional(),\n resolution: VideoGenerationResolution.optional(),\n generateAudio: z.boolean().optional(),\n })\n .strict();\nexport type GenerateVideoToolInput = z.infer<typeof GenerateVideoToolInput>;\n\nexport const GetVideoGenerationCapabilitiesToolInput = z.object({}).strict();\nexport type GetVideoGenerationCapabilitiesToolInput = z.infer<\n typeof GetVideoGenerationCapabilitiesToolInput\n>;\n\nexport const VideoGenerationModelCapability = z\n .object({\n modelId: z.string().min(1).max(256),\n label: z.string().min(1).max(128),\n providerLabel: z.string().min(1).max(128),\n sourceModes: z.array(VideoGenerationSourceMode).min(1).max(5),\n resolutions: z.array(VideoGenerationResolution).min(1).max(2),\n aspectRatios: z.array(VideoGenerationAspectRatio).min(1).max(7),\n duration: z\n .object({\n minSeconds: z.number().int().positive(),\n maxSeconds: z.number().int().positive(),\n stepSeconds: z.number().int().positive(),\n })\n .strict()\n .refine((value) => value.maxSeconds >= value.minSeconds),\n supportsAudio: z.boolean(),\n })\n .strict();\nexport type VideoGenerationModelCapability = z.infer<typeof VideoGenerationModelCapability>;\n\nexport const VideoGenerationCapabilities = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n capabilityRevision: z.string().min(1).max(128),\n defaultModelId: z.string().min(1).max(256),\n models: z.array(VideoGenerationModelCapability).min(1).max(16),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.models.map((model) => model.modelId));\n if (ids.size !== value.models.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"models\"],\n message: \"model ids must be unique\",\n });\n }\n if (!ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be present in the enabled model list\",\n });\n }\n });\nexport type VideoGenerationCapabilities = z.infer<typeof VideoGenerationCapabilities>;\n\nexport const VideoGenerationPolicy = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n revision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.enabledModelIds);\n if (ids.size !== value.enabledModelIds.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"enabledModelIds\"],\n message: \"enabled model ids must be unique\",\n });\n }\n if (value.defaultModelId !== null && !ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be enabled\",\n });\n }\n });\nexport type VideoGenerationPolicy = z.infer<typeof VideoGenerationPolicy>;\n\nexport const UpdateVideoGenerationPolicyRequest = z\n .object({\n expectedRevision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict();\nexport type UpdateVideoGenerationPolicyRequest = z.infer<typeof UpdateVideoGenerationPolicyRequest>;\n\nexport const VideoGenerationFundingOption = z\n .object({\n source: VideoGenerationFundingSource,\n label: z.string().min(1).max(128),\n description: z.string().min(1).max(256),\n available: z.boolean(),\n unavailableReason: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.available !== (value.unavailableReason === null)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"unavailableReason\"],\n message: \"available funding options cannot have an unavailable reason\",\n });\n }\n });\nexport type VideoGenerationFundingOption = z.infer<typeof VideoGenerationFundingOption>;\n\nexport const WorkspaceVideoGenerationSettings = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n policy: VideoGenerationPolicy,\n fundingOptions: z.array(VideoGenerationFundingOption).length(3),\n availableModels: z.array(VideoGenerationModelCapability).max(16),\n capabilities: VideoGenerationCapabilities.nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n new Set(value.fundingOptions.map((option) => option.source)).size !== 3 ||\n !value.fundingOptions.some((option) => option.source === \"opengeni_credits\") ||\n !value.fundingOptions.some((option) => option.source === \"workspace_gateway\") ||\n !value.fundingOptions.some((option) => option.source === \"supergrok_subscription\")\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"all funding sources must be described exactly once\",\n });\n }\n const selected = value.fundingOptions.find(\n (option) => option.source === value.policy.fundingSource,\n );\n if (!selected) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"the selected funding source must be described\",\n });\n } else if (!selected.available && value.capabilities !== null) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"capabilities\"],\n message: \"unavailable funding cannot expose executable capabilities\",\n });\n }\n });\nexport type WorkspaceVideoGenerationSettings = z.infer<typeof WorkspaceVideoGenerationSettings>;\n\nexport const VideoGenerationAcceptedReceipt = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"accepted\"),\n operationId: z.string().uuid(),\n })\n .strict();\nexport type VideoGenerationAcceptedReceipt = z.infer<typeof VideoGenerationAcceptedReceipt>;\n\nexport const VideoGenerationRejectedCode = z.enum([\n \"invalid_reference_path\",\n \"reference_not_stable\",\n \"reference_too_large\",\n \"reference_media_type_mismatch\",\n \"unsupported_reference_media\",\n]);\nexport type VideoGenerationRejectedCode = z.infer<typeof VideoGenerationRejectedCode>;\n\n/** Deterministic pre-admission rejection: no provider request or durable operation was created. */\nexport const VideoGenerationRejectedResult = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"rejected\"),\n code: VideoGenerationRejectedCode,\n message: z.string().min(1).max(512),\n operationCreated: z.literal(false),\n })\n .strict();\nexport type VideoGenerationRejectedResult = z.infer<typeof VideoGenerationRejectedResult>;\n\nexport const VideoGenerationToolResult = z.discriminatedUnion(\"status\", [\n VideoGenerationAcceptedReceipt,\n VideoGenerationRejectedResult,\n]);\nexport type VideoGenerationToolResult = z.infer<typeof VideoGenerationToolResult>;\n\nexport const GeneratedVideoFacts = z\n .object({\n durationSeconds: z.number().positive().max(120),\n width: z.number().int().positive().max(8_192),\n height: z.number().int().positive().max(8_192),\n fps: z.number().positive().max(120),\n hasAudio: z.boolean(),\n videoCodec: z.literal(\"h264\"),\n audioCodec: z.literal(\"aac\").nullable(),\n })\n .strict();\nexport type GeneratedVideoFacts = z.infer<typeof GeneratedVideoFacts>;\n\nexport const GeneratedVideoReceipt = z\n .object({\n type: z.literal(\"generated_video\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n artifact: RetainedArtifactReferenceSchema,\n video: GeneratedVideoFacts,\n sandboxPath: z\n .string()\n .max(256)\n .regex(\n /^\\/workspace\\/generated-videos\\/generated-video-[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\.mp4$/,\n ),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n value.artifact.kind !== \"generated_video\" ||\n value.artifact.contentType !== \"video/mp4\" ||\n value.artifact.originalBytes <= 0 ||\n value.artifact.originalBytes > GENERATED_VIDEO_MAX_BYTES ||\n value.artifact.retention.policy !== \"workspace_file\" ||\n value.artifact.retrieval.maxRangeBytes !== RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"artifact\"],\n message: \"generated-video artifact metadata is invalid\",\n });\n }\n if (\n value.artifact.dimensions?.width !== value.video.width ||\n value.artifact.dimensions?.height !== value.video.height\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"video\"],\n message: \"video dimensions must match the retained artifact\",\n });\n }\n if (\n value.sandboxPath !==\n `/workspace/generated-videos/generated-video-${value.artifact.artifactId}.mp4`\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"sandboxPath\"],\n message: \"generated-video sandbox path does not match its artifact\",\n });\n }\n });\nexport type GeneratedVideoReceipt = z.infer<typeof GeneratedVideoReceipt>;\n\nexport const VideoGenerationTerminalFailureStatus = z.enum([\n \"provider_failed\",\n \"retention_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n]);\nexport type VideoGenerationTerminalFailureStatus = z.infer<\n typeof VideoGenerationTerminalFailureStatus\n>;\n\nexport const MediaGenerationResult = z.discriminatedUnion(\"status\", [\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"ready\"),\n operationId: z.string().uuid(),\n receipt: GeneratedVideoReceipt,\n })\n .strict()\n .refine((value) => value.receipt.operationId === value.operationId, {\n path: [\"receipt\", \"operationId\"],\n message: \"terminal receipt must match its operation\",\n }),\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: VideoGenerationTerminalFailureStatus,\n operationId: z.string().uuid(),\n boundedPublicReason: z.string().min(1).max(1_000),\n })\n .strict(),\n]);\nexport type MediaGenerationResult = z.infer<typeof MediaGenerationResult>;\n\nexport const VideoGenerationPublicStatus = z.enum([\n \"preparing\",\n \"prepared\",\n \"accepted\",\n \"provider_started\",\n \"retaining\",\n \"completed\",\n \"provider_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n \"retention_failed\",\n]);\nexport type VideoGenerationPublicStatus = z.infer<typeof VideoGenerationPublicStatus>;\n\nexport const VideoGenerationOperationSummary = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n modelId: z.string().min(1).max(256),\n status: VideoGenerationPublicStatus,\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n terminal: MediaGenerationResult.nullable(),\n })\n .strict();\nexport type VideoGenerationOperationSummary = z.infer<typeof VideoGenerationOperationSummary>;\n\nexport const VideoArtifactPlaybackSource = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n artifactId: z.string().uuid(),\n url: z.string().url().max(8_192),\n expiresAt: z.string().datetime({ offset: true }),\n contentType: z.literal(\"video/mp4\"),\n sizeBytes: z.number().int().positive().max(GENERATED_VIDEO_MAX_BYTES),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n acceptRanges: z.literal(\"bytes\"),\n })\n .strict();\nexport type VideoArtifactPlaybackSource = z.infer<typeof VideoArtifactPlaybackSource>;\n","import { z } from \"zod\";\n\n/** Hard server-side ceiling for one retained-output response body. */\nexport const RETAINED_OUTPUT_MAX_PAGE_BYTES = 1024 * 1024;\n/** Default first page when the client does not send a Range header. */\nexport const RETAINED_OUTPUT_DEFAULT_PAGE_BYTES = 256 * 1024;\n/** Receipts are timeline references, never an extensible metadata bag. */\nexport const RETAINED_OUTPUT_RECEIPT_MAX_BYTES = 2 * 1024;\n\n/** Screenshot bytes are accounted separately from the 10k-token text policy. */\nexport const COMPUTER_SCREENSHOT_MAX_BYTES = 32 * 1024 * 1024;\nexport const COMPUTER_SCREENSHOT_MAX_DIMENSION = 16_384;\nexport const COMPUTER_SCREENSHOT_MAX_PIXELS = 67_108_864;\n/** Canonical ready-object retention window: 30 days from successful settlement. */\nexport const COMPUTER_SCREENSHOT_RETENTION_MS = 30 * 24 * 60 * 60 * 1_000;\n/** Hard workspace reservation across pending + ready screenshot artifacts. */\nexport const COMPUTER_SCREENSHOT_WORKSPACE_QUOTA_BYTES = 5 * 1024 * 1024 * 1024;\n/** Generated images are permanent workspace files, never inline history blobs. */\nexport const GENERATED_IMAGE_MAX_BYTES = 64 * 1024 * 1024;\n/** Generated videos are permanent workspace files and are always streamed. */\nexport const GENERATED_VIDEO_MAX_BYTES = 512 * 1024 * 1024;\n\nconst encoder = new TextEncoder();\nconst LOWERCASE_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst LOWERCASE_SHA256 = /^[0-9a-f]{64}$/;\nconst CANONICAL_MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/;\nconst WORKSPACE_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\nconst SESSION_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/sessions\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\n\nexport const RetainedOutputKind = z.enum([\n \"tool_result\",\n \"assistant_completion\",\n \"internal_update\",\n \"event_media\",\n \"computer_screenshot\",\n \"generated_image\",\n \"generated_video\",\n \"file\",\n]);\nexport type RetainedOutputKind = z.infer<typeof RetainedOutputKind>;\n\nexport const RetainedOutputUnavailableReason = z.enum([\n \"not_retained\",\n \"pending\",\n \"failed\",\n \"expired\",\n \"deleted\",\n \"missing_storage\",\n \"storage_write_failed\",\n \"quota_exceeded\",\n \"invalid_content\",\n \"oversized\",\n \"unsupported\",\n]);\nexport type RetainedOutputUnavailableReason = z.infer<typeof RetainedOutputUnavailableReason>;\n\nconst RetainedOutputUnavailableEvidenceSchema = z\n .object({\n available: z.literal(false),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\n\nexport const RetainedArtifactReferenceSchema = z\n .object({\n available: z.literal(true),\n artifactId: z.string().regex(LOWERCASE_UUID),\n kind: RetainedOutputKind,\n contentType: z.string().max(127).regex(CANONICAL_MEDIA_TYPE),\n originalBytes: z.number().int().nonnegative().safe(),\n sha256: z.string().regex(LOWERCASE_SHA256),\n retainedAt: z.string().datetime({ offset: true }),\n dimensions: z\n .object({\n width: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n height: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n })\n .strict()\n .optional(),\n retention: z.union([\n z\n .object({\n policy: z.literal(\"workspace_file\"),\n expiresAt: z.null(),\n })\n .strict(),\n z\n .object({\n policy: z.literal(\"session_screenshot\"),\n expiresAt: z.string().datetime({ offset: true }),\n })\n .strict(),\n ]),\n retrieval: z\n .object({\n method: z.literal(\"GET\"),\n path: z.string().max(256),\n acceptRanges: z.literal(\"bytes\"),\n maxRangeBytes: z.number().int().positive().max(RETAINED_OUTPUT_MAX_PAGE_BYTES),\n })\n .strict(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const workspaceMatch = WORKSPACE_RETRIEVAL_PATH.exec(value.retrieval.path);\n const sessionMatch = SESSION_RETRIEVAL_PATH.exec(value.retrieval.path);\n const workspaceId = workspaceMatch?.[1] ?? sessionMatch?.[1];\n const sessionId = sessionMatch?.[2];\n const artifactId = workspaceMatch?.[2] ?? sessionMatch?.[3];\n if (\n !workspaceId ||\n !LOWERCASE_UUID.test(workspaceId) ||\n (sessionId !== undefined && !LOWERCASE_UUID.test(sessionId)) ||\n artifactId !== value.artifactId\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retrieval\", \"path\"],\n message: \"retrieval path must be a workspace/session API content path for this artifact\",\n });\n }\n\n if (\n value.kind === \"computer_screenshot\" ||\n value.kind === \"generated_image\" ||\n value.kind === \"generated_video\"\n ) {\n if (!value.dimensions) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} receipts require exact dimensions`,\n });\n } else if (\n value.dimensions.width * value.dimensions.height >\n COMPUTER_SCREENSHOT_MAX_PIXELS\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} dimensions exceed the pixel limit`,\n });\n }\n }\n\n if (value.kind === \"generated_image\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated images require permanent workspace-file retrieval\",\n });\n }\n if (\n ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(value.contentType) ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated image media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"generated_video\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated videos require permanent workspace-file retrieval\",\n });\n }\n if (\n value.contentType !== \"video/mp4\" ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated video media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"computer_screenshot\") {\n if (value.retention.policy !== \"session_screenshot\" || !sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"computer screenshots require session-scoped expiring retrieval\",\n });\n }\n }\n\n if (encoder.encode(JSON.stringify(value)).byteLength > RETAINED_OUTPUT_RECEIPT_MAX_BYTES) {\n ctx.addIssue({\n code: \"custom\",\n message: \"retained-output receipt exceeds its byte envelope\",\n });\n }\n });\n\n/**\n * Canonical evidence fact carried by bounded audit/NATS/SSE/UI previews.\n *\n * The available variant is intentionally provider-neutral and closed: no bucket,\n * object key, signed URL, arbitrary metadata, or producer-controlled labels can\n * cross this boundary.\n */\nexport const RetainedOutputEvidenceSchema = z.discriminatedUnion(\"available\", [\n RetainedOutputUnavailableEvidenceSchema,\n RetainedArtifactReferenceSchema,\n]);\nexport type RetainedOutputEvidence = z.infer<typeof RetainedOutputEvidenceSchema>;\nexport type RetainedArtifactReference = z.infer<typeof RetainedArtifactReferenceSchema>;\n/** @deprecated use RetainedArtifactReference. */\nexport type RetainedOutputAvailableEvidence = RetainedArtifactReference;\n\nexport const RetainedArtifactUnavailableSchema = z\n .object({\n available: z.literal(false),\n artifactId: z.string().regex(LOWERCASE_UUID),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\nexport type RetainedArtifactUnavailable = z.infer<typeof RetainedArtifactUnavailableSchema>;\n\n/** Authenticated metadata result for one opaque workspace file identity. */\nexport const RetainedArtifactMetadataSchema = z.union([\n RetainedArtifactReferenceSchema,\n RetainedArtifactUnavailableSchema,\n]);\nexport type RetainedArtifactMetadata = z.infer<typeof RetainedArtifactMetadataSchema>;\n\nexport type RetainedArtifactFileInput = {\n id: string;\n workspaceId: string;\n status: string;\n contentType: string;\n sizeBytes: number;\n sha256: string | null;\n updatedAt: string;\n};\n\nexport type RetainedScreenshotArtifactInput = RetainedArtifactFileInput & {\n sessionId: string;\n width: number;\n height: number;\n expiresAt: string;\n};\n\nexport type RetainedGeneratedImageArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\nexport type RetainedGeneratedVideoArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\n/**\n * Convert a ready, integrity-addressed workspace file into the only available\n * retained-output receipt shape. Invalid, pending, or checksum-less files fail\n * closed instead of implying that full evidence is retrievable.\n */\nexport function retainedArtifactReferenceFromFile(\n file: RetainedArtifactFileInput,\n kind: RetainedOutputKind = \"file\",\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the closed, session-scoped receipt for one ready screenshot file. */\nexport function retainedScreenshotReferenceFromFile(\n file: RetainedScreenshotArtifactInput,\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256 || file.sizeBytes <= 0) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"computer_screenshot\" as const,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"session_screenshot\" as const,\n expiresAt: file.expiresAt,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/sessions/${file.sessionId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated image. */\nexport function retainedGeneratedImageReferenceFromFile(\n file: RetainedGeneratedImageArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_image\" as const,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated video. */\nexport function retainedGeneratedVideoReferenceFromFile(\n file: RetainedGeneratedVideoArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n file.contentType !== \"video/mp4\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_video\" as const,\n contentType: \"video/mp4\" as const,\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nfunction canonicalRetainedContentType(value: string): string {\n const mediaType = value.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n return CANONICAL_MEDIA_TYPE.test(mediaType) ? mediaType : \"application/octet-stream\";\n}\n\n/** Parse and clone a trusted server receipt; invalid/untrusted data fails closed. */\nexport function validateRetainedOutputEvidence(value: unknown): RetainedOutputEvidence | null {\n const parsed = RetainedOutputEvidenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nexport function retainedOutputUnavailable(\n reason: RetainedOutputUnavailableReason = \"not_retained\",\n): RetainedOutputEvidence {\n return { available: false, reason };\n}\n\nexport type RetainedOutputResolvedRange = {\n kind: \"range\";\n start: number;\n end: number;\n length: number;\n totalBytes: number;\n status: 200 | 206;\n contentRange: string | null;\n acceptRanges: \"bytes\";\n};\n\nexport type RetainedOutputRangeResolution =\n | RetainedOutputResolvedRange\n | {\n kind: \"empty\";\n length: 0;\n totalBytes: 0;\n status: 200;\n contentRange: null;\n acceptRanges: \"bytes\";\n }\n | {\n kind: \"invalid\";\n reason: \"malformed\" | \"multipart_not_supported\" | \"numeric_overflow\" | \"range_too_large\";\n maxPageBytes: number;\n }\n | {\n kind: \"unsatisfiable\";\n reason: \"empty_artifact\" | \"start_out_of_bounds\" | \"end_before_start\" | \"zero_suffix\";\n totalBytes: number;\n contentRange: string;\n };\n\n/**\n * Resolve one RFC-style bytes range without ever licensing a response larger\n * than `maxPageBytes`. Multipart ranges and oversized explicit/suffix requests\n * fail closed. An omitted or open-ended range becomes one resumable bounded page.\n */\nexport function resolveRetainedOutputRange(\n rangeHeader: string | null | undefined,\n totalBytes: number,\n maxPageBytes = RETAINED_OUTPUT_DEFAULT_PAGE_BYTES,\n): RetainedOutputRangeResolution {\n assertRangeInputs(totalBytes, maxPageBytes);\n\n if (rangeHeader === null || rangeHeader === undefined || rangeHeader === \"\") {\n if (totalBytes === 0) {\n return {\n kind: \"empty\",\n length: 0,\n totalBytes: 0,\n status: 200,\n contentRange: null,\n acceptRanges: \"bytes\",\n };\n }\n const end = Math.min(totalBytes - 1, maxPageBytes - 1);\n const partial = end + 1 < totalBytes;\n return resolvedRange(0, end, totalBytes, partial ? 206 : 200);\n }\n\n if (rangeHeader.length > 128 || /[^\\x20-\\x7e]/.test(rangeHeader)) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n if (rangeHeader.includes(\",\")) {\n return invalidRange(\"multipart_not_supported\", maxPageBytes);\n }\n const match = /^bytes=(\\d*)-(\\d*)$/.exec(rangeHeader);\n if (!match || (!match[1] && !match[2])) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n\n const first = parseRangeInteger(match[1]);\n const second = parseRangeInteger(match[2]);\n if (first === \"overflow\" || second === \"overflow\") {\n return invalidRange(\"numeric_overflow\", maxPageBytes);\n }\n\n if (first === null) {\n const suffixLength = second;\n if (suffixLength === null) return invalidRange(\"malformed\", maxPageBytes);\n if (suffixLength === 0) return unsatisfiableRange(\"zero_suffix\", totalBytes);\n if (suffixLength > maxPageBytes) return invalidRange(\"range_too_large\", maxPageBytes);\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n const length = Math.min(suffixLength, totalBytes);\n return resolvedRange(totalBytes - length, totalBytes - 1, totalBytes, 206);\n }\n\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n if (first >= totalBytes) return unsatisfiableRange(\"start_out_of_bounds\", totalBytes);\n\n if (second === null) {\n const end = Math.min(totalBytes - 1, first + maxPageBytes - 1);\n return resolvedRange(first, end, totalBytes, 206);\n }\n if (second < first) return unsatisfiableRange(\"end_before_start\", totalBytes);\n if (second - first >= maxPageBytes) {\n return invalidRange(\"range_too_large\", maxPageBytes);\n }\n return resolvedRange(first, Math.min(second, totalBytes - 1), totalBytes, 206);\n}\n\nfunction assertRangeInputs(totalBytes: number, maxPageBytes: number): void {\n if (!Number.isSafeInteger(totalBytes) || totalBytes < 0) {\n throw new RangeError(\"totalBytes must be a nonnegative safe integer\");\n }\n if (\n !Number.isSafeInteger(maxPageBytes) ||\n maxPageBytes <= 0 ||\n maxPageBytes > RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n throw new RangeError(\n `maxPageBytes must be an integer between 1 and ${RETAINED_OUTPUT_MAX_PAGE_BYTES}`,\n );\n }\n}\n\nfunction parseRangeInteger(value: string | undefined): number | null | \"overflow\" {\n if (!value) return null;\n // Avoid both precision loss and work proportional to an adversarial digit run.\n if (value.length > 16) return \"overflow\";\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) ? parsed : \"overflow\";\n}\n\nfunction resolvedRange(\n start: number,\n end: number,\n totalBytes: number,\n status: 200 | 206,\n): RetainedOutputResolvedRange {\n return {\n kind: \"range\",\n start,\n end,\n length: end - start + 1,\n totalBytes,\n status,\n contentRange: status === 206 ? `bytes ${start}-${end}/${totalBytes}` : null,\n acceptRanges: \"bytes\",\n };\n}\n\nfunction invalidRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"invalid\" }>[\"reason\"],\n maxPageBytes: number,\n): RetainedOutputRangeResolution {\n return { kind: \"invalid\", reason, maxPageBytes };\n}\n\nfunction unsatisfiableRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"unsatisfiable\" }>[\"reason\"],\n totalBytes: number,\n): RetainedOutputRangeResolution {\n return {\n kind: \"unsatisfiable\",\n reason,\n totalBytes,\n contentRange: `bytes */${totalBytes}`,\n };\n}\n"],"mappings":"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","names":["z","z"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/slack-bot-scopes.ts"],"sourcesContent":["export const OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [\n \"app_mentions:read\",\n \"canvases:read\",\n \"channels:history\",\n \"channels:read\",\n \"chat:write\",\n \"commands\",\n \"files:read\",\n \"groups:history\",\n \"groups:read\",\n \"im:history\",\n \"im:read\",\n \"im:write\",\n \"mpim:history\",\n \"mpim:read\",\n \"users:read\",\n] as const;\n\n/** Read-only scope needed only for the optional emoji-reaction summon surface. */\nexport const OPENGENI_SLACK_REACTION_REQUIRED_SCOPE = \"reactions:read\" as const;\n\n/**\n * Bot-token search scopes for Slack's Real-time Search API\n * (`assistant.search.context`). Slack accepts these as BOT scopes, so\n * workspace-wide public search runs under the bot identity and never needs a\n * human proxy token. Private-channel, DM, and MPIM search remain user-token\n * only and belong exclusively to the personal hosted-MCP grant.\n */\nexport const OPENGENI_SLACK_BOT_SEARCH_SCOPES = [\n \"search:read.public\",\n \"search:read.files\",\n \"search:read.users\",\n] as const;\n\n/**\n * Scopes requested by the managed and generated self-hosted manifests.\n *\n * `reactions:read` and the bot search scopes are deliberately not part of the\n * base eligibility contract: legacy installations may continue using existing\n * Slack interactions and tools while the reaction setting stays disabled, bot\n * search stays unavailable, and the UI asks an admin to reinstall.\n */\nexport const OPENGENI_SLACK_BOT_REQUESTED_SCOPES = [\n ...OPENGENI_SLACK_BOT_REQUIRED_SCOPES,\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n ...OPENGENI_SLACK_BOT_SEARCH_SCOPES,\n] as const;\n\nexport const OPENGENI_SLACK_BOT_EVENTS = [\n \"app_home_opened\",\n \"app_mention\",\n \"message.channels\",\n \"message.groups\",\n \"message.im\",\n \"message.mpim\",\n \"reaction_added\",\n] as const;\n\n/** Full user-token scope set for every tool currently exposed by Slack's hosted MCP server. */\nexport const OPENGENI_SLACK_MCP_USER_SCOPES = [\n \"search:read.public\",\n \"search:read.private\",\n \"search:read.mpim\",\n \"search:read.im\",\n \"search:read.files\",\n \"files:read\",\n \"emoji:read\",\n \"search:read.users\",\n \"chat:write\",\n \"channels:history\",\n \"groups:history\",\n \"mpim:history\",\n \"im:history\",\n \"channels:write\",\n \"groups:write\",\n \"im:write\",\n \"mpim:write\",\n \"reactions:write\",\n \"canvases:read\",\n \"canvases:write\",\n \"users:read\",\n \"users:read.email\",\n \"channels:read\",\n \"groups:read\",\n \"mpim:read\",\n] as const;\n\nexport const OPENGENI_MANAGED_PUBLIC_BASE_URL = \"https://app.opengeni.ai\" as const;\n\nexport type OpenGeniSlackBotManifestOptions = Readonly<{\n appName?: string;\n botDisplayName?: string;\n slashCommand?: string;\n shortcutName?: string;\n}>;\n\nfunction normalizedSlackManifestText(\n value: string | undefined,\n fallback: string,\n label: string,\n maxLength: number,\n): string {\n const normalized = value?.trim() || fallback;\n if (normalized.length > maxLength || /[\\r\\n\\0]/u.test(normalized)) {\n throw new Error(`Slack bot manifest ${label} must be at most ${maxLength} plain characters`);\n }\n return normalized;\n}\n\nfunction normalizedSlackCommand(value: string | undefined): string {\n const command = value?.trim() || \"/opengeni\";\n if (!/^\\/[a-z0-9_-]{1,31}$/u.test(command)) {\n throw new Error(\n \"Slack bot manifest slash command must start with / and contain at most 31 lowercase letters, digits, hyphens, or underscores\",\n );\n }\n return command;\n}\n\nfunction normalizedSlackManifestBaseUrl(publicBaseUrl: string): string {\n const parsed = new URL(publicBaseUrl);\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new Error(\"Slack bot manifest public base URL must be credential-free HTTPS\");\n }\n parsed.hash = \"\";\n parsed.search = \"\";\n parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\n/** Canonical managed/self-hosted Slack app manifest. Slack accepts JSON manifests. */\nexport function buildOpenGeniSlackBotManifest(\n publicBaseUrl: string,\n options: OpenGeniSlackBotManifestOptions = {},\n) {\n const baseUrl = normalizedSlackManifestBaseUrl(publicBaseUrl);\n const appName = normalizedSlackManifestText(options.appName, \"OpenGeni\", \"app name\", 35);\n const botDisplayName = normalizedSlackManifestText(\n options.botDisplayName,\n \"OpenGeni\",\n \"bot display name\",\n 80,\n );\n const slashCommand = normalizedSlackCommand(options.slashCommand);\n const shortcutName = normalizedSlackManifestText(\n options.shortcutName,\n \"Open in OpenGeni\",\n \"shortcut name\",\n 35,\n );\n return {\n display_information: { name: appName },\n features: {\n app_home: {\n home_tab_enabled: true,\n messages_tab_enabled: true,\n messages_tab_read_only_enabled: false,\n },\n bot_user: { display_name: botDisplayName, always_online: false },\n slash_commands: [\n {\n command: slashCommand,\n description: \"Start an OpenGeni task in this channel\",\n should_escape: false,\n url: `${baseUrl}/v1/integrations/slack/commands`,\n },\n ],\n shortcuts: [\n {\n callback_id: \"opengeni_message\",\n description: \"Start an OpenGeni task from this Slack message\",\n name: shortcutName,\n type: \"message\",\n },\n ],\n },\n oauth_config: {\n redirect_urls: [\n `${baseUrl}/v1/integrations/oauth/callback`,\n `${baseUrl}/v1/integrations/slack/callback`,\n ],\n scopes: {\n bot: [...OPENGENI_SLACK_BOT_REQUESTED_SCOPES],\n user: [...OPENGENI_SLACK_MCP_USER_SCOPES],\n },\n },\n settings: {\n event_subscriptions: {\n bot_events: [...OPENGENI_SLACK_BOT_EVENTS],\n request_url: `${baseUrl}/v1/integrations/slack/events`,\n },\n interactivity: {\n is_enabled: true,\n request_url: `${baseUrl}/v1/integrations/slack/interactions`,\n },\n is_mcp_enabled: true,\n org_deploy_enabled: false,\n socket_mode_enabled: false,\n token_rotation_enabled: false,\n },\n } as const;\n}\n\n/**\n * Optional bot grants that remain inside the shipped bot's read/identity\n * boundary. Every other unrequired scope fails closed, including unknown future\n * Slack scopes, so verification, core routing, and UI eligibility cannot drift.\n */\nexport const OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES = [\n \"team:read\",\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n ...OPENGENI_SLACK_BOT_SEARCH_SCOPES,\n] as const;\n\nexport function hasOpenGeniSlackBotSearchScopes(grantedScopes: readonly string[]): boolean {\n return OPENGENI_SLACK_BOT_SEARCH_SCOPES.every((scope) => grantedScopes.includes(scope));\n}\n\n/** @deprecated Use evaluateOpenGeniSlackBotScopes; an allowlist is the policy. */\nexport const OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES = [\"channels:join\", \"chat:write.public\"] as const;\n\nexport type OpenGeniSlackBotScopePolicy = {\n accepted: boolean;\n missingRequired: string[];\n unsupported: string[];\n};\n\nfunction isOpenGeniSlackBotScopeAllowed(scope: string): boolean {\n return (\n (OPENGENI_SLACK_BOT_REQUIRED_SCOPES as readonly string[]).includes(scope) ||\n (OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES as readonly string[]).includes(scope)\n );\n}\n\nexport function areOpenGeniSlackBotScopesAccepted(grantedScopes: readonly string[]): boolean {\n return (\n OPENGENI_SLACK_BOT_REQUIRED_SCOPES.every((scope) => grantedScopes.includes(scope)) &&\n grantedScopes.every(isOpenGeniSlackBotScopeAllowed)\n );\n}\n\nexport function hasOpenGeniSlackReactionScope(grantedScopes: readonly string[]): boolean {\n return grantedScopes.includes(OPENGENI_SLACK_REACTION_REQUIRED_SCOPE);\n}\n\nexport function evaluateOpenGeniSlackBotScopes(\n grantedScopes: readonly string[],\n): OpenGeniSlackBotScopePolicy {\n const granted = new Set(grantedScopes);\n const missingRequired = OPENGENI_SLACK_BOT_REQUIRED_SCOPES.filter((scope) => !granted.has(scope));\n const unsupported = [...granted].filter((scope) => !isOpenGeniSlackBotScopeAllowed(scope)).sort();\n return {\n accepted: areOpenGeniSlackBotScopesAccepted(grantedScopes),\n missingRequired,\n unsupported,\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-OVFORMPW.js
DELETED
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ConnectionKind,
|
|
3
|
-
ManagedUserResourceGrantMode,
|
|
4
|
-
SessionTenancyVisibility,
|
|
5
|
-
UserResourceAuthorityGrant,
|
|
6
|
-
UserResourceDelegation
|
|
7
|
-
} from "./chunk-QQUJ6NPW.js";
|
|
8
|
-
|
|
9
|
-
// src/connection-authority.ts
|
|
10
|
-
import { z } from "zod";
|
|
11
|
-
var ConnectionUseAction = z.literal("connection.use");
|
|
12
|
-
var ConnectionAuthorityEnvelope = z.object({
|
|
13
|
-
scope: z.enum(["workspace", "user"]).default("workspace"),
|
|
14
|
-
userDelegation: UserResourceDelegation.optional()
|
|
15
|
-
}).strict().superRefine((value, context) => {
|
|
16
|
-
if (value.scope === "workspace" && value.userDelegation !== void 0) {
|
|
17
|
-
context.addIssue({
|
|
18
|
-
code: "custom",
|
|
19
|
-
path: ["userDelegation"],
|
|
20
|
-
message: "workspace connections cannot carry user delegation"
|
|
21
|
-
});
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
if (value.scope === "user" && value.userDelegation === void 0) {
|
|
25
|
-
context.addIssue({
|
|
26
|
-
code: "custom",
|
|
27
|
-
path: ["userDelegation"],
|
|
28
|
-
message: "user connections require an immutable delegation"
|
|
29
|
-
});
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (value.userDelegation && value.userDelegation.action !== ConnectionUseAction.value) {
|
|
33
|
-
context.addIssue({
|
|
34
|
-
code: "custom",
|
|
35
|
-
path: ["userDelegation", "action"],
|
|
36
|
-
message: "connection delegation must use connection.use"
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
var ConnectionAuthorityGrant = UserResourceAuthorityGrant.extend({
|
|
41
|
-
action: ConnectionUseAction
|
|
42
|
-
}).strict();
|
|
43
|
-
var ConnectionAuthoritySummary = z.object({
|
|
44
|
-
authorityId: z.string().uuid(),
|
|
45
|
-
resourceId: z.string().uuid(),
|
|
46
|
-
originWorkspaceId: z.string().uuid().nullable(),
|
|
47
|
-
generation: z.number().int().positive(),
|
|
48
|
-
status: z.enum(["active", "retained", "revoked"]),
|
|
49
|
-
grants: z.array(ConnectionAuthorityGrant)
|
|
50
|
-
}).strict();
|
|
51
|
-
var ListConnectionAuthoritiesQuery = z.object({
|
|
52
|
-
scope: z.literal("user"),
|
|
53
|
-
cursor: z.string().uuid().optional(),
|
|
54
|
-
limit: z.coerce.number().int().min(1).max(100).default(50)
|
|
55
|
-
}).strict();
|
|
56
|
-
var ListConnectionAuthoritiesResponse = z.object({
|
|
57
|
-
scope: z.literal("user"),
|
|
58
|
-
authorities: z.array(ConnectionAuthoritySummary),
|
|
59
|
-
nextCursor: z.string().uuid().nullable()
|
|
60
|
-
}).strict();
|
|
61
|
-
var IssueConnectionUseGrantRequest = z.object({
|
|
62
|
-
scope: z.literal("user"),
|
|
63
|
-
mode: ManagedUserResourceGrantMode,
|
|
64
|
-
context: SessionTenancyVisibility,
|
|
65
|
-
sessionId: z.string().uuid().nullable().optional(),
|
|
66
|
-
expectedAuthorityEpoch: z.number().int().positive().nullable().optional(),
|
|
67
|
-
workspaceSharedAcknowledged: z.boolean().default(false)
|
|
68
|
-
}).strict().superRefine((value, context) => {
|
|
69
|
-
if (value.context === "workspace_shared" && !value.workspaceSharedAcknowledged) {
|
|
70
|
-
context.addIssue({
|
|
71
|
-
code: "custom",
|
|
72
|
-
path: ["workspaceSharedAcknowledged"],
|
|
73
|
-
message: "workspace_shared requires durable shared-output acknowledgement"
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
if (value.mode === "always" && (value.sessionId || value.expectedAuthorityEpoch)) {
|
|
77
|
-
context.addIssue({ code: "custom", path: ["sessionId"], message: "always is unbound" });
|
|
78
|
-
}
|
|
79
|
-
if (value.mode === "session" && (!value.sessionId || !value.expectedAuthorityEpoch)) {
|
|
80
|
-
context.addIssue({
|
|
81
|
-
code: "custom",
|
|
82
|
-
path: ["sessionId"],
|
|
83
|
-
message: "session requires a target session and expectedAuthorityEpoch"
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
var RevokeConnectionUseGrantQuery = z.object({ scope: z.literal("user") }).strict();
|
|
88
|
-
var ConnectionUseGrantMutationResponse = z.object({
|
|
89
|
-
scope: z.literal("user"),
|
|
90
|
-
grant: ConnectionAuthorityGrant
|
|
91
|
-
}).strict();
|
|
92
|
-
var ConnectionUseGrantRevocationResponse = z.object({
|
|
93
|
-
scope: z.literal("user"),
|
|
94
|
-
grant: z.object({
|
|
95
|
-
grantId: z.string().uuid(),
|
|
96
|
-
generation: z.number().int().positive(),
|
|
97
|
-
status: z.literal("revoked"),
|
|
98
|
-
revokedAt: z.string().datetime()
|
|
99
|
-
}).strict()
|
|
100
|
-
}).strict();
|
|
101
|
-
var ConnectionAuthoritySelectionSource = z.enum([
|
|
102
|
-
"explicit_workspace",
|
|
103
|
-
"legacy_workspace_omission",
|
|
104
|
-
"legacy_user_compatibility",
|
|
105
|
-
"user_delegation"
|
|
106
|
-
]);
|
|
107
|
-
var ConnectionUseSelectionSource = z.string().min(1).max(128).regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u);
|
|
108
|
-
var AcceptedConnectionWork = z.discriminatedUnion("kind", [
|
|
109
|
-
z.object({
|
|
110
|
-
kind: z.literal("turn"),
|
|
111
|
-
turnId: z.string().uuid()
|
|
112
|
-
}).strict(),
|
|
113
|
-
z.object({
|
|
114
|
-
kind: z.literal("scheduled_task"),
|
|
115
|
-
taskId: z.string().uuid(),
|
|
116
|
-
taskAuthorityRevision: z.number().int().positive(),
|
|
117
|
-
runId: z.string().uuid()
|
|
118
|
-
}).strict()
|
|
119
|
-
]);
|
|
120
|
-
var ConnectionUseAuthoritySnapshot = z.object({
|
|
121
|
-
organizationId: z.string().uuid(),
|
|
122
|
-
originWorkspaceId: z.string().uuid(),
|
|
123
|
-
targetWorkspaceId: z.string().uuid(),
|
|
124
|
-
targetSessionId: z.string().uuid(),
|
|
125
|
-
targetSessionVisibility: SessionTenancyVisibility,
|
|
126
|
-
targetSessionAuthorityEpoch: z.number().int().positive(),
|
|
127
|
-
acceptedWork: AcceptedConnectionWork,
|
|
128
|
-
connectionId: z.string().uuid(),
|
|
129
|
-
connectionGeneration: z.number().int().positive(),
|
|
130
|
-
connectionStatus: z.literal("active"),
|
|
131
|
-
providerDomain: z.string().min(1).max(2048),
|
|
132
|
-
connectionKind: ConnectionKind,
|
|
133
|
-
scope: z.enum(["workspace", "user", "legacy_user"]),
|
|
134
|
-
ownerSubjectId: z.string().min(1).max(512).nullable(),
|
|
135
|
-
ownerOrganizationMembershipId: z.string().uuid().nullable(),
|
|
136
|
-
ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),
|
|
137
|
-
authoritySource: ConnectionAuthoritySelectionSource,
|
|
138
|
-
selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),
|
|
139
|
-
userDelegation: UserResourceDelegation.nullable()
|
|
140
|
-
}).strict().superRefine((value, context) => {
|
|
141
|
-
const ownedBySubject = value.scope !== "workspace";
|
|
142
|
-
const delegated = value.scope === "user";
|
|
143
|
-
if (ownedBySubject !== (value.ownerSubjectId !== null)) {
|
|
144
|
-
context.addIssue({
|
|
145
|
-
code: "custom",
|
|
146
|
-
path: ["ownerSubjectId"],
|
|
147
|
-
message: "personal connections retain an owner subject"
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
if (delegated !== (value.ownerOrganizationMembershipId !== null)) {
|
|
151
|
-
context.addIssue({
|
|
152
|
-
code: "custom",
|
|
153
|
-
path: ["ownerOrganizationMembershipId"],
|
|
154
|
-
message: "only user connections retain an owner membership"
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {
|
|
158
|
-
context.addIssue({
|
|
159
|
-
code: "custom",
|
|
160
|
-
path: ["ownerMembershipAuthorizationRevision"],
|
|
161
|
-
message: "only user connections retain an owner membership revision"
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
if (delegated !== (value.userDelegation !== null)) {
|
|
165
|
-
context.addIssue({
|
|
166
|
-
code: "custom",
|
|
167
|
-
path: ["userDelegation"],
|
|
168
|
-
message: "only user connections retain a delegation"
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
if (delegated && value.authoritySource !== "user_delegation") {
|
|
172
|
-
context.addIssue({
|
|
173
|
-
code: "custom",
|
|
174
|
-
path: ["authoritySource"],
|
|
175
|
-
message: "user connections require user_delegation provenance"
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
if (!delegated && value.authoritySource === "user_delegation") {
|
|
179
|
-
context.addIssue({
|
|
180
|
-
code: "custom",
|
|
181
|
-
path: ["authoritySource"],
|
|
182
|
-
message: "non-delegated connections cannot claim user delegation provenance"
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
if (value.scope === "legacy_user" && value.authoritySource !== "legacy_user_compatibility") {
|
|
186
|
-
context.addIssue({
|
|
187
|
-
code: "custom",
|
|
188
|
-
path: ["authoritySource"],
|
|
189
|
-
message: "legacy user connections require explicit compatibility provenance"
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
if (value.scope === "workspace" && value.authoritySource === "legacy_user_compatibility") {
|
|
193
|
-
context.addIssue({
|
|
194
|
-
code: "custom",
|
|
195
|
-
path: ["authoritySource"],
|
|
196
|
-
message: "workspace connections cannot claim legacy user provenance"
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {
|
|
200
|
-
context.addIssue({
|
|
201
|
-
code: "custom",
|
|
202
|
-
path: ["originWorkspaceId"],
|
|
203
|
-
message: "workspace connections must be owned by the target workspace"
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
const delegation = value.userDelegation;
|
|
207
|
-
if (!delegation) return;
|
|
208
|
-
const exactFacts = [
|
|
209
|
-
[
|
|
210
|
-
delegation.organizationId === value.organizationId,
|
|
211
|
-
["userDelegation", "organizationId"],
|
|
212
|
-
"delegation organization mismatch"
|
|
213
|
-
],
|
|
214
|
-
[
|
|
215
|
-
delegation.workspaceId === value.targetWorkspaceId,
|
|
216
|
-
["userDelegation", "workspaceId"],
|
|
217
|
-
"delegation target workspace mismatch"
|
|
218
|
-
],
|
|
219
|
-
[
|
|
220
|
-
delegation.action === ConnectionUseAction.value,
|
|
221
|
-
["userDelegation", "action"],
|
|
222
|
-
"delegation action mismatch"
|
|
223
|
-
],
|
|
224
|
-
[
|
|
225
|
-
delegation.context === value.targetSessionVisibility,
|
|
226
|
-
["userDelegation", "context"],
|
|
227
|
-
"delegation visibility mismatch"
|
|
228
|
-
]
|
|
229
|
-
];
|
|
230
|
-
for (const [matches, path, message] of exactFacts) {
|
|
231
|
-
if (!matches) context.addIssue({ code: "custom", path, message });
|
|
232
|
-
}
|
|
233
|
-
if (delegation.sessionId !== null && delegation.sessionId !== value.targetSessionId) {
|
|
234
|
-
context.addIssue({
|
|
235
|
-
code: "custom",
|
|
236
|
-
path: ["userDelegation", "sessionId"],
|
|
237
|
-
message: "delegation session mismatch"
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
if (delegation.authorityEpoch !== null && delegation.authorityEpoch !== value.targetSessionAuthorityEpoch) {
|
|
241
|
-
context.addIssue({
|
|
242
|
-
code: "custom",
|
|
243
|
-
path: ["userDelegation", "authorityEpoch"],
|
|
244
|
-
message: "delegation authority epoch mismatch"
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
var ConnectionUseDenialReason = z.enum([
|
|
249
|
-
"tenant_mismatch",
|
|
250
|
-
"workspace_access_inactive",
|
|
251
|
-
"session_inactive",
|
|
252
|
-
"session_identity_changed",
|
|
253
|
-
"session_visibility_changed",
|
|
254
|
-
"session_authority_epoch_changed",
|
|
255
|
-
"accepted_attempt_authority_required",
|
|
256
|
-
"accepted_snapshot_digest_changed",
|
|
257
|
-
"connection_missing",
|
|
258
|
-
"connection_identity_changed",
|
|
259
|
-
"connection_generation_changed",
|
|
260
|
-
"connection_status_inactive",
|
|
261
|
-
"connection_owner_changed",
|
|
262
|
-
"owner_membership_inactive",
|
|
263
|
-
"authority_missing",
|
|
264
|
-
"authority_identity_changed",
|
|
265
|
-
"authority_generation_changed",
|
|
266
|
-
"authority_status_inactive",
|
|
267
|
-
"grant_missing",
|
|
268
|
-
"grant_identity_changed",
|
|
269
|
-
"grant_generation_changed",
|
|
270
|
-
"grant_status_inactive",
|
|
271
|
-
"grant_expired",
|
|
272
|
-
"grant_already_consumed"
|
|
273
|
-
]);
|
|
274
|
-
var ConnectionUseAttributionFields = z.object({
|
|
275
|
-
organizationId: z.string().uuid(),
|
|
276
|
-
workspaceId: z.string().uuid(),
|
|
277
|
-
sessionId: z.string().uuid(),
|
|
278
|
-
connectionId: z.string().uuid(),
|
|
279
|
-
connectionGeneration: z.number().int().positive(),
|
|
280
|
-
scope: z.enum(["workspace", "user", "legacy_user"]),
|
|
281
|
-
ownerSubjectId: z.string().min(1).max(512).nullable(),
|
|
282
|
-
authorityId: z.string().uuid().nullable(),
|
|
283
|
-
grantId: z.string().uuid().nullable()
|
|
284
|
-
}).strict();
|
|
285
|
-
function refineConnectionUseAttribution(value, context) {
|
|
286
|
-
const personal = value.scope !== "workspace";
|
|
287
|
-
for (const field of ["ownerSubjectId"]) {
|
|
288
|
-
if (personal !== (value[field] !== null)) {
|
|
289
|
-
context.addIssue({
|
|
290
|
-
code: "custom",
|
|
291
|
-
path: [field],
|
|
292
|
-
message: personal ? `personal attribution requires ${field}` : `workspace attribution cannot carry ${field}`
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
const delegated = value.scope === "user";
|
|
297
|
-
for (const field of ["authorityId", "grantId"]) {
|
|
298
|
-
if (delegated !== (value[field] !== null)) {
|
|
299
|
-
context.addIssue({
|
|
300
|
-
code: "custom",
|
|
301
|
-
path: [field],
|
|
302
|
-
message: delegated ? `delegated personal attribution requires ${field}` : `non-delegated attribution cannot carry ${field}`
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
var ConnectionUseAttribution = ConnectionUseAttributionFields.superRefine(
|
|
308
|
-
refineConnectionUseAttribution
|
|
309
|
-
);
|
|
310
|
-
var ConnectionUseAuditFact = ConnectionUseAttributionFields.extend({
|
|
311
|
-
outcome: z.enum(["authorized", "denied"]),
|
|
312
|
-
denialReason: ConnectionUseDenialReason.nullable(),
|
|
313
|
-
occurredAt: z.string().datetime({ offset: true })
|
|
314
|
-
}).superRefine((value, context) => {
|
|
315
|
-
refineConnectionUseAttribution(value, context);
|
|
316
|
-
if (value.outcome === "denied" !== (value.denialReason !== null)) {
|
|
317
|
-
context.addIssue({
|
|
318
|
-
code: "custom",
|
|
319
|
-
path: ["denialReason"],
|
|
320
|
-
message: "only denied connection use carries a denial reason"
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
});
|
|
324
|
-
var ConnectionUseAuthorizationResult = z.discriminatedUnion("status", [
|
|
325
|
-
z.object({ status: z.literal("authorized"), attribution: ConnectionUseAttribution }).strict(),
|
|
326
|
-
z.object({ status: z.literal("denied"), reason: ConnectionUseDenialReason }).strict()
|
|
327
|
-
]);
|
|
328
|
-
|
|
329
|
-
export {
|
|
330
|
-
ConnectionUseAction,
|
|
331
|
-
ConnectionAuthorityEnvelope,
|
|
332
|
-
ConnectionAuthorityGrant,
|
|
333
|
-
ConnectionAuthoritySummary,
|
|
334
|
-
ListConnectionAuthoritiesQuery,
|
|
335
|
-
ListConnectionAuthoritiesResponse,
|
|
336
|
-
IssueConnectionUseGrantRequest,
|
|
337
|
-
RevokeConnectionUseGrantQuery,
|
|
338
|
-
ConnectionUseGrantMutationResponse,
|
|
339
|
-
ConnectionUseGrantRevocationResponse,
|
|
340
|
-
ConnectionAuthoritySelectionSource,
|
|
341
|
-
ConnectionUseSelectionSource,
|
|
342
|
-
ConnectionUseAuthoritySnapshot,
|
|
343
|
-
ConnectionUseDenialReason,
|
|
344
|
-
ConnectionUseAttribution,
|
|
345
|
-
ConnectionUseAuditFact,
|
|
346
|
-
ConnectionUseAuthorizationResult
|
|
347
|
-
};
|
|
348
|
-
//# sourceMappingURL=chunk-OVFORMPW.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection-authority.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n ConnectionKind,\n ManagedUserResourceGrantMode,\n SessionTenancyVisibility,\n UserResourceAuthorityGrant,\n UserResourceDelegation,\n} from \"./index\";\n\n/** The only generic grant action that authorizes use of a connection. */\nexport const ConnectionUseAction = z.literal(\"connection.use\");\nexport type ConnectionUseAction = z.infer<typeof ConnectionUseAction>;\n\n/**\n * Connection authority is either workspace-owned or user-owned. Omission is\n * intentionally compatible with the historical workspace connection path.\n */\nexport const ConnectionAuthorityEnvelope = z\n .object({\n scope: z.enum([\"workspace\", \"user\"]).default(\"workspace\"),\n userDelegation: UserResourceDelegation.optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.scope === \"workspace\" && value.userDelegation !== undefined) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\"],\n message: \"workspace connections cannot carry user delegation\",\n });\n return;\n }\n if (value.scope === \"user\" && value.userDelegation === undefined) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\"],\n message: \"user connections require an immutable delegation\",\n });\n return;\n }\n if (value.userDelegation && value.userDelegation.action !== ConnectionUseAction.value) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\", \"action\"],\n message: \"connection delegation must use connection.use\",\n });\n }\n });\nexport type ConnectionAuthorityEnvelope = z.infer<typeof ConnectionAuthorityEnvelope>;\n\nexport const ConnectionAuthorityGrant = UserResourceAuthorityGrant.extend({\n action: ConnectionUseAction,\n}).strict();\nexport type ConnectionAuthorityGrant = z.infer<typeof ConnectionAuthorityGrant>;\n\n/** Owner-only opaque projection; connection identity and owner metadata stay server-side. */\nexport const ConnectionAuthoritySummary = z\n .object({\n authorityId: z.string().uuid(),\n resourceId: z.string().uuid(),\n originWorkspaceId: z.string().uuid().nullable(),\n generation: z.number().int().positive(),\n status: z.enum([\"active\", \"retained\", \"revoked\"]),\n grants: z.array(ConnectionAuthorityGrant),\n })\n .strict();\nexport type ConnectionAuthoritySummary = z.infer<typeof ConnectionAuthoritySummary>;\n\nexport const ListConnectionAuthoritiesQuery = z\n .object({\n scope: z.literal(\"user\"),\n cursor: z.string().uuid().optional(),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n })\n .strict();\nexport const ListConnectionAuthoritiesResponse = z\n .object({\n scope: z.literal(\"user\"),\n authorities: z.array(ConnectionAuthoritySummary),\n nextCursor: z.string().uuid().nullable(),\n })\n .strict();\n\nexport const IssueConnectionUseGrantRequest = z\n .object({\n scope: z.literal(\"user\"),\n mode: ManagedUserResourceGrantMode,\n context: SessionTenancyVisibility,\n sessionId: z.string().uuid().nullable().optional(),\n expectedAuthorityEpoch: z.number().int().positive().nullable().optional(),\n workspaceSharedAcknowledged: z.boolean().default(false),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.context === \"workspace_shared\" && !value.workspaceSharedAcknowledged) {\n context.addIssue({\n code: \"custom\",\n path: [\"workspaceSharedAcknowledged\"],\n message: \"workspace_shared requires durable shared-output acknowledgement\",\n });\n }\n if (value.mode === \"always\" && (value.sessionId || value.expectedAuthorityEpoch)) {\n context.addIssue({ code: \"custom\", path: [\"sessionId\"], message: \"always is unbound\" });\n }\n if (value.mode === \"session\" && (!value.sessionId || !value.expectedAuthorityEpoch)) {\n context.addIssue({\n code: \"custom\",\n path: [\"sessionId\"],\n message: \"session requires a target session and expectedAuthorityEpoch\",\n });\n }\n });\nexport type IssueConnectionUseGrantRequest = z.infer<typeof IssueConnectionUseGrantRequest>;\n\nexport const RevokeConnectionUseGrantQuery = z.object({ scope: z.literal(\"user\") }).strict();\n\nexport const ConnectionUseGrantMutationResponse = z\n .object({\n scope: z.literal(\"user\"),\n grant: ConnectionAuthorityGrant,\n })\n .strict();\nexport type ConnectionUseGrantMutationResponse = z.infer<typeof ConnectionUseGrantMutationResponse>;\n\nexport const ConnectionUseGrantRevocationResponse = z\n .object({\n scope: z.literal(\"user\"),\n grant: z\n .object({\n grantId: z.string().uuid(),\n generation: z.number().int().positive(),\n status: z.literal(\"revoked\"),\n revokedAt: z.string().datetime(),\n })\n .strict(),\n })\n .strict();\nexport type ConnectionUseGrantRevocationResponse = z.infer<\n typeof ConnectionUseGrantRevocationResponse\n>;\n\nexport const ConnectionAuthoritySelectionSource = z.enum([\n \"explicit_workspace\",\n \"legacy_workspace_omission\",\n \"legacy_user_compatibility\",\n \"user_delegation\",\n]);\nexport type ConnectionAuthoritySelectionSource = z.infer<typeof ConnectionAuthoritySelectionSource>;\n\nexport const ConnectionUseSelectionSource = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$/u);\nexport type ConnectionUseSelectionSource = z.infer<typeof ConnectionUseSelectionSource>;\n\nconst AcceptedConnectionWork = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"turn\"),\n turnId: z.string().uuid(),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"scheduled_task\"),\n taskId: z.string().uuid(),\n taskAuthorityRevision: z.number().int().positive(),\n runId: z.string().uuid(),\n })\n .strict(),\n]);\n\n/**\n * Internal, credential-free authority frozen when work is accepted. Personal\n * owner identity is retained only for live authorization and usage/audit\n * attribution; it is never part of the public delegation envelope.\n */\nexport const ConnectionUseAuthoritySnapshot = z\n .object({\n organizationId: z.string().uuid(),\n originWorkspaceId: z.string().uuid(),\n targetWorkspaceId: z.string().uuid(),\n targetSessionId: z.string().uuid(),\n targetSessionVisibility: SessionTenancyVisibility,\n targetSessionAuthorityEpoch: z.number().int().positive(),\n acceptedWork: AcceptedConnectionWork,\n connectionId: z.string().uuid(),\n connectionGeneration: z.number().int().positive(),\n connectionStatus: z.literal(\"active\"),\n providerDomain: z.string().min(1).max(2048),\n connectionKind: ConnectionKind,\n scope: z.enum([\"workspace\", \"user\", \"legacy_user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n ownerOrganizationMembershipId: z.string().uuid().nullable(),\n ownerMembershipAuthorizationRevision: z.number().int().positive().nullable().default(null),\n authoritySource: ConnectionAuthoritySelectionSource,\n selectionSources: z.array(ConnectionUseSelectionSource).min(1).max(128),\n userDelegation: UserResourceDelegation.nullable(),\n })\n .strict()\n .superRefine((value, context) => {\n const ownedBySubject = value.scope !== \"workspace\";\n const delegated = value.scope === \"user\";\n if (ownedBySubject !== (value.ownerSubjectId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerSubjectId\"],\n message: \"personal connections retain an owner subject\",\n });\n }\n if (delegated !== (value.ownerOrganizationMembershipId !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerOrganizationMembershipId\"],\n message: \"only user connections retain an owner membership\",\n });\n }\n if (delegated !== (value.ownerMembershipAuthorizationRevision !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"ownerMembershipAuthorizationRevision\"],\n message: \"only user connections retain an owner membership revision\",\n });\n }\n if (delegated !== (value.userDelegation !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\"],\n message: \"only user connections retain a delegation\",\n });\n }\n if (delegated && value.authoritySource !== \"user_delegation\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"user connections require user_delegation provenance\",\n });\n }\n if (!delegated && value.authoritySource === \"user_delegation\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"non-delegated connections cannot claim user delegation provenance\",\n });\n }\n if (value.scope === \"legacy_user\" && value.authoritySource !== \"legacy_user_compatibility\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"legacy user connections require explicit compatibility provenance\",\n });\n }\n if (value.scope === \"workspace\" && value.authoritySource === \"legacy_user_compatibility\") {\n context.addIssue({\n code: \"custom\",\n path: [\"authoritySource\"],\n message: \"workspace connections cannot claim legacy user provenance\",\n });\n }\n if (!delegated && value.originWorkspaceId !== value.targetWorkspaceId) {\n context.addIssue({\n code: \"custom\",\n path: [\"originWorkspaceId\"],\n message: \"workspace connections must be owned by the target workspace\",\n });\n }\n const delegation = value.userDelegation;\n if (!delegation) return;\n const exactFacts: Array<[boolean, (string | number)[], string]> = [\n [\n delegation.organizationId === value.organizationId,\n [\"userDelegation\", \"organizationId\"],\n \"delegation organization mismatch\",\n ],\n [\n delegation.workspaceId === value.targetWorkspaceId,\n [\"userDelegation\", \"workspaceId\"],\n \"delegation target workspace mismatch\",\n ],\n [\n delegation.action === ConnectionUseAction.value,\n [\"userDelegation\", \"action\"],\n \"delegation action mismatch\",\n ],\n [\n delegation.context === value.targetSessionVisibility,\n [\"userDelegation\", \"context\"],\n \"delegation visibility mismatch\",\n ],\n ];\n for (const [matches, path, message] of exactFacts) {\n if (!matches) context.addIssue({ code: \"custom\", path, message });\n }\n if (delegation.sessionId !== null && delegation.sessionId !== value.targetSessionId) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\", \"sessionId\"],\n message: \"delegation session mismatch\",\n });\n }\n if (\n delegation.authorityEpoch !== null &&\n delegation.authorityEpoch !== value.targetSessionAuthorityEpoch\n ) {\n context.addIssue({\n code: \"custom\",\n path: [\"userDelegation\", \"authorityEpoch\"],\n message: \"delegation authority epoch mismatch\",\n });\n }\n });\nexport type ConnectionUseAuthoritySnapshot = z.infer<typeof ConnectionUseAuthoritySnapshot>;\n\nexport const ConnectionUseDenialReason = z.enum([\n \"tenant_mismatch\",\n \"workspace_access_inactive\",\n \"session_inactive\",\n \"session_identity_changed\",\n \"session_visibility_changed\",\n \"session_authority_epoch_changed\",\n \"accepted_attempt_authority_required\",\n \"accepted_snapshot_digest_changed\",\n \"connection_missing\",\n \"connection_identity_changed\",\n \"connection_generation_changed\",\n \"connection_status_inactive\",\n \"connection_owner_changed\",\n \"owner_membership_inactive\",\n \"authority_missing\",\n \"authority_identity_changed\",\n \"authority_generation_changed\",\n \"authority_status_inactive\",\n \"grant_missing\",\n \"grant_identity_changed\",\n \"grant_generation_changed\",\n \"grant_status_inactive\",\n \"grant_expired\",\n \"grant_already_consumed\",\n]);\nexport type ConnectionUseDenialReason = z.infer<typeof ConnectionUseDenialReason>;\n\nconst ConnectionUseAttributionFields = z\n .object({\n organizationId: z.string().uuid(),\n workspaceId: z.string().uuid(),\n sessionId: z.string().uuid(),\n connectionId: z.string().uuid(),\n connectionGeneration: z.number().int().positive(),\n scope: z.enum([\"workspace\", \"user\", \"legacy_user\"]),\n ownerSubjectId: z.string().min(1).max(512).nullable(),\n authorityId: z.string().uuid().nullable(),\n grantId: z.string().uuid().nullable(),\n })\n .strict();\n\nfunction refineConnectionUseAttribution(\n value: z.infer<typeof ConnectionUseAttributionFields>,\n context: z.RefinementCtx,\n): void {\n const personal = value.scope !== \"workspace\";\n for (const field of [\"ownerSubjectId\"] as const) {\n if (personal !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: personal\n ? `personal attribution requires ${field}`\n : `workspace attribution cannot carry ${field}`,\n });\n }\n }\n const delegated = value.scope === \"user\";\n for (const field of [\"authorityId\", \"grantId\"] as const) {\n if (delegated !== (value[field] !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [field],\n message: delegated\n ? `delegated personal attribution requires ${field}`\n : `non-delegated attribution cannot carry ${field}`,\n });\n }\n }\n}\n\n/** Metadata-only attribution emitted after pre-use authorization. */\nexport const ConnectionUseAttribution = ConnectionUseAttributionFields.superRefine(\n refineConnectionUseAttribution,\n);\nexport type ConnectionUseAttribution = z.infer<typeof ConnectionUseAttribution>;\n\nexport const ConnectionUseAuditFact = ConnectionUseAttributionFields.extend({\n outcome: z.enum([\"authorized\", \"denied\"]),\n denialReason: ConnectionUseDenialReason.nullable(),\n occurredAt: z.string().datetime({ offset: true }),\n}).superRefine((value, context) => {\n refineConnectionUseAttribution(value, context);\n if ((value.outcome === \"denied\") !== (value.denialReason !== null)) {\n context.addIssue({\n code: \"custom\",\n path: [\"denialReason\"],\n message: \"only denied connection use carries a denial reason\",\n });\n }\n});\nexport type ConnectionUseAuditFact = z.infer<typeof ConnectionUseAuditFact>;\n\nexport const ConnectionUseAuthorizationResult = z.discriminatedUnion(\"status\", [\n z.object({ status: z.literal(\"authorized\"), attribution: ConnectionUseAttribution }).strict(),\n z.object({ status: z.literal(\"denied\"), reason: ConnectionUseDenialReason }).strict(),\n]);\nexport type ConnectionUseAuthorizationResult = z.infer<typeof ConnectionUseAuthorizationResult>;\n"],"mappings":"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","names":[]}
|
package/dist/chunk-P3HLDT77.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/permissions.ts
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
var Permission = z.enum([
|
|
4
|
-
"account:read",
|
|
5
|
-
"account:admin",
|
|
6
|
-
"members:manage",
|
|
7
|
-
"workspace:create",
|
|
8
|
-
"billing:read",
|
|
9
|
-
"billing:manage",
|
|
10
|
-
"workspace:read",
|
|
11
|
-
"workspace:admin",
|
|
12
|
-
"sessions:create",
|
|
13
|
-
"sessions:read",
|
|
14
|
-
"sessions:control",
|
|
15
|
-
"stream:view",
|
|
16
|
-
"stream:control",
|
|
17
|
-
"stream:acknowledge",
|
|
18
|
-
"files:upload",
|
|
19
|
-
"files:read",
|
|
20
|
-
"files:write",
|
|
21
|
-
"terminal:attach",
|
|
22
|
-
"documents:manage",
|
|
23
|
-
"documents:search",
|
|
24
|
-
"scheduled_tasks:manage",
|
|
25
|
-
"scheduled_tasks:run",
|
|
26
|
-
"github:manage",
|
|
27
|
-
"github:use",
|
|
28
|
-
"api_keys:manage",
|
|
29
|
-
"connections:read",
|
|
30
|
-
"connections:write",
|
|
31
|
-
"capabilities:manage",
|
|
32
|
-
/** @deprecated alias of variable-sets:manage */
|
|
33
|
-
"environments:manage",
|
|
34
|
-
/** @deprecated alias of variable-sets:use */
|
|
35
|
-
"environments:use",
|
|
36
|
-
"variable-sets:list",
|
|
37
|
-
"variable-sets:read",
|
|
38
|
-
"variable-sets:write",
|
|
39
|
-
"variable-sets:manage",
|
|
40
|
-
"variable-sets:attach",
|
|
41
|
-
"variable-sets:use",
|
|
42
|
-
"secrets:list",
|
|
43
|
-
"secrets:read",
|
|
44
|
-
"secrets:write",
|
|
45
|
-
"mcp_servers:attach",
|
|
46
|
-
"codemode:call",
|
|
47
|
-
"goals:manage",
|
|
48
|
-
"enrollments:read",
|
|
49
|
-
"enrollments:manage",
|
|
50
|
-
"rigs:use",
|
|
51
|
-
"rigs:manage",
|
|
52
|
-
"artifacts:read",
|
|
53
|
-
"artifacts:publish"
|
|
54
|
-
]);
|
|
55
|
-
|
|
56
|
-
export {
|
|
57
|
-
Permission
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=chunk-P3HLDT77.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/permissions.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Canonical public permission vocabulary shared by operational and control-plane contracts. */\nexport const Permission = z.enum([\n \"account:read\",\n \"account:admin\",\n \"members:manage\",\n \"workspace:create\",\n \"billing:read\",\n \"billing:manage\",\n \"workspace:read\",\n \"workspace:admin\",\n \"sessions:create\",\n \"sessions:read\",\n \"sessions:control\",\n \"stream:view\",\n \"stream:control\",\n \"stream:acknowledge\",\n \"files:upload\",\n \"files:read\",\n \"files:write\",\n \"terminal:attach\",\n \"documents:manage\",\n \"documents:search\",\n \"scheduled_tasks:manage\",\n \"scheduled_tasks:run\",\n \"github:manage\",\n \"github:use\",\n \"api_keys:manage\",\n \"connections:read\",\n \"connections:write\",\n \"capabilities:manage\",\n /** @deprecated alias of variable-sets:manage */\n \"environments:manage\",\n /** @deprecated alias of variable-sets:use */\n \"environments:use\",\n \"variable-sets:list\",\n \"variable-sets:read\",\n \"variable-sets:write\",\n \"variable-sets:manage\",\n \"variable-sets:attach\",\n \"variable-sets:use\",\n \"secrets:list\",\n \"secrets:read\",\n \"secrets:write\",\n \"mcp_servers:attach\",\n \"codemode:call\",\n \"goals:manage\",\n \"enrollments:read\",\n \"enrollments:manage\",\n \"rigs:use\",\n \"rigs:manage\",\n \"artifacts:read\",\n \"artifacts:publish\",\n]);\nexport type Permission = z.infer<typeof Permission>;\n"],"mappings":";AAAA,SAAS,SAAS;AAGX,IAAM,aAAa,EAAE,KAAK;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;","names":[]}
|