@vertesia/common 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260804.124748Z
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/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 +3781 -0
- package/lib/api-schemas/agent-runs.d.ts.map +1 -0
- package/lib/api-schemas/agent-runs.js +991 -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 +1114 -0
- package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
- package/lib/api-schemas/app-lifecycle.js +750 -0
- package/lib/api-schemas/app-lifecycle.js.map +1 -0
- package/lib/api-schemas/app-runtime.d.ts +9056 -0
- package/lib/api-schemas/app-runtime.d.ts.map +1 -0
- package/lib/api-schemas/app-runtime.js +782 -0
- package/lib/api-schemas/app-runtime.js.map +1 -0
- package/lib/api-schemas/apps.d.ts +247 -0
- package/lib/api-schemas/apps.d.ts.map +1 -0
- package/lib/api-schemas/apps.js +366 -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 +3561 -0
- package/lib/api-schemas/content.d.ts.map +1 -0
- package/lib/api-schemas/content.js +842 -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 +4880 -0
- package/lib/api-schemas/events.d.ts.map +1 -0
- package/lib/api-schemas/events.js +832 -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 +22454 -0
- package/lib/api-schemas/interaction.d.ts.map +1 -0
- package/lib/api-schemas/interaction.js +2065 -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 +97458 -0
- package/lib/api-schemas/registry.d.ts.map +1 -0
- package/lib/api-schemas/registry.js +2586 -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 +156 -0
- package/lib/api-schemas/sts.d.ts.map +1 -0
- package/lib/api-schemas/sts.js +96 -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 +2209 -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 +116 -1121
- package/lib/apps.d.ts.map +1 -1
- 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 +17 -128
- 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 +19 -113
- 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 +7 -0
- package/lib/index.d.ts.map +1 -1
- 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 +116 -734
- package/lib/interaction.d.ts.map +1 -1
- package/lib/interaction.js +56 -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.d.ts +49 -462
- 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 +55 -503
- 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/secrets.d.ts +20 -105
- package/lib/secrets.d.ts.map +1 -1
- package/lib/store/agent-approval.d.ts +5 -14
- 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 +63 -342
- 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 +63 -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 +80 -0
- 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/store.d.ts +98 -693
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +4 -443
- 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 +56 -516
- package/lib/store/workflow.d.ts.map +1 -1
- package/lib/store/workflow.js +28 -11
- package/lib/store/workflow.js.map +1 -1
- package/lib/sts-token-types.d.ts +12 -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 +54 -155
- package/lib/user.d.ts.map +1 -1
- package/lib/user.js +1 -78
- package/lib/user.js.map +1 -1
- package/lib/versions.d.ts +24 -1
- package/lib/versions.d.ts.map +1 -1
- package/lib/versions.js +23 -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/views-schema.d.ts +4 -4
- package/lib/views.d.ts +56 -312
- package/lib/views.d.ts.map +1 -1
- package/lib/views.js.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/agent-resources.test.ts +100 -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 +1081 -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-lifecycle.ts +841 -0
- package/src/api-schemas/app-runtime.ts +919 -0
- package/src/api-schemas/apps.ts +415 -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 +939 -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 +921 -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.ts +2357 -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/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 +3487 -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 +450 -0
- package/src/api-schemas/store.ts +604 -0
- package/src/api-schemas/sts.contract.test.ts +80 -0
- package/src/api-schemas/sts.ts +110 -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.ts +249 -1179
- 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 -124
- package/src/facets.ts +4 -7
- package/src/group.ts +38 -42
- package/src/index.ts +11 -0
- package/src/integrations.ts +39 -129
- package/src/interaction-values.ts +23 -0
- package/src/interaction.ts +231 -841
- 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.ts +98 -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 +106 -434
- package/src/store/collections.ts +21 -63
- package/src/store/content-type-editing.test.ts +17 -0
- package/src/store/conversation-state.ts +78 -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 -1182
- package/src/store/task.ts +25 -59
- package/src/store/workflow.ts +103 -554
- package/src/sts-token-types.ts +24 -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 +74 -214
- package/src/versions.ts +24 -0
- package/src/views-schema.test.ts +9 -1
- package/src/views.ts +106 -329
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { type JsonObject, SchemaAdapterError, toOpenApiComponents } from './adapter.js';
|
|
3
|
+
|
|
4
|
+
describe('reference integrity', () => {
|
|
5
|
+
it('rejects a reference to a component that does not exist', () => {
|
|
6
|
+
// A dangling pointer produces a spec that validates structurally but breaks every
|
|
7
|
+
// generated client at deserialization time.
|
|
8
|
+
expect(() =>
|
|
9
|
+
toOpenApiComponents({
|
|
10
|
+
Account: { type: 'object', properties: { billing: { $ref: '#/$defs/Missing' } } },
|
|
11
|
+
}),
|
|
12
|
+
).toThrow(SchemaAdapterError);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('accepts a reference once its target is defined', () => {
|
|
16
|
+
const components = toOpenApiComponents({
|
|
17
|
+
Account: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: { billing: { $ref: '#/$defs/AccountBilling' } },
|
|
20
|
+
$defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
expect(Object.keys(components).sort()).toEqual(['Account', 'AccountBilling']);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('resolves a reference against an external component without republishing it', () => {
|
|
27
|
+
const components = toOpenApiComponents(
|
|
28
|
+
{
|
|
29
|
+
AppManifest: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: { settings_schema: { $ref: '#/components/schemas/JSONSchema' } },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{ referenceComponents: { JSONSchema: { type: 'object' } } },
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
expect(Object.keys(components)).toEqual(['AppManifest']);
|
|
38
|
+
expect((components.AppManifest.properties as JsonObject).settings_schema).toEqual({
|
|
39
|
+
$ref: '#/components/schemas/JSONSchema',
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe('additionalProperties policy', () => {
|
|
45
|
+
it('preserves a schema-valued additionalProperties on an open component', () => {
|
|
46
|
+
// Record<string, string> — deleting the keyword would widen the value type to `any`.
|
|
47
|
+
const components = toOpenApiComponents({
|
|
48
|
+
StringMap: { type: 'object', additionalProperties: { type: 'string' } },
|
|
49
|
+
});
|
|
50
|
+
expect(components.StringMap.additionalProperties).toEqual({ type: 'string' });
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('preserves additionalProperties:true on an open component', () => {
|
|
54
|
+
const components = toOpenApiComponents({
|
|
55
|
+
Freeform: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: true },
|
|
56
|
+
});
|
|
57
|
+
expect(components.Freeform.additionalProperties).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('removes only an inherited additionalProperties:false', () => {
|
|
61
|
+
const components = toOpenApiComponents({
|
|
62
|
+
Closed: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: false },
|
|
63
|
+
});
|
|
64
|
+
expect(components.Closed.additionalProperties).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* `{}` and `true` mean the same thing to a validator, and `propertyNames: {type: 'string'}`
|
|
70
|
+
* constrains nothing at all — but openapi-generator renders the two `additionalProperties` spellings
|
|
71
|
+
* as different Go types, so which one is published is a real decision rather than cosmetics.
|
|
72
|
+
*/
|
|
73
|
+
describe('open-map normalization', () => {
|
|
74
|
+
it('publishes a nested empty additionalProperties as true', () => {
|
|
75
|
+
const components = toOpenApiComponents({
|
|
76
|
+
Holder: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
properties: { map: { type: 'object', additionalProperties: {}, propertyNames: { type: 'string' } } },
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
const map = (components.Holder.properties as JsonObject).map as JsonObject;
|
|
82
|
+
expect(map.additionalProperties).toBe(true);
|
|
83
|
+
expect(map).not.toHaveProperty('propertyNames');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('still deletes an empty additionalProperties at a component root', () => {
|
|
87
|
+
const components = toOpenApiComponents({
|
|
88
|
+
Root: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: {} },
|
|
89
|
+
});
|
|
90
|
+
expect(components.Root.additionalProperties).toBeUndefined();
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('keeps a propertyNames that actually constrains the keys', () => {
|
|
94
|
+
const components = toOpenApiComponents({
|
|
95
|
+
Holder: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: { map: { type: 'object', propertyNames: { type: 'string', pattern: '^x-' } } },
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
const map = (components.Holder.properties as JsonObject).map as JsonObject;
|
|
101
|
+
expect(map.propertyNames).toEqual({ type: 'string', pattern: '^x-' });
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('leaves a typed additionalProperties alone', () => {
|
|
105
|
+
const components = toOpenApiComponents({
|
|
106
|
+
Holder: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: { map: { type: 'object', additionalProperties: { type: 'string' } } },
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
expect(((components.Holder.properties as JsonObject).map as JsonObject).additionalProperties).toEqual({
|
|
112
|
+
type: 'string',
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('normalizes inside unions and arrays, not just properties', () => {
|
|
117
|
+
const components = toOpenApiComponents({
|
|
118
|
+
Holder: {
|
|
119
|
+
type: 'object',
|
|
120
|
+
properties: {
|
|
121
|
+
choice: { anyOf: [{ type: 'object', additionalProperties: {} }, { type: 'string' }] },
|
|
122
|
+
list: { type: 'array', items: { type: 'object', additionalProperties: {} } },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
const properties = components.Holder.properties as Record<string, JsonObject>;
|
|
127
|
+
expect((properties.choice.anyOf as JsonObject[])[0].additionalProperties).toBe(true);
|
|
128
|
+
expect((properties.list.items as JsonObject).additionalProperties).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
describe('conflicting definitions', () => {
|
|
133
|
+
it('reports two $defs entries that disagree instead of keeping the first', () => {
|
|
134
|
+
expect(() =>
|
|
135
|
+
toOpenApiComponents({
|
|
136
|
+
A: {
|
|
137
|
+
type: 'object',
|
|
138
|
+
properties: { x: { $ref: '#/$defs/Shared' } },
|
|
139
|
+
$defs: { Shared: { type: 'object', properties: { v: { type: 'string' } } } },
|
|
140
|
+
},
|
|
141
|
+
B: {
|
|
142
|
+
type: 'object',
|
|
143
|
+
properties: { y: { $ref: '#/$defs/Shared' } },
|
|
144
|
+
$defs: { Shared: { type: 'object', properties: { v: { type: 'number' } } } },
|
|
145
|
+
},
|
|
146
|
+
}),
|
|
147
|
+
).toThrow(SchemaAdapterError);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('accepts two $defs entries that agree', () => {
|
|
151
|
+
const shared = { type: 'object', properties: { v: { type: 'string' } } };
|
|
152
|
+
const components = toOpenApiComponents({
|
|
153
|
+
A: { type: 'object', properties: { x: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
|
|
154
|
+
B: { type: 'object', properties: { y: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
|
|
155
|
+
});
|
|
156
|
+
expect(components.Shared).toEqual(shared);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
describe('$ref siblings', () => {
|
|
161
|
+
it('keeps sibling keywords alongside a rewritten reference', () => {
|
|
162
|
+
// 2020-12 allows annotations next to $ref; dropping them loses documentation and
|
|
163
|
+
// constraints that generated clients surface.
|
|
164
|
+
const components = toOpenApiComponents({
|
|
165
|
+
Account: {
|
|
166
|
+
type: 'object',
|
|
167
|
+
properties: {
|
|
168
|
+
billing: {
|
|
169
|
+
$ref: '#/$defs/AccountBilling',
|
|
170
|
+
description: 'Billing configuration',
|
|
171
|
+
deprecated: true,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
$defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
expect((components.Account.properties as JsonObject).billing).toEqual({
|
|
178
|
+
$ref: '#/components/schemas/AccountBilling',
|
|
179
|
+
description: 'Billing configuration',
|
|
180
|
+
deprecated: true,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
describe('reference scope', () => {
|
|
186
|
+
it('resolves a self-reference inside a nested $id to that nested component', () => {
|
|
187
|
+
// `{"$ref": "#"}` inside Child means Child, not the enclosing Account.
|
|
188
|
+
const components = toOpenApiComponents({
|
|
189
|
+
Account: {
|
|
190
|
+
type: 'object',
|
|
191
|
+
properties: {
|
|
192
|
+
child: {
|
|
193
|
+
$id: 'Child',
|
|
194
|
+
type: 'object',
|
|
195
|
+
properties: { next: { $ref: '#' } },
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
const child = components.Child.properties as JsonObject;
|
|
201
|
+
expect(child.next).toEqual({ $ref: '#/components/schemas/Child' });
|
|
202
|
+
expect(child.next).not.toEqual({ $ref: '#/components/schemas/Account' });
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('still resolves a root-level self-reference to the root', () => {
|
|
206
|
+
const components = toOpenApiComponents({
|
|
207
|
+
Node: { type: 'object', properties: { children: { type: 'array', items: { $ref: '#' } } } },
|
|
208
|
+
});
|
|
209
|
+
const props = components.Node.properties as JsonObject;
|
|
210
|
+
expect((props.children as JsonObject).items).toEqual({ $ref: '#/components/schemas/Node' });
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
describe('discriminator synthesis', () => {
|
|
215
|
+
it('does not synthesize a discriminator from an optional property', () => {
|
|
216
|
+
// OpenAPI treats the discriminator as always present; promoting an optional property
|
|
217
|
+
// would publish a guarantee the schema does not make.
|
|
218
|
+
const components = toOpenApiComponents({
|
|
219
|
+
Union: {
|
|
220
|
+
anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
|
|
221
|
+
$defs: {
|
|
222
|
+
A: { type: 'object', properties: { kind: { const: 'a' } } },
|
|
223
|
+
B: { type: 'object', properties: { kind: { const: 'b' } } },
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
expect(components.Union.discriminator).toBeUndefined();
|
|
228
|
+
expect(components.Union.anyOf).toBeDefined();
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('synthesizes a discriminator when the property is required in every branch', () => {
|
|
232
|
+
const components = toOpenApiComponents({
|
|
233
|
+
Union: {
|
|
234
|
+
anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
|
|
235
|
+
$defs: {
|
|
236
|
+
A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
|
|
237
|
+
B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
expect(components.Union.discriminator).toEqual({
|
|
242
|
+
propertyName: 'kind',
|
|
243
|
+
mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
|
|
244
|
+
});
|
|
245
|
+
// Promoted to oneOf, which is what codegen needs.
|
|
246
|
+
expect(components.Union.oneOf).toBeDefined();
|
|
247
|
+
expect(components.Union.anyOf).toBeUndefined();
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('does not synthesize when two branches claim the same literal', () => {
|
|
251
|
+
const components = toOpenApiComponents({
|
|
252
|
+
Union: {
|
|
253
|
+
anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
|
|
254
|
+
$defs: {
|
|
255
|
+
A: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
|
|
256
|
+
B: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
expect(components.Union.discriminator).toBeUndefined();
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('reads branches out of the reference components too', () => {
|
|
264
|
+
const components = toOpenApiComponents(
|
|
265
|
+
{ Union: { anyOf: [{ $ref: 'A' }, { $ref: 'B' }] } },
|
|
266
|
+
{
|
|
267
|
+
referenceComponents: {
|
|
268
|
+
A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
|
|
269
|
+
B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
);
|
|
273
|
+
expect(components.Union.discriminator).toEqual({
|
|
274
|
+
propertyName: 'kind',
|
|
275
|
+
mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('prefers a hoisted branch over a reference component of the same name', () => {
|
|
280
|
+
// A root that redefines an already-published name means the hoisted shape wins, so the
|
|
281
|
+
// literal that lands in the mapping has to be read off the hoisted copy.
|
|
282
|
+
const components = toOpenApiComponents(
|
|
283
|
+
{
|
|
284
|
+
Union: {
|
|
285
|
+
anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
|
|
286
|
+
$defs: {
|
|
287
|
+
A: { type: 'object', properties: { kind: { const: 'hoisted-a' } }, required: ['kind'] },
|
|
288
|
+
B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
{ referenceComponents: { A: { type: 'object', properties: { kind: { const: 'a' } } } } },
|
|
293
|
+
);
|
|
294
|
+
expect(components.Union.discriminator).toEqual({
|
|
295
|
+
propertyName: 'kind',
|
|
296
|
+
mapping: { 'hoisted-a': '#/components/schemas/A', b: '#/components/schemas/B' },
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
describe('strictness reaches anonymous nested objects', () => {
|
|
302
|
+
/**
|
|
303
|
+
* Strictness is declared per component, but an object nested inline in one has no name to declare.
|
|
304
|
+
* The TypeScript-derived generator closed every object it emitted, so the document already publishes
|
|
305
|
+
* those inline objects closed — `QuotaStandingResponse.admission` and `.llm` were the first two
|
|
306
|
+
* converted, and leaving them open would have loosened a published contract while reproducing it.
|
|
307
|
+
*/
|
|
308
|
+
const nested = {
|
|
309
|
+
Report: {
|
|
310
|
+
type: 'object',
|
|
311
|
+
properties: {
|
|
312
|
+
inline: { type: 'object', properties: { note: { type: 'string' } } },
|
|
313
|
+
deeper: {
|
|
314
|
+
type: 'array',
|
|
315
|
+
items: { type: 'object', properties: { value: { type: 'number' } } },
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
} as const;
|
|
320
|
+
|
|
321
|
+
it('closes an inline object inside a strict component', () => {
|
|
322
|
+
const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
|
|
323
|
+
const properties = components.Report.properties as Record<string, JsonObject>;
|
|
324
|
+
expect(components.Report.additionalProperties).toBe(false);
|
|
325
|
+
expect(properties.inline.additionalProperties).toBe(false);
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('closes an inline object nested under array items', () => {
|
|
329
|
+
const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
|
|
330
|
+
const properties = components.Report.properties as Record<string, JsonObject>;
|
|
331
|
+
expect((properties.deeper.items as JsonObject).additionalProperties).toBe(false);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it('leaves inline objects open in a component that is not strict', () => {
|
|
335
|
+
const components = toOpenApiComponents(nested);
|
|
336
|
+
const properties = components.Report.properties as Record<string, JsonObject>;
|
|
337
|
+
expect(components.Report.additionalProperties).toBeUndefined();
|
|
338
|
+
expect(properties.inline.additionalProperties).toBeUndefined();
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
it('never overwrites an existing additionalProperties', () => {
|
|
342
|
+
// `true` or a subschema is a deliberate statement about the extras — a Record<string, string>
|
|
343
|
+
// value type, say — so replacing it with `false` would reject data the schema explicitly allows.
|
|
344
|
+
const components = toOpenApiComponents(
|
|
345
|
+
{
|
|
346
|
+
Report: {
|
|
347
|
+
type: 'object',
|
|
348
|
+
properties: {
|
|
349
|
+
map: { type: 'object', additionalProperties: { type: 'string' } },
|
|
350
|
+
open: { type: 'object', additionalProperties: true },
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
{ strictComponents: new Set(['Report']) },
|
|
355
|
+
);
|
|
356
|
+
const properties = components.Report.properties as Record<string, JsonObject>;
|
|
357
|
+
expect(properties.map.additionalProperties).toEqual({ type: 'string' });
|
|
358
|
+
expect(properties.open.additionalProperties).toBe(true);
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
it('does not close a $ref node, which is governed by its own component', () => {
|
|
362
|
+
const components = toOpenApiComponents(
|
|
363
|
+
{
|
|
364
|
+
Report: {
|
|
365
|
+
type: 'object',
|
|
366
|
+
properties: { billing: { $ref: '#/$defs/Billing' } },
|
|
367
|
+
$defs: { Billing: { $id: 'Billing', type: 'object', properties: {} } },
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
{ strictComponents: new Set(['Report']) },
|
|
371
|
+
);
|
|
372
|
+
const properties = components.Report.properties as Record<string, JsonObject>;
|
|
373
|
+
expect(Object.keys(properties.billing)).toEqual(['$ref']);
|
|
374
|
+
// Billing was not listed, so it stays open.
|
|
375
|
+
expect(components.Billing.additionalProperties).toBeUndefined();
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
describe('description is emitted last', () => {
|
|
380
|
+
/**
|
|
381
|
+
* Key order carries no meaning to a consumer, but it decides byte-identity — which is how a
|
|
382
|
+
* conversion proves it reproduced the published contract rather than renegotiating it. The
|
|
383
|
+
* scanner's TypeScript-derived output puts `description` last, so matching it is what lets a
|
|
384
|
+
* converted component diff clean.
|
|
385
|
+
*/
|
|
386
|
+
it('puts description after a sibling $ref', () => {
|
|
387
|
+
const components = toOpenApiComponents({
|
|
388
|
+
Account: {
|
|
389
|
+
type: 'object',
|
|
390
|
+
properties: { tier: { description: 'The tier.', $ref: '#/$defs/Tier' } },
|
|
391
|
+
$defs: { Tier: { $id: 'Tier', type: 'string' } },
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
const properties = components.Account.properties as Record<string, JsonObject>;
|
|
395
|
+
expect(Object.keys(properties.tier)).toEqual(['$ref', 'description']);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('puts description after the additionalProperties the strict policy appends', () => {
|
|
399
|
+
const components = toOpenApiComponents(
|
|
400
|
+
{ Payload: { type: 'object', description: 'A payload.', properties: { a: { type: 'string' } } } },
|
|
401
|
+
{ strictComponents: new Set(['Payload']) },
|
|
402
|
+
);
|
|
403
|
+
// Declared as `type, description, properties`; the strict policy appends additionalProperties,
|
|
404
|
+
// and description then moves behind it.
|
|
405
|
+
expect(Object.keys(components.Payload)).toEqual(['type', 'properties', 'additionalProperties', 'description']);
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
it('does not reorder a property NAMED description', () => {
|
|
409
|
+
// The trap a generic "walk every object" pass falls into: `properties` keys are user data, and
|
|
410
|
+
// five published components have a property called `description`. Moving it would change the
|
|
411
|
+
// published property order.
|
|
412
|
+
const components = toOpenApiComponents({
|
|
413
|
+
Project: {
|
|
414
|
+
type: 'object',
|
|
415
|
+
properties: {
|
|
416
|
+
id: { type: 'string' },
|
|
417
|
+
description: { type: 'string' },
|
|
418
|
+
account: { type: 'string' },
|
|
419
|
+
},
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
expect(Object.keys(components.Project.properties as JsonObject)).toEqual(['id', 'description', 'account']);
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
it('leaves a description that is already last alone', () => {
|
|
426
|
+
const components = toOpenApiComponents({ Tier: { type: 'string', description: 'A tier.' } });
|
|
427
|
+
expect(Object.keys(components.Tier)).toEqual(['type', 'description']);
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
describe('hoisting a union and its members', () => {
|
|
432
|
+
/**
|
|
433
|
+
* A discriminated union's `discriminator` is SYNTHESIZED from its members, so the members have to
|
|
434
|
+
* be registered before the union that references them. `$defs` order is whatever Zod emitted, and
|
|
435
|
+
* the same union is routinely reachable from two roots — once where its members happen to come
|
|
436
|
+
* first and once where they do not. Hoisting in declaration order made those two emissions differ,
|
|
437
|
+
* and the adapter then reported a component "defined twice with different shapes" that nobody had
|
|
438
|
+
* defined twice. `EmbeddingsApiInput` was the first to hit it.
|
|
439
|
+
*/
|
|
440
|
+
const MEMBERS = {
|
|
441
|
+
Text: { $id: 'Text', type: 'object', properties: { kind: { const: 'text' } }, required: ['kind'] },
|
|
442
|
+
Image: { $id: 'Image', type: 'object', properties: { kind: { const: 'image' } }, required: ['kind'] },
|
|
443
|
+
};
|
|
444
|
+
const UNION = { $id: 'Input', anyOf: [{ $ref: '#/$defs/Text' }, { $ref: '#/$defs/Image' }] };
|
|
445
|
+
|
|
446
|
+
it('synthesizes the discriminator whichever order $defs lists them in', () => {
|
|
447
|
+
const unionFirst = toOpenApiComponents({
|
|
448
|
+
Request: {
|
|
449
|
+
type: 'object',
|
|
450
|
+
properties: { input: { $ref: '#/$defs/Input' } },
|
|
451
|
+
$defs: { Input: UNION, ...MEMBERS },
|
|
452
|
+
},
|
|
453
|
+
});
|
|
454
|
+
const membersFirst = toOpenApiComponents({
|
|
455
|
+
Request: {
|
|
456
|
+
type: 'object',
|
|
457
|
+
properties: { input: { $ref: '#/$defs/Input' } },
|
|
458
|
+
$defs: { ...MEMBERS, Input: UNION },
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
expect(unionFirst.Input).toEqual(membersFirst.Input);
|
|
463
|
+
expect(unionFirst.Input).toMatchObject({ discriminator: { propertyName: 'kind' }, required: ['kind'] });
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
it('emits the same union from a root that declares it and a root that references it', () => {
|
|
467
|
+
// The shape that actually threw: one root IS the union, another reaches it through a property.
|
|
468
|
+
// `register` compares fingerprints, so two spellings of the same component are a hard failure.
|
|
469
|
+
expect(() =>
|
|
470
|
+
toOpenApiComponents({
|
|
471
|
+
Request: {
|
|
472
|
+
type: 'object',
|
|
473
|
+
properties: { input: { $ref: '#/$defs/Input' } },
|
|
474
|
+
$defs: { Input: UNION, ...MEMBERS },
|
|
475
|
+
},
|
|
476
|
+
Input: { ...UNION, $defs: MEMBERS },
|
|
477
|
+
}),
|
|
478
|
+
).not.toThrow();
|
|
479
|
+
});
|
|
480
|
+
});
|