@zuplo/cli 7.4.4 → 7.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/settings.d.ts +1 -0
- package/dist/common/settings.d.ts.map +1 -1
- package/dist/common/settings.js +3 -0
- package/dist/common/settings.js.map +1 -1
- package/dist/deploy/classify-build-probe.d.ts +14 -0
- package/dist/deploy/classify-build-probe.d.ts.map +1 -0
- package/dist/deploy/classify-build-probe.js +35 -0
- package/dist/deploy/classify-build-probe.js.map +1 -0
- package/dist/deploy/classify-build-probe.test.d.ts +2 -0
- package/dist/deploy/classify-build-probe.test.d.ts.map +1 -0
- package/dist/deploy/classify-build-probe.test.js +51 -0
- package/dist/deploy/classify-build-probe.test.js.map +1 -0
- package/dist/deploy/handler.js +20 -5
- package/dist/deploy/handler.js.map +1 -1
- package/dist/deploy/poll-deployment.d.ts +8 -4
- package/dist/deploy/poll-deployment.d.ts.map +1 -1
- package/dist/deploy/poll-deployment.js +32 -4
- package/dist/deploy/poll-deployment.js.map +1 -1
- package/dist/deploy/poll-deployment.test.d.ts +2 -0
- package/dist/deploy/poll-deployment.test.d.ts.map +1 -0
- package/dist/deploy/poll-deployment.test.js +158 -0
- package/dist/deploy/poll-deployment.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwks/remote.d.ts +4 -4
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/general/verify.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/encrypt.d.ts +8 -14
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/sign.d.ts +8 -14
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -15
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +30 -8
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +8 -4
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +6 -13
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/decrypt.js +19 -19
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/encrypt.js +27 -20
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/embedded.js +15 -1
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/thumbprint.js +11 -5
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/local.js +45 -53
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/remote.js +82 -103
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/compact/sign.js +10 -9
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/sign.js +2 -1
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/verify.js +8 -7
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/sign.js +5 -3
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/verify.js +51 -21
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/decrypt.js +7 -9
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/encrypt.js +21 -50
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/sign.js +8 -41
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/unsecured.js +21 -42
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_key_pair.js +6 -2
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_secret.js +7 -6
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/import.js +16 -12
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/asn1.js +7 -2
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/content_encryption.js +7 -15
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/deflate.js +8 -0
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/helpers.js +1 -1
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +85 -28
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +40 -12
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwk_metadata.js +20 -0
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_sign.js +47 -36
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_verify.js +77 -45
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +82 -47
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key.js +24 -9
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_management.js +10 -4
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_options.js +6 -0
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/options.js +26 -0
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/type_checks.js +11 -13
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/package.json +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwks/remote.d.ts +4 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/general/verify.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/encrypt.d.ts +8 -14
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/sign.d.ts +8 -14
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -15
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +30 -8
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +8 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +6 -13
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/decrypt.js +19 -19
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/encrypt.js +27 -20
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/embedded.js +15 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/thumbprint.js +11 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/local.js +45 -53
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/remote.js +82 -103
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/compact/sign.js +10 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/sign.js +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/verify.js +8 -7
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/sign.js +5 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/verify.js +51 -21
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/decrypt.js +7 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/encrypt.js +21 -50
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/sign.js +8 -41
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/unsecured.js +21 -42
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_key_pair.js +6 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_secret.js +7 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/import.js +16 -12
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/asn1.js +7 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/content_encryption.js +7 -15
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/deflate.js +8 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/helpers.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +85 -28
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +40 -12
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwk_metadata.js +20 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_sign.js +47 -36
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_verify.js +77 -45
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +82 -47
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key.js +24 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_management.js +10 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_options.js +6 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/options.js +26 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/type_checks.js +11 -13
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/package.json +1 -1
- package/node_modules/@posthog/core/dist/logs/index.js +1 -1
- package/node_modules/@posthog/core/dist/logs/index.mjs +1 -1
- package/node_modules/@posthog/core/dist/logs/logs-utils.d.ts +4 -13
- package/node_modules/@posthog/core/dist/logs/logs-utils.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/logs/logs-utils.js +160 -26
- package/node_modules/@posthog/core/dist/logs/logs-utils.mjs +160 -26
- package/node_modules/@posthog/core/dist/metrics/index.js +1 -1
- package/node_modules/@posthog/core/dist/metrics/index.mjs +1 -1
- package/node_modules/@posthog/core/dist/posthog-core-stateless.d.ts +12 -18
- package/node_modules/@posthog/core/dist/posthog-core-stateless.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/posthog-core-stateless.js +15 -47
- package/node_modules/@posthog/core/dist/posthog-core-stateless.mjs +15 -47
- package/node_modules/@posthog/core/dist/posthog-core.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/posthog-core.js +12 -7
- package/node_modules/@posthog/core/dist/posthog-core.mjs +12 -7
- package/node_modules/@posthog/core/dist/types.d.ts +4 -1
- package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/utils/index.d.ts +1 -1
- package/node_modules/@posthog/core/dist/utils/index.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/utils/index.js +14 -24
- package/node_modules/@posthog/core/dist/utils/index.mjs +2 -2
- package/node_modules/@posthog/core/dist/utils/json-utils.d.ts +15 -0
- package/node_modules/@posthog/core/dist/utils/json-utils.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/utils/json-utils.js +24 -0
- package/node_modules/@posthog/core/dist/utils/json-utils.mjs +1 -1
- package/node_modules/@posthog/core/package.json +2 -2
- package/node_modules/@posthog/core/src/logs/index.spec.ts +77 -0
- package/node_modules/@posthog/core/src/logs/index.ts +2 -2
- package/node_modules/@posthog/core/src/logs/logs-utils.spec.ts +314 -9
- package/node_modules/@posthog/core/src/logs/logs-utils.ts +215 -27
- package/node_modules/@posthog/core/src/metrics/index.spec.ts +15 -1
- package/node_modules/@posthog/core/src/metrics/index.ts +1 -1
- package/node_modules/@posthog/core/src/posthog-core-stateless.ts +40 -65
- package/node_modules/@posthog/core/src/posthog-core.ts +19 -12
- package/node_modules/@posthog/core/src/types.ts +3 -1
- package/node_modules/@posthog/core/src/utils/index.ts +3 -1
- package/node_modules/@posthog/core/src/utils/json-utils.ts +15 -8
- package/node_modules/@posthog/types/dist/capture-log.d.ts +10 -1
- package/node_modules/@posthog/types/dist/capture-log.d.ts.map +1 -1
- package/node_modules/@posthog/types/dist/index.d.ts +1 -1
- package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
- package/node_modules/@posthog/types/dist/posthog-config.d.ts +20 -5
- package/node_modules/@posthog/types/dist/posthog-config.d.ts.map +1 -1
- package/node_modules/@posthog/types/package.json +1 -1
- package/node_modules/@posthog/types/src/capture-log.ts +8 -1
- package/node_modules/@posthog/types/src/index.ts +1 -0
- package/node_modules/@posthog/types/src/posthog-config.ts +21 -5
- package/node_modules/@zuplo/core/customer.cli.minified.js +1 -1
- package/node_modules/@zuplo/core/index.minified.js +1 -1
- package/node_modules/@zuplo/core/package.json +1 -1
- package/node_modules/@zuplo/graphql/package.json +1 -1
- package/node_modules/@zuplo/openapi-tools/package.json +1 -1
- package/node_modules/@zuplo/otel/package.json +1 -1
- package/node_modules/@zuplo/runtime/out/esm/{chunk-IZE65N7D.js → chunk-CUK3VROF.js} +2 -2
- package/node_modules/@zuplo/runtime/out/esm/{chunk-4CDML74A.js → chunk-K4TBJG47.js} +2 -2
- package/node_modules/@zuplo/runtime/out/esm/{chunk-4VE55TG3.js → chunk-S4EBLGSU.js} +2 -2
- package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js → chunk-XF3IIUDX.js} +4 -4
- package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js.map → chunk-XF3IIUDX.js.map} +1 -1
- package/node_modules/@zuplo/runtime/out/esm/chunk-ZPOD3IK4.js +403 -0
- package/node_modules/@zuplo/runtime/out/esm/chunk-ZPOD3IK4.js.map +1 -0
- package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
- package/node_modules/@zuplo/runtime/package.json +1 -1
- package/node_modules/fast-uri/index.js +201 -48
- package/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/fast-uri/lib/utils.js +388 -91
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +105 -0
- package/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +90 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/fast-uri/test/security.test.js +75 -3
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/hono/dist/cjs/client/client.js +25 -11
- package/node_modules/hono/dist/cjs/client/utils.js +3 -0
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +1 -1
- package/node_modules/hono/dist/cjs/request.js +8 -4
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +10 -3
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +47 -83
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +4 -3
- package/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/hono/dist/cjs/utils/cookie.js +1 -1
- package/node_modules/hono/dist/cjs/utils/stream.js +7 -1
- package/node_modules/hono/dist/client/client.js +25 -11
- package/node_modules/hono/dist/client/utils.js +3 -0
- package/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/middleware/etag/index.js +1 -1
- package/node_modules/hono/dist/request.js +8 -4
- package/node_modules/hono/dist/router/reg-exp-router/node.js +6 -2
- package/node_modules/hono/dist/router/reg-exp-router/router.js +53 -84
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/router/trie-router/node.js +4 -3
- package/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -0
- package/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/hono/dist/utils/cookie.js +1 -1
- package/node_modules/hono/dist/utils/stream.js +7 -1
- package/node_modules/hono/package.json +1 -1
- package/package.json +11 -11
- package/node_modules/@zuplo/runtime/out/esm/chunk-4SX4HBWT.js +0 -409
- package/node_modules/@zuplo/runtime/out/esm/chunk-4SX4HBWT.js.map +0 -1
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-IZE65N7D.js.map → chunk-CUK3VROF.js.map} +0 -0
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-4CDML74A.js.map → chunk-K4TBJG47.js.map} +0 -0
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-4VE55TG3.js.map → chunk-S4EBLGSU.js.map} +0 -0
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js.LEGAL.txt → chunk-XF3IIUDX.js.LEGAL.txt} +0 -0
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-4SX4HBWT.js.LEGAL.txt → chunk-ZPOD3IK4.js.LEGAL.txt} +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, it } from "node:test";
|
|
2
|
+
import { assert } from "chai";
|
|
3
|
+
import { getGlobalDispatcher, MockAgent, setGlobalDispatcher, } from "undici";
|
|
4
|
+
import { pollDeployment } from "./poll-deployment.js";
|
|
5
|
+
const DEV_API_ORIGIN = "https://developer.test";
|
|
6
|
+
const DEPLOYMENT_ORIGIN = "https://my-api.zuplo.app";
|
|
7
|
+
const PRIVATE_DEPLOYMENT_ORIGIN = "https://gateway.example.com";
|
|
8
|
+
const STATUS_PATH = "/v1/accounts/test-account/projects/test-project/deployment-status/deployment-123";
|
|
9
|
+
const BUILD_PATH = "/__zuplo/build";
|
|
10
|
+
const BUILD_ID = "build-new";
|
|
11
|
+
const LOG_URL = "https://portal.zuplo.com/builds/build-new";
|
|
12
|
+
const INIT_ERROR_DETAIL = "Value of 'allowedOrigins' on custom cors policies is invalid.";
|
|
13
|
+
const FALLBACK_INIT_ERROR_DETAIL = "The gateway failed to initialize after deployment. Check the deployment logs for details.";
|
|
14
|
+
const ENVIRONMENT_VARIABLES = [
|
|
15
|
+
"ZUPLO_DEVELOPER_API_ENDPOINT",
|
|
16
|
+
"MAX_POLL_RETRIES",
|
|
17
|
+
"POLL_INTERVAL",
|
|
18
|
+
"DEPLOY_INIT_ERROR_FAIL_FAST",
|
|
19
|
+
];
|
|
20
|
+
const argv = { authToken: "tok" };
|
|
21
|
+
function statusBody(overrides = {}) {
|
|
22
|
+
return {
|
|
23
|
+
status: "SUCCESS",
|
|
24
|
+
url: DEPLOYMENT_ORIGIN,
|
|
25
|
+
logUrl: LOG_URL,
|
|
26
|
+
buildId: BUILD_ID,
|
|
27
|
+
...overrides,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function initErrorBody(overrides = {}) {
|
|
31
|
+
return {
|
|
32
|
+
status: 500,
|
|
33
|
+
title: "Gateway Initialization Error",
|
|
34
|
+
type: "https://httpproblems.com/http-status/500",
|
|
35
|
+
detail: INIT_ERROR_DETAIL,
|
|
36
|
+
trace: { timestamp: 0, buildId: BUILD_ID },
|
|
37
|
+
...overrides,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
describe("pollDeployment", () => {
|
|
41
|
+
let mockAgent;
|
|
42
|
+
let previousDispatcher;
|
|
43
|
+
let devApiPool;
|
|
44
|
+
let deploymentPool;
|
|
45
|
+
let previousEnvironment;
|
|
46
|
+
let spinner;
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
previousEnvironment = Object.fromEntries(ENVIRONMENT_VARIABLES.map((name) => [name, process.env[name]]));
|
|
49
|
+
process.env.ZUPLO_DEVELOPER_API_ENDPOINT = DEV_API_ORIGIN;
|
|
50
|
+
process.env.MAX_POLL_RETRIES = "3";
|
|
51
|
+
process.env.POLL_INTERVAL = "1";
|
|
52
|
+
delete process.env.DEPLOY_INIT_ERROR_FAIL_FAST;
|
|
53
|
+
previousDispatcher = getGlobalDispatcher();
|
|
54
|
+
mockAgent = new MockAgent();
|
|
55
|
+
mockAgent.disableNetConnect();
|
|
56
|
+
setGlobalDispatcher(mockAgent);
|
|
57
|
+
devApiPool = mockAgent.get(DEV_API_ORIGIN);
|
|
58
|
+
deploymentPool = mockAgent.get(DEPLOYMENT_ORIGIN);
|
|
59
|
+
spinner = { suffixText: "" };
|
|
60
|
+
});
|
|
61
|
+
afterEach(async () => {
|
|
62
|
+
await mockAgent.close();
|
|
63
|
+
setGlobalDispatcher(previousDispatcher);
|
|
64
|
+
for (const name of ENVIRONMENT_VARIABLES) {
|
|
65
|
+
const value = previousEnvironment[name];
|
|
66
|
+
if (value === undefined) {
|
|
67
|
+
delete process.env[name];
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
process.env[name] = value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
function interceptStatus(body, times = 1) {
|
|
75
|
+
devApiPool
|
|
76
|
+
.intercept({ path: STATUS_PATH, method: "GET" })
|
|
77
|
+
.reply(200, body)
|
|
78
|
+
.times(times);
|
|
79
|
+
}
|
|
80
|
+
function interceptProbe(status, body, times = 1) {
|
|
81
|
+
deploymentPool
|
|
82
|
+
.intercept({ path: BUILD_PATH, method: "GET" })
|
|
83
|
+
.reply(status, body)
|
|
84
|
+
.times(times);
|
|
85
|
+
}
|
|
86
|
+
function poll() {
|
|
87
|
+
return pollDeployment(argv, "deployment-123", "test-account", "test-project", spinner);
|
|
88
|
+
}
|
|
89
|
+
it("fails fast after two consecutive matching initialization errors", async () => {
|
|
90
|
+
interceptStatus(statusBody(), 2);
|
|
91
|
+
interceptProbe(500, initErrorBody(), 2);
|
|
92
|
+
const result = await poll();
|
|
93
|
+
assert.deepEqual(result, {
|
|
94
|
+
logUrl: LOG_URL,
|
|
95
|
+
initError: { detail: INIT_ERROR_DETAIL },
|
|
96
|
+
});
|
|
97
|
+
assert.strictEqual(mockAgent.pendingInterceptors().length, 0);
|
|
98
|
+
});
|
|
99
|
+
it("succeeds when one matching initialization error is followed by a live probe", async () => {
|
|
100
|
+
interceptStatus(statusBody(), 2);
|
|
101
|
+
interceptProbe(500, initErrorBody());
|
|
102
|
+
interceptProbe(200, { buildId: BUILD_ID });
|
|
103
|
+
assert.deepEqual(await poll(), {
|
|
104
|
+
url: DEPLOYMENT_ORIGIN,
|
|
105
|
+
logUrl: LOG_URL,
|
|
106
|
+
});
|
|
107
|
+
assert.strictEqual(mockAgent.pendingInterceptors().length, 0);
|
|
108
|
+
});
|
|
109
|
+
it("polls to exhaustion when the initialization error is for another build", async () => {
|
|
110
|
+
interceptStatus(statusBody(), 3);
|
|
111
|
+
interceptProbe(500, initErrorBody({ trace: { timestamp: 0, buildId: "build-old" } }), 3);
|
|
112
|
+
assert.deepEqual(await poll(), { logUrl: LOG_URL });
|
|
113
|
+
});
|
|
114
|
+
it("does not fail fast when the status response omits buildId", async () => {
|
|
115
|
+
interceptStatus(statusBody({ buildId: undefined }), 3);
|
|
116
|
+
interceptProbe(500, initErrorBody(), 3);
|
|
117
|
+
assert.deepEqual(await poll(), { logUrl: LOG_URL });
|
|
118
|
+
});
|
|
119
|
+
it("keeps polling after a non-JSON 5xx probe response", async () => {
|
|
120
|
+
interceptStatus(statusBody(), 3);
|
|
121
|
+
interceptProbe(500, "<html>unavailable</html>", 3);
|
|
122
|
+
assert.deepEqual(await poll(), { logUrl: LOG_URL });
|
|
123
|
+
});
|
|
124
|
+
it("uses the fallback detail when a matching initialization error omits detail", async () => {
|
|
125
|
+
interceptStatus(statusBody(), 2);
|
|
126
|
+
interceptProbe(500, initErrorBody({ detail: undefined }), 2);
|
|
127
|
+
assert.deepEqual(await poll(), {
|
|
128
|
+
logUrl: LOG_URL,
|
|
129
|
+
initError: { detail: FALLBACK_INIT_ERROR_DETAIL },
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
it("returns the latest build log URL when in-progress polling is exhausted", async () => {
|
|
133
|
+
interceptStatus(statusBody({ status: "IN_PROGRESS", url: undefined }), 3);
|
|
134
|
+
assert.deepEqual(await poll(), { logUrl: LOG_URL });
|
|
135
|
+
});
|
|
136
|
+
it("returns the deployment URL after a successful build probe", async () => {
|
|
137
|
+
interceptStatus(statusBody());
|
|
138
|
+
interceptProbe(200, { buildId: BUILD_ID });
|
|
139
|
+
assert.deepEqual(await poll(), {
|
|
140
|
+
url: DEPLOYMENT_ORIGIN,
|
|
141
|
+
logUrl: LOG_URL,
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
it("returns a non-Zuplo deployment URL without probing it", async () => {
|
|
145
|
+
interceptStatus(statusBody({ url: PRIVATE_DEPLOYMENT_ORIGIN }));
|
|
146
|
+
assert.deepEqual(await poll(), {
|
|
147
|
+
url: PRIVATE_DEPLOYMENT_ORIGIN,
|
|
148
|
+
logUrl: LOG_URL,
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
it("keeps polling matching initialization errors when fail-fast is disabled", async () => {
|
|
152
|
+
process.env.DEPLOY_INIT_ERROR_FAIL_FAST = "false";
|
|
153
|
+
interceptStatus(statusBody(), 3);
|
|
154
|
+
interceptProbe(500, initErrorBody(), 3);
|
|
155
|
+
assert.deepEqual(await poll(), { logUrl: LOG_URL });
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=poll-deployment.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll-deployment.test.js","sourceRoot":"","sources":["../../src/deploy/poll-deployment.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, it } from \"node:test\";\nimport { assert } from \"chai\";\nimport type { Ora } from \"ora\";\nimport {\n type Dispatcher,\n getGlobalDispatcher,\n MockAgent,\n type MockPool,\n setGlobalDispatcher,\n} from \"undici\";\nimport type { Arguments } from \"./handler.js\";\nimport { pollDeployment } from \"./poll-deployment.js\";\n\nconst DEV_API_ORIGIN = \"https://developer.test\";\nconst DEPLOYMENT_ORIGIN = \"https://my-api.zuplo.app\";\nconst PRIVATE_DEPLOYMENT_ORIGIN = \"https://gateway.example.com\";\nconst STATUS_PATH =\n \"/v1/accounts/test-account/projects/test-project/deployment-status/deployment-123\";\nconst BUILD_PATH = \"/__zuplo/build\";\nconst BUILD_ID = \"build-new\";\nconst LOG_URL = \"https://portal.zuplo.com/builds/build-new\";\nconst INIT_ERROR_DETAIL =\n \"Value of 'allowedOrigins' on custom cors policies is invalid.\";\nconst FALLBACK_INIT_ERROR_DETAIL =\n \"The gateway failed to initialize after deployment. Check the deployment logs for details.\";\nconst ENVIRONMENT_VARIABLES = [\n \"ZUPLO_DEVELOPER_API_ENDPOINT\",\n \"MAX_POLL_RETRIES\",\n \"POLL_INTERVAL\",\n \"DEPLOY_INIT_ERROR_FAIL_FAST\",\n] as const;\n\nconst argv = { authToken: \"tok\" } as Arguments;\n\nfunction statusBody(overrides: Record<string, unknown> = {}) {\n return {\n status: \"SUCCESS\",\n url: DEPLOYMENT_ORIGIN,\n logUrl: LOG_URL,\n buildId: BUILD_ID,\n ...overrides,\n };\n}\n\nfunction initErrorBody(overrides: Record<string, unknown> = {}) {\n return {\n status: 500,\n title: \"Gateway Initialization Error\",\n type: \"https://httpproblems.com/http-status/500\",\n detail: INIT_ERROR_DETAIL,\n trace: { timestamp: 0, buildId: BUILD_ID },\n ...overrides,\n };\n}\n\ndescribe(\"pollDeployment\", () => {\n let mockAgent: MockAgent;\n let previousDispatcher: Dispatcher;\n let devApiPool: MockPool;\n let deploymentPool: MockPool;\n let previousEnvironment: Record<string, string | undefined>;\n let spinner: Ora;\n\n beforeEach(() => {\n previousEnvironment = Object.fromEntries(\n ENVIRONMENT_VARIABLES.map((name) => [name, process.env[name]])\n );\n process.env.ZUPLO_DEVELOPER_API_ENDPOINT = DEV_API_ORIGIN;\n process.env.MAX_POLL_RETRIES = \"3\";\n process.env.POLL_INTERVAL = \"1\";\n delete process.env.DEPLOY_INIT_ERROR_FAIL_FAST;\n\n previousDispatcher = getGlobalDispatcher();\n mockAgent = new MockAgent();\n mockAgent.disableNetConnect();\n setGlobalDispatcher(mockAgent);\n devApiPool = mockAgent.get(DEV_API_ORIGIN);\n deploymentPool = mockAgent.get(DEPLOYMENT_ORIGIN);\n spinner = { suffixText: \"\" } as unknown as Ora;\n });\n\n afterEach(async () => {\n await mockAgent.close();\n setGlobalDispatcher(previousDispatcher);\n\n for (const name of ENVIRONMENT_VARIABLES) {\n const value = previousEnvironment[name];\n if (value === undefined) {\n delete process.env[name];\n } else {\n process.env[name] = value;\n }\n }\n });\n\n function interceptStatus(body: Record<string, unknown>, times = 1) {\n devApiPool\n .intercept({ path: STATUS_PATH, method: \"GET\" })\n .reply(200, body)\n .times(times);\n }\n\n function interceptProbe(\n status: number,\n body: Record<string, unknown> | string,\n times = 1\n ) {\n deploymentPool\n .intercept({ path: BUILD_PATH, method: \"GET\" })\n .reply(status, body)\n .times(times);\n }\n\n function poll() {\n return pollDeployment(\n argv,\n \"deployment-123\",\n \"test-account\",\n \"test-project\",\n spinner\n );\n }\n\n it(\"fails fast after two consecutive matching initialization errors\", async () => {\n interceptStatus(statusBody(), 2);\n interceptProbe(500, initErrorBody(), 2);\n\n const result = await poll();\n\n assert.deepEqual(result, {\n logUrl: LOG_URL,\n initError: { detail: INIT_ERROR_DETAIL },\n });\n assert.strictEqual(mockAgent.pendingInterceptors().length, 0);\n });\n\n it(\"succeeds when one matching initialization error is followed by a live probe\", async () => {\n interceptStatus(statusBody(), 2);\n interceptProbe(500, initErrorBody());\n interceptProbe(200, { buildId: BUILD_ID });\n\n assert.deepEqual(await poll(), {\n url: DEPLOYMENT_ORIGIN,\n logUrl: LOG_URL,\n });\n assert.strictEqual(mockAgent.pendingInterceptors().length, 0);\n });\n\n it(\"polls to exhaustion when the initialization error is for another build\", async () => {\n interceptStatus(statusBody(), 3);\n interceptProbe(\n 500,\n initErrorBody({ trace: { timestamp: 0, buildId: \"build-old\" } }),\n 3\n );\n\n assert.deepEqual(await poll(), { logUrl: LOG_URL });\n });\n\n it(\"does not fail fast when the status response omits buildId\", async () => {\n interceptStatus(statusBody({ buildId: undefined }), 3);\n interceptProbe(500, initErrorBody(), 3);\n\n assert.deepEqual(await poll(), { logUrl: LOG_URL });\n });\n\n it(\"keeps polling after a non-JSON 5xx probe response\", async () => {\n interceptStatus(statusBody(), 3);\n interceptProbe(500, \"<html>unavailable</html>\", 3);\n\n assert.deepEqual(await poll(), { logUrl: LOG_URL });\n });\n\n it(\"uses the fallback detail when a matching initialization error omits detail\", async () => {\n interceptStatus(statusBody(), 2);\n interceptProbe(500, initErrorBody({ detail: undefined }), 2);\n\n assert.deepEqual(await poll(), {\n logUrl: LOG_URL,\n initError: { detail: FALLBACK_INIT_ERROR_DETAIL },\n });\n });\n\n it(\"returns the latest build log URL when in-progress polling is exhausted\", async () => {\n interceptStatus(statusBody({ status: \"IN_PROGRESS\", url: undefined }), 3);\n\n assert.deepEqual(await poll(), { logUrl: LOG_URL });\n });\n\n it(\"returns the deployment URL after a successful build probe\", async () => {\n interceptStatus(statusBody());\n interceptProbe(200, { buildId: BUILD_ID });\n\n assert.deepEqual(await poll(), {\n url: DEPLOYMENT_ORIGIN,\n logUrl: LOG_URL,\n });\n });\n\n it(\"returns a non-Zuplo deployment URL without probing it\", async () => {\n interceptStatus(statusBody({ url: PRIVATE_DEPLOYMENT_ORIGIN }));\n\n assert.deepEqual(await poll(), {\n url: PRIVATE_DEPLOYMENT_ORIGIN,\n logUrl: LOG_URL,\n });\n });\n\n it(\"keeps polling matching initialization errors when fail-fast is disabled\", async () => {\n process.env.DEPLOY_INIT_ERROR_FAIL_FAST = \"false\";\n interceptStatus(statusBody(), 3);\n interceptProbe(500, initErrorBody(), 3);\n\n assert.deepEqual(await poll(), { logUrl: LOG_URL });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/confirm-production-deploy.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/bucket/models.ts","../src/bucket/list/handler.ts","../src/build/handler.ts","../src/ca-certificate/models.ts","../src/ca-certificate/validation.test.ts","../src/ca-certificate/validation.ts","../src/ca-certificate/create/handler.ts","../src/ca-certificate/delete/handler.ts","../src/ca-certificate/describe/handler.ts","../src/ca-certificate/list/handler.ts","../src/ca-certificate/update/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/lint.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/logout.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/bucket/index.ts","../src/cmds/bucket/list.ts","../src/cmds/ca-certificate/create.ts","../src/cmds/ca-certificate/delete.ts","../src/cmds/ca-certificate/describe.ts","../src/cmds/ca-certificate/index.ts","../src/cmds/ca-certificate/list.ts","../src/cmds/ca-certificate/update.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/project/list.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/cli-dispatcher.test.ts","../src/common/cli-dispatcher.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/cli-invocation.test.ts","../src/common/analytics/cli-invocation.ts","../src/common/analytics/lib.ts","../src/common/analytics/package-manager.test.ts","../src/common/analytics/package-manager.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/check-pnpm-lifecycle.test.ts","../src/common/middleware/check-pnpm-lifecycle.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/confirm-production-deploy.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.test.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/pnpm-lifecycle.test.ts","../src/common/utils/pnpm-lifecycle.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/dev/zuplo-local-gitignore.test.ts","../src/dev/zuplo-local-gitignore.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/link/project-type.test.ts","../src/link/project-type.ts","../src/lint/handler.ts","../src/lint/resolve-binary.test.ts","../src/lint/resolve-binary.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/logout.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/project/list/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.test.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/confirm-production-deploy.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/bucket/models.ts","../src/bucket/list/handler.ts","../src/build/handler.ts","../src/ca-certificate/models.ts","../src/ca-certificate/validation.test.ts","../src/ca-certificate/validation.ts","../src/ca-certificate/create/handler.ts","../src/ca-certificate/delete/handler.ts","../src/ca-certificate/describe/handler.ts","../src/ca-certificate/list/handler.ts","../src/ca-certificate/update/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/lint.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/logout.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/bucket/index.ts","../src/cmds/bucket/list.ts","../src/cmds/ca-certificate/create.ts","../src/cmds/ca-certificate/delete.ts","../src/cmds/ca-certificate/describe.ts","../src/cmds/ca-certificate/index.ts","../src/cmds/ca-certificate/list.ts","../src/cmds/ca-certificate/update.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/project/list.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/cli-dispatcher.test.ts","../src/common/cli-dispatcher.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/cli-invocation.test.ts","../src/common/analytics/cli-invocation.ts","../src/common/analytics/lib.ts","../src/common/analytics/package-manager.test.ts","../src/common/analytics/package-manager.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/check-pnpm-lifecycle.test.ts","../src/common/middleware/check-pnpm-lifecycle.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/confirm-production-deploy.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.test.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/pnpm-lifecycle.test.ts","../src/common/utils/pnpm-lifecycle.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/classify-build-probe.test.ts","../src/deploy/classify-build-probe.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.test.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/dev/zuplo-local-gitignore.test.ts","../src/dev/zuplo-local-gitignore.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/link/project-type.test.ts","../src/link/project-type.ts","../src/lint/handler.ts","../src/lint/resolve-binary.test.ts","../src/lint/resolve-binary.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/logout.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/project/list/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.test.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.3"}
|
package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwks/remote.d.ts
CHANGED
|
@@ -36,17 +36,17 @@ export declare const jwksCache: unique symbol;
|
|
|
36
36
|
export interface RemoteJWKSetOptions {
|
|
37
37
|
/**
|
|
38
38
|
* Timeout (in milliseconds) for the HTTP request. When reached the request will be aborted and
|
|
39
|
-
* the verification will fail. Default is 5000 (5 seconds).
|
|
39
|
+
* the verification will fail. Must be a non-negative integer. Default is 5000 (5 seconds).
|
|
40
40
|
*/
|
|
41
41
|
timeoutDuration?: number;
|
|
42
42
|
/**
|
|
43
43
|
* Duration (in milliseconds) for which no more HTTP requests will be triggered after a previous
|
|
44
|
-
* successful fetch. Default is 30000 (30 seconds).
|
|
44
|
+
* successful fetch. Must not be `NaN`. Default is 30000 (30 seconds).
|
|
45
45
|
*/
|
|
46
46
|
cooldownDuration?: number;
|
|
47
47
|
/**
|
|
48
48
|
* Maximum time (in milliseconds) between successful HTTP requests. Default is 600000 (10
|
|
49
|
-
* minutes).
|
|
49
|
+
* minutes). Must not be `NaN`.
|
|
50
50
|
*/
|
|
51
51
|
cacheMaxAge?: number | typeof Infinity;
|
|
52
52
|
/** Headers to be sent with the HTTP request. */
|
|
@@ -60,7 +60,7 @@ export interface RemoteJWKSetOptions {
|
|
|
60
60
|
export interface ExportedJWKSCache {
|
|
61
61
|
/** Current cached JSON Web Key Set */
|
|
62
62
|
jwks: types.JSONWebKeySet;
|
|
63
|
-
/** Last updated at timestamp (
|
|
63
|
+
/** Last updated at timestamp (milliseconds since epoch) */
|
|
64
64
|
uat: number;
|
|
65
65
|
}
|
|
66
66
|
/** See {@link jwksCache}. */
|
|
@@ -11,9 +11,9 @@ export interface GeneralVerifyGetKey<KeyType extends types.CryptoKey | Uint8Arra
|
|
|
11
11
|
* > Note: The function iterates over the `signatures` array in the General JWS and returns the verification
|
|
12
12
|
* > result of the first signature entry that can be successfully verified. The result only contains
|
|
13
13
|
* > the payload, protected header, and unprotected header of that successfully verified signature
|
|
14
|
-
* > entry. Other signature entries
|
|
15
|
-
* >
|
|
16
|
-
* > (verified) data.
|
|
14
|
+
* > entry. Other signature entries' headers may be inspected solely to reject inconsistent use of the
|
|
15
|
+
* > JWS Unencoded Payload Option, and their headers are not included in the returned result.
|
|
16
|
+
* > Recipients of a General JWS should only rely on the returned (verified) data.
|
|
17
17
|
*
|
|
18
18
|
* @param jws General JWS.
|
|
19
19
|
* @param key Key to verify the JWS with. See
|
package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/encrypt.d.ts
CHANGED
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
import type * as types from '../types.d.ts';
|
|
2
|
+
/**
|
|
3
|
+
* EncryptJWT constructor
|
|
4
|
+
*
|
|
5
|
+
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
6
|
+
*/
|
|
7
|
+
declare const EncryptJWT_base: new (payload?: types.JWTPayload) => types.ProduceJWT;
|
|
2
8
|
/** The EncryptJWT class is used to build and encrypt Compact JWE formatted JSON Web Tokens. */
|
|
3
|
-
export declare class EncryptJWT
|
|
9
|
+
export declare class EncryptJWT extends EncryptJWT_base {
|
|
4
10
|
#private;
|
|
5
|
-
/**
|
|
6
|
-
* {@link EncryptJWT} constructor
|
|
7
|
-
*
|
|
8
|
-
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
9
|
-
*/
|
|
10
|
-
constructor(payload?: types.JWTPayload);
|
|
11
|
-
setIssuer(issuer: string): this;
|
|
12
|
-
setSubject(subject: string): this;
|
|
13
|
-
setAudience(audience: string | string[]): this;
|
|
14
|
-
setJti(jwtId: string): this;
|
|
15
|
-
setNotBefore(input: number | string | Date): this;
|
|
16
|
-
setExpirationTime(input: number | string | Date): this;
|
|
17
|
-
setIssuedAt(input?: number | string | Date): this;
|
|
18
11
|
/**
|
|
19
12
|
* Sets the JWE Protected Header on the EncryptJWT object.
|
|
20
13
|
*
|
|
@@ -66,3 +59,4 @@ export declare class EncryptJWT implements types.ProduceJWT {
|
|
|
66
59
|
*/
|
|
67
60
|
encrypt(key: types.KeyInput, options?: types.EncryptOptions): Promise<string>;
|
|
68
61
|
}
|
|
62
|
+
export {};
|
package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/sign.d.ts
CHANGED
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
import type * as types from '../types.d.ts';
|
|
2
|
+
/**
|
|
3
|
+
* SignJWT constructor
|
|
4
|
+
*
|
|
5
|
+
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
6
|
+
*/
|
|
7
|
+
declare const SignJWT_base: new (payload?: types.JWTPayload) => types.ProduceJWT;
|
|
2
8
|
/** The SignJWT class is used to build and sign Compact JWS formatted JSON Web Tokens. */
|
|
3
|
-
export declare class SignJWT
|
|
9
|
+
export declare class SignJWT extends SignJWT_base {
|
|
4
10
|
#private;
|
|
5
|
-
/**
|
|
6
|
-
* {@link SignJWT} constructor
|
|
7
|
-
*
|
|
8
|
-
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
9
|
-
*/
|
|
10
|
-
constructor(payload?: types.JWTPayload);
|
|
11
|
-
setIssuer(issuer: string): this;
|
|
12
|
-
setSubject(subject: string): this;
|
|
13
|
-
setAudience(audience: string | string[]): this;
|
|
14
|
-
setJti(jwtId: string): this;
|
|
15
|
-
setNotBefore(input: number | string | Date): this;
|
|
16
|
-
setExpirationTime(input: number | string | Date): this;
|
|
17
|
-
setIssuedAt(input?: number | string | Date): this;
|
|
18
11
|
/**
|
|
19
12
|
* Sets the JWS Protected Header on the SignJWT object.
|
|
20
13
|
*
|
|
@@ -30,3 +23,4 @@ export declare class SignJWT implements types.ProduceJWT {
|
|
|
30
23
|
*/
|
|
31
24
|
sign(key: types.KeyInput, options?: types.SignOptions): Promise<string>;
|
|
32
25
|
}
|
|
26
|
+
export {};
|
package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/unsecured.d.ts
CHANGED
|
@@ -6,24 +6,17 @@ export interface UnsecuredResult<PayloadType = types.JWTPayload> {
|
|
|
6
6
|
/** The decoded JOSE Header; always `{ "alg": "none" }` for an Unsecured JWT. */
|
|
7
7
|
header: types.JWSHeaderParameters;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* UnsecuredJWT constructor
|
|
11
|
+
*
|
|
12
|
+
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
13
|
+
*/
|
|
14
|
+
declare const UnsecuredJWT_base: new (payload?: types.JWTPayload) => types.ProduceJWT;
|
|
9
15
|
/** The UnsecuredJWT class is a utility for dealing with `{ "alg": "none" }` Unsecured JWTs. */
|
|
10
|
-
export declare class UnsecuredJWT
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* {@link UnsecuredJWT} constructor
|
|
14
|
-
*
|
|
15
|
-
* @param payload The JWT Claims Set object. Defaults to an empty object.
|
|
16
|
-
*/
|
|
17
|
-
constructor(payload?: types.JWTPayload);
|
|
16
|
+
export declare class UnsecuredJWT extends UnsecuredJWT_base {
|
|
17
|
+
private jwt;
|
|
18
18
|
/** Encodes the Unsecured JWT. */
|
|
19
19
|
encode(): string;
|
|
20
|
-
setIssuer(issuer: string): this;
|
|
21
|
-
setSubject(subject: string): this;
|
|
22
|
-
setAudience(audience: string | string[]): this;
|
|
23
|
-
setJti(jwtId: string): this;
|
|
24
|
-
setNotBefore(input: number | string | Date): this;
|
|
25
|
-
setExpirationTime(input: number | string | Date): this;
|
|
26
|
-
setIssuedAt(input?: number | string | Date): this;
|
|
27
20
|
/**
|
|
28
21
|
* Decodes an unsecured JWT.
|
|
29
22
|
*
|
|
@@ -32,3 +25,4 @@ export declare class UnsecuredJWT implements types.ProduceJWT {
|
|
|
32
25
|
*/
|
|
33
26
|
static decode<PayloadType = types.JWTPayload>(jwt: string, options?: types.JWTClaimVerificationOptions): UnsecuredResult<PayloadType>;
|
|
34
27
|
}
|
|
28
|
+
export {};
|
|
@@ -1,27 +1,49 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { assertNotSet } from '../../lib/helpers.js';
|
|
2
|
+
import { assertUint8Array } from '../../lib/type_checks.js';
|
|
3
|
+
import { createJWE } from '../../lib/jwe_encrypt.js';
|
|
2
4
|
export class CompactEncrypt {
|
|
3
|
-
#
|
|
5
|
+
#plaintext;
|
|
6
|
+
#protectedHeader;
|
|
7
|
+
#cek;
|
|
8
|
+
#iv;
|
|
9
|
+
#keyManagementParameters;
|
|
4
10
|
constructor(plaintext) {
|
|
5
|
-
|
|
11
|
+
assertUint8Array(plaintext, 'plaintext');
|
|
12
|
+
this.#plaintext = plaintext;
|
|
6
13
|
}
|
|
7
14
|
setContentEncryptionKey(cek) {
|
|
8
|
-
this.#
|
|
15
|
+
assertNotSet(this.#cek, 'setContentEncryptionKey');
|
|
16
|
+
this.#cek = cek;
|
|
9
17
|
return this;
|
|
10
18
|
}
|
|
11
19
|
setInitializationVector(iv) {
|
|
12
|
-
this.#
|
|
20
|
+
assertNotSet(this.#iv, 'setInitializationVector');
|
|
21
|
+
this.#iv = iv;
|
|
13
22
|
return this;
|
|
14
23
|
}
|
|
15
24
|
setProtectedHeader(protectedHeader) {
|
|
16
|
-
this.#
|
|
25
|
+
assertNotSet(this.#protectedHeader, 'setProtectedHeader');
|
|
26
|
+
this.#protectedHeader = protectedHeader;
|
|
17
27
|
return this;
|
|
18
28
|
}
|
|
19
29
|
setKeyManagementParameters(parameters) {
|
|
20
|
-
this.#
|
|
30
|
+
assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
|
|
31
|
+
this.#keyManagementParameters = parameters;
|
|
21
32
|
return this;
|
|
22
33
|
}
|
|
23
34
|
async encrypt(key, options) {
|
|
24
|
-
const jwe = await
|
|
35
|
+
const jwe = await createJWE([
|
|
36
|
+
this.#plaintext,
|
|
37
|
+
this.#protectedHeader,
|
|
38
|
+
undefined,
|
|
39
|
+
undefined,
|
|
40
|
+
undefined,
|
|
41
|
+
this.#cek,
|
|
42
|
+
this.#iv,
|
|
43
|
+
this.#keyManagementParameters,
|
|
44
|
+
undefined,
|
|
45
|
+
false,
|
|
46
|
+
], key, options);
|
|
25
47
|
return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');
|
|
26
48
|
}
|
|
27
49
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { JWEInvalid } from '../../util/errors.js';
|
|
2
2
|
import { isObject } from '../../lib/type_checks.js';
|
|
3
|
-
import { prepareDecrypt, decryptJWE, decryptResult,
|
|
3
|
+
import { prepareDecrypt, decryptJWE, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE, } from '../../lib/jwe_decrypt.js';
|
|
4
4
|
export async function flattenedDecrypt(jwe, key, options) {
|
|
5
5
|
if (!isObject(jwe)) {
|
|
6
6
|
throw new JWEInvalid('Flattened JWE must be an object');
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const shared = snapshotSharedJWE(jwe);
|
|
9
|
+
const [recipient, , error] = snapshotRecipientJWE(jwe);
|
|
10
|
+
if (!recipient)
|
|
11
|
+
throw error;
|
|
12
|
+
const snapshot = { ...shared, ...recipient };
|
|
13
|
+
checkRecipient(snapshot);
|
|
14
|
+
return decryptResult(snapshot, await decryptJWE(snapshot, prepareDecrypt(options), key));
|
|
11
15
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { JWEInvalid } from '../../util/errors.js';
|
|
1
|
+
import { assertNotSet } from '../../lib/helpers.js';
|
|
3
2
|
import { createJWE } from '../../lib/jwe_encrypt.js';
|
|
4
|
-
import {
|
|
3
|
+
import { assertUint8Array } from '../../lib/type_checks.js';
|
|
5
4
|
export class FlattenedEncrypt {
|
|
6
5
|
#plaintext;
|
|
7
6
|
#protectedHeader;
|
|
@@ -12,9 +11,7 @@ export class FlattenedEncrypt {
|
|
|
12
11
|
#iv;
|
|
13
12
|
#keyManagementParameters;
|
|
14
13
|
constructor(plaintext) {
|
|
15
|
-
|
|
16
|
-
throw new TypeError('plaintext must be an instance of Uint8Array');
|
|
17
|
-
}
|
|
14
|
+
assertUint8Array(plaintext, 'plaintext');
|
|
18
15
|
this.#plaintext = plaintext;
|
|
19
16
|
}
|
|
20
17
|
setKeyManagementParameters(parameters) {
|
|
@@ -52,10 +49,6 @@ export class FlattenedEncrypt {
|
|
|
52
49
|
return this;
|
|
53
50
|
}
|
|
54
51
|
async encrypt(key, options) {
|
|
55
|
-
if (!this.#protectedHeader && !this.#unprotectedHeader && !this.#sharedUnprotectedHeader) {
|
|
56
|
-
throw new JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');
|
|
57
|
-
}
|
|
58
|
-
validateCritDuplicates(JWEInvalid, this.#protectedHeader);
|
|
59
52
|
return createJWE([
|
|
60
53
|
this.#plaintext,
|
|
61
54
|
this.#protectedHeader,
|
|
@@ -65,8 +58,8 @@ export class FlattenedEncrypt {
|
|
|
65
58
|
this.#cek,
|
|
66
59
|
this.#iv,
|
|
67
60
|
this.#keyManagementParameters,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
], key);
|
|
61
|
+
undefined,
|
|
62
|
+
false,
|
|
63
|
+
], key, options);
|
|
71
64
|
}
|
|
72
65
|
}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import { prepareDecrypt, shareJWE, decryptRecipient, decryptResult,
|
|
1
|
+
import { prepareDecrypt, shareJWE, decryptRecipient, decryptResult, checkRecipient, snapshotSharedJWE, snapshotRecipientJWE, } from '../../lib/jwe_decrypt.js';
|
|
2
2
|
import { JWEDecryptionFailed, JWEInvalid } from '../../util/errors.js';
|
|
3
3
|
import { isObject } from '../../lib/type_checks.js';
|
|
4
4
|
export async function generalDecrypt(jwe, key, options) {
|
|
5
5
|
if (!isObject(jwe)) {
|
|
6
6
|
throw new JWEInvalid('General JWE must be an object');
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
const inputRecipients = jwe.recipients;
|
|
9
|
+
if (!Array.isArray(inputRecipients)) {
|
|
9
10
|
throw new JWEInvalid('JWE Recipients missing or incorrect type');
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
const recipients = Array.from(inputRecipients);
|
|
13
|
+
if (!recipients.every(isObject)) {
|
|
14
|
+
throw new JWEInvalid('JWE Recipients missing or incorrect type');
|
|
15
|
+
}
|
|
16
|
+
if (!recipients.length) {
|
|
12
17
|
throw new JWEInvalid('JWE Recipients has no members');
|
|
13
18
|
}
|
|
14
19
|
let shared;
|
|
20
|
+
let sharedJwe;
|
|
15
21
|
let token;
|
|
16
22
|
try {
|
|
17
|
-
checkShared(jwe);
|
|
18
23
|
shared = prepareDecrypt(options);
|
|
19
|
-
|
|
24
|
+
sharedJwe = snapshotSharedJWE(jwe);
|
|
25
|
+
token = shareJWE(sharedJwe);
|
|
20
26
|
}
|
|
21
27
|
catch {
|
|
22
28
|
throw new JWEDecryptionFailed();
|
|
23
29
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
const recipientSnapshots = recipients.map((recipient) => snapshotRecipientJWE(recipient));
|
|
31
|
+
if (recipients.length > 1) {
|
|
32
|
+
for (const [, headerAlg] of recipientSnapshots) {
|
|
33
|
+
const alg = token[0]?.alg ?? headerAlg ?? sharedJwe.unprotected?.alg;
|
|
27
34
|
if (alg === 'dir' || alg === 'ECDH-ES') {
|
|
28
35
|
throw new JWEInvalid(`"${alg}" alg may only have a single recipient`);
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
|
-
for (const recipient of
|
|
39
|
+
for (const [recipient] of recipientSnapshots) {
|
|
40
|
+
if (!recipient)
|
|
41
|
+
continue;
|
|
33
42
|
try {
|
|
34
|
-
const flattened = {
|
|
35
|
-
aad: jwe.aad,
|
|
36
|
-
ciphertext: jwe.ciphertext,
|
|
37
|
-
encrypted_key: recipient.encrypted_key,
|
|
38
|
-
header: recipient.header,
|
|
39
|
-
iv: jwe.iv,
|
|
40
|
-
protected: jwe.protected,
|
|
41
|
-
tag: jwe.tag,
|
|
42
|
-
unprotected: jwe.unprotected,
|
|
43
|
-
};
|
|
43
|
+
const flattened = { ...sharedJwe, ...recipient };
|
|
44
44
|
checkRecipient(flattened);
|
|
45
45
|
return decryptResult(flattened, await decryptRecipient(flattened, token, shared, key));
|
|
46
46
|
}
|