@vertesia/common 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260806.125520Z
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/lib/Progress.d.ts.map +1 -1
- package/lib/Progress.js.map +1 -1
- package/lib/access-control-values.d.ts +98 -0
- package/lib/access-control-values.d.ts.map +1 -0
- package/lib/access-control-values.js +101 -0
- package/lib/access-control-values.js.map +1 -0
- package/lib/access-control.d.ts +22 -119
- package/lib/access-control.d.ts.map +1 -1
- package/lib/access-control.js +6 -78
- package/lib/access-control.js.map +1 -1
- package/lib/account-values.d.ts +53 -0
- package/lib/account-values.d.ts.map +1 -0
- package/lib/account-values.js +91 -0
- package/lib/account-values.js.map +1 -0
- package/lib/analytics.d.ts +12 -38
- package/lib/analytics.d.ts.map +1 -1
- package/lib/api-schemas/access-control.d.ts +215 -0
- package/lib/api-schemas/access-control.d.ts.map +1 -0
- package/lib/api-schemas/access-control.js +165 -0
- package/lib/api-schemas/access-control.js.map +1 -0
- package/lib/api-schemas/account.d.ts +101 -0
- package/lib/api-schemas/account.d.ts.map +1 -0
- package/lib/api-schemas/account.js +136 -0
- package/lib/api-schemas/account.js.map +1 -0
- package/lib/api-schemas/adapter.d.ts +80 -0
- package/lib/api-schemas/adapter.d.ts.map +1 -0
- package/lib/api-schemas/adapter.js +726 -0
- package/lib/api-schemas/adapter.js.map +1 -0
- package/lib/api-schemas/agent-runs.d.ts +3786 -0
- package/lib/api-schemas/agent-runs.d.ts.map +1 -0
- package/lib/api-schemas/agent-runs.js +1000 -0
- package/lib/api-schemas/agent-runs.js.map +1 -0
- package/lib/api-schemas/analytics.d.ts +86 -0
- package/lib/api-schemas/analytics.d.ts.map +1 -0
- package/lib/api-schemas/analytics.js +58 -0
- package/lib/api-schemas/analytics.js.map +1 -0
- package/lib/api-schemas/apikey.d.ts +231 -0
- package/lib/api-schemas/apikey.d.ts.map +1 -0
- package/lib/api-schemas/apikey.js +172 -0
- package/lib/api-schemas/apikey.js.map +1 -0
- package/lib/api-schemas/app-lifecycle.d.ts +1148 -0
- package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
- package/lib/api-schemas/app-lifecycle.js +801 -0
- package/lib/api-schemas/app-lifecycle.js.map +1 -0
- package/lib/api-schemas/app-runtime.d.ts +10951 -0
- package/lib/api-schemas/app-runtime.d.ts.map +1 -0
- package/lib/api-schemas/app-runtime.js +874 -0
- package/lib/api-schemas/app-runtime.js.map +1 -0
- package/lib/api-schemas/apps.d.ts +271 -0
- package/lib/api-schemas/apps.d.ts.map +1 -0
- package/lib/api-schemas/apps.js +426 -0
- package/lib/api-schemas/apps.js.map +1 -0
- package/lib/api-schemas/audit-trail.d.ts +465 -0
- package/lib/api-schemas/audit-trail.d.ts.map +1 -0
- package/lib/api-schemas/audit-trail.js +218 -0
- package/lib/api-schemas/audit-trail.js.map +1 -0
- package/lib/api-schemas/bulk-operation.d.ts +104 -0
- package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
- package/lib/api-schemas/bulk-operation.js +66 -0
- package/lib/api-schemas/bulk-operation.js.map +1 -0
- package/lib/api-schemas/commands.d.ts +50 -0
- package/lib/api-schemas/commands.d.ts.map +1 -0
- package/lib/api-schemas/commands.js +58 -0
- package/lib/api-schemas/commands.js.map +1 -0
- package/lib/api-schemas/content.d.ts +3565 -0
- package/lib/api-schemas/content.d.ts.map +1 -0
- package/lib/api-schemas/content.js +854 -0
- package/lib/api-schemas/content.js.map +1 -0
- package/lib/api-schemas/cost-analytics.d.ts +300 -0
- package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
- package/lib/api-schemas/cost-analytics.js +218 -0
- package/lib/api-schemas/cost-analytics.js.map +1 -0
- package/lib/api-schemas/dashboard.d.ts +408 -0
- package/lib/api-schemas/dashboard.d.ts.map +1 -0
- package/lib/api-schemas/dashboard.js +311 -0
- package/lib/api-schemas/dashboard.js.map +1 -0
- package/lib/api-schemas/data-store.d.ts +1650 -0
- package/lib/api-schemas/data-store.d.ts.map +1 -0
- package/lib/api-schemas/data-store.js +504 -0
- package/lib/api-schemas/data-store.js.map +1 -0
- package/lib/api-schemas/document-processing.d.ts +1501 -0
- package/lib/api-schemas/document-processing.d.ts.map +1 -0
- package/lib/api-schemas/document-processing.js +312 -0
- package/lib/api-schemas/document-processing.js.map +1 -0
- package/lib/api-schemas/embeddings.d.ts +184 -0
- package/lib/api-schemas/embeddings.d.ts.map +1 -0
- package/lib/api-schemas/embeddings.js +102 -0
- package/lib/api-schemas/embeddings.js.map +1 -0
- package/lib/api-schemas/environment.d.ts +412 -0
- package/lib/api-schemas/environment.d.ts.map +1 -0
- package/lib/api-schemas/environment.js +170 -0
- package/lib/api-schemas/environment.js.map +1 -0
- package/lib/api-schemas/events.d.ts +4918 -0
- package/lib/api-schemas/events.d.ts.map +1 -0
- package/lib/api-schemas/events.js +888 -0
- package/lib/api-schemas/events.js.map +1 -0
- package/lib/api-schemas/files.d.ts +107 -0
- package/lib/api-schemas/files.d.ts.map +1 -0
- package/lib/api-schemas/files.js +137 -0
- package/lib/api-schemas/files.js.map +1 -0
- package/lib/api-schemas/group.d.ts +122 -0
- package/lib/api-schemas/group.d.ts.map +1 -0
- package/lib/api-schemas/group.js +142 -0
- package/lib/api-schemas/group.js.map +1 -0
- package/lib/api-schemas/index.d.ts +36 -0
- package/lib/api-schemas/index.d.ts.map +1 -0
- package/lib/api-schemas/index.js +36 -0
- package/lib/api-schemas/index.js.map +1 -0
- package/lib/api-schemas/indexing.d.ts +144 -0
- package/lib/api-schemas/indexing.d.ts.map +1 -0
- package/lib/api-schemas/indexing.js +217 -0
- package/lib/api-schemas/indexing.js.map +1 -0
- package/lib/api-schemas/integrations.d.ts +269 -0
- package/lib/api-schemas/integrations.d.ts.map +1 -0
- package/lib/api-schemas/integrations.js +335 -0
- package/lib/api-schemas/integrations.js.map +1 -0
- package/lib/api-schemas/interaction.d.ts +22456 -0
- package/lib/api-schemas/interaction.d.ts.map +1 -0
- package/lib/api-schemas/interaction.js +2071 -0
- package/lib/api-schemas/interaction.js.map +1 -0
- package/lib/api-schemas/invites.d.ts +162 -0
- package/lib/api-schemas/invites.d.ts.map +1 -0
- package/lib/api-schemas/invites.js +106 -0
- package/lib/api-schemas/invites.js.map +1 -0
- package/lib/api-schemas/oauth-server.d.ts +415 -0
- package/lib/api-schemas/oauth-server.d.ts.map +1 -0
- package/lib/api-schemas/oauth-server.js +193 -0
- package/lib/api-schemas/oauth-server.js.map +1 -0
- package/lib/api-schemas/oauth.d.ts +150 -0
- package/lib/api-schemas/oauth.d.ts.map +1 -0
- package/lib/api-schemas/oauth.js +148 -0
- package/lib/api-schemas/oauth.js.map +1 -0
- package/lib/api-schemas/parameters.d.ts +64 -0
- package/lib/api-schemas/parameters.d.ts.map +1 -0
- package/lib/api-schemas/parameters.js +246 -0
- package/lib/api-schemas/parameters.js.map +1 -0
- package/lib/api-schemas/process.d.ts +499 -0
- package/lib/api-schemas/process.d.ts.map +1 -0
- package/lib/api-schemas/process.js +817 -0
- package/lib/api-schemas/process.js.map +1 -0
- package/lib/api-schemas/project-configuration.d.ts +4900 -0
- package/lib/api-schemas/project-configuration.d.ts.map +1 -0
- package/lib/api-schemas/project-configuration.js +425 -0
- package/lib/api-schemas/project-configuration.js.map +1 -0
- package/lib/api-schemas/project.d.ts +7247 -0
- package/lib/api-schemas/project.d.ts.map +1 -0
- package/lib/api-schemas/project.js +185 -0
- package/lib/api-schemas/project.js.map +1 -0
- package/lib/api-schemas/prompt.d.ts +70 -0
- package/lib/api-schemas/prompt.d.ts.map +1 -0
- package/lib/api-schemas/prompt.js +77 -0
- package/lib/api-schemas/prompt.js.map +1 -0
- package/lib/api-schemas/quota.d.ts +90 -0
- package/lib/api-schemas/quota.d.ts.map +1 -0
- package/lib/api-schemas/quota.js +95 -0
- package/lib/api-schemas/quota.js.map +1 -0
- package/lib/api-schemas/registry.d.ts +98506 -0
- package/lib/api-schemas/registry.d.ts.map +1 -0
- package/lib/api-schemas/registry.js +2606 -0
- package/lib/api-schemas/registry.js.map +1 -0
- package/lib/api-schemas/schema-primitives.d.ts +5 -0
- package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
- package/lib/api-schemas/schema-primitives.js +11 -0
- package/lib/api-schemas/schema-primitives.js.map +1 -0
- package/lib/api-schemas/secrets.d.ts +497 -0
- package/lib/api-schemas/secrets.d.ts.map +1 -0
- package/lib/api-schemas/secrets.js +298 -0
- package/lib/api-schemas/secrets.js.map +1 -0
- package/lib/api-schemas/store.d.ts +22140 -0
- package/lib/api-schemas/store.d.ts.map +1 -0
- package/lib/api-schemas/store.js +557 -0
- package/lib/api-schemas/store.js.map +1 -0
- package/lib/api-schemas/sts.d.ts +166 -0
- package/lib/api-schemas/sts.d.ts.map +1 -0
- package/lib/api-schemas/sts.js +107 -0
- package/lib/api-schemas/sts.js.map +1 -0
- package/lib/api-schemas/task.d.ts +215 -0
- package/lib/api-schemas/task.d.ts.map +1 -0
- package/lib/api-schemas/task.js +95 -0
- package/lib/api-schemas/task.js.map +1 -0
- package/lib/api-schemas/tools.d.ts +111 -0
- package/lib/api-schemas/tools.d.ts.map +1 -0
- package/lib/api-schemas/tools.js +122 -0
- package/lib/api-schemas/tools.js.map +1 -0
- package/lib/api-schemas/user.d.ts +208 -0
- package/lib/api-schemas/user.d.ts.map +1 -0
- package/lib/api-schemas/user.js +180 -0
- package/lib/api-schemas/user.js.map +1 -0
- package/lib/api-schemas/view-execution.d.ts +3163 -0
- package/lib/api-schemas/view-execution.d.ts.map +1 -0
- package/lib/api-schemas/view-execution.js +172 -0
- package/lib/api-schemas/view-execution.js.map +1 -0
- package/lib/api-schemas/views.d.ts +5990 -0
- package/lib/api-schemas/views.d.ts.map +1 -0
- package/lib/api-schemas/views.js +396 -0
- package/lib/api-schemas/views.js.map +1 -0
- package/lib/api-schemas/workflow-runs.d.ts +2210 -0
- package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
- package/lib/api-schemas/workflow-runs.js +589 -0
- package/lib/api-schemas/workflow-runs.js.map +1 -0
- package/lib/apikey-values.d.ts +10 -0
- package/lib/apikey-values.d.ts.map +1 -0
- package/lib/apikey-values.js +11 -0
- package/lib/apikey-values.js.map +1 -0
- package/lib/apikey.d.ts +37 -36
- package/lib/apikey.d.ts.map +1 -1
- package/lib/apikey.js +5 -4
- package/lib/apikey.js.map +1 -1
- package/lib/apps.d.ts +142 -1172
- package/lib/apps.d.ts.map +1 -1
- package/lib/apps.js +4 -0
- package/lib/apps.js.map +1 -1
- package/lib/ask-user.d.ts +8 -1
- package/lib/ask-user.d.ts.map +1 -1
- package/lib/audit-trail.d.ts +20 -131
- package/lib/audit-trail.d.ts.map +1 -1
- package/lib/audit-trail.js.map +1 -1
- package/lib/browser-credentials.d.ts +11 -106
- package/lib/browser-credentials.d.ts.map +1 -1
- package/lib/common.d.ts +59 -81
- package/lib/common.d.ts.map +1 -1
- package/lib/cost-analytics.d.ts +14 -167
- package/lib/cost-analytics.d.ts.map +1 -1
- package/lib/cost-analytics.js.map +1 -1
- package/lib/data-platform.d.ts +122 -786
- package/lib/data-platform.d.ts.map +1 -1
- package/lib/data-platform.js +41 -61
- package/lib/data-platform.js.map +1 -1
- package/lib/email.d.ts +5 -17
- package/lib/email.d.ts.map +1 -1
- package/lib/email.js +0 -3
- package/lib/email.js.map +1 -1
- package/lib/embeddings.d.ts +14 -56
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/environment.d.ts +22 -118
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +3 -0
- package/lib/environment.js.map +1 -1
- package/lib/facets.d.ts +4 -7
- package/lib/facets.d.ts.map +1 -1
- package/lib/group.d.ts +33 -39
- package/lib/group.d.ts.map +1 -1
- package/lib/group.js +0 -1
- package/lib/group.js.map +1 -1
- package/lib/index.d.ts +8 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/integrations.d.ts +20 -108
- package/lib/integrations.d.ts.map +1 -1
- package/lib/integrations.js.map +1 -1
- package/lib/interaction-values.d.ts +11 -0
- package/lib/interaction-values.d.ts.map +1 -0
- package/lib/interaction-values.js +24 -0
- package/lib/interaction-values.js.map +1 -0
- package/lib/interaction.d.ts +88 -778
- package/lib/interaction.d.ts.map +1 -1
- package/lib/interaction.js +8 -12
- package/lib/interaction.js.map +1 -1
- package/lib/meters.d.ts +11 -7
- package/lib/meters.d.ts.map +1 -1
- package/lib/meters.js.map +1 -1
- package/lib/oauth-server.d.ts +33 -119
- package/lib/oauth-server.d.ts.map +1 -1
- package/lib/oauth.d.ts +14 -96
- package/lib/oauth.d.ts.map +1 -1
- package/lib/oauth.js +0 -4
- package/lib/oauth.js.map +1 -1
- package/lib/payload.d.ts +15 -38
- package/lib/payload.d.ts.map +1 -1
- package/lib/platform-event-validation.d.ts.map +1 -1
- package/lib/platform-event-validation.js +15 -2
- package/lib/platform-event-validation.js.map +1 -1
- package/lib/platform-event.d.ts +79 -464
- package/lib/platform-event.d.ts.map +1 -1
- package/lib/platform-event.js.map +1 -1
- package/lib/principal-context.d.ts +10 -15
- package/lib/principal-context.d.ts.map +1 -1
- package/lib/project-values.d.ts +24 -0
- package/lib/project-values.d.ts.map +1 -0
- package/lib/project-values.js +42 -0
- package/lib/project-values.js.map +1 -0
- package/lib/project.d.ts +56 -504
- package/lib/project.d.ts.map +1 -1
- package/lib/project.js +6 -76
- package/lib/project.js.map +1 -1
- package/lib/prompt.d.ts +20 -51
- package/lib/prompt.d.ts.map +1 -1
- package/lib/prompt.js.map +1 -1
- package/lib/query.d.ts +27 -88
- package/lib/query.d.ts.map +1 -1
- package/lib/rate-limiter.d.ts +19 -70
- package/lib/rate-limiter.d.ts.map +1 -1
- package/lib/rate-limiter.js +0 -3
- package/lib/rate-limiter.js.map +1 -1
- package/lib/refs.d.ts +3 -11
- package/lib/refs.d.ts.map +1 -1
- package/lib/refs.js.map +1 -1
- package/lib/roles/types.d.ts +14 -20
- package/lib/roles/types.d.ts.map +1 -1
- package/lib/roles/types.js +5 -9
- package/lib/roles/types.js.map +1 -1
- package/lib/runs.d.ts +6 -25
- package/lib/runs.d.ts.map +1 -1
- package/lib/schema-for-extraction.js.map +1 -1
- package/lib/secrets.d.ts +20 -105
- package/lib/secrets.d.ts.map +1 -1
- package/lib/store/agent-approval.d.ts +6 -15
- package/lib/store/agent-approval.d.ts.map +1 -1
- package/lib/store/agent-approval.js.map +1 -1
- package/lib/store/agent-run.d.ts +57 -358
- package/lib/store/agent-run.d.ts.map +1 -1
- package/lib/store/collections.d.ts +11 -63
- package/lib/store/collections.d.ts.map +1 -1
- package/lib/store/collections.js.map +1 -1
- package/lib/store/conversation-state.d.ts +61 -61
- package/lib/store/conversation-state.d.ts.map +1 -1
- package/lib/store/conversation-state.js +2 -0
- package/lib/store/conversation-state.js.map +1 -1
- package/lib/store/doc-analyzer.d.ts +9 -32
- package/lib/store/doc-analyzer.d.ts.map +1 -1
- package/lib/store/dsl-workflow.d.ts +37 -151
- package/lib/store/dsl-workflow.d.ts.map +1 -1
- package/lib/store/dsl-workflow.js.map +1 -1
- package/lib/store/editing-policy-schema.generated.d.ts +3 -0
- package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
- package/lib/store/editing-policy-schema.generated.js +28 -0
- package/lib/store/editing-policy-schema.generated.js.map +1 -0
- package/lib/store/grounded-extraction.d.ts +7 -104
- package/lib/store/grounded-extraction.d.ts.map +1 -1
- package/lib/store/grounded-extraction.js.map +1 -1
- package/lib/store/index.d.ts +2 -0
- package/lib/store/index.d.ts.map +1 -1
- package/lib/store/index.js +3 -0
- package/lib/store/index.js.map +1 -1
- package/lib/store/intake-policy-schema.generated.d.ts +3 -0
- package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
- package/lib/store/intake-policy-schema.generated.js +1425 -0
- package/lib/store/intake-policy-schema.generated.js.map +1 -0
- package/lib/store/process-schema.d.ts +81 -1
- package/lib/store/process-schema.d.ts.map +1 -1
- package/lib/store/process-schema.js +79 -0
- package/lib/store/process-schema.js.map +1 -1
- package/lib/store/process-validation.d.ts.map +1 -1
- package/lib/store/process-validation.js +70 -2
- package/lib/store/process-validation.js.map +1 -1
- package/lib/store/process.d.ts +36 -125
- package/lib/store/process.d.ts.map +1 -1
- package/lib/store/process.js.map +1 -1
- package/lib/store/rendering.d.ts +9 -64
- package/lib/store/rendering.d.ts.map +1 -1
- package/lib/store/rendering.js.map +1 -1
- package/lib/store/schedule.d.ts +6 -6
- package/lib/store/schedule.d.ts.map +1 -1
- package/lib/store/store.d.ts +99 -701
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +4 -456
- package/lib/store/store.js.map +1 -1
- package/lib/store/task.d.ts +15 -59
- package/lib/store/task.d.ts.map +1 -1
- package/lib/store/task.js +0 -3
- package/lib/store/task.js.map +1 -1
- package/lib/store/workflow.d.ts +58 -516
- package/lib/store/workflow.d.ts.map +1 -1
- package/lib/store/workflow.js +31 -11
- package/lib/store/workflow.js.map +1 -1
- package/lib/sts-errors.d.ts +7 -0
- package/lib/sts-errors.d.ts.map +1 -0
- package/lib/sts-errors.js +11 -0
- package/lib/sts-errors.js.map +1 -0
- package/lib/sts-token-types.d.ts +13 -66
- package/lib/sts-token-types.d.ts.map +1 -1
- package/lib/sts-token-types.js.map +1 -1
- package/lib/tools.d.ts +8 -100
- package/lib/tools.d.ts.map +1 -1
- package/lib/transient-tokens-values.d.ts +11 -0
- package/lib/transient-tokens-values.d.ts.map +1 -0
- package/lib/transient-tokens-values.js +12 -0
- package/lib/transient-tokens-values.js.map +1 -0
- package/lib/transient-tokens.d.ts +15 -13
- package/lib/transient-tokens.d.ts.map +1 -1
- package/lib/transient-tokens.js +5 -5
- package/lib/transient-tokens.js.map +1 -1
- package/lib/user.d.ts +55 -156
- package/lib/user.d.ts.map +1 -1
- package/lib/user.js +2 -79
- package/lib/user.js.map +1 -1
- package/lib/versions.d.ts +34 -1
- package/lib/versions.d.ts.map +1 -1
- package/lib/versions.js +33 -0
- package/lib/versions.js.map +1 -1
- package/lib/vertesia-common.js +6 -2
- package/lib/vertesia-common.js.map +1 -1
- package/lib/view-configuration-validation.js.map +1 -1
- package/lib/view-query-validation.js.map +1 -1
- package/lib/view-validation-helpers.d.ts +1 -1
- package/lib/view-validation-helpers.d.ts.map +1 -1
- package/lib/views-schema.d.ts +51 -51
- package/lib/views-schema.d.ts.map +1 -1
- package/lib/views-validation.js.map +1 -1
- package/lib/views.d.ts +58 -314
- package/lib/views.d.ts.map +1 -1
- package/lib/views.js.map +1 -1
- package/lib/workflow-analytics.d.ts +10 -3
- package/lib/workflow-analytics.d.ts.map +1 -1
- package/package.json +14 -5
- package/src/access-control-values.ts +113 -0
- package/src/access-control.ts +33 -138
- package/src/account-values.ts +95 -0
- package/src/analytics.ts +18 -42
- package/src/api-schemas/access-control.contract.test.ts +209 -0
- package/src/api-schemas/access-control.ts +208 -0
- package/src/api-schemas/account.contract.test.ts +318 -0
- package/src/api-schemas/account.ts +150 -0
- package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
- package/src/api-schemas/adapter.ts +778 -0
- package/src/api-schemas/agent-runs.ts +1091 -0
- package/src/api-schemas/analytics.ts +65 -0
- package/src/api-schemas/apikey.contract.test.ts +270 -0
- package/src/api-schemas/apikey.ts +199 -0
- package/src/api-schemas/app-delete-summary.contract.test.ts +67 -0
- package/src/api-schemas/app-lifecycle.ts +900 -0
- package/src/api-schemas/app-runtime.ts +1022 -0
- package/src/api-schemas/apps.ts +484 -0
- package/src/api-schemas/audit-trail.ts +243 -0
- package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
- package/src/api-schemas/bulk-operation.ts +75 -0
- package/src/api-schemas/bundle-isolation.test.ts +80 -0
- package/src/api-schemas/commands.contract.test.ts +51 -0
- package/src/api-schemas/commands.ts +62 -0
- package/src/api-schemas/content.ts +952 -0
- package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
- package/src/api-schemas/cost-analytics.ts +235 -0
- package/src/api-schemas/dashboard.contract.test.ts +127 -0
- package/src/api-schemas/dashboard.ts +351 -0
- package/src/api-schemas/data-store.contract.test.ts +91 -0
- package/src/api-schemas/data-store.ts +571 -0
- package/src/api-schemas/document-processing.contract.test.ts +76 -0
- package/src/api-schemas/document-processing.ts +344 -0
- package/src/api-schemas/embeddings.ts +113 -0
- package/src/api-schemas/environment.contract.test.ts +184 -0
- package/src/api-schemas/environment.ts +190 -0
- package/src/api-schemas/events.ts +981 -0
- package/src/api-schemas/files.ts +159 -0
- package/src/api-schemas/group.contract.test.ts +205 -0
- package/src/api-schemas/group.ts +155 -0
- package/src/api-schemas/index.ts +35 -0
- package/src/api-schemas/indexing.contract.test.ts +83 -0
- package/src/api-schemas/indexing.ts +234 -0
- package/src/api-schemas/integrations.ts +369 -0
- package/src/api-schemas/interaction.contract.test.ts +27 -0
- package/src/api-schemas/interaction.ts +2364 -0
- package/src/api-schemas/invites.contract.test.ts +268 -0
- package/src/api-schemas/invites.ts +127 -0
- package/src/api-schemas/llumiverse.contract.test.ts +108 -0
- package/src/api-schemas/mcp-api-key.contract.test.ts +86 -0
- package/src/api-schemas/oauth-server.ts +219 -0
- package/src/api-schemas/oauth.contract.test.ts +118 -0
- package/src/api-schemas/oauth.ts +166 -0
- package/src/api-schemas/parameters.test.ts +402 -0
- package/src/api-schemas/parameters.ts +310 -0
- package/src/api-schemas/process.ts +929 -0
- package/src/api-schemas/project-configuration.ts +478 -0
- package/src/api-schemas/project.contract.test.ts +365 -0
- package/src/api-schemas/project.ts +214 -0
- package/src/api-schemas/prompt.ts +88 -0
- package/src/api-schemas/pruning-limits.test.ts +189 -0
- package/src/api-schemas/quota.contract.test.ts +147 -0
- package/src/api-schemas/quota.ts +122 -0
- package/src/api-schemas/registry-groups.test.ts +91 -0
- package/src/api-schemas/registry.ts +3512 -0
- package/src/api-schemas/response-pruning.test.ts +260 -0
- package/src/api-schemas/schema-primitives.ts +12 -0
- package/src/api-schemas/secrets.ts +332 -0
- package/src/api-schemas/store.contract.test.ts +471 -0
- package/src/api-schemas/store.ts +604 -0
- package/src/api-schemas/sts.contract.test.ts +112 -0
- package/src/api-schemas/sts.ts +123 -0
- package/src/api-schemas/task.ts +104 -0
- package/src/api-schemas/tools.ts +140 -0
- package/src/api-schemas/user.contract.test.ts +191 -0
- package/src/api-schemas/user.ts +204 -0
- package/src/api-schemas/view-execution.ts +200 -0
- package/src/api-schemas/views.ts +437 -0
- package/src/api-schemas/workflow-runs.ts +653 -0
- package/src/apikey-values.ts +10 -0
- package/src/apikey.ts +49 -40
- package/src/apps.test.ts +82 -0
- package/src/apps.ts +283 -1228
- package/src/ask-user.ts +9 -1
- package/src/audit-trail.ts +45 -137
- package/src/browser-credentials.ts +21 -106
- package/src/common.ts +67 -78
- package/src/cost-analytics.ts +37 -176
- package/src/data-platform.ts +205 -776
- package/src/email.ts +5 -17
- package/src/embeddings.ts +22 -60
- package/src/environment.ts +52 -126
- package/src/facets.ts +4 -7
- package/src/group.ts +38 -42
- package/src/index.ts +12 -0
- package/src/integrations.ts +39 -129
- package/src/interaction-values.ts +23 -0
- package/src/interaction.ts +162 -902
- package/src/meters.ts +11 -7
- package/src/oauth-server.ts +58 -127
- package/src/oauth.ts +24 -108
- package/src/payload.ts +25 -40
- package/src/platform-event-validation.test.ts +26 -0
- package/src/platform-event-validation.ts +15 -2
- package/src/platform-event.ts +141 -484
- package/src/principal-context.ts +11 -15
- package/src/project-values.ts +41 -0
- package/src/project.ts +116 -588
- package/src/prompt.ts +34 -61
- package/src/query.ts +34 -93
- package/src/rate-limiter.ts +27 -75
- package/src/refs.ts +4 -11
- package/src/roles/types.ts +20 -20
- package/src/runs.ts +11 -24
- package/src/secrets.ts +38 -117
- package/src/store/agent-approval.ts +9 -14
- package/src/store/agent-run.ts +93 -450
- package/src/store/collections.ts +21 -63
- package/src/store/content-type-editing.test.ts +1 -1
- package/src/store/conversation-state.ts +75 -64
- package/src/store/doc-analyzer.ts +17 -33
- package/src/store/dsl-workflow.ts +62 -158
- package/src/store/editing-policy-schema.generated.ts +30 -0
- package/src/store/grounded-extraction.ts +13 -104
- package/src/store/index.ts +3 -0
- package/src/store/intake-policy-schema.generated.ts +1442 -0
- package/src/store/process-schema.test.ts +43 -0
- package/src/store/process-schema.ts +79 -0
- package/src/store/process-validation.test.ts +141 -0
- package/src/store/process-validation.ts +82 -2
- package/src/store/process.ts +70 -146
- package/src/store/rendering.ts +15 -64
- package/src/store/store.ts +197 -1204
- package/src/store/task.ts +25 -59
- package/src/store/workflow.ts +103 -554
- package/src/sts-errors.ts +13 -0
- package/src/sts-token-types.ts +26 -75
- package/src/tools.ts +18 -97
- package/src/transient-tokens-values.ts +11 -0
- package/src/transient-tokens.ts +16 -13
- package/src/user.ts +75 -215
- package/src/versions.test.ts +13 -0
- package/src/versions.ts +36 -0
- package/src/views-schema.test.ts +9 -1
- package/src/views.ts +106 -329
- package/src/workflow-analytics.ts +10 -3
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The contracts for Vertesia's OWN OAuth server: the clients registered against it and the grants
|
|
5
|
+
* their users have approved. Vertesia acting as a client of someone else's authorization server is
|
|
6
|
+
* `./oauth.js`.
|
|
7
|
+
*
|
|
8
|
+
* Only the three resources backed by the studio API have slots here. The token server's own surface
|
|
9
|
+
* — authorize, token, device code, consent — is still TypeScript-derived and has not been converted,
|
|
10
|
+
* so the types it uses stay declared in `../oauth-server.ts` rather than moving here.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export const OAuthClientTypeSchema = z.enum(['public', 'confidential']).meta({ id: 'OAuthClientType' });
|
|
14
|
+
|
|
15
|
+
export const OAuthClientStatusSchema = z.enum(['active', 'disabled']).meta({ id: 'OAuthClientStatus' });
|
|
16
|
+
|
|
17
|
+
export const OAuthRegistrationSourceSchema = z.enum(['admin', 'dynamic']).meta({ id: 'OAuthRegistrationSource' });
|
|
18
|
+
|
|
19
|
+
export const OAuthProjectBindingModeSchema = z.enum(['user_select', 'fixed']).meta({ id: 'OAuthProjectBindingMode' });
|
|
20
|
+
|
|
21
|
+
export const OAuthTokenEndpointAuthMethodSchema = z
|
|
22
|
+
.enum(['none', 'client_secret_post', 'client_secret_basic'])
|
|
23
|
+
.meta({ id: 'OAuthTokenEndpointAuthMethod' });
|
|
24
|
+
|
|
25
|
+
export const OAuthGrantTypeSchema = z
|
|
26
|
+
.enum(['authorization_code', 'refresh_token', 'urn:ietf:params:oauth:grant-type:device_code'])
|
|
27
|
+
.meta({ id: 'OAuthGrantType' });
|
|
28
|
+
|
|
29
|
+
export const OAuthResponseTypeSchema = z.literal('code').meta({ id: 'OAuthResponseType' });
|
|
30
|
+
|
|
31
|
+
export const OAuthGrantStatusSchema = z.enum(['active', 'revoked', 'expired']).meta({ id: 'OAuthGrantStatus' });
|
|
32
|
+
|
|
33
|
+
export const OAuthGrantSortFieldSchema = z
|
|
34
|
+
.enum(['granted_at', 'client_name', 'user_name', 'resource', 'last_used_at', 'expires_at', 'status'])
|
|
35
|
+
.meta({ id: 'OAuthGrantSortField' });
|
|
36
|
+
|
|
37
|
+
export const OAuthGrantSortOrderSchema = z.enum(['asc', 'desc']).meta({ id: 'OAuthGrantSortOrder' });
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A client's registration, without its issued id.
|
|
41
|
+
*
|
|
42
|
+
* Split from {@link OAuthClientSchema} because `OAuthClient extends OAuthClientData` in the published
|
|
43
|
+
* types and both names are exported. No `id` in its meta, so it is never a component: the document
|
|
44
|
+
* publishes these properties inline under `OAuthClient`, with `client_id` last.
|
|
45
|
+
*/
|
|
46
|
+
export const OAuthClientDataSchema = z.strictObject({
|
|
47
|
+
client_name: z.string(),
|
|
48
|
+
client_type: OAuthClientTypeSchema,
|
|
49
|
+
redirect_uris: z.array(z.string()),
|
|
50
|
+
grant_types: z.array(OAuthGrantTypeSchema),
|
|
51
|
+
response_types: z.array(OAuthResponseTypeSchema),
|
|
52
|
+
token_endpoint_auth_method: OAuthTokenEndpointAuthMethodSchema,
|
|
53
|
+
allowed_scopes: z.array(z.string()),
|
|
54
|
+
default_scopes: z.array(z.string()).optional(),
|
|
55
|
+
registration_source: OAuthRegistrationSourceSchema,
|
|
56
|
+
status: OAuthClientStatusSchema,
|
|
57
|
+
project_binding_mode: OAuthProjectBindingModeSchema,
|
|
58
|
+
fixed_project_id: z.string().optional(),
|
|
59
|
+
restrict_to_owner_account: z
|
|
60
|
+
.boolean()
|
|
61
|
+
.meta({
|
|
62
|
+
description:
|
|
63
|
+
'When true (the default for new clients), the client may only be authorized for projects in its owning account/organization. Set to false to allow authorization for any project the approving user can access, regardless of account — required for OAuth/MCP clients used across organizations. The owning account itself is internal and not exposed here.',
|
|
64
|
+
})
|
|
65
|
+
.optional(),
|
|
66
|
+
metadata: z.looseObject({}).optional(),
|
|
67
|
+
created_by: z.string().optional(),
|
|
68
|
+
client_secret_configured: z.boolean().optional(),
|
|
69
|
+
created_at: z.string(),
|
|
70
|
+
updated_at: z.string(),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export const OAuthClientSchema = OAuthClientDataSchema.extend({
|
|
74
|
+
client_id: z.string(),
|
|
75
|
+
}).meta({ id: 'OAuthClient' });
|
|
76
|
+
|
|
77
|
+
export const OAuthClientArraySchema = z.array(OAuthClientSchema).meta({ id: 'OAuthClientArray' });
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The create response, which is the read shape plus the one field that is never readable again.
|
|
81
|
+
*
|
|
82
|
+
* `client_secret` is returned exactly once, by the call that generates it; every later read of the
|
|
83
|
+
* same client publishes `client_secret_configured` instead. Two components rather than one optional
|
|
84
|
+
* field on `OAuthClient` is what keeps that one-time disclosure visible in the document.
|
|
85
|
+
*/
|
|
86
|
+
export const OAuthClientCreateResponseSchema = OAuthClientSchema.extend({
|
|
87
|
+
client_secret: z.string().optional(),
|
|
88
|
+
}).meta({ id: 'OAuthClientCreateResponse' });
|
|
89
|
+
|
|
90
|
+
export const OAuthClientScopeMetadataSchema = z
|
|
91
|
+
.strictObject({
|
|
92
|
+
supported_scopes: z.array(z.string()),
|
|
93
|
+
})
|
|
94
|
+
.meta({ id: 'OAuthClientScopeMetadata' });
|
|
95
|
+
|
|
96
|
+
export const CreateOAuthClientPayloadSchema = z
|
|
97
|
+
.strictObject({
|
|
98
|
+
client_name: z.string(),
|
|
99
|
+
client_type: OAuthClientTypeSchema.optional(),
|
|
100
|
+
redirect_uris: z.array(z.string()),
|
|
101
|
+
grant_types: z.array(OAuthGrantTypeSchema).optional(),
|
|
102
|
+
response_types: z.array(OAuthResponseTypeSchema).optional(),
|
|
103
|
+
token_endpoint_auth_method: OAuthTokenEndpointAuthMethodSchema.optional(),
|
|
104
|
+
allowed_scopes: z.array(z.string()).optional(),
|
|
105
|
+
default_scopes: z.array(z.string()).optional(),
|
|
106
|
+
project_binding_mode: OAuthProjectBindingModeSchema.optional(),
|
|
107
|
+
fixed_project_id: z.string().optional(),
|
|
108
|
+
restrict_to_owner_account: z.boolean().optional(),
|
|
109
|
+
client_secret: z.string().optional(),
|
|
110
|
+
metadata: z.looseObject({}).optional(),
|
|
111
|
+
})
|
|
112
|
+
.meta({ id: 'CreateOAuthClientPayload' });
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Not `.partial()` of the create payload, and the difference is deliberate rather than an oversight
|
|
116
|
+
* to tidy up: an update accepts `status`, which a create does not (a new client is always `active`),
|
|
117
|
+
* and cannot accept `client_type`, which is fixed at registration because the auth method and secret
|
|
118
|
+
* are decided from it. Deriving one from the other would publish both of those wrong.
|
|
119
|
+
*/
|
|
120
|
+
export const UpdateOAuthClientPayloadSchema = z
|
|
121
|
+
.strictObject({
|
|
122
|
+
client_name: z.string().optional(),
|
|
123
|
+
redirect_uris: z.array(z.string()).optional(),
|
|
124
|
+
grant_types: z.array(OAuthGrantTypeSchema).optional(),
|
|
125
|
+
response_types: z.array(OAuthResponseTypeSchema).optional(),
|
|
126
|
+
token_endpoint_auth_method: OAuthTokenEndpointAuthMethodSchema.optional(),
|
|
127
|
+
allowed_scopes: z.array(z.string()).optional(),
|
|
128
|
+
default_scopes: z.array(z.string()).optional(),
|
|
129
|
+
status: OAuthClientStatusSchema.optional(),
|
|
130
|
+
project_binding_mode: OAuthProjectBindingModeSchema.optional(),
|
|
131
|
+
fixed_project_id: z.string().optional(),
|
|
132
|
+
restrict_to_owner_account: z.boolean().optional(),
|
|
133
|
+
client_secret: z.string().optional(),
|
|
134
|
+
metadata: z.looseObject({}).optional(),
|
|
135
|
+
})
|
|
136
|
+
.meta({ id: 'UpdateOAuthClientPayload' });
|
|
137
|
+
|
|
138
|
+
export const OAuthGrantSchema = z
|
|
139
|
+
.strictObject({
|
|
140
|
+
grant_id: z.string(),
|
|
141
|
+
client_id: z.string(),
|
|
142
|
+
client_name: z.string(),
|
|
143
|
+
user_id: z.string(),
|
|
144
|
+
user_name: z.string().optional(),
|
|
145
|
+
user_email: z.string().optional(),
|
|
146
|
+
account_id: z.string(),
|
|
147
|
+
project_id: z.string(),
|
|
148
|
+
resource: z.string(),
|
|
149
|
+
scope: z.array(z.string()),
|
|
150
|
+
status: OAuthGrantStatusSchema,
|
|
151
|
+
token_count: z.number(),
|
|
152
|
+
granted_at: z.string(),
|
|
153
|
+
created_at: z.string(),
|
|
154
|
+
last_used_at: z.string().optional(),
|
|
155
|
+
expires_at: z.string().optional(),
|
|
156
|
+
})
|
|
157
|
+
.meta({ id: 'OAuthGrant' });
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* What `?status=` accepts: every {@link OAuthGrantStatusSchema} member, plus `all` for "do not filter".
|
|
161
|
+
*
|
|
162
|
+
* Written out rather than composed from the status enum, because the two are published differently
|
|
163
|
+
* and have to be: a query parameter is expanded inline, so a union would reach the document as an
|
|
164
|
+
* `anyOf` of a `$ref` and a `const` — a shape no generator turns into a usable enum, and one this
|
|
165
|
+
* parameter has never had. `oauth-grant-status-filter.test.ts` pins the members to the status enum
|
|
166
|
+
* plus the sentinel so the two cannot drift apart silently.
|
|
167
|
+
*/
|
|
168
|
+
const OAuthGrantStatusFilterSchema = z.enum(['active', 'revoked', 'expired', 'all']);
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The listing filters, shared with the bulk revoke body because `BulkRevokeOAuthGrantsPayload
|
|
172
|
+
* extends ListOAuthGrantsQuery` — selecting grants to revoke is selecting grants to list, and two
|
|
173
|
+
* copies of ten filters would be two chances for the selection to mean something different from the
|
|
174
|
+
* preview the caller looked at.
|
|
175
|
+
*/
|
|
176
|
+
const oauthGrantFilterFields = {
|
|
177
|
+
account_id: z.string().optional(),
|
|
178
|
+
project_id: z.string().optional(),
|
|
179
|
+
user_id: z.string().optional(),
|
|
180
|
+
client_id: z.string().optional(),
|
|
181
|
+
resource: z.string().optional(),
|
|
182
|
+
status: OAuthGrantStatusFilterSchema.optional(),
|
|
183
|
+
limit: z.number().optional(),
|
|
184
|
+
offset: z.number().optional(),
|
|
185
|
+
sort_by: OAuthGrantSortFieldSchema.optional(),
|
|
186
|
+
sort_order: OAuthGrantSortOrderSchema.optional(),
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export const ListOAuthGrantsQuerySchema = z.strictObject(oauthGrantFilterFields).meta({ id: 'ListOAuthGrantsQuery' });
|
|
190
|
+
|
|
191
|
+
export const RevokeOAuthGrantQuerySchema = z
|
|
192
|
+
.strictObject({
|
|
193
|
+
include_consent: z.boolean().optional(),
|
|
194
|
+
})
|
|
195
|
+
.meta({ id: 'RevokeOAuthGrantQuery' });
|
|
196
|
+
|
|
197
|
+
export const BulkRevokeOAuthGrantsPayloadSchema = z
|
|
198
|
+
.strictObject({
|
|
199
|
+
...oauthGrantFilterFields,
|
|
200
|
+
grant_ids: z.array(z.string()).optional(),
|
|
201
|
+
include_consent: z.boolean().optional(),
|
|
202
|
+
})
|
|
203
|
+
.meta({ id: 'BulkRevokeOAuthGrantsPayload' });
|
|
204
|
+
|
|
205
|
+
export const OAuthGrantListResponseSchema = z
|
|
206
|
+
.strictObject({
|
|
207
|
+
grants: z.array(OAuthGrantSchema),
|
|
208
|
+
total_count: z.number(),
|
|
209
|
+
limit: z.number(),
|
|
210
|
+
offset: z.number(),
|
|
211
|
+
})
|
|
212
|
+
.meta({ id: 'OAuthGrantListResponse' });
|
|
213
|
+
|
|
214
|
+
export const OAuthGrantRevokeResponseSchema = z
|
|
215
|
+
.strictObject({
|
|
216
|
+
revoked_tokens: z.number(),
|
|
217
|
+
revoked_consents: z.number(),
|
|
218
|
+
})
|
|
219
|
+
.meta({ id: 'OAuthGrantRevokeResponse' });
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { OAuthGrantStatusSchema } from './oauth-server.js';
|
|
3
|
+
import { ApiSchemaComponents, validateApiRequest, validateApiResponse } from './registry.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The OAuth contracts, pinned where converting them changed what the document says or where the
|
|
7
|
+
* conversion had a choice to make.
|
|
8
|
+
*
|
|
9
|
+
* The provider/client/grant closure is 31 components and almost all of it re-emits byte-identically;
|
|
10
|
+
* what is asserted here is the handful of places it does not, plus the request/response secret split
|
|
11
|
+
* that is the reason these components are shaped the way they are.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
describe('the OAuth grant status filter', () => {
|
|
15
|
+
/**
|
|
16
|
+
* `?status=` takes the grant statuses plus `all`, and the query schema spells all four out rather
|
|
17
|
+
* than composing them, because a union would reach the document as an `anyOf` of a `$ref` and a
|
|
18
|
+
* `const` once the parameter is expanded. That leaves two lists that have to agree, so this is
|
|
19
|
+
* the assertion that they do: adding a fourth grant status without adding it to the filter would
|
|
20
|
+
* publish a status the caller cannot filter for.
|
|
21
|
+
*/
|
|
22
|
+
it('offers every grant status, plus the all sentinel', () => {
|
|
23
|
+
expect(statusEnumOf('ListOAuthGrantsQuery')).toEqual([...OAuthGrantStatusSchema.options, 'all']);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('is the same list on the bulk revoke body as on the listing query', () => {
|
|
27
|
+
// Revoking in bulk selects grants exactly the way listing them does — a filter that meant
|
|
28
|
+
// something different from the preview the caller looked at is the failure mode here.
|
|
29
|
+
expect(statusEnumOf('BulkRevokeOAuthGrantsPayload')).toEqual(statusEnumOf('ListOAuthGrantsQuery'));
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('rejects a status that is neither, rather than listing everything', () => {
|
|
33
|
+
expect(validateApiRequest('BulkRevokeOAuthGrantsPayload', { status: 'pending' }).valid).toBe(false);
|
|
34
|
+
expect(validateApiRequest('BulkRevokeOAuthGrantsPayload', { status: 'all' }).valid).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe('the OAuth provider secret boundary', () => {
|
|
39
|
+
it('accepts a client secret on create', () => {
|
|
40
|
+
expect(
|
|
41
|
+
validateApiRequest('CreateOAuthProviderPayload', {
|
|
42
|
+
name: 'acme',
|
|
43
|
+
display_name: 'Acme',
|
|
44
|
+
client_id: 'client-123',
|
|
45
|
+
client_secret: 'shhh',
|
|
46
|
+
}),
|
|
47
|
+
).toMatchObject({ valid: true });
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('refuses to publish one on the way back out', () => {
|
|
51
|
+
// The read shape says whether a secret exists and nothing more. `additionalProperties: false`
|
|
52
|
+
// is what turns a mapper that spread the document into a failed response instead of a leak.
|
|
53
|
+
const response = {
|
|
54
|
+
id: '68b1779130afe5403a1589ba',
|
|
55
|
+
name: 'acme',
|
|
56
|
+
display_name: 'Acme',
|
|
57
|
+
project: '69d4762f24d3048c99149d0b',
|
|
58
|
+
client_id: 'client-123',
|
|
59
|
+
has_client_secret: true,
|
|
60
|
+
use_pkce: true,
|
|
61
|
+
created_at: '2026-01-01T00:00:00.000Z',
|
|
62
|
+
updated_at: '2026-01-01T00:00:00.000Z',
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
expect(validateApiResponse('OAuthProvider', response)).toMatchObject({ valid: true });
|
|
66
|
+
expect(validateApiResponse('OAuthProvider', { ...response, client_secret: 'shhh' }).valid).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('publishes the client secret on the create response only', () => {
|
|
70
|
+
// The one call that generates it returns it once; every later read of the same client gets
|
|
71
|
+
// `client_secret_configured`. Two components rather than one optional field is what keeps
|
|
72
|
+
// that visible in the document.
|
|
73
|
+
const client = {
|
|
74
|
+
client_id: 'vts_abc',
|
|
75
|
+
client_name: 'Acme CLI',
|
|
76
|
+
client_type: 'public',
|
|
77
|
+
redirect_uris: ['https://acme.example/callback'],
|
|
78
|
+
grant_types: ['authorization_code'],
|
|
79
|
+
response_types: ['code'],
|
|
80
|
+
token_endpoint_auth_method: 'none',
|
|
81
|
+
allowed_scopes: ['openid'],
|
|
82
|
+
registration_source: 'admin',
|
|
83
|
+
status: 'active',
|
|
84
|
+
project_binding_mode: 'user_select',
|
|
85
|
+
created_at: '2026-01-01T00:00:00.000Z',
|
|
86
|
+
updated_at: '2026-01-01T00:00:00.000Z',
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
expect(validateApiResponse('OAuthClientCreateResponse', { ...client, client_secret: 'vss_x' })).toMatchObject({
|
|
90
|
+
valid: true,
|
|
91
|
+
});
|
|
92
|
+
expect(validateApiResponse('OAuthClient', { ...client, client_secret: 'vss_x' }).valid).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe('UpdateOAuthProviderPayload', () => {
|
|
97
|
+
it('accepts an empty body and a single-field body, and still rejects a typo', () => {
|
|
98
|
+
expect(validateApiRequest('UpdateOAuthProviderPayload', {}).valid).toBe(true);
|
|
99
|
+
expect(validateApiRequest('UpdateOAuthProviderPayload', { display_name: 'Acme' }).valid).toBe(true);
|
|
100
|
+
expect(validateApiRequest('UpdateOAuthProviderPayload', { displayName: 'Acme' }).valid).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A component's `status` enum, as the registry emits it.
|
|
106
|
+
*
|
|
107
|
+
* Read off the component rather than off a generated document: generating one needs the scanner,
|
|
108
|
+
* which is a package this one does not depend on. The expansion of a query component into parameters
|
|
109
|
+
* inlines exactly this, and has its own tests in `parameters.test.ts`.
|
|
110
|
+
*/
|
|
111
|
+
function statusEnumOf(component: 'ListOAuthGrantsQuery' | 'BulkRevokeOAuthGrantsPayload'): string[] {
|
|
112
|
+
const emitted = ApiSchemaComponents[component] as { properties?: Record<string, { enum?: unknown }> } | undefined;
|
|
113
|
+
const status = emitted?.properties?.status;
|
|
114
|
+
if (!Array.isArray(status?.enum)) {
|
|
115
|
+
throw new Error(`${component} does not publish status as an inline enum`);
|
|
116
|
+
}
|
|
117
|
+
return status.enum as string[];
|
|
118
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The OAuth *provider* contracts: Vertesia acting as an OAuth CLIENT against a third-party
|
|
5
|
+
* authorization server.
|
|
6
|
+
*
|
|
7
|
+
* The other direction — clients registered against Vertesia's own OAuth server, and the grants they
|
|
8
|
+
* hold — is `./oauth-server.js`. The split mirrors the one the TypeScript declarations already had,
|
|
9
|
+
* so each schema sits in the module its type came from and the canonical-alias map stays readable.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The success acknowledgement four provider endpoints and the client delete return.
|
|
14
|
+
*
|
|
15
|
+
* Here rather than in a module of its own because these five slots are its only callers, which is
|
|
16
|
+
* the same reason `DeleteOperationResult` lives in `./apikey.js`. `common.ts` aliases the type so
|
|
17
|
+
* `SuccessResponse` keeps being imported from where it always was.
|
|
18
|
+
*
|
|
19
|
+
* `z.boolean()`, not `z.literal(true)`, and that is what the document has always published: the
|
|
20
|
+
* scanner widened the declared `success: true` to `type: boolean` on the way out. Publishing the
|
|
21
|
+
* literal would newly forbid `{ success: false }` for every existing client, while the handlers
|
|
22
|
+
* return `true` either way.
|
|
23
|
+
*/
|
|
24
|
+
export const SuccessResponseSchema = z
|
|
25
|
+
.strictObject({
|
|
26
|
+
success: z.boolean(),
|
|
27
|
+
})
|
|
28
|
+
.meta({ id: 'SuccessResponse' });
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A provider's stored configuration, without its id.
|
|
32
|
+
*
|
|
33
|
+
* Split from {@link OAuthProviderSchema} because `OAuthProvider extends OAuthProviderData` in the
|
|
34
|
+
* published types and both names are exported from the package. It carries no `id` in its meta, so
|
|
35
|
+
* it is never a component of its own: the document has only ever published `OAuthProvider`, with
|
|
36
|
+
* these properties inline and `id` last.
|
|
37
|
+
*/
|
|
38
|
+
export const OAuthProviderDataSchema = z.strictObject({
|
|
39
|
+
name: z.string().meta({ description: 'Unique name within the project (kebab-case identifier).' }),
|
|
40
|
+
display_name: z.string().meta({ description: 'Human-readable display name.' }),
|
|
41
|
+
project: z.string().meta({ description: 'The project this OAuth provider belongs to.' }),
|
|
42
|
+
grant_type: z
|
|
43
|
+
.enum(['authorization_code', 'client_credentials'])
|
|
44
|
+
.meta({
|
|
45
|
+
description:
|
|
46
|
+
"The OAuth 2.0 grant type to use.\n- 'authorization_code': 3-legged flow requiring user authorization (default).\n- 'client_credentials': 2-legged server-to-server flow using client_id + client_secret.",
|
|
47
|
+
})
|
|
48
|
+
.optional(),
|
|
49
|
+
authorization_endpoint: z
|
|
50
|
+
.string()
|
|
51
|
+
.meta({
|
|
52
|
+
description:
|
|
53
|
+
'The OAuth 2.0 authorization endpoint URL. Only used for authorization_code flow. Optional when endpoints are discovered via .well-known (e.g. MCP servers).',
|
|
54
|
+
})
|
|
55
|
+
.optional(),
|
|
56
|
+
token_endpoint: z
|
|
57
|
+
.string()
|
|
58
|
+
.meta({
|
|
59
|
+
description:
|
|
60
|
+
'The OAuth 2.0 token endpoint URL. Optional when endpoints are discovered via .well-known (e.g. MCP servers).',
|
|
61
|
+
})
|
|
62
|
+
.optional(),
|
|
63
|
+
client_id: z.string().meta({ description: 'The OAuth client ID (always required).' }),
|
|
64
|
+
has_client_secret: z
|
|
65
|
+
.boolean()
|
|
66
|
+
.meta({ description: 'Whether a client_secret is configured (never exposes the actual secret).' })
|
|
67
|
+
.optional(),
|
|
68
|
+
default_scopes: z
|
|
69
|
+
.array(z.string())
|
|
70
|
+
.meta({ description: 'Default scopes to request during authorization.' })
|
|
71
|
+
.optional(),
|
|
72
|
+
use_pkce: z.boolean().meta({
|
|
73
|
+
description:
|
|
74
|
+
'Whether to use PKCE (Proof Key for Code Exchange) in the authorization flow. Only applies to authorization_code flow. Defaults to true.',
|
|
75
|
+
}),
|
|
76
|
+
revocation_endpoint: z.string().meta({ description: 'Optional OAuth 2.0 revocation endpoint URL.' }).optional(),
|
|
77
|
+
created_at: z.string(),
|
|
78
|
+
updated_at: z.string(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export const OAuthProviderSchema = OAuthProviderDataSchema.extend({
|
|
82
|
+
id: z.string(),
|
|
83
|
+
}).meta({ id: 'OAuthProvider', description: 'OAuth Provider as returned by the API (with id).' });
|
|
84
|
+
|
|
85
|
+
export const OAuthProviderArraySchema = z.array(OAuthProviderSchema).meta({ id: 'OAuthProviderArray' });
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* What a create accepts, which is deliberately not what a read returns.
|
|
89
|
+
*
|
|
90
|
+
* `client_secret` goes IN and never comes back out: the read shape carries `has_client_secret`
|
|
91
|
+
* instead. That request/response split is the rule for any component holding a credential, and
|
|
92
|
+
* keeping the two schemas separate is what makes it structural rather than a convention the next
|
|
93
|
+
* handler has to remember.
|
|
94
|
+
*/
|
|
95
|
+
export const CreateOAuthProviderPayloadSchema = z
|
|
96
|
+
.strictObject({
|
|
97
|
+
name: z.string(),
|
|
98
|
+
display_name: z.string(),
|
|
99
|
+
grant_type: z.enum(['authorization_code', 'client_credentials']).optional(),
|
|
100
|
+
authorization_endpoint: z.string().optional(),
|
|
101
|
+
token_endpoint: z.string().optional(),
|
|
102
|
+
client_id: z.string(),
|
|
103
|
+
client_secret: z
|
|
104
|
+
.string()
|
|
105
|
+
.meta({
|
|
106
|
+
description:
|
|
107
|
+
'Optional client secret for confidential clients. Will be encrypted at rest and never returned in API responses.',
|
|
108
|
+
})
|
|
109
|
+
.optional(),
|
|
110
|
+
default_scopes: z.array(z.string()).optional(),
|
|
111
|
+
use_pkce: z.boolean().optional(),
|
|
112
|
+
revocation_endpoint: z.string().optional(),
|
|
113
|
+
})
|
|
114
|
+
.meta({
|
|
115
|
+
id: 'CreateOAuthProviderPayload',
|
|
116
|
+
description:
|
|
117
|
+
'Payload for creating an OAuth Provider. The client_secret is accepted as plaintext on create and stored encrypted.',
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The update contract shares the create fields but makes each optional; the handler writes only the
|
|
122
|
+
* fields present in the request.
|
|
123
|
+
*/
|
|
124
|
+
export const UpdateOAuthProviderPayloadSchema = CreateOAuthProviderPayloadSchema.partial().meta({
|
|
125
|
+
id: 'UpdateOAuthProviderPayload',
|
|
126
|
+
description:
|
|
127
|
+
'Payload for updating an OAuth Provider. All fields are optional — only provided fields are updated. To clear the client_secret, set it to an empty string.',
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
export const OAuthProviderAuthStatusSchema = z
|
|
131
|
+
.strictObject({
|
|
132
|
+
oauth_provider_id: z.string(),
|
|
133
|
+
oauth_provider_name: z.string(),
|
|
134
|
+
authenticated: z.boolean(),
|
|
135
|
+
expires_at: z.string().optional(),
|
|
136
|
+
scope: z.string().optional(),
|
|
137
|
+
})
|
|
138
|
+
.meta({
|
|
139
|
+
id: 'OAuthProviderAuthStatus',
|
|
140
|
+
description: 'OAuth authentication status for a user against an OAuth Provider.',
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
export const OAuthProviderAuthorizeResponseSchema = z
|
|
144
|
+
.strictObject({
|
|
145
|
+
authorization_url: z.string().optional(),
|
|
146
|
+
state: z.string().optional(),
|
|
147
|
+
connected: z.boolean().optional(),
|
|
148
|
+
})
|
|
149
|
+
.meta({
|
|
150
|
+
id: 'OAuthProviderAuthorizeResponse',
|
|
151
|
+
description:
|
|
152
|
+
'Response from the OAuth authorize endpoint. For authorization_code flow: contains authorization_url and state for browser redirect. For client_credentials flow: contains connected=true (token was fetched server-side, no redirect needed).',
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
export const OAuthProviderAccessTokenResponseSchema = z
|
|
156
|
+
.strictObject({
|
|
157
|
+
access_token: z.string(),
|
|
158
|
+
})
|
|
159
|
+
.meta({ id: 'OAuthProviderAccessTokenResponse' });
|
|
160
|
+
|
|
161
|
+
export const OAuthProviderExchangePayloadSchema = z
|
|
162
|
+
.strictObject({
|
|
163
|
+
code: z.string(),
|
|
164
|
+
state: z.string(),
|
|
165
|
+
})
|
|
166
|
+
.meta({ id: 'OAuthProviderExchangePayload' });
|