@wirebench/engine 2.2.1 → 3.1.0-rc.1
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/README.md +134 -1
- package/dist/account/schema.d.ts +34 -0
- package/dist/account/schema.js +29 -0
- package/dist/assert/callback.d.ts +76 -0
- package/dist/assert/callback.js +320 -0
- package/dist/assert/capture-source.d.ts +50 -0
- package/dist/assert/capture-source.js +89 -0
- package/dist/assert/check.d.ts +8 -0
- package/dist/assert/check.js +18 -0
- package/dist/assert/header.d.ts +5 -0
- package/dist/assert/header.js +48 -0
- package/dist/assert/index.d.ts +2 -2
- package/dist/assert/index.js +12 -0
- package/dist/assert/match.d.ts +6 -0
- package/dist/assert/match.js +13 -4
- package/dist/assert/model.d.ts +110 -3
- package/dist/assert/model.js +16 -1
- package/dist/assert/schema.d.ts +194 -1
- package/dist/assert/schema.js +154 -12
- package/dist/assert/status-names.d.ts +9 -0
- package/dist/assert/status-names.js +27 -0
- package/dist/assert/status.d.ts +4 -1
- package/dist/assert/status.js +27 -3
- package/dist/asyncapi/browser.d.ts +7 -0
- package/dist/asyncapi/browser.js +6 -0
- package/dist/asyncapi/frame-check-worker-host.d.ts +44 -0
- package/dist/asyncapi/frame-check-worker-host.js +175 -0
- package/dist/asyncapi/frame-check-worker.d.ts +12 -0
- package/dist/asyncapi/frame-check-worker.js +25 -0
- package/dist/asyncapi/frame-check.d.ts +25 -0
- package/dist/asyncapi/frame-check.js +78 -0
- package/dist/asyncapi/import.d.ts +25 -0
- package/dist/asyncapi/import.js +34 -0
- package/dist/asyncapi/map.d.ts +40 -0
- package/dist/asyncapi/map.js +230 -0
- package/dist/asyncapi/model.d.ts +84 -0
- package/dist/asyncapi/model.js +7 -0
- package/dist/asyncapi/normalise-2.d.ts +13 -0
- package/dist/asyncapi/normalise-2.js +113 -0
- package/dist/asyncapi/normalise-3.d.ts +14 -0
- package/dist/asyncapi/normalise-3.js +133 -0
- package/dist/asyncapi/parse.d.ts +31 -0
- package/dist/asyncapi/parse.js +85 -0
- package/dist/asyncapi/read.d.ts +35 -0
- package/dist/asyncapi/read.js +186 -0
- package/dist/asyncapi/security.d.ts +14 -0
- package/dist/asyncapi/security.js +55 -0
- package/dist/asyncapi/update.d.ts +53 -0
- package/dist/asyncapi/update.js +220 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +22 -0
- package/dist/grpc/events.d.ts +22 -0
- package/dist/grpc/events.js +1 -0
- package/dist/grpc/expand.d.ts +1 -1
- package/dist/grpc/expand.js +15 -5
- package/dist/grpc/files.d.ts +271 -0
- package/dist/grpc/files.js +62 -0
- package/dist/grpc/model.d.ts +11 -1
- package/dist/grpc/module.d.ts +2 -0
- package/dist/grpc/module.js +13 -0
- package/dist/grpc/run.d.ts +73 -0
- package/dist/grpc/run.js +407 -0
- package/dist/grpc/script-types.d.ts +8 -0
- package/dist/grpc/script-types.js +149 -0
- package/dist/grpc/scripting.d.ts +34 -0
- package/dist/grpc/scripting.js +147 -0
- package/dist/grpc/send-input.d.ts +46 -0
- package/dist/grpc/send-input.js +42 -0
- package/dist/grpc/send.d.ts +2 -2
- package/dist/grpc/status.d.ts +9 -2
- package/dist/grpc/status.js +11 -24
- package/dist/grpc/storage.d.ts +9 -0
- package/dist/grpc/storage.js +167 -0
- package/dist/{rest/auth.d.ts → http/auth/apply-auth.d.ts} +4 -4
- package/dist/{rest/auth.js → http/auth/apply-auth.js} +1 -1
- package/dist/http/auth/apply.d.ts +1 -1
- package/dist/{rest → http/auth}/oauth2.d.ts +2 -2
- package/dist/{rest → http/auth}/oauth2.js +1 -1
- package/dist/http/auth/send-auth.d.ts +57 -0
- package/dist/http/auth/send-auth.js +7 -0
- package/dist/http/client.js +150 -8
- package/dist/http/cookies.d.ts +79 -0
- package/dist/http/cookies.js +81 -0
- package/dist/http/curl.d.ts +4 -14
- package/dist/http/curl.js +4 -154
- package/dist/http/decompress.d.ts +7 -0
- package/dist/http/decompress.js +23 -1
- package/dist/http/document-fetch.d.ts +42 -0
- package/dist/http/document-fetch.js +207 -0
- package/dist/http/entries.d.ts +27 -0
- package/dist/http/entries.js +16 -0
- package/dist/http/escape.d.ts +18 -0
- package/dist/http/escape.js +30 -0
- package/dist/http/fetch-document.d.ts +28 -0
- package/dist/{wsdl/fetch.js → http/fetch-document.js} +8 -16
- package/dist/http/media-type.d.ts +9 -0
- package/dist/http/media-type.js +12 -0
- package/dist/http/transcript-cap.d.ts +26 -0
- package/dist/http/transcript-cap.js +36 -0
- package/dist/http/types.d.ts +59 -0
- package/dist/http/webhook-signature.d.ts +81 -0
- package/dist/http/webhook-signature.js +227 -0
- package/dist/import-detect.d.ts +2 -2
- package/dist/import-detect.js +10 -1
- package/dist/index.d.ts +207 -55
- package/dist/index.js +129 -32
- package/dist/json/cursor.d.ts +2 -0
- package/dist/json/cursor.js +1 -0
- package/dist/json/pointer-range.d.ts +18 -0
- package/dist/json/pointer-range.js +157 -0
- package/dist/json/schema/model.d.ts +59 -0
- package/dist/json/schema/model.js +8 -0
- package/dist/json/schema/parse-text.d.ts +16 -0
- package/dist/json/schema/parse-text.js +37 -0
- package/dist/{rest/openapi → json/schema}/refs.d.ts +2 -2
- package/dist/{rest/openapi → json/schema}/refs.js +3 -3
- package/dist/{rest/openapi → json/schema}/sample.d.ts +4 -0
- package/dist/{rest/openapi → json/schema}/sample.js +2 -2
- package/dist/json/schema/source.d.ts +21 -0
- package/dist/json/schema/source.js +8 -0
- package/dist/json/schema-validate.d.ts +49 -0
- package/dist/json/schema-validate.js +557 -0
- package/dist/{wss/keystore → keystore}/index.js +1 -1
- package/dist/{wss/keystore → keystore}/pem.js +1 -1
- package/dist/{wss/keystore → keystore}/pkcs12.js +1 -1
- package/dist/project/attachments-cache.d.ts +3 -1
- package/dist/{wsdl → project}/cache-naming.js +1 -1
- package/dist/project/endpoints.d.ts +18 -8
- package/dist/project/endpoints.js +21 -6
- package/dist/project/environments.d.ts +7 -5
- package/dist/project/history.d.ts +105 -9
- package/dist/project/history.js +195 -23
- package/dist/project/inherit.d.ts +7 -0
- package/dist/project/inherit.js +9 -0
- package/dist/project/keystores.d.ts +1 -1
- package/dist/project/load-helpers.d.ts +89 -0
- package/dist/project/load-helpers.js +177 -0
- package/dist/project/load.d.ts +30 -4
- package/dist/project/load.js +168 -545
- package/dist/project/managed-files.d.ts +36 -0
- package/dist/project/managed-files.js +97 -0
- package/dist/project/migrate.d.ts +2 -2
- package/dist/project/migrate.js +2 -2
- package/dist/project/model.d.ts +92 -14
- package/dist/project/model.js +50 -4
- package/dist/project/paths.d.ts +10 -1
- package/dist/project/paths.js +10 -1
- package/dist/project/preferences.d.ts +11 -2
- package/dist/project/preferences.js +5 -1
- package/dist/project/properties.d.ts +31 -17
- package/dist/project/properties.js +89 -70
- package/dist/project/request-location.d.ts +20 -0
- package/dist/project/request-location.js +62 -0
- package/dist/project/save.d.ts +12 -2
- package/dist/project/save.js +186 -141
- package/dist/project/schema-parts.d.ts +337 -0
- package/dist/project/schema-parts.js +248 -0
- package/dist/project/schema.d.ts +72 -928
- package/dist/project/schema.js +17 -466
- package/dist/project/sequence-guards.d.ts +43 -0
- package/dist/project/sequence-guards.js +109 -0
- package/dist/project/serialize-helpers.d.ts +60 -0
- package/dist/project/serialize-helpers.js +108 -0
- package/dist/project/serialize.d.ts +7 -8
- package/dist/project/serialize.js +34 -293
- package/dist/protocol/features.d.ts +51 -0
- package/dist/protocol/features.js +64 -0
- package/dist/protocol/index.d.ts +7 -0
- package/dist/protocol/index.js +4 -0
- package/dist/protocol/module.d.ts +247 -0
- package/dist/protocol/module.js +48 -0
- package/dist/protocol/registry.d.ts +42 -0
- package/dist/protocol/registry.js +47 -0
- package/dist/protocols.d.ts +77 -0
- package/dist/protocols.js +40 -0
- package/dist/redact/index.d.ts +12 -1
- package/dist/redact/index.js +55 -7
- package/dist/redact/literal.d.ts +10 -0
- package/dist/redact/literal.js +110 -12
- package/dist/rest/body.d.ts +2 -10
- package/dist/rest/body.js +3 -25
- package/dist/rest/browser.d.ts +4 -0
- package/dist/rest/browser.js +5 -0
- package/dist/rest/contract-check-worker-host.d.ts +36 -0
- package/dist/rest/contract-check-worker-host.js +158 -0
- package/dist/rest/contract-check-worker.d.ts +7 -0
- package/dist/rest/contract-check-worker.js +28 -0
- package/dist/rest/contract-check.d.ts +43 -0
- package/dist/rest/contract-check.js +217 -0
- package/dist/rest/cookie-jar.d.ts +62 -0
- package/dist/rest/cookie-jar.js +262 -0
- package/dist/rest/cookies.d.ts +6 -22
- package/dist/rest/cookies.js +6 -42
- package/dist/rest/curl.js +5 -1
- package/dist/rest/events.d.ts +12 -0
- package/dist/rest/events.js +1 -0
- package/dist/rest/expand.d.ts +6 -1
- package/dist/rest/expand.js +29 -11
- package/dist/rest/files.d.ts +439 -0
- package/dist/rest/files.js +107 -0
- package/dist/rest/json-form.d.ts +97 -0
- package/dist/rest/json-form.js +396 -0
- package/dist/rest/model.d.ts +35 -24
- package/dist/rest/model.js +6 -9
- package/dist/rest/module.d.ts +2 -0
- package/dist/rest/module.js +13 -0
- package/dist/rest/openapi/cache.d.ts +7 -2
- package/dist/rest/openapi/cache.js +2 -2
- package/dist/rest/openapi/import.d.ts +11 -16
- package/dist/rest/openapi/import.js +6 -2
- package/dist/rest/openapi/map.d.ts +38 -1
- package/dist/rest/openapi/map.js +151 -41
- package/dist/rest/openapi/match.d.ts +20 -0
- package/dist/rest/openapi/match.js +117 -0
- package/dist/rest/openapi/model.d.ts +33 -45
- package/dist/rest/openapi/parse.d.ts +3 -12
- package/dist/rest/openapi/parse.js +138 -67
- package/dist/rest/openapi/responses.d.ts +23 -0
- package/dist/rest/openapi/responses.js +59 -0
- package/dist/rest/openapi/runtime-expression.d.ts +69 -0
- package/dist/rest/openapi/runtime-expression.js +213 -0
- package/dist/rest/openapi/update.d.ts +116 -0
- package/dist/rest/openapi/update.js +456 -0
- package/dist/rest/postman/map.d.ts +1 -0
- package/dist/rest/postman/map.js +66 -4
- package/dist/rest/postman/model.d.ts +9 -0
- package/dist/rest/postman/parse.js +33 -10
- package/dist/rest/response.d.ts +2 -23
- package/dist/rest/response.js +3 -75
- package/dist/rest/run.d.ts +56 -0
- package/dist/rest/run.js +395 -0
- package/dist/rest/script-types.d.ts +7 -0
- package/dist/rest/script-types.js +83 -0
- package/dist/rest/scripting.d.ts +38 -0
- package/dist/rest/scripting.js +282 -0
- package/dist/rest/send-input.d.ts +54 -0
- package/dist/rest/send-input.js +73 -0
- package/dist/rest/send.d.ts +77 -4
- package/dist/rest/send.js +128 -7
- package/dist/rest/sse-transcript.d.ts +25 -0
- package/dist/rest/sse-transcript.js +95 -0
- package/dist/rest/sse.d.ts +43 -0
- package/dist/rest/sse.js +195 -0
- package/dist/rest/storage.d.ts +26 -0
- package/dist/rest/storage.js +262 -0
- package/dist/rest/url.d.ts +10 -4
- package/dist/rest/url.js +38 -5
- package/dist/run/baseline-update.d.ts +35 -0
- package/dist/run/baseline-update.js +97 -0
- package/dist/run/baseline.d.ts +42 -0
- package/dist/run/baseline.js +93 -0
- package/dist/run/context.d.ts +86 -0
- package/dist/run/context.js +31 -0
- package/dist/run/current-values.d.ts +32 -0
- package/dist/run/current-values.js +43 -0
- package/dist/run/event-queue.d.ts +14 -0
- package/dist/run/event-queue.js +46 -0
- package/dist/run/exchange.d.ts +62 -0
- package/dist/run/exchange.js +65 -0
- package/dist/run/host.d.ts +89 -0
- package/dist/run/host.js +1 -0
- package/dist/run/index.d.ts +20 -7
- package/dist/run/index.js +12 -4
- package/dist/run/oauth2-token.d.ts +42 -0
- package/dist/run/oauth2-token.js +92 -0
- package/dist/run/open.d.ts +12 -0
- package/dist/run/open.js +16 -0
- package/dist/run/run.d.ts +124 -4
- package/dist/run/run.js +293 -134
- package/dist/run/scope.d.ts +11 -0
- package/dist/run/scope.js +26 -0
- package/dist/run/script-support.d.ts +53 -0
- package/dist/run/script-support.js +68 -0
- package/dist/run/secret-needs.d.ts +11 -4
- package/dist/run/secret-needs.js +48 -96
- package/dist/run/select.d.ts +34 -25
- package/dist/run/select.js +45 -54
- package/dist/run/send-helpers.d.ts +93 -0
- package/dist/run/send-helpers.js +255 -0
- package/dist/run/tree.d.ts +50 -0
- package/dist/run/tree.js +54 -0
- package/dist/script/api/postman.d.ts +10 -0
- package/dist/script/api/postman.js +264 -0
- package/dist/script/api/prelude.d.ts +20 -0
- package/dist/script/api/prelude.js +215 -0
- package/dist/script/apply.d.ts +44 -0
- package/dist/script/apply.js +120 -0
- package/dist/script/check/host.d.ts +41 -0
- package/dist/script/check/host.js +143 -0
- package/dist/script/check/service.d.ts +52 -0
- package/dist/script/check/service.js +195 -0
- package/dist/script/check/worker.d.ts +1 -0
- package/dist/script/check/worker.js +40 -0
- package/dist/script/index.d.ts +16 -0
- package/dist/script/index.js +10 -0
- package/dist/script/lookup.d.ts +10 -0
- package/dist/script/lookup.js +23 -0
- package/dist/script/model.d.ts +82 -0
- package/dist/script/model.js +18 -0
- package/dist/script/props.d.ts +8 -0
- package/dist/script/props.js +28 -0
- package/dist/script/request-scripts.d.ts +83 -0
- package/dist/script/request-scripts.js +160 -0
- package/dist/script/run.d.ts +47 -0
- package/dist/script/run.js +146 -0
- package/dist/script/sandbox/execute.d.ts +26 -0
- package/dist/script/sandbox/execute.js +212 -0
- package/dist/script/sandbox/host-api.d.ts +27 -0
- package/dist/script/sandbox/host-api.js +101 -0
- package/dist/script/sandbox/host.d.ts +18 -0
- package/dist/script/sandbox/host.js +172 -0
- package/dist/script/sandbox/model.d.ts +69 -0
- package/dist/script/sandbox/model.js +24 -0
- package/dist/script/sandbox/worker.d.ts +1 -0
- package/dist/script/sandbox/worker.js +20 -0
- package/dist/script/send.d.ts +27 -0
- package/dist/script/send.js +76 -0
- package/dist/script/strip.d.ts +5 -0
- package/dist/script/strip.js +43 -0
- package/dist/script/types/api.d.ts +38 -0
- package/dist/script/types/api.js +113 -0
- package/dist/script/types/json-schema.d.ts +26 -0
- package/dist/script/types/json-schema.js +206 -0
- package/dist/secrets/env-names.d.ts +9 -1
- package/dist/secrets/env-names.js +17 -1
- package/dist/secrets/resolve.d.ts +44 -4
- package/dist/secrets/resolve.js +58 -1
- package/dist/secrets/scan/apply.d.ts +36 -0
- package/dist/secrets/scan/apply.js +194 -0
- package/dist/secrets/scan/rules.d.ts +32 -0
- package/dist/secrets/scan/rules.js +346 -0
- package/dist/secrets/scan/scan.d.ts +6 -0
- package/dist/secrets/scan/scan.js +57 -0
- package/dist/secrets/scan/walk.d.ts +70 -0
- package/dist/secrets/scan/walk.js +156 -0
- package/dist/secrets/secret-refs.d.ts +8 -0
- package/dist/secrets/secret-refs.js +25 -0
- package/dist/secrets/secret-token.d.ts +17 -0
- package/dist/secrets/secret-token.js +25 -0
- package/dist/sequence/file.d.ts +169 -0
- package/dist/sequence/file.js +237 -0
- package/dist/sequence/index.d.ts +7 -0
- package/dist/sequence/index.js +5 -0
- package/dist/sequence/load.d.ts +32 -0
- package/dist/sequence/load.js +56 -0
- package/dist/sequence/model.d.ts +115 -0
- package/dist/sequence/model.js +53 -0
- package/dist/sequence/run.d.ts +131 -0
- package/dist/sequence/run.js +191 -0
- package/dist/sequence/transfer.d.ts +24 -0
- package/dist/sequence/transfer.js +75 -0
- package/dist/server-api/audit.d.ts +455 -0
- package/dist/server-api/audit.js +186 -0
- package/dist/server-api/ci-tokens.d.ts +50 -0
- package/dist/server-api/ci-tokens.js +35 -0
- package/dist/server-api/hooks.d.ts +337 -0
- package/dist/server-api/hooks.js +152 -0
- package/dist/server-api/identity.d.ts +210 -0
- package/dist/server-api/identity.js +115 -0
- package/dist/server-api/licensing.d.ts +80 -0
- package/dist/server-api/licensing.js +53 -0
- package/dist/server-api/live.d.ts +132 -0
- package/dist/server-api/live.js +102 -0
- package/dist/server-api/meta.d.ts +31 -0
- package/dist/server-api/meta.js +21 -0
- package/dist/server-api/sync.d.ts +179 -0
- package/dist/server-api/sync.js +124 -0
- package/dist/server-api/teams.d.ts +306 -0
- package/dist/server-api/teams.js +113 -0
- package/dist/snapshot/diff.d.ts +30 -0
- package/dist/snapshot/diff.js +75 -0
- package/dist/snapshot/format.d.ts +17 -0
- package/dist/snapshot/format.js +40 -0
- package/dist/snapshot/golden-file.d.ts +45 -0
- package/dist/snapshot/golden-file.js +173 -0
- package/dist/snapshot/ignore.d.ts +14 -0
- package/dist/snapshot/ignore.js +79 -0
- package/dist/snapshot/index.d.ts +9 -0
- package/dist/snapshot/index.js +9 -0
- package/dist/snapshot/json-diff.d.ts +3 -0
- package/dist/snapshot/json-diff.js +93 -0
- package/dist/snapshot/xml-diff.d.ts +10 -0
- package/dist/snapshot/xml-diff.js +194 -0
- package/dist/soap/auth.d.ts +26 -0
- package/dist/soap/auth.js +54 -0
- package/dist/soap/curl.d.ts +20 -0
- package/dist/soap/curl.js +161 -0
- package/dist/soap/expand.d.ts +24 -0
- package/dist/soap/expand.js +95 -0
- package/dist/soap/files.d.ts +384 -0
- package/dist/soap/files.js +114 -0
- package/dist/soap/form-request.d.ts +13 -0
- package/dist/soap/form-request.js +2 -2
- package/dist/soap/generate.d.ts +12 -0
- package/dist/{generate.js → soap/generate.js} +4 -4
- package/dist/{import.d.ts → soap/import.d.ts} +4 -4
- package/dist/{import.js → soap/import.js} +13 -13
- package/dist/soap/json-operation.d.ts +35 -0
- package/dist/soap/json-operation.js +225 -0
- package/dist/soap/legacy-project/env-refs.d.ts +19 -0
- package/dist/soap/legacy-project/env-refs.js +105 -0
- package/dist/soap/legacy-project/map.d.ts +2 -2
- package/dist/soap/legacy-project/map.js +6 -0
- package/dist/soap/mime/multipart.d.ts +2 -2
- package/dist/soap/mime/multipart.js +2 -5
- package/dist/soap/mime/send-pipeline.d.ts +1 -1
- package/dist/soap/mime/send-pipeline.js +1 -1
- package/dist/soap/mime/types.d.ts +1 -3
- package/dist/soap/module.d.ts +2 -0
- package/dist/soap/module.js +13 -0
- package/dist/soap/namespace-scope.js +1 -1
- package/dist/soap/operations.d.ts +12 -0
- package/dist/{operations.js → soap/operations.js} +4 -4
- package/dist/soap/run.d.ts +70 -0
- package/dist/soap/run.js +549 -0
- package/dist/soap/script-types.d.ts +65 -0
- package/dist/soap/script-types.js +379 -0
- package/dist/soap/scripting.d.ts +45 -0
- package/dist/soap/scripting.js +221 -0
- package/dist/soap/send-input.d.ts +61 -0
- package/dist/{send-options.js → soap/send-input.js} +5 -109
- package/dist/{send.d.ts → soap/send.d.ts} +1 -1
- package/dist/{send.js → soap/send.js} +28 -12
- package/dist/soap/storage.d.ts +9 -0
- package/dist/soap/storage.js +237 -0
- package/dist/soap/transforms.d.ts +3 -12
- package/dist/soap/transforms.js +3 -14
- package/dist/{types.d.ts → soap/types.d.ts} +34 -84
- package/dist/sync/git-cli.d.ts +202 -0
- package/dist/sync/git-cli.js +684 -0
- package/dist/sync/three-way-merge.d.ts +41 -0
- package/dist/sync/three-way-merge.js +85 -0
- package/dist/sync/tree-paths.d.ts +34 -0
- package/dist/sync/tree-paths.js +131 -0
- package/dist/team-secrets/envelope.d.ts +10 -0
- package/dist/team-secrets/envelope.js +121 -0
- package/dist/team-secrets/errors.d.ts +26 -0
- package/dist/team-secrets/errors.js +27 -0
- package/dist/team-secrets/index.d.ts +14 -0
- package/dist/team-secrets/index.js +8 -0
- package/dist/team-secrets/keys.d.ts +52 -0
- package/dist/team-secrets/keys.js +158 -0
- package/dist/team-secrets/log.d.ts +48 -0
- package/dist/team-secrets/log.js +175 -0
- package/dist/team-secrets/resolve-conflict.d.ts +7 -0
- package/dist/team-secrets/resolve-conflict.js +14 -0
- package/dist/team-secrets/schema.d.ts +97 -0
- package/dist/team-secrets/schema.js +157 -0
- package/dist/team-secrets/sign.d.ts +24 -0
- package/dist/team-secrets/sign.js +71 -0
- package/dist/team-secrets/vault.d.ts +49 -0
- package/dist/team-secrets/vault.js +148 -0
- package/dist/validate/wsi/run-message.d.ts +2 -2
- package/dist/validate/wsi/run-message.js +1 -1
- package/dist/validate/wsi/run-wsdl.d.ts +2 -2
- package/dist/validate/wsi/run-wsdl.js +1 -1
- package/dist/validate/wsi/types.d.ts +1 -1
- package/dist/webhooks/model.d.ts +138 -0
- package/dist/webhooks/model.js +150 -0
- package/dist/workspace/commit-message.d.ts +1 -1
- package/dist/workspace/commit-message.js +6 -1
- package/dist/workspace/environments.d.ts +11 -4
- package/dist/workspace/environments.js +12 -0
- package/dist/workspace/index.d.ts +3 -3
- package/dist/workspace/index.js +2 -2
- package/dist/workspace/paths.d.ts +5 -2
- package/dist/workspace/paths.js +5 -2
- package/dist/workspace/schema.d.ts +7 -3
- package/dist/workspace/schema.js +24 -3
- package/dist/workspace/share.d.ts +30 -11
- package/dist/workspace/share.js +32 -6
- package/dist/ws/call.d.ts +1 -1
- package/dist/ws/call.js +2 -2
- package/dist/ws/connect.d.ts +60 -0
- package/dist/ws/connect.js +131 -0
- package/dist/ws/events.d.ts +17 -0
- package/dist/ws/events.js +1 -0
- package/dist/ws/expand.d.ts +1 -1
- package/dist/ws/expand.js +1 -1
- package/dist/ws/files.d.ts +284 -0
- package/dist/ws/files.js +71 -0
- package/dist/ws/history-entry.d.ts +44 -0
- package/dist/ws/history-entry.js +93 -0
- package/dist/ws/model.d.ts +44 -3
- package/dist/ws/model.js +3 -0
- package/dist/ws/module.d.ts +2 -0
- package/dist/ws/module.js +11 -0
- package/dist/ws/run.d.ts +63 -0
- package/dist/ws/run.js +470 -0
- package/dist/ws/session.d.ts +18 -0
- package/dist/ws/session.js +52 -25
- package/dist/ws/storage.d.ts +9 -0
- package/dist/ws/storage.js +176 -0
- package/dist/ws/transcript.d.ts +3 -4
- package/dist/ws/transcript.js +26 -17
- package/dist/ws/url.d.ts +1 -1
- package/dist/wsdl/cache.js +1 -1
- package/dist/wsdl/docs-generator.d.ts +3 -3
- package/dist/wsdl/docs-generator.js +1 -1
- package/dist/wsdl/export-definition.js +1 -1
- package/dist/wsdl/qname.d.ts +2 -5
- package/dist/wsdl/resolver.d.ts +4 -11
- package/dist/wsdl/resolver.js +3 -3
- package/dist/wsdl/update-definition.d.ts +5 -5
- package/dist/wsdl/update-definition.js +6 -6
- package/dist/wss/apply.js +1 -1
- package/dist/{project/wss-configs.d.ts → wss/configs.d.ts} +2 -2
- package/dist/{project/wss-configs.js → wss/configs.js} +2 -2
- package/dist/wss/incoming/decrypt.d.ts +1 -1
- package/dist/wss/incoming/index.js +1 -1
- package/dist/wss/incoming/verify.d.ts +1 -1
- package/dist/wss/incoming/verify.js +1 -1
- package/dist/wss/key-identifiers.js +1 -1
- package/dist/wss/model.d.ts +1 -1
- package/dist/wss/outgoing/encryption.d.ts +1 -1
- package/dist/wss/outgoing/signature.d.ts +1 -1
- package/dist/xml/decode.d.ts +15 -0
- package/dist/xml/decode.js +22 -0
- package/dist/xml/entitize.d.ts +17 -0
- package/dist/xml/entitize.js +19 -0
- package/dist/xml/index.d.ts +1 -1
- package/dist/xml/index.js +1 -1
- package/dist/xml/locate.d.ts +39 -0
- package/dist/xml/locate.js +117 -0
- package/dist/xml/qname.d.ts +12 -0
- package/dist/xml/qname.js +8 -0
- package/dist/xpath/evaluate-async.d.ts +19 -0
- package/dist/xpath/evaluate-async.js +31 -11
- package/dist/xpath/evaluate.d.ts +1 -1
- package/dist/xpath/namespaces.js +1 -1
- package/dist/xpath/worker.d.ts +11 -5
- package/dist/xpath/worker.js +24 -7
- package/dist/xsd/form-model.d.ts +19 -2
- package/dist/xsd/form-model.js +14 -2
- package/dist/xsd/json-bridge.d.ts +152 -0
- package/dist/xsd/json-bridge.js +1213 -0
- package/dist/xsd/locate.d.ts +2 -30
- package/dist/xsd/locate.js +1 -109
- package/dist/xsd/xml-scan.d.ts +2 -0
- package/dist/xsd/xml-scan.js +1 -1
- package/dist/xsd/xml-writer.d.ts +2 -0
- package/dist/xsd/xml-writer.js +4 -0
- package/package.json +12 -1
- package/dist/generate.d.ts +0 -12
- package/dist/operations.d.ts +0 -12
- package/dist/run/effective-auth.d.ts +0 -10
- package/dist/run/effective-auth.js +0 -19
- package/dist/run/prepare.d.ts +0 -43
- package/dist/run/prepare.js +0 -280
- package/dist/send-options.d.ts +0 -141
- package/dist/wsdl/fetch.d.ts +0 -13
- /package/dist/{soap → http}/charset.d.ts +0 -0
- /package/dist/{soap → http}/charset.js +0 -0
- /package/dist/{wsdl → http}/ref-policy.d.ts +0 -0
- /package/dist/{wsdl → http}/ref-policy.js +0 -0
- /package/dist/{wss/keystore → keystore}/certificate.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/certificate.js +0 -0
- /package/dist/{wss/keystore → keystore}/index.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/model.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/model.js +0 -0
- /package/dist/{wss/keystore → keystore}/pem.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/pkcs12.d.ts +0 -0
- /package/dist/{wsdl → project}/cache-naming.d.ts +0 -0
- /package/dist/{types.js → soap/types.js} +0 -0
- /package/dist/{soap → xml}/prefixes.d.ts +0 -0
- /package/dist/{soap → xml}/prefixes.js +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live-updates protocol (live-updates spec §3.1, §4): one WebSocket at `GET /api/v1/live`, one
|
|
3
|
+
* UTF-8 JSON text message per frame. The server's socket loop parses client messages with
|
|
4
|
+
* {@link liveClientMessageSchema} and the desktop's `LiveClient` parses server messages with
|
|
5
|
+
* {@link liveServerMessageSchema}, so a drift between the two fails typecheck.
|
|
6
|
+
*
|
|
7
|
+
* Plain zod only (ADR-0009). Tokens are on `DEVICE_TOKEN_PATTERN`, workspace ids on `TEAMS_ID_PATTERN`,
|
|
8
|
+
* user ids on `identityIdSchema` and heads on `SYNC_COMMIT_ID_PATTERN`. No message carries a role, an
|
|
9
|
+
* email or file content (§6):
|
|
10
|
+
* HTTP stays the source of truth, and a message only ever says "ask again".
|
|
11
|
+
*
|
|
12
|
+
* The server union is closed on purpose. `LiveClient` skips a `type` it does not know before it parses
|
|
13
|
+
* (§3.1, *Unknown types*), so a newer server can add a message without breaking an older app. zod's
|
|
14
|
+
* default strip drops unknown fields from a known message for the same reason.
|
|
15
|
+
*/
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import { DEVICE_TOKEN_PATTERN, identityIdSchema } from './identity.js';
|
|
18
|
+
import { syncCommitIdSchema } from './sync.js';
|
|
19
|
+
import { teamsIdSchema } from './teams.js';
|
|
20
|
+
/** §3.3's limits, shared so the desktop never sends what the server would refuse. */
|
|
21
|
+
export const LIVE_LIMITS = {
|
|
22
|
+
/** A client message's largest size (`maxPayload`); a larger one closes `1009`. Server messages are not capped. */
|
|
23
|
+
maxMessageBytes: 4096,
|
|
24
|
+
/** Across every socket of one device token; the next subscribe is `refused … live-too-many-subscriptions`. */
|
|
25
|
+
maxSubscriptionsPerSession: 200,
|
|
26
|
+
/** Authenticated sockets per user; the next one closes `4429`. */
|
|
27
|
+
maxSocketsPerUser: 32,
|
|
28
|
+
/** How long a socket may wait before its `auth` (then `4408`), and how long the desktop waits for `ready` or `pong`. */
|
|
29
|
+
authTimeoutMs: 10_000,
|
|
30
|
+
/** The server's protocol-ping interval, and the desktop's `ping` interval. */
|
|
31
|
+
heartbeatMs: 30_000,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The close codes of §3.1. `1000`–`1011` are the protocol's own. The `44xx` codes mirror the HTTP
|
|
35
|
+
* status each stands for. Only `4401` stops the desktop from reconnecting: it runs the token check
|
|
36
|
+
* instead.
|
|
37
|
+
*/
|
|
38
|
+
export const LIVE_CLOSE = {
|
|
39
|
+
/** The desktop closed it: no open workspace on that server, sign-out, or quit. */
|
|
40
|
+
normal: 1000,
|
|
41
|
+
/** The server is shutting down; the desktop reconnects with back-off. */
|
|
42
|
+
goingAway: 1001,
|
|
43
|
+
/** A client message over `LIVE_LIMITS.maxMessageBytes`. */
|
|
44
|
+
tooBig: 1009,
|
|
45
|
+
/** An unexpected server error on this socket. */
|
|
46
|
+
serverError: 1011,
|
|
47
|
+
/** A malformed or out-of-order message, or a binary frame. */
|
|
48
|
+
badMessage: 4400,
|
|
49
|
+
/** A bad token, an ended session, or the token's maximum age reached. */
|
|
50
|
+
unauthenticated: 4401,
|
|
51
|
+
/** No `auth` within `LIVE_LIMITS.authTimeoutMs`. */
|
|
52
|
+
authTimeout: 4408,
|
|
53
|
+
/** The user already has `LIVE_LIMITS.maxSocketsPerUser` sockets; the desktop waits 60 s. */
|
|
54
|
+
tooManySockets: 4429,
|
|
55
|
+
};
|
|
56
|
+
/** The `capabilities` entry of `GET /api/v1/meta` that says a server serves {@link LIVE_PATH}. */
|
|
57
|
+
export const LIVE_CAPABILITY = 'live';
|
|
58
|
+
/** The socket's path on the server's origin. */
|
|
59
|
+
export const LIVE_PATH = '/api/v1/live';
|
|
60
|
+
/** Why a subscribe was refused. `teams-workspace-not-found` also means "no access", as HTTP does, so an id reveals nothing. */
|
|
61
|
+
export const LIVE_REFUSED_CODES = ['teams-workspace-not-found', 'live-too-many-subscriptions'];
|
|
62
|
+
/**
|
|
63
|
+
* One user with a subscribed socket on a workspace: an id and a display name, never an email (§6).
|
|
64
|
+
* - `id` is `identityIdSchema`: bounded in length and otherwise opaque, as HTTP treats user ids. Nothing
|
|
65
|
+
* on the client uses it as a path or a storage key, and the e2e fake's ids are `u-<email>`.
|
|
66
|
+
* - `name` is the user's display name, which is never empty.
|
|
67
|
+
*/
|
|
68
|
+
export const livePresenceUserSchema = z.object({ id: identityIdSchema, name: z.string().min(1) });
|
|
69
|
+
/** Client → server (§3.1). `auth` comes first, within `authTimeoutMs`, and the token travels nowhere else. */
|
|
70
|
+
export const liveClientMessageSchema = z.discriminatedUnion('type', [
|
|
71
|
+
z.object({ type: z.literal('auth'), token: z.string().regex(DEVICE_TOKEN_PATTERN) }),
|
|
72
|
+
z.object({ type: z.literal('subscribe'), workspaceId: teamsIdSchema }),
|
|
73
|
+
z.object({ type: z.literal('unsubscribe'), workspaceId: teamsIdSchema }),
|
|
74
|
+
z.object({ type: z.literal('ping') }),
|
|
75
|
+
]);
|
|
76
|
+
/**
|
|
77
|
+
* Server → client (§3.1, R6).
|
|
78
|
+
* - `ready` answers a valid `auth` and `pong` answers `ping`. Together they let the desktop tell
|
|
79
|
+
* *connecting* from *connected*, and a dead server from a quiet one.
|
|
80
|
+
* - `presence` includes the recipient, whom the desktop removes.
|
|
81
|
+
* - `session-ended` is always followed by a `4401` close.
|
|
82
|
+
* - `capture` and `hooks` (webhook-capture spec §3.6) say "a catch URL of this workspace caught
|
|
83
|
+
* something" and "the workspace's catch URLs changed". Like every message they carry ids only; the
|
|
84
|
+
* desktop fetches. The hub sends at most one `capture` per catch URL every 250 ms, carrying the
|
|
85
|
+
* newest id. An app older than them skips both types.
|
|
86
|
+
*/
|
|
87
|
+
export const liveServerMessageSchema = z.discriminatedUnion('type', [
|
|
88
|
+
z.object({ type: z.literal('ready') }),
|
|
89
|
+
z.object({ type: z.literal('head'), workspaceId: teamsIdSchema, head: syncCommitIdSchema }),
|
|
90
|
+
z.object({ type: z.literal('access'), workspaceId: teamsIdSchema }),
|
|
91
|
+
z.object({ type: z.literal('presence'), workspaceId: teamsIdSchema, users: z.array(livePresenceUserSchema) }),
|
|
92
|
+
z.object({ type: z.literal('refused'), workspaceId: teamsIdSchema, code: z.enum(LIVE_REFUSED_CODES) }),
|
|
93
|
+
z.object({ type: z.literal('session-ended') }),
|
|
94
|
+
z.object({ type: z.literal('pong') }),
|
|
95
|
+
z.object({
|
|
96
|
+
type: z.literal('capture'),
|
|
97
|
+
workspaceId: teamsIdSchema,
|
|
98
|
+
hookId: teamsIdSchema,
|
|
99
|
+
captureId: teamsIdSchema,
|
|
100
|
+
}),
|
|
101
|
+
z.object({ type: z.literal('hooks'), workspaceId: teamsIdSchema }),
|
|
102
|
+
]);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `GET /api/v1/meta` answers (host spec §3.2). Shared with the desktop so the Sign in
|
|
3
|
+
* dialog can tell a Wirebench Server from any other host by shape, not by guesswork.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export declare const SERVER_NAME = "wirebench-server";
|
|
7
|
+
export declare const SERVER_API_VERSION = 1;
|
|
8
|
+
export declare const metaResponseSchema: z.ZodObject<{
|
|
9
|
+
name: z.ZodLiteral<"wirebench-server">;
|
|
10
|
+
version: z.ZodString;
|
|
11
|
+
apiVersion: z.ZodLiteral<1>;
|
|
12
|
+
publicUrl: z.ZodString;
|
|
13
|
+
auth: z.ZodObject<{
|
|
14
|
+
local: z.ZodBoolean;
|
|
15
|
+
oidc: z.ZodBoolean;
|
|
16
|
+
oidcDisplayName: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
capabilities: z.ZodArray<z.ZodString>;
|
|
19
|
+
hooks: z.ZodOptional<z.ZodObject<{
|
|
20
|
+
enabled: z.ZodBoolean;
|
|
21
|
+
bodyLimitBytes: z.ZodNumber;
|
|
22
|
+
keep: z.ZodNumber;
|
|
23
|
+
maxAgeDays: z.ZodNumber;
|
|
24
|
+
}, z.core.$strip>>;
|
|
25
|
+
edition: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
community: "community";
|
|
27
|
+
team: "team";
|
|
28
|
+
enterprise: "enterprise";
|
|
29
|
+
}>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type MetaResponse = z.infer<typeof metaResponseSchema>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `GET /api/v1/meta` answers (host spec §3.2). Shared with the desktop so the Sign in
|
|
3
|
+
* dialog can tell a Wirebench Server from any other host by shape, not by guesswork.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { hooksMetaSchema } from './hooks.js';
|
|
7
|
+
import { editionSchema } from './licensing.js';
|
|
8
|
+
export const SERVER_NAME = 'wirebench-server';
|
|
9
|
+
export const SERVER_API_VERSION = 1;
|
|
10
|
+
export const metaResponseSchema = z.object({
|
|
11
|
+
name: z.literal(SERVER_NAME),
|
|
12
|
+
version: z.string(),
|
|
13
|
+
apiVersion: z.literal(SERVER_API_VERSION),
|
|
14
|
+
publicUrl: z.string().url(),
|
|
15
|
+
auth: z.object({ local: z.boolean(), oidc: z.boolean(), oidcDisplayName: z.string().optional() }),
|
|
16
|
+
capabilities: z.array(z.string()),
|
|
17
|
+
/** webhook-capture §3.7: absent on a server without the module, which the desktop reads as disabled. */
|
|
18
|
+
hooks: hooksMetaSchema.optional(),
|
|
19
|
+
/** licensing §3.6: the server's edition, and nothing else about its license. Absent from an older server. */
|
|
20
|
+
edition: editionSchema.optional(),
|
|
21
|
+
});
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The server-sync module's wire shapes (server-sync spec §3.2, §4.4). The server's routes validate
|
|
3
|
+
* with them (through `jsonSchema()`) and the desktop's `ServerClient` parses answers with them, so a
|
|
4
|
+
* drift between the two fails typecheck.
|
|
5
|
+
*
|
|
6
|
+
* Plain zod only, with no refine or transform: the routes render these as draft-07 JSON Schema,
|
|
7
|
+
* which can carry neither. The rules JSON Schema cannot express run in the handler (and, for
|
|
8
|
+
* paths, in the client too):
|
|
9
|
+
* - tree paths (`assertTreePath`);
|
|
10
|
+
* - base64 and UTF-8 validity;
|
|
11
|
+
* - the per-file limit of {@link MAX_SYNC_FILE_BYTES}.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
/**
|
|
15
|
+
* A full git object id: 40 hex (SHA-1) or 64 hex (SHA-256), lower case. Every commit id in a query
|
|
16
|
+
* or a body matches this before it reaches git, so nothing a client sends can become a git option
|
|
17
|
+
* (`--upload-pack=…`) or a revision expression (`HEAD~1`, `main`).
|
|
18
|
+
*/
|
|
19
|
+
export declare const SYNC_COMMIT_ID_PATTERN: RegExp;
|
|
20
|
+
/** The largest single file a snapshot, a change list or a push may carry, decoded (§3.2). */
|
|
21
|
+
export declare const MAX_SYNC_FILE_BYTES: number;
|
|
22
|
+
/** The most entries one `GET …/sync/log` returns (§3.2). */
|
|
23
|
+
export declare const MAX_SYNC_LOG_LIMIT = 200;
|
|
24
|
+
/** The longest commit subject a push may carry. */
|
|
25
|
+
export declare const MAX_SYNC_SUBJECT_LENGTH = 1000;
|
|
26
|
+
export declare const syncCommitIdSchema: z.ZodString;
|
|
27
|
+
/** `utf8`: the content is the text itself. `base64`: the content is the bytes, for anything not valid UTF-8. */
|
|
28
|
+
export declare const syncEncodingSchema: z.ZodEnum<{
|
|
29
|
+
utf8: "utf8";
|
|
30
|
+
base64: "base64";
|
|
31
|
+
}>;
|
|
32
|
+
export type SyncEncoding = z.infer<typeof syncEncodingSchema>;
|
|
33
|
+
/** One file of a tree. */
|
|
34
|
+
export declare const syncFileSchema: z.ZodObject<{
|
|
35
|
+
path: z.ZodString;
|
|
36
|
+
encoding: z.ZodEnum<{
|
|
37
|
+
utf8: "utf8";
|
|
38
|
+
base64: "base64";
|
|
39
|
+
}>;
|
|
40
|
+
content: z.ZodString;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
export type SyncFile = z.infer<typeof syncFileSchema>;
|
|
43
|
+
/** One path that differs; `content: null` means the file was deleted. */
|
|
44
|
+
export declare const syncChangeSchema: z.ZodObject<{
|
|
45
|
+
path: z.ZodString;
|
|
46
|
+
encoding: z.ZodEnum<{
|
|
47
|
+
utf8: "utf8";
|
|
48
|
+
base64: "base64";
|
|
49
|
+
}>;
|
|
50
|
+
content: z.ZodNullable<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
export type SyncChange = z.infer<typeof syncChangeSchema>;
|
|
53
|
+
/** `GET …/sync/head?from=`: `from` is the client's base, to count how far behind it is. */
|
|
54
|
+
export declare const syncHeadQuerySchema: z.ZodObject<{
|
|
55
|
+
from: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type SyncHeadQuery = z.infer<typeof syncHeadQuerySchema>;
|
|
58
|
+
export declare const syncHeadResponseSchema: z.ZodObject<{
|
|
59
|
+
head: z.ZodNullable<z.ZodString>;
|
|
60
|
+
commits: z.ZodNumber;
|
|
61
|
+
behind: z.ZodOptional<z.ZodNumber>;
|
|
62
|
+
role: z.ZodEnum<{
|
|
63
|
+
editor: "editor";
|
|
64
|
+
admin: "admin";
|
|
65
|
+
viewer: "viewer";
|
|
66
|
+
}>;
|
|
67
|
+
recordDesktopActivity: z.ZodDefault<z.ZodBoolean>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
export type SyncHeadResponse = z.infer<typeof syncHeadResponseSchema>;
|
|
70
|
+
/** `GET …/sync/snapshot?at=`: `at` defaults to the head. */
|
|
71
|
+
export declare const syncSnapshotQuerySchema: z.ZodObject<{
|
|
72
|
+
at: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, z.core.$strip>;
|
|
74
|
+
export type SyncSnapshotQuery = z.infer<typeof syncSnapshotQuerySchema>;
|
|
75
|
+
export declare const syncSnapshotResponseSchema: z.ZodObject<{
|
|
76
|
+
head: z.ZodNullable<z.ZodString>;
|
|
77
|
+
files: z.ZodArray<z.ZodObject<{
|
|
78
|
+
path: z.ZodString;
|
|
79
|
+
encoding: z.ZodEnum<{
|
|
80
|
+
utf8: "utf8";
|
|
81
|
+
base64: "base64";
|
|
82
|
+
}>;
|
|
83
|
+
content: z.ZodString;
|
|
84
|
+
}, z.core.$strip>>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
export type SyncSnapshotResponse = z.infer<typeof syncSnapshotResponseSchema>;
|
|
87
|
+
/** `GET …/sync/changes?from=&to=`: an absent `from` means the empty tree. */
|
|
88
|
+
export declare const syncChangesQuerySchema: z.ZodObject<{
|
|
89
|
+
from: z.ZodOptional<z.ZodString>;
|
|
90
|
+
to: z.ZodString;
|
|
91
|
+
}, z.core.$strip>;
|
|
92
|
+
export type SyncChangesQuery = z.infer<typeof syncChangesQuerySchema>;
|
|
93
|
+
export declare const syncChangesResponseSchema: z.ZodObject<{
|
|
94
|
+
from: z.ZodNullable<z.ZodString>;
|
|
95
|
+
to: z.ZodString;
|
|
96
|
+
files: z.ZodArray<z.ZodObject<{
|
|
97
|
+
path: z.ZodString;
|
|
98
|
+
encoding: z.ZodEnum<{
|
|
99
|
+
utf8: "utf8";
|
|
100
|
+
base64: "base64";
|
|
101
|
+
}>;
|
|
102
|
+
content: z.ZodNullable<z.ZodString>;
|
|
103
|
+
}, z.core.$strip>>;
|
|
104
|
+
}, z.core.$strip>;
|
|
105
|
+
export type SyncChangesResponse = z.infer<typeof syncChangesResponseSchema>;
|
|
106
|
+
/** One pending commit. The server authors it as the caller; `at` becomes the author date. */
|
|
107
|
+
export declare const syncPushCommitSchema: z.ZodObject<{
|
|
108
|
+
subject: z.ZodString;
|
|
109
|
+
at: z.ZodISODateTime;
|
|
110
|
+
changes: z.ZodArray<z.ZodObject<{
|
|
111
|
+
path: z.ZodString;
|
|
112
|
+
encoding: z.ZodEnum<{
|
|
113
|
+
utf8: "utf8";
|
|
114
|
+
base64: "base64";
|
|
115
|
+
}>;
|
|
116
|
+
content: z.ZodNullable<z.ZodString>;
|
|
117
|
+
}, z.core.$strip>>;
|
|
118
|
+
}, z.core.$strip>;
|
|
119
|
+
export type SyncPushCommit = z.infer<typeof syncPushCommitSchema>;
|
|
120
|
+
/** `POST …/sync/commits`: `parent` must be the current head (`null` for an empty workspace), or the push is rejected. */
|
|
121
|
+
export declare const syncPushRequestSchema: z.ZodObject<{
|
|
122
|
+
parent: z.ZodNullable<z.ZodString>;
|
|
123
|
+
commits: z.ZodArray<z.ZodObject<{
|
|
124
|
+
subject: z.ZodString;
|
|
125
|
+
at: z.ZodISODateTime;
|
|
126
|
+
changes: z.ZodArray<z.ZodObject<{
|
|
127
|
+
path: z.ZodString;
|
|
128
|
+
encoding: z.ZodEnum<{
|
|
129
|
+
utf8: "utf8";
|
|
130
|
+
base64: "base64";
|
|
131
|
+
}>;
|
|
132
|
+
content: z.ZodNullable<z.ZodString>;
|
|
133
|
+
}, z.core.$strip>>;
|
|
134
|
+
}, z.core.$strip>>;
|
|
135
|
+
}, z.core.$strip>;
|
|
136
|
+
export type SyncPushRequest = z.infer<typeof syncPushRequestSchema>;
|
|
137
|
+
/** `201`: the new head, and one id per pushed commit, in order. */
|
|
138
|
+
export declare const syncPushResponseSchema: z.ZodObject<{
|
|
139
|
+
head: z.ZodString;
|
|
140
|
+
ids: z.ZodArray<z.ZodString>;
|
|
141
|
+
}, z.core.$strip>;
|
|
142
|
+
export type SyncPushResponse = z.infer<typeof syncPushResponseSchema>;
|
|
143
|
+
/** `GET …/sync/log?limit=`. Fastify's Ajv coerces the querystring, so the handler reads a number. */
|
|
144
|
+
export declare const syncLogQuerySchema: z.ZodObject<{
|
|
145
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
}, z.core.$strip>;
|
|
147
|
+
export type SyncLogQuery = z.infer<typeof syncLogQuerySchema>;
|
|
148
|
+
/**
|
|
149
|
+
* One commit, newest first. `author` is `Name <email>`. `at` is git's strict ISO author date,
|
|
150
|
+
* passed on as is: its UTC spelling differs between git versions, so it is not checked as a format.
|
|
151
|
+
*/
|
|
152
|
+
export declare const syncLogEntrySchema: z.ZodObject<{
|
|
153
|
+
id: z.ZodString;
|
|
154
|
+
subject: z.ZodString;
|
|
155
|
+
author: z.ZodString;
|
|
156
|
+
at: z.ZodString;
|
|
157
|
+
}, z.core.$strip>;
|
|
158
|
+
export type SyncLogEntry = z.infer<typeof syncLogEntrySchema>;
|
|
159
|
+
export declare const syncLogResponseSchema: z.ZodArray<z.ZodObject<{
|
|
160
|
+
id: z.ZodString;
|
|
161
|
+
subject: z.ZodString;
|
|
162
|
+
author: z.ZodString;
|
|
163
|
+
at: z.ZodString;
|
|
164
|
+
}, z.core.$strip>>;
|
|
165
|
+
/** The most a key request's file may hold, in UTF-8 bytes. */
|
|
166
|
+
export declare const TEAM_SECRETS_KEY_REQUEST_MAX_BYTES = 4096;
|
|
167
|
+
/**
|
|
168
|
+
* `POST …/team-secrets/key-requests`: `content` is the key file's text as the app wrote it. The server
|
|
169
|
+
* derives the path from `keyId` and never parses `content` (plan decision 11).
|
|
170
|
+
*/
|
|
171
|
+
export declare const teamSecretsKeyRequestSchema: z.ZodObject<{
|
|
172
|
+
keyId: z.ZodString;
|
|
173
|
+
content: z.ZodString;
|
|
174
|
+
}, z.core.$strip>;
|
|
175
|
+
export type TeamSecretsKeyRequest = z.infer<typeof teamSecretsKeyRequestSchema>;
|
|
176
|
+
export declare const teamSecretsKeyRequestResponseSchema: z.ZodObject<{
|
|
177
|
+
head: z.ZodString;
|
|
178
|
+
}, z.core.$strip>;
|
|
179
|
+
export type TeamSecretsKeyRequestResponse = z.infer<typeof teamSecretsKeyRequestResponseSchema>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The server-sync module's wire shapes (server-sync spec §3.2, §4.4). The server's routes validate
|
|
3
|
+
* with them (through `jsonSchema()`) and the desktop's `ServerClient` parses answers with them, so a
|
|
4
|
+
* drift between the two fails typecheck.
|
|
5
|
+
*
|
|
6
|
+
* Plain zod only, with no refine or transform: the routes render these as draft-07 JSON Schema,
|
|
7
|
+
* which can carry neither. The rules JSON Schema cannot express run in the handler (and, for
|
|
8
|
+
* paths, in the client too):
|
|
9
|
+
* - tree paths (`assertTreePath`);
|
|
10
|
+
* - base64 and UTF-8 validity;
|
|
11
|
+
* - the per-file limit of {@link MAX_SYNC_FILE_BYTES}.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { KEY_ID_PATTERN } from '../team-secrets/keys.js';
|
|
15
|
+
import { MAX_TREE_PATH_LENGTH } from '../sync/tree-paths.js';
|
|
16
|
+
import { workspaceRoleSchema } from './teams.js';
|
|
17
|
+
/**
|
|
18
|
+
* A full git object id: 40 hex (SHA-1) or 64 hex (SHA-256), lower case. Every commit id in a query
|
|
19
|
+
* or a body matches this before it reaches git, so nothing a client sends can become a git option
|
|
20
|
+
* (`--upload-pack=…`) or a revision expression (`HEAD~1`, `main`).
|
|
21
|
+
*/
|
|
22
|
+
export const SYNC_COMMIT_ID_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
23
|
+
/** The largest single file a snapshot, a change list or a push may carry, decoded (§3.2). */
|
|
24
|
+
export const MAX_SYNC_FILE_BYTES = 8 * 1024 * 1024;
|
|
25
|
+
/** The most entries one `GET …/sync/log` returns (§3.2). */
|
|
26
|
+
export const MAX_SYNC_LOG_LIMIT = 200;
|
|
27
|
+
/** The longest commit subject a push may carry. */
|
|
28
|
+
export const MAX_SYNC_SUBJECT_LENGTH = 1000;
|
|
29
|
+
export const syncCommitIdSchema = z.string().regex(SYNC_COMMIT_ID_PATTERN);
|
|
30
|
+
/** `utf8`: the content is the text itself. `base64`: the content is the bytes, for anything not valid UTF-8. */
|
|
31
|
+
export const syncEncodingSchema = z.enum(['utf8', 'base64']);
|
|
32
|
+
/** A tree path on the wire. Its rules beyond length are `assertTreePath`'s, run in the handler and the client. */
|
|
33
|
+
const syncPathSchema = z.string().min(1).max(MAX_TREE_PATH_LENGTH);
|
|
34
|
+
/** One file of a tree. */
|
|
35
|
+
export const syncFileSchema = z.object({
|
|
36
|
+
path: syncPathSchema,
|
|
37
|
+
encoding: syncEncodingSchema,
|
|
38
|
+
content: z.string(),
|
|
39
|
+
});
|
|
40
|
+
/** One path that differs; `content: null` means the file was deleted. */
|
|
41
|
+
export const syncChangeSchema = z.object({
|
|
42
|
+
path: syncPathSchema,
|
|
43
|
+
encoding: syncEncodingSchema,
|
|
44
|
+
content: z.string().nullable(),
|
|
45
|
+
});
|
|
46
|
+
// ---- head --------------------------------------------------------------------------------
|
|
47
|
+
/** `GET …/sync/head?from=`: `from` is the client's base, to count how far behind it is. */
|
|
48
|
+
export const syncHeadQuerySchema = z.object({ from: syncCommitIdSchema.optional() });
|
|
49
|
+
export const syncHeadResponseSchema = z.object({
|
|
50
|
+
/** `refs/heads/main`, or `null` before the first push: an empty workspace. */
|
|
51
|
+
head: syncCommitIdSchema.nullable(),
|
|
52
|
+
/** Commits on `main` in total. */
|
|
53
|
+
commits: z.number().int().min(0),
|
|
54
|
+
/** Commits after the request's `from`, when it named one (§3.2). */
|
|
55
|
+
behind: z.number().int().min(0).optional(),
|
|
56
|
+
/** The caller's role, so the client refreshes it on every fetch. */
|
|
57
|
+
role: workspaceRoleSchema,
|
|
58
|
+
/** The workspace's desktop-activity recording flag, refreshed on every fetch. */
|
|
59
|
+
recordDesktopActivity: z.boolean().default(false),
|
|
60
|
+
});
|
|
61
|
+
// ---- snapshot ----------------------------------------------------------------------------
|
|
62
|
+
/** `GET …/sync/snapshot?at=`: `at` defaults to the head. */
|
|
63
|
+
export const syncSnapshotQuerySchema = z.object({ at: syncCommitIdSchema.optional() });
|
|
64
|
+
export const syncSnapshotResponseSchema = z.object({
|
|
65
|
+
head: syncCommitIdSchema.nullable(),
|
|
66
|
+
files: z.array(syncFileSchema),
|
|
67
|
+
});
|
|
68
|
+
// ---- changes -----------------------------------------------------------------------------
|
|
69
|
+
/** `GET …/sync/changes?from=&to=`: an absent `from` means the empty tree. */
|
|
70
|
+
export const syncChangesQuerySchema = z.object({
|
|
71
|
+
from: syncCommitIdSchema.optional(),
|
|
72
|
+
to: syncCommitIdSchema,
|
|
73
|
+
});
|
|
74
|
+
export const syncChangesResponseSchema = z.object({
|
|
75
|
+
from: syncCommitIdSchema.nullable(),
|
|
76
|
+
to: syncCommitIdSchema,
|
|
77
|
+
files: z.array(syncChangeSchema),
|
|
78
|
+
});
|
|
79
|
+
// ---- commits (push) ----------------------------------------------------------------------
|
|
80
|
+
/** One pending commit. The server authors it as the caller; `at` becomes the author date. */
|
|
81
|
+
export const syncPushCommitSchema = z.object({
|
|
82
|
+
subject: z.string().min(1).max(MAX_SYNC_SUBJECT_LENGTH),
|
|
83
|
+
/** ISO 8601 with `Z` or an offset (`toISOString()` gives `Z`). It renders as JSON Schema `format: date-time`. */
|
|
84
|
+
at: z.iso.datetime({ offset: true }),
|
|
85
|
+
changes: z.array(syncChangeSchema),
|
|
86
|
+
});
|
|
87
|
+
/** `POST …/sync/commits`: `parent` must be the current head (`null` for an empty workspace), or the push is rejected. */
|
|
88
|
+
export const syncPushRequestSchema = z.object({
|
|
89
|
+
parent: syncCommitIdSchema.nullable(),
|
|
90
|
+
commits: z.array(syncPushCommitSchema).min(1),
|
|
91
|
+
});
|
|
92
|
+
/** `201`: the new head, and one id per pushed commit, in order. */
|
|
93
|
+
export const syncPushResponseSchema = z.object({
|
|
94
|
+
head: syncCommitIdSchema,
|
|
95
|
+
ids: z.array(syncCommitIdSchema),
|
|
96
|
+
});
|
|
97
|
+
// ---- log ---------------------------------------------------------------------------------
|
|
98
|
+
/** `GET …/sync/log?limit=`. Fastify's Ajv coerces the querystring, so the handler reads a number. */
|
|
99
|
+
export const syncLogQuerySchema = z.object({
|
|
100
|
+
limit: z.number().int().min(1).max(MAX_SYNC_LOG_LIMIT).optional(),
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* One commit, newest first. `author` is `Name <email>`. `at` is git's strict ISO author date,
|
|
104
|
+
* passed on as is: its UTC spelling differs between git versions, so it is not checked as a format.
|
|
105
|
+
*/
|
|
106
|
+
export const syncLogEntrySchema = z.object({
|
|
107
|
+
id: syncCommitIdSchema,
|
|
108
|
+
subject: z.string(),
|
|
109
|
+
author: z.string(),
|
|
110
|
+
at: z.string(),
|
|
111
|
+
});
|
|
112
|
+
export const syncLogResponseSchema = z.array(syncLogEntrySchema);
|
|
113
|
+
// ---- team secrets (team-secrets spec §5.1) -------------------------------------------------
|
|
114
|
+
/** The most a key request's file may hold, in UTF-8 bytes. */
|
|
115
|
+
export const TEAM_SECRETS_KEY_REQUEST_MAX_BYTES = 4096;
|
|
116
|
+
/**
|
|
117
|
+
* `POST …/team-secrets/key-requests`: `content` is the key file's text as the app wrote it. The server
|
|
118
|
+
* derives the path from `keyId` and never parses `content` (plan decision 11).
|
|
119
|
+
*/
|
|
120
|
+
export const teamSecretsKeyRequestSchema = z.object({
|
|
121
|
+
keyId: z.string().regex(KEY_ID_PATTERN),
|
|
122
|
+
content: z.string().min(1).max(TEAM_SECRETS_KEY_REQUEST_MAX_BYTES),
|
|
123
|
+
});
|
|
124
|
+
export const teamSecretsKeyRequestResponseSchema = z.object({ head: syncCommitIdSchema });
|