@psnext/slingcli 3.1.20260904-1 → 3.3.20260914-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/node_modules/@aws-sdk/core/dist-cjs/submodules/util/index.js +5 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/util/hasOwn.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/util/index.js +1 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/util/hasOwn.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/util/index.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/hasOwn.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +1 -0
- package/node_modules/@aws-sdk/core/package.json +1 -1
- package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-websocket/package.json +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-PBNSMEG7.js → chunk-BRL3MDQL.js} +10 -10
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js +79 -32
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Client.md +25 -8
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EventSource.md +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/api/readable.js +33 -43
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/connect.js +16 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/symbols.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/agent.js +7 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h1.js +9 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h2.js +221 -12
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client.js +76 -30
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +106 -22
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/cache-handler.js +29 -5
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/decorator-handler.js +7 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/redirect-handler.js +21 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/retry-handler.js +155 -32
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/cache.js +65 -9
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/decompress.js +115 -13
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dns.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dump.js +10 -23
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-agent.js +13 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-utils.js +217 -27
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/util/cache.js +43 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/cookies/parse.js +150 -147
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/index.js +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/request.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/util.js +6 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/webidl/index.js +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/connection.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/websocket.js +22 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/package.json +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +4 -4
- package/node_modules/@earendil-works/pi-coding-agent/package.json +1 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/errors/index.js +20 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +11 -10
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +11 -10
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +25 -8
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -0
- package/node_modules/@smithy/core/dist-es/submodules/errors/errors.js +18 -0
- package/node_modules/@smithy/core/dist-es/submodules/errors/index.js +1 -0
- package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/service-error-classification.js +11 -10
- package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.browser.js +2 -0
- package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.js +23 -8
- package/node_modules/@smithy/core/dist-types/submodules/errors/errors.d.ts +44 -0
- package/node_modules/@smithy/core/dist-types/submodules/errors/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/errors.d.ts +44 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
- package/node_modules/@smithy/core/errors.d.ts +5 -0
- package/node_modules/@smithy/core/errors.js +5 -0
- package/node_modules/@smithy/core/package.json +11 -2
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.d.ts +1 -0
- package/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
- package/node_modules/@types/node/http.d.ts +1 -1
- package/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/node/perf_hooks.d.ts +31 -19
- package/node_modules/@types/node/quic.d.ts +6 -4
- package/node_modules/@types/node/stream/web.d.ts +20 -0
- package/node_modules/@types/node/tls.d.ts +26 -15
- package/node_modules/@types/node/vfs.d.ts +7 -6
- package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
- package/node_modules/@types/node/zlib.d.ts +17 -0
- package/node_modules/hono/dist/cjs/client/client.js +4 -4
- package/node_modules/hono/dist/cjs/hono-base.js +7 -6
- package/node_modules/hono/dist/cjs/jsx/base.js +18 -1
- package/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +2 -2
- package/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/hono/dist/client/client.js +4 -4
- package/node_modules/hono/dist/hono-base.js +7 -6
- package/node_modules/hono/dist/jsx/base.js +15 -1
- package/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/hono/dist/types/context.d.ts +2 -2
- package/node_modules/hono/dist/types/jsx/base.d.ts +3 -0
- package/node_modules/hono/package.json +2 -2
- package/node_modules/jose/dist/types/index.d.ts +1 -2
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -11
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +13 -16
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -11
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -19
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +10 -16
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +18 -21
- package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -1
- package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +4 -6
- package/node_modules/jose/dist/types/jwks/local.d.ts +5 -4
- package/node_modules/jose/dist/types/jwks/remote.d.ts +20 -21
- package/node_modules/jose/dist/types/jws/compact/sign.d.ts +4 -4
- package/node_modules/jose/dist/types/jws/compact/verify.d.ts +8 -11
- package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +5 -5
- package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +8 -11
- package/node_modules/jose/dist/types/jws/general/sign.d.ts +10 -14
- package/node_modules/jose/dist/types/jws/general/verify.d.ts +11 -17
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +14 -11
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +24 -22
- package/node_modules/jose/dist/types/jwt/sign.d.ts +3 -7
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +2 -6
- package/node_modules/jose/dist/types/jwt/verify.d.ts +13 -6
- package/node_modules/jose/dist/types/key/export.d.ts +6 -6
- package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +9 -14
- package/node_modules/jose/dist/types/key/generate_secret.d.ts +10 -10
- package/node_modules/jose/dist/types/key/import.d.ts +19 -18
- package/node_modules/jose/dist/types/types.d.ts +152 -247
- package/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +6 -1
- package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -3
- package/node_modules/jose/dist/types/util/errors.d.ts +29 -40
- package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +1 -2
- package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +9 -26
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +3 -3
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +11 -30
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +6 -6
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +33 -57
- package/node_modules/jose/dist/webapi/jwk/embedded.js +3 -4
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +3 -6
- package/node_modules/jose/dist/webapi/jwks/local.js +16 -10
- package/node_modules/jose/dist/webapi/jwks/remote.js +2 -2
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +2 -4
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +2 -2
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +8 -15
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +4 -14
- package/node_modules/jose/dist/webapi/jws/general/sign.js +4 -11
- package/node_modules/jose/dist/webapi/jws/general/verify.js +5 -7
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +2 -3
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +11 -25
- package/node_modules/jose/dist/webapi/jwt/sign.js +1 -1
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +1 -2
- package/node_modules/jose/dist/webapi/jwt/verify.js +4 -4
- package/node_modules/jose/dist/webapi/key/export.js +12 -16
- package/node_modules/jose/dist/webapi/key/generate_key_pair.js +4 -13
- package/node_modules/jose/dist/webapi/key/generate_secret.js +1 -1
- package/node_modules/jose/dist/webapi/key/import.js +5 -9
- package/node_modules/jose/dist/webapi/lib/asn1.js +2 -4
- package/node_modules/jose/dist/webapi/lib/buffer_utils.js +35 -0
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +21 -29
- package/node_modules/jose/dist/webapi/lib/deflate.js +9 -19
- package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +0 -4
- package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +21 -54
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +26 -59
- package/node_modules/jose/dist/webapi/lib/jws_sign.js +29 -43
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +37 -45
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +1 -1
- package/node_modules/jose/dist/webapi/lib/key.js +119 -59
- package/node_modules/jose/dist/webapi/lib/key_management.js +45 -80
- package/node_modules/jose/dist/webapi/lib/{options.js → validate.js} +64 -3
- package/node_modules/jose/dist/webapi/util/base64url.js +5 -19
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +1 -1
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +1 -1
- package/node_modules/jose/package.json +1 -1
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +4 -2
- package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +70 -14
- package/node_modules/undici/lib/dispatcher/client.js +6 -2
- package/node_modules/undici/lib/handler/cache-handler.js +21 -5
- package/node_modules/undici/lib/handler/retry-handler.js +42 -7
- package/node_modules/undici/lib/interceptor/cache.js +20 -1
- package/node_modules/undici/lib/interceptor/decompress.js +146 -14
- package/node_modules/undici/lib/interceptor/dump.js +10 -23
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +245 -150
- package/node_modules/undici/lib/web/websocket/connection.js +1 -1
- package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/interceptors.d.ts +2 -0
- package/node_modules/undici-types/client.d.ts +8 -3
- package/node_modules/undici-types/connector.d.ts +1 -0
- package/node_modules/undici-types/cookies.d.ts +1 -1
- package/node_modules/undici-types/dispatcher.d.ts +3 -3
- package/node_modules/undici-types/errors.d.ts +10 -0
- package/node_modules/undici-types/fetch.d.ts +5 -1
- package/node_modules/undici-types/handlers.d.ts +2 -0
- package/node_modules/undici-types/interceptors.d.ts +1 -1
- package/node_modules/undici-types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici-types/package.json +1 -1
- package/node_modules/undici-types/proxy-agent.d.ts +7 -0
- package/node_modules/zod/README.md +2 -2
- package/node_modules/zod/compile.cjs +19 -0
- package/node_modules/zod/index.cjs +19 -0
- package/node_modules/zod/locales/index.cjs +19 -0
- package/node_modules/zod/mini/index.cjs +19 -0
- package/node_modules/zod/package.json +8 -7
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
- package/node_modules/zod/src/v4/classic/external.ts +2 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
- package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
- package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
- package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
- package/node_modules/zod/src/v4/core/api.ts +44 -28
- package/node_modules/zod/src/v4/core/checks.ts +62 -102
- package/node_modules/zod/src/v4/core/compile.ts +218 -93
- package/node_modules/zod/src/v4/core/core.ts +1 -3
- package/node_modules/zod/src/v4/core/doc.ts +6 -2
- package/node_modules/zod/src/v4/core/errors.ts +3 -6
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
- package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
- package/node_modules/zod/src/v4/core/parse.ts +37 -16
- package/node_modules/zod/src/v4/core/regexes.ts +14 -4
- package/node_modules/zod/src/v4/core/schemas.ts +296 -132
- package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
- package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
- package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
- package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
- package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
- package/node_modules/zod/src/v4/core/util.ts +218 -147
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/locales/ar.ts +2 -0
- package/node_modules/zod/src/v4/locales/az.ts +2 -0
- package/node_modules/zod/src/v4/locales/be.ts +2 -0
- package/node_modules/zod/src/v4/locales/bg.ts +2 -0
- package/node_modules/zod/src/v4/locales/bn.ts +2 -0
- package/node_modules/zod/src/v4/locales/ca.ts +2 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
- package/node_modules/zod/src/v4/locales/cs.ts +2 -0
- package/node_modules/zod/src/v4/locales/da.ts +2 -0
- package/node_modules/zod/src/v4/locales/de.ts +2 -0
- package/node_modules/zod/src/v4/locales/el.ts +2 -0
- package/node_modules/zod/src/v4/locales/en.ts +2 -0
- package/node_modules/zod/src/v4/locales/eo.ts +2 -0
- package/node_modules/zod/src/v4/locales/es.ts +2 -0
- package/node_modules/zod/src/v4/locales/fa.ts +2 -0
- package/node_modules/zod/src/v4/locales/fi.ts +2 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
- package/node_modules/zod/src/v4/locales/fr.ts +2 -0
- package/node_modules/zod/src/v4/locales/gu.ts +2 -0
- package/node_modules/zod/src/v4/locales/he.ts +2 -0
- package/node_modules/zod/src/v4/locales/hi.ts +2 -0
- package/node_modules/zod/src/v4/locales/hr.ts +2 -0
- package/node_modules/zod/src/v4/locales/hu.ts +2 -0
- package/node_modules/zod/src/v4/locales/hy.ts +2 -0
- package/node_modules/zod/src/v4/locales/id.ts +2 -0
- package/node_modules/zod/src/v4/locales/index.ts +1 -0
- package/node_modules/zod/src/v4/locales/is.ts +2 -0
- package/node_modules/zod/src/v4/locales/it.ts +2 -0
- package/node_modules/zod/src/v4/locales/ja.ts +2 -0
- package/node_modules/zod/src/v4/locales/ka.ts +2 -0
- package/node_modules/zod/src/v4/locales/km.ts +2 -0
- package/node_modules/zod/src/v4/locales/kn.ts +2 -0
- package/node_modules/zod/src/v4/locales/ko.ts +2 -0
- package/node_modules/zod/src/v4/locales/lt.ts +2 -0
- package/node_modules/zod/src/v4/locales/mk.ts +2 -0
- package/node_modules/zod/src/v4/locales/ms.ts +2 -0
- package/node_modules/zod/src/v4/locales/ne.ts +2 -0
- package/node_modules/zod/src/v4/locales/nl.ts +2 -0
- package/node_modules/zod/src/v4/locales/nn.ts +2 -0
- package/node_modules/zod/src/v4/locales/no.ts +2 -0
- package/node_modules/zod/src/v4/locales/ota.ts +2 -0
- package/node_modules/zod/src/v4/locales/pl.ts +2 -0
- package/node_modules/zod/src/v4/locales/ps.ts +2 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
- package/node_modules/zod/src/v4/locales/pt.ts +2 -0
- package/node_modules/zod/src/v4/locales/ro.ts +2 -0
- package/node_modules/zod/src/v4/locales/ru.ts +2 -0
- package/node_modules/zod/src/v4/locales/sk.ts +2 -0
- package/node_modules/zod/src/v4/locales/sl.ts +2 -0
- package/node_modules/zod/src/v4/locales/sv.ts +2 -0
- package/node_modules/zod/src/v4/locales/ta.ts +2 -0
- package/node_modules/zod/src/v4/locales/tg.ts +135 -0
- package/node_modules/zod/src/v4/locales/th.ts +2 -0
- package/node_modules/zod/src/v4/locales/tk.ts +2 -0
- package/node_modules/zod/src/v4/locales/tr.ts +2 -0
- package/node_modules/zod/src/v4/locales/uk.ts +2 -0
- package/node_modules/zod/src/v4/locales/ur.ts +2 -0
- package/node_modules/zod/src/v4/locales/uz.ts +2 -0
- package/node_modules/zod/src/v4/locales/vi.ts +2 -0
- package/node_modules/zod/src/v4/locales/yo.ts +2 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
- package/node_modules/zod/src/v4/mini/external.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
- package/node_modules/zod/v3/ZodError.cjs +19 -0
- package/node_modules/zod/v3/errors.cjs +19 -0
- package/node_modules/zod/v3/external.cjs +19 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
- package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
- package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
- package/node_modules/zod/v3/helpers/util.cjs +19 -0
- package/node_modules/zod/v3/index.cjs +19 -0
- package/node_modules/zod/v3/standard-schema.cjs +19 -0
- package/node_modules/zod/v3/types.cjs +19 -0
- package/node_modules/zod/v4/classic/checks.cjs +19 -0
- package/node_modules/zod/v4/classic/coerce.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.cjs +19 -0
- package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
- package/node_modules/zod/v4/classic/errors.cjs +19 -0
- package/node_modules/zod/v4/classic/external.cjs +22 -1
- package/node_modules/zod/v4/classic/external.d.cts +1 -1
- package/node_modules/zod/v4/classic/external.d.ts +1 -1
- package/node_modules/zod/v4/classic/external.js +1 -1
- package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
- package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
- package/node_modules/zod/v4/classic/in-out.cjs +19 -0
- package/node_modules/zod/v4/classic/index.cjs +19 -0
- package/node_modules/zod/v4/classic/iso.cjs +19 -0
- package/node_modules/zod/v4/classic/parse.cjs +19 -0
- package/node_modules/zod/v4/classic/schemas.cjs +100 -35
- package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
- package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
- package/node_modules/zod/v4/classic/schemas.js +77 -33
- package/node_modules/zod/v4/core/api.cjs +45 -22
- package/node_modules/zod/v4/core/api.d.cts +12 -6
- package/node_modules/zod/v4/core/api.d.ts +12 -6
- package/node_modules/zod/v4/core/api.js +25 -22
- package/node_modules/zod/v4/core/checks.cjs +51 -97
- package/node_modules/zod/v4/core/checks.d.cts +17 -1
- package/node_modules/zod/v4/core/checks.d.ts +17 -1
- package/node_modules/zod/v4/core/checks.js +31 -96
- package/node_modules/zod/v4/core/compile.cjs +173 -78
- package/node_modules/zod/v4/core/compile.d.cts +18 -4
- package/node_modules/zod/v4/core/compile.d.ts +18 -4
- package/node_modules/zod/v4/core/compile.js +154 -79
- package/node_modules/zod/v4/core/core.cjs +20 -1
- package/node_modules/zod/v4/core/core.js +1 -1
- package/node_modules/zod/v4/core/doc.cjs +26 -2
- package/node_modules/zod/v4/core/doc.js +7 -2
- package/node_modules/zod/v4/core/errors.cjs +21 -5
- package/node_modules/zod/v4/core/errors.js +2 -5
- package/node_modules/zod/v4/core/index.cjs +19 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
- package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
- package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
- package/node_modules/zod/v4/core/json-schema.cjs +19 -0
- package/node_modules/zod/v4/core/memoizer.cjs +111 -23
- package/node_modules/zod/v4/core/memoizer.js +69 -23
- package/node_modules/zod/v4/core/parse.cjs +56 -16
- package/node_modules/zod/v4/core/parse.js +37 -16
- package/node_modules/zod/v4/core/regexes.cjs +31 -6
- package/node_modules/zod/v4/core/regexes.d.cts +3 -0
- package/node_modules/zod/v4/core/regexes.d.ts +3 -0
- package/node_modules/zod/v4/core/regexes.js +10 -4
- package/node_modules/zod/v4/core/registries.cjs +19 -0
- package/node_modules/zod/v4/core/schemas.cjs +302 -114
- package/node_modules/zod/v4/core/schemas.d.cts +28 -8
- package/node_modules/zod/v4/core/schemas.d.ts +28 -8
- package/node_modules/zod/v4/core/schemas.js +279 -113
- package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
- package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
- package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
- package/node_modules/zod/v4/core/to-json-schema.js +7 -6
- package/node_modules/zod/v4/core/util.cjs +177 -143
- package/node_modules/zod/v4/core/util.d.cts +25 -4
- package/node_modules/zod/v4/core/util.d.ts +25 -4
- package/node_modules/zod/v4/core/util.js +156 -143
- package/node_modules/zod/v4/core/versions.cjs +21 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +19 -0
- package/node_modules/zod/v4/index.cjs +19 -0
- package/node_modules/zod/v4/locales/ar.cjs +2 -0
- package/node_modules/zod/v4/locales/ar.js +2 -0
- package/node_modules/zod/v4/locales/az.cjs +2 -0
- package/node_modules/zod/v4/locales/az.js +2 -0
- package/node_modules/zod/v4/locales/be.cjs +2 -0
- package/node_modules/zod/v4/locales/be.js +2 -0
- package/node_modules/zod/v4/locales/bg.cjs +2 -0
- package/node_modules/zod/v4/locales/bg.js +2 -0
- package/node_modules/zod/v4/locales/bn.cjs +2 -0
- package/node_modules/zod/v4/locales/bn.js +2 -0
- package/node_modules/zod/v4/locales/ca.cjs +2 -0
- package/node_modules/zod/v4/locales/ca.js +2 -0
- package/node_modules/zod/v4/locales/ckb.cjs +2 -0
- package/node_modules/zod/v4/locales/ckb.js +2 -0
- package/node_modules/zod/v4/locales/cs.cjs +2 -0
- package/node_modules/zod/v4/locales/cs.js +2 -0
- package/node_modules/zod/v4/locales/da.cjs +2 -0
- package/node_modules/zod/v4/locales/da.js +2 -0
- package/node_modules/zod/v4/locales/de.cjs +2 -0
- package/node_modules/zod/v4/locales/de.js +2 -0
- package/node_modules/zod/v4/locales/el.cjs +2 -0
- package/node_modules/zod/v4/locales/el.js +2 -0
- package/node_modules/zod/v4/locales/en.cjs +2 -0
- package/node_modules/zod/v4/locales/en.js +2 -0
- package/node_modules/zod/v4/locales/eo.cjs +2 -0
- package/node_modules/zod/v4/locales/eo.js +2 -0
- package/node_modules/zod/v4/locales/es.cjs +2 -0
- package/node_modules/zod/v4/locales/es.js +2 -0
- package/node_modules/zod/v4/locales/fa.cjs +2 -0
- package/node_modules/zod/v4/locales/fa.js +2 -0
- package/node_modules/zod/v4/locales/fi.cjs +2 -0
- package/node_modules/zod/v4/locales/fi.js +2 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
- package/node_modules/zod/v4/locales/fr-CA.js +2 -0
- package/node_modules/zod/v4/locales/fr.cjs +2 -0
- package/node_modules/zod/v4/locales/fr.js +2 -0
- package/node_modules/zod/v4/locales/gu.cjs +2 -0
- package/node_modules/zod/v4/locales/gu.js +2 -0
- package/node_modules/zod/v4/locales/he.cjs +2 -0
- package/node_modules/zod/v4/locales/he.js +2 -0
- package/node_modules/zod/v4/locales/hi.cjs +2 -0
- package/node_modules/zod/v4/locales/hi.js +2 -0
- package/node_modules/zod/v4/locales/hr.cjs +2 -0
- package/node_modules/zod/v4/locales/hr.js +2 -0
- package/node_modules/zod/v4/locales/hu.cjs +2 -0
- package/node_modules/zod/v4/locales/hu.js +2 -0
- package/node_modules/zod/v4/locales/hy.cjs +2 -0
- package/node_modules/zod/v4/locales/hy.js +2 -0
- package/node_modules/zod/v4/locales/id.cjs +2 -0
- package/node_modules/zod/v4/locales/id.js +2 -0
- package/node_modules/zod/v4/locales/index.cjs +22 -1
- package/node_modules/zod/v4/locales/index.d.cts +1 -0
- package/node_modules/zod/v4/locales/index.d.ts +1 -0
- package/node_modules/zod/v4/locales/index.js +1 -0
- package/node_modules/zod/v4/locales/is.cjs +2 -0
- package/node_modules/zod/v4/locales/is.js +2 -0
- package/node_modules/zod/v4/locales/it.cjs +2 -0
- package/node_modules/zod/v4/locales/it.js +2 -0
- package/node_modules/zod/v4/locales/ja.cjs +2 -0
- package/node_modules/zod/v4/locales/ja.js +2 -0
- package/node_modules/zod/v4/locales/ka.cjs +2 -0
- package/node_modules/zod/v4/locales/ka.js +2 -0
- package/node_modules/zod/v4/locales/km.cjs +2 -0
- package/node_modules/zod/v4/locales/km.js +2 -0
- package/node_modules/zod/v4/locales/kn.cjs +2 -0
- package/node_modules/zod/v4/locales/kn.js +2 -0
- package/node_modules/zod/v4/locales/ko.cjs +2 -0
- package/node_modules/zod/v4/locales/ko.js +2 -0
- package/node_modules/zod/v4/locales/lt.cjs +2 -0
- package/node_modules/zod/v4/locales/lt.js +2 -0
- package/node_modules/zod/v4/locales/mk.cjs +2 -0
- package/node_modules/zod/v4/locales/mk.js +2 -0
- package/node_modules/zod/v4/locales/ms.cjs +2 -0
- package/node_modules/zod/v4/locales/ms.js +2 -0
- package/node_modules/zod/v4/locales/ne.cjs +2 -0
- package/node_modules/zod/v4/locales/ne.js +2 -0
- package/node_modules/zod/v4/locales/nl.cjs +2 -0
- package/node_modules/zod/v4/locales/nl.js +2 -0
- package/node_modules/zod/v4/locales/nn.cjs +2 -0
- package/node_modules/zod/v4/locales/nn.js +2 -0
- package/node_modules/zod/v4/locales/no.cjs +2 -0
- package/node_modules/zod/v4/locales/no.js +2 -0
- package/node_modules/zod/v4/locales/ota.cjs +2 -0
- package/node_modules/zod/v4/locales/ota.js +2 -0
- package/node_modules/zod/v4/locales/pl.cjs +2 -0
- package/node_modules/zod/v4/locales/pl.js +2 -0
- package/node_modules/zod/v4/locales/ps.cjs +2 -0
- package/node_modules/zod/v4/locales/ps.js +2 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
- package/node_modules/zod/v4/locales/pt-BR.js +2 -0
- package/node_modules/zod/v4/locales/pt.cjs +2 -0
- package/node_modules/zod/v4/locales/pt.js +2 -0
- package/node_modules/zod/v4/locales/ro.cjs +2 -0
- package/node_modules/zod/v4/locales/ro.js +2 -0
- package/node_modules/zod/v4/locales/ru.cjs +2 -0
- package/node_modules/zod/v4/locales/ru.js +2 -0
- package/node_modules/zod/v4/locales/sk.cjs +2 -0
- package/node_modules/zod/v4/locales/sk.js +2 -0
- package/node_modules/zod/v4/locales/sl.cjs +2 -0
- package/node_modules/zod/v4/locales/sl.js +2 -0
- package/node_modules/zod/v4/locales/sv.cjs +2 -0
- package/node_modules/zod/v4/locales/sv.js +2 -0
- package/node_modules/zod/v4/locales/ta.cjs +2 -0
- package/node_modules/zod/v4/locales/ta.js +2 -0
- package/node_modules/zod/v4/locales/tg.cjs +144 -0
- package/node_modules/zod/v4/locales/tg.d.cts +5 -0
- package/node_modules/zod/v4/locales/tg.d.ts +4 -0
- package/node_modules/zod/v4/locales/tg.js +117 -0
- package/node_modules/zod/v4/locales/th.cjs +2 -0
- package/node_modules/zod/v4/locales/th.js +2 -0
- package/node_modules/zod/v4/locales/tk.cjs +2 -0
- package/node_modules/zod/v4/locales/tk.js +2 -0
- package/node_modules/zod/v4/locales/tr.cjs +2 -0
- package/node_modules/zod/v4/locales/tr.js +2 -0
- package/node_modules/zod/v4/locales/uk.cjs +2 -0
- package/node_modules/zod/v4/locales/uk.js +2 -0
- package/node_modules/zod/v4/locales/ur.cjs +2 -0
- package/node_modules/zod/v4/locales/ur.js +2 -0
- package/node_modules/zod/v4/locales/uz.cjs +2 -0
- package/node_modules/zod/v4/locales/uz.js +2 -0
- package/node_modules/zod/v4/locales/vi.cjs +2 -0
- package/node_modules/zod/v4/locales/vi.js +2 -0
- package/node_modules/zod/v4/locales/yo.cjs +2 -0
- package/node_modules/zod/v4/locales/yo.js +2 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
- package/node_modules/zod/v4/locales/zh-CN.js +2 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
- package/node_modules/zod/v4/locales/zh-TW.js +2 -0
- package/node_modules/zod/v4/mini/checks.cjs +19 -0
- package/node_modules/zod/v4/mini/coerce.cjs +19 -0
- package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
- package/node_modules/zod/v4/mini/external.cjs +22 -1
- package/node_modules/zod/v4/mini/external.d.cts +1 -1
- package/node_modules/zod/v4/mini/external.d.ts +1 -1
- package/node_modules/zod/v4/mini/external.js +1 -1
- package/node_modules/zod/v4/mini/in-out.cjs +19 -0
- package/node_modules/zod/v4/mini/index.cjs +19 -0
- package/node_modules/zod/v4/mini/iso.cjs +19 -0
- package/node_modules/zod/v4/mini/parse.cjs +19 -0
- package/node_modules/zod/v4/mini/schemas.cjs +44 -8
- package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
- package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
- package/node_modules/zod/v4/mini/schemas.js +21 -6
- package/node_modules/zod/v4-mini/index.cjs +19 -0
- package/package.json +2 -2
- package/slingshot/index.js +201 -198
- package/node_modules/jose/dist/webapi/lib/base64.js +0 -20
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -27
- package/node_modules/jose/dist/webapi/lib/helpers.js +0 -45
- package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -12
- package/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -19
- package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +0 -19
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -10
- package/node_modules/jose/dist/webapi/lib/key_options.js +0 -8
- package/node_modules/jose/dist/webapi/lib/signing.js +0 -22
- package/node_modules/jose/dist/webapi/lib/type_checks.js +0 -30
package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h2.js
CHANGED
|
@@ -10,7 +10,8 @@ const {
|
|
|
10
10
|
InformationalError,
|
|
11
11
|
InvalidArgumentError,
|
|
12
12
|
HeadersTimeoutError,
|
|
13
|
-
BodyTimeoutError
|
|
13
|
+
BodyTimeoutError,
|
|
14
|
+
ResponseExceededMaxSizeError
|
|
14
15
|
} = require('../core/errors.js')
|
|
15
16
|
const {
|
|
16
17
|
kUrl,
|
|
@@ -26,10 +27,7 @@ const {
|
|
|
26
27
|
kStrictContentLength,
|
|
27
28
|
kOnError,
|
|
28
29
|
kMaxConcurrentStreams,
|
|
29
|
-
kPingInterval,
|
|
30
30
|
kHTTP2Session,
|
|
31
|
-
kHTTP2InitialWindowSize,
|
|
32
|
-
kHTTP2ConnectionWindowSize,
|
|
33
31
|
kHostAuthority,
|
|
34
32
|
kResume,
|
|
35
33
|
kSize,
|
|
@@ -41,7 +39,9 @@ const {
|
|
|
41
39
|
kEnableConnectProtocol,
|
|
42
40
|
kRemoteSettings,
|
|
43
41
|
kHTTP2Stream,
|
|
44
|
-
kHTTP2SessionState
|
|
42
|
+
kHTTP2SessionState,
|
|
43
|
+
kHTTP2Options,
|
|
44
|
+
kMaxResponseSize
|
|
45
45
|
} = require('../core/symbols.js')
|
|
46
46
|
const { channels } = require('../core/diagnostics.js')
|
|
47
47
|
|
|
@@ -51,6 +51,14 @@ const kRequestStream = Symbol('request stream')
|
|
|
51
51
|
const kRequestStreamCleanup = Symbol('request stream cleanup')
|
|
52
52
|
const kRequestStreamState = Symbol('request stream state')
|
|
53
53
|
const kReceivedGoAway = Symbol('received goaway')
|
|
54
|
+
const kGoAwayReplayAttempts = Symbol('goaway replay attempts')
|
|
55
|
+
const kRefusedStreamRetry = Symbol('refused stream retry')
|
|
56
|
+
|
|
57
|
+
// RFC 9113 section 8.7: a client SHOULD NOT automatically retry a request more
|
|
58
|
+
// than once. Without a budget a peer that keeps refusing turns one request into
|
|
59
|
+
// an unbounded connect/refuse/reconnect loop that never settles and starves the
|
|
60
|
+
// event loop.
|
|
61
|
+
const MAX_GOAWAY_REPLAY_ATTEMPTS = 1
|
|
54
62
|
|
|
55
63
|
let extractBody
|
|
56
64
|
|
|
@@ -179,12 +187,24 @@ function completeRequest (client, request, resetPendingIdx = false) {
|
|
|
179
187
|
}
|
|
180
188
|
}
|
|
181
189
|
|
|
182
|
-
function
|
|
190
|
+
function canReplayRequest (request) {
|
|
183
191
|
const { body } = request
|
|
184
192
|
|
|
185
193
|
return body == null || util.isBuffer(body) || util.isBlobLike(body)
|
|
186
194
|
}
|
|
187
195
|
|
|
196
|
+
// Count a GOAWAY refusal against the request's replay budget. A peer that
|
|
197
|
+
// refuses every connection must eventually surface an error to the caller
|
|
198
|
+
// rather than being retried forever. Kept separate from canReplayRequest so
|
|
199
|
+
// that the REFUSED_STREAM retry, which has its own single-attempt limit, does
|
|
200
|
+
// not consume this budget just by asking whether the body can be replayed.
|
|
201
|
+
function registerGoAwayRefusal (request) {
|
|
202
|
+
const attempts = (request[kGoAwayReplayAttempts] ?? 0) + 1
|
|
203
|
+
request[kGoAwayReplayAttempts] = attempts
|
|
204
|
+
|
|
205
|
+
return attempts <= MAX_GOAWAY_REPLAY_ATTEMPTS
|
|
206
|
+
}
|
|
207
|
+
|
|
188
208
|
function closeStream (stream, code = NGHTTP2_REFUSED_STREAM) {
|
|
189
209
|
if (stream != null && !stream.destroyed && !stream.closed) {
|
|
190
210
|
try {
|
|
@@ -197,19 +217,44 @@ function detachRequestStreamForClose (request) {
|
|
|
197
217
|
const stream = request[kRequestStream]
|
|
198
218
|
|
|
199
219
|
clearRequestStream(request)
|
|
220
|
+
severRequestStream(stream)
|
|
200
221
|
|
|
201
222
|
return stream
|
|
202
223
|
}
|
|
203
224
|
|
|
225
|
+
// Unbind a stream from its request for good. releaseRequestStream() alone
|
|
226
|
+
// leaves the 'close' listener attached and kRequestStreamState populated, so a
|
|
227
|
+
// stream abandoned here would still run completeRequestStream() later — and
|
|
228
|
+
// splice out the request that has since been requeued onto another session.
|
|
229
|
+
function severRequestStream (stream) {
|
|
230
|
+
if (stream == null || stream[kRequestStreamState] == null) {
|
|
231
|
+
return
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
stream[kRequestStreamState] = null
|
|
235
|
+
stream.off('close', completeRequestStream)
|
|
236
|
+
// Upgrade streams use their own close cleanup, which would otherwise release
|
|
237
|
+
// the session a second time after the stream has been severed for GOAWAY.
|
|
238
|
+
stream.off('close', onUpgradeStreamClose)
|
|
239
|
+
|
|
240
|
+
if (stream[kHTTP2Session] != null) {
|
|
241
|
+
closeStreamSession(stream)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!stream.destroyed && !stream.closed) {
|
|
245
|
+
stream.once('error', noop)
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
204
249
|
function connectH2 (client, socket) {
|
|
205
250
|
client[kSocket] = socket
|
|
206
251
|
|
|
207
|
-
const http2InitialWindowSize = client[
|
|
208
|
-
const http2ConnectionWindowSize = client[
|
|
252
|
+
const http2InitialWindowSize = client[kHTTP2Options].sessionOptions?.initialWindowSize
|
|
253
|
+
const http2ConnectionWindowSize = client[kHTTP2Options].connectionWindowSize
|
|
209
254
|
|
|
210
255
|
const session = http2.connect(client[kUrl], {
|
|
211
256
|
createConnection: () => socket,
|
|
212
|
-
peerMaxConcurrentStreams: client[
|
|
257
|
+
peerMaxConcurrentStreams: client[kHTTP2Options].maxConcurrentStreams,
|
|
213
258
|
settings: {
|
|
214
259
|
// TODO(metcoder95): add support for PUSH
|
|
215
260
|
enablePush: false,
|
|
@@ -223,13 +268,16 @@ function connectH2 (client, socket) {
|
|
|
223
268
|
session[kSocket] = socket
|
|
224
269
|
session[kHTTP2SessionState] = {
|
|
225
270
|
idleTimeout: null,
|
|
271
|
+
// Armed while the peer advertises MAX_CONCURRENT_STREAMS = 0 and we have
|
|
272
|
+
// work that cannot start. See setNoStreamsTimeout.
|
|
273
|
+
noStreamsTimeout: null,
|
|
226
274
|
// Sockets start out ref'd. Session ref/unref proxies to the socket, so a
|
|
227
275
|
// single cached flag lets us skip redundant uv ref/unref calls, provided
|
|
228
276
|
// every ref/unref of the session or its socket goes through
|
|
229
277
|
// refH2Session/unrefH2Session.
|
|
230
278
|
refed: true,
|
|
231
279
|
ping: {
|
|
232
|
-
interval: client[
|
|
280
|
+
interval: client[kHTTP2Options].pingInterval === 0 ? null : setInterval(onHttp2SendPing, client[kHTTP2Options].pingInterval, session).unref()
|
|
233
281
|
}
|
|
234
282
|
}
|
|
235
283
|
session[kReceivedGoAway] = false
|
|
@@ -369,9 +417,76 @@ function resumeH2 (client) {
|
|
|
369
417
|
} else {
|
|
370
418
|
clearHttp2IdleTimeout(session)
|
|
371
419
|
}
|
|
420
|
+
|
|
421
|
+
if (client[kMaxConcurrentStreams] === 0 && client[kRunning] === 0 && client[kPending] > 0) {
|
|
422
|
+
setNoStreamsTimeout(session)
|
|
423
|
+
} else {
|
|
424
|
+
clearNoStreamsTimeout(session)
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
function clearNoStreamsTimeout (session) {
|
|
430
|
+
const state = session[kHTTP2SessionState]
|
|
431
|
+
|
|
432
|
+
if (state?.noStreamsTimeout != null) {
|
|
433
|
+
clearTimeout(state.noStreamsTimeout)
|
|
434
|
+
state.noStreamsTimeout = null
|
|
372
435
|
}
|
|
373
436
|
}
|
|
374
437
|
|
|
438
|
+
// A peer is allowed to advertise SETTINGS_MAX_CONCURRENT_STREAMS = 0 to refuse
|
|
439
|
+
// new streams (RFC 9113 §6.5.2), and is expected to raise it again later. Until
|
|
440
|
+
// it does, busy() reports the client as permanently busy and queued requests
|
|
441
|
+
// cannot open a stream — which means no per-stream timeout covers them, and no
|
|
442
|
+
// reconnect can happen either, so the SETTINGS frame that would lift the limit
|
|
443
|
+
// can never arrive. Give the peer headersTimeout to start honouring requests
|
|
444
|
+
// before failing them; a request that cannot even be sent has missed the same
|
|
445
|
+
// deadline as one whose headers never arrive.
|
|
446
|
+
function setNoStreamsTimeout (session) {
|
|
447
|
+
const client = session[kClient]
|
|
448
|
+
const state = session[kHTTP2SessionState]
|
|
449
|
+
const timeout = client[kHeadersTimeout]
|
|
450
|
+
|
|
451
|
+
if (!timeout || state.noStreamsTimeout != null) {
|
|
452
|
+
return
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
state.noStreamsTimeout = setTimeout(onNoStreamsTimeout, timeout, session).unref()
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
function onNoStreamsTimeout (session) {
|
|
459
|
+
const client = session[kClient]
|
|
460
|
+
const state = session[kHTTP2SessionState]
|
|
461
|
+
|
|
462
|
+
state.noStreamsTimeout = null
|
|
463
|
+
|
|
464
|
+
if (
|
|
465
|
+
client[kHTTP2Session] !== session ||
|
|
466
|
+
client[kMaxConcurrentStreams] !== 0 ||
|
|
467
|
+
client[kRunning] !== 0 ||
|
|
468
|
+
client[kPending] === 0
|
|
469
|
+
) {
|
|
470
|
+
return
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
const err = new HeadersTimeoutError(
|
|
474
|
+
`HTTP/2: server did not accept a new stream within ${client[kHeadersTimeout]}`
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
const requests = client[kQueue].splice(client[kPendingIdx])
|
|
478
|
+
for (let i = 0; i < requests.length; i++) {
|
|
479
|
+
if (requests[i] != null) {
|
|
480
|
+
util.errorRequest(client, requests[i], err)
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Drop the unusable session so the next request gets a fresh connection,
|
|
485
|
+
// whose SETTINGS may well allow streams again.
|
|
486
|
+
session[kError] = err
|
|
487
|
+
resetHttp2Session(session, err)
|
|
488
|
+
}
|
|
489
|
+
|
|
375
490
|
function clearHttp2IdleTimeout (session) {
|
|
376
491
|
const state = session[kHTTP2SessionState]
|
|
377
492
|
|
|
@@ -527,7 +642,7 @@ function onHttp2SessionGoAway (errorCode, lastStreamID) {
|
|
|
527
642
|
if (request != null) {
|
|
528
643
|
streamsToClose.push(detachRequestStreamForClose(request))
|
|
529
644
|
|
|
530
|
-
if (
|
|
645
|
+
if (canReplayRequest(request) && registerGoAwayRefusal(request)) {
|
|
531
646
|
retriableRequests.push(request)
|
|
532
647
|
} else {
|
|
533
648
|
util.errorRequest(client, request, err)
|
|
@@ -552,6 +667,7 @@ function onHttp2SessionGoAway (errorCode, lastStreamID) {
|
|
|
552
667
|
}
|
|
553
668
|
|
|
554
669
|
clearHttp2IdleTimeout(this)
|
|
670
|
+
clearNoStreamsTimeout(this)
|
|
555
671
|
|
|
556
672
|
if (!this.closed && !this.destroyed) {
|
|
557
673
|
this.close()
|
|
@@ -576,6 +692,7 @@ function onHttp2SessionClose () {
|
|
|
576
692
|
}
|
|
577
693
|
|
|
578
694
|
clearHttp2IdleTimeout(this)
|
|
695
|
+
clearNoStreamsTimeout(this)
|
|
579
696
|
|
|
580
697
|
if (state.ping.interval != null) {
|
|
581
698
|
clearInterval(state.ping.interval)
|
|
@@ -687,6 +804,16 @@ function completeRequestStream () {
|
|
|
687
804
|
|
|
688
805
|
if (state.pendingEnd && !state.request.aborted && !state.request.completed) {
|
|
689
806
|
state.request.onResponseEnd(state.trailers || {})
|
|
807
|
+
} else if (!state.request.aborted && !state.request.completed) {
|
|
808
|
+
// The stream closed without a complete response and without reporting an
|
|
809
|
+
// error. finalizeRequest() below frees the queue slot either way, so
|
|
810
|
+
// without this the request would simply vanish and its caller would never
|
|
811
|
+
// hear back.
|
|
812
|
+
util.errorRequest(
|
|
813
|
+
state.client,
|
|
814
|
+
state.request,
|
|
815
|
+
new InformationalError('HTTP/2: stream closed before the response was complete')
|
|
816
|
+
)
|
|
690
817
|
}
|
|
691
818
|
|
|
692
819
|
finalizeRequest(state)
|
|
@@ -897,9 +1024,11 @@ function writeH2 (client, request) {
|
|
|
897
1024
|
const state = {
|
|
898
1025
|
abort: null,
|
|
899
1026
|
body: request.body,
|
|
1027
|
+
bytesRead: 0,
|
|
900
1028
|
client,
|
|
901
1029
|
contentLength: null,
|
|
902
1030
|
expectsPayload: false,
|
|
1031
|
+
maxResponseSize: client[kMaxResponseSize],
|
|
903
1032
|
request,
|
|
904
1033
|
headersTimeout,
|
|
905
1034
|
bodyTimeout,
|
|
@@ -1135,6 +1264,7 @@ function writeH2 (client, request) {
|
|
|
1135
1264
|
// become unreachable once the stream closes, so plain `on` avoids the
|
|
1136
1265
|
// per-listener `once` wrapper allocation.
|
|
1137
1266
|
stream.on('response', onResponse)
|
|
1267
|
+
stream.on('headers', onInterimResponse)
|
|
1138
1268
|
stream.on('end', onEnd)
|
|
1139
1269
|
stream.on('error', onError)
|
|
1140
1270
|
stream.on('frameError', onFrameError)
|
|
@@ -1155,6 +1285,7 @@ function removeRequestStreamListeners (stream) {
|
|
|
1155
1285
|
stream.off('error', noop)
|
|
1156
1286
|
stream.off('continue', writeBodyH2)
|
|
1157
1287
|
stream.off('response', onResponse)
|
|
1288
|
+
stream.off('headers', onInterimResponse)
|
|
1158
1289
|
stream.off('end', onEnd)
|
|
1159
1290
|
stream.off('error', onError)
|
|
1160
1291
|
stream.off('frameError', onFrameError)
|
|
@@ -1197,17 +1328,51 @@ function onData (chunk) {
|
|
|
1197
1328
|
return
|
|
1198
1329
|
}
|
|
1199
1330
|
|
|
1200
|
-
const { request } = state
|
|
1331
|
+
const { request, maxResponseSize } = state
|
|
1201
1332
|
|
|
1202
1333
|
if (request.aborted || request.completed) {
|
|
1203
1334
|
return
|
|
1204
1335
|
}
|
|
1205
1336
|
|
|
1337
|
+
if (maxResponseSize > -1 && state.bytesRead + chunk.length > maxResponseSize) {
|
|
1338
|
+
// Unlike HTTP/1.1, which destroys the socket because it cannot abandon one
|
|
1339
|
+
// response without losing framing, resetting the offending stream leaves
|
|
1340
|
+
// the session usable for its siblings.
|
|
1341
|
+
state.abort(new ResponseExceededMaxSizeError())
|
|
1342
|
+
return
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
state.bytesRead += chunk.length
|
|
1346
|
+
|
|
1206
1347
|
if (request.onResponseData(chunk) === false) {
|
|
1207
1348
|
stream.pause()
|
|
1208
1349
|
}
|
|
1209
1350
|
}
|
|
1210
1351
|
|
|
1352
|
+
function onInterimResponse (headers) {
|
|
1353
|
+
const stream = this
|
|
1354
|
+
const state = stream[kRequestStreamState]
|
|
1355
|
+
|
|
1356
|
+
if (state == null) {
|
|
1357
|
+
return
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
const { request } = state
|
|
1361
|
+
|
|
1362
|
+
if (request.aborted || request.completed) {
|
|
1363
|
+
return
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
// node http2 emits 'headers' for interim (1xx) informational responses,
|
|
1367
|
+
// while the final response arrives via 'response'. Forward these to the
|
|
1368
|
+
// handler so that onInfo is invoked, matching the HTTP/1 behaviour and the
|
|
1369
|
+
// documented onInfo contract.
|
|
1370
|
+
const statusCode = headers[HTTP2_HEADER_STATUS]
|
|
1371
|
+
delete headers[HTTP2_HEADER_STATUS]
|
|
1372
|
+
|
|
1373
|
+
request.onResponseStart(Number(statusCode), headers, noop, '')
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1211
1376
|
function onResponse (headers) {
|
|
1212
1377
|
const stream = this
|
|
1213
1378
|
const state = stream[kRequestStreamState]
|
|
@@ -1286,6 +1451,38 @@ function onEnd () {
|
|
|
1286
1451
|
}
|
|
1287
1452
|
}
|
|
1288
1453
|
|
|
1454
|
+
function retryRefusedStream (stream, state) {
|
|
1455
|
+
const { client, request } = state
|
|
1456
|
+
|
|
1457
|
+
if (
|
|
1458
|
+
state.responseReceived ||
|
|
1459
|
+
request.aborted ||
|
|
1460
|
+
request.completed ||
|
|
1461
|
+
request[kRefusedStreamRetry] ||
|
|
1462
|
+
!canReplayRequest(request)
|
|
1463
|
+
) {
|
|
1464
|
+
return false
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
// RFC 9113 section 8.7 permits retrying REFUSED_STREAM, but says clients
|
|
1468
|
+
// SHOULD NOT automatically retry the same request more than once.
|
|
1469
|
+
request[kRefusedStreamRetry] = true
|
|
1470
|
+
|
|
1471
|
+
// Detach the failed attempt before moving the request back to the pending
|
|
1472
|
+
// queue. The peer only reset this stream, so the HTTP/2 session remains
|
|
1473
|
+
// usable for the retry. Severing also drops the 'close' listener, so the
|
|
1474
|
+
// abandoned stream cannot later complete the retried request.
|
|
1475
|
+
detachRequestStreamForClose(request)
|
|
1476
|
+
state.stream = null
|
|
1477
|
+
state.requestFinalized = true
|
|
1478
|
+
|
|
1479
|
+
completeRequest(client, request)
|
|
1480
|
+
client[kQueue].splice(client[kPendingIdx], 0, request)
|
|
1481
|
+
client[kResume]()
|
|
1482
|
+
|
|
1483
|
+
return true
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1289
1486
|
function onError (err) {
|
|
1290
1487
|
const stream = this
|
|
1291
1488
|
const state = stream[kRequestStreamState]
|
|
@@ -1295,6 +1492,18 @@ function onError (err) {
|
|
|
1295
1492
|
}
|
|
1296
1493
|
|
|
1297
1494
|
stream.off('error', onError)
|
|
1495
|
+
|
|
1496
|
+
if (typeof stream.rstCode === 'number' && stream.rstCode !== NGHTTP2_NO_ERROR) {
|
|
1497
|
+
err.http2ErrorCode = stream.rstCode
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
if (
|
|
1501
|
+
stream.rstCode === NGHTTP2_REFUSED_STREAM &&
|
|
1502
|
+
retryRefusedStream(stream, state)
|
|
1503
|
+
) {
|
|
1504
|
+
return
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1298
1507
|
state.abort(err)
|
|
1299
1508
|
}
|
|
1300
1509
|
|
package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client.js
CHANGED
|
@@ -53,10 +53,8 @@ const {
|
|
|
53
53
|
kHTTPContext,
|
|
54
54
|
kMaxConcurrentStreams,
|
|
55
55
|
kHostAuthority,
|
|
56
|
-
kHTTP2InitialWindowSize,
|
|
57
|
-
kHTTP2ConnectionWindowSize,
|
|
58
56
|
kResume,
|
|
59
|
-
|
|
57
|
+
kHTTP2Options
|
|
60
58
|
} = require('../core/symbols.js')
|
|
61
59
|
const connectH1 = require('./client-h1.js')
|
|
62
60
|
const connectH2 = require('./client-h2.js')
|
|
@@ -76,6 +74,16 @@ function getPipelining (client) {
|
|
|
76
74
|
return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1
|
|
77
75
|
}
|
|
78
76
|
|
|
77
|
+
let h2NamespaceOptsWarning = false
|
|
78
|
+
function emitH2OptionsNamespaceWarning (optName) {
|
|
79
|
+
if (h2NamespaceOptsWarning === true) return
|
|
80
|
+
|
|
81
|
+
process.emitWarning(`Use h2Options.${optName} instead. ${optName} for H2 will be deprecated in future major.`, {
|
|
82
|
+
code: 'UNDICI-H2-OPTIONS'
|
|
83
|
+
})
|
|
84
|
+
h2NamespaceOptsWarning = true
|
|
85
|
+
}
|
|
86
|
+
|
|
79
87
|
// Protocol-aware dispatch ceiling. h1 RFC7230 pipelining is unrelated to h2
|
|
80
88
|
// stream multiplexing — over h2 the ceiling is the (server-confirmed)
|
|
81
89
|
// maxConcurrentStreams. Before a context is attached we use the h1
|
|
@@ -128,7 +136,9 @@ class Client extends DispatcherBase {
|
|
|
128
136
|
initialWindowSize,
|
|
129
137
|
connectionWindowSize,
|
|
130
138
|
pingInterval,
|
|
131
|
-
webSocket
|
|
139
|
+
webSocket,
|
|
140
|
+
h2Options,
|
|
141
|
+
eventSource
|
|
132
142
|
} = {}) {
|
|
133
143
|
if (keepAlive !== undefined) {
|
|
134
144
|
throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')
|
|
@@ -216,35 +226,66 @@ class Client extends DispatcherBase {
|
|
|
216
226
|
throw new InvalidArgumentError('allowH2 must be a valid boolean value')
|
|
217
227
|
}
|
|
218
228
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
229
|
+
// We validate only if allowH2 is enabled or null (enabled by default)
|
|
230
|
+
if (allowH2 !== false) {
|
|
231
|
+
// Prioritise new h2Options object, otherwise fallback to prior configuration options
|
|
232
|
+
if (h2Options != null) {
|
|
233
|
+
if (h2Options.useH2c != null && typeof h2Options.useH2c !== 'boolean') {
|
|
234
|
+
throw new InvalidArgumentError('h2Options.useH2c must be a valid boolean value')
|
|
235
|
+
}
|
|
222
236
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
237
|
+
if (h2Options.settings?.initialWindowSize != null && (!Number.isInteger(h2Options.settings.initialWindowSize) || h2Options.settings.initialWindowSize < 1)) {
|
|
238
|
+
throw new InvalidArgumentError('h2Options.settings.initialWindowSize must be a positive integer, greater than 0')
|
|
239
|
+
}
|
|
226
240
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
241
|
+
if (h2Options.maxConcurrentStreams != null && (!Number.isInteger(h2Options.connectionWindowSize) || h2Options.maxConcurrentStreams < 1)) {
|
|
242
|
+
throw new InvalidArgumentError('h2Options.maxConcurrentStreams must be a positive integer, greater than 0')
|
|
243
|
+
}
|
|
230
244
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
245
|
+
if (h2Options.connectionWindowSize != null && (!Number.isInteger(h2Options.connectionWindowSize) || h2Options.connectionWindowSize < 1)) {
|
|
246
|
+
throw new InvalidArgumentError('h2Options.connectionWindowSize must be a positive integer, greater than 0')
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (h2Options.pingInterval != null && (typeof h2Options.pingInterval !== 'number' || !Number.isInteger(h2Options.pingInterval) || h2Options.pingInterval < 0)) {
|
|
250
|
+
throw new InvalidArgumentError('h2Options.pingInterval must be a positive integer, greater or equal to 0')
|
|
251
|
+
}
|
|
252
|
+
} else {
|
|
253
|
+
if (useH2c != null && typeof useH2c !== 'boolean') {
|
|
254
|
+
emitH2OptionsNamespaceWarning('useH2c')
|
|
255
|
+
throw new InvalidArgumentError('useH2c must be a valid boolean value')
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {
|
|
259
|
+
emitH2OptionsNamespaceWarning('maxConcurrentStreams')
|
|
260
|
+
throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')
|
|
261
|
+
}
|
|
234
262
|
|
|
235
|
-
|
|
236
|
-
|
|
263
|
+
if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {
|
|
264
|
+
emitH2OptionsNamespaceWarning('initialWindowSize')
|
|
265
|
+
throw new InvalidArgumentError('initialWindowSize must be a positive integer, greater than 0')
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {
|
|
269
|
+
emitH2OptionsNamespaceWarning('connectionWindowSize')
|
|
270
|
+
throw new InvalidArgumentError('connectionWindowSize must be a positive integer, greater than 0')
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (pingInterval != null && (typeof pingInterval !== 'number' || !Number.isInteger(pingInterval) || pingInterval < 0)) {
|
|
274
|
+
emitH2OptionsNamespaceWarning('pingInterval')
|
|
275
|
+
throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')
|
|
276
|
+
}
|
|
277
|
+
}
|
|
237
278
|
}
|
|
238
279
|
|
|
239
|
-
super({ webSocket })
|
|
280
|
+
super({ webSocket, eventSource })
|
|
240
281
|
|
|
241
282
|
if (typeof connect !== 'function') {
|
|
242
283
|
connect = buildConnector({
|
|
243
284
|
...tls,
|
|
244
285
|
maxCachedSessions,
|
|
245
286
|
allowH2,
|
|
246
|
-
useH2c,
|
|
247
287
|
socketPath,
|
|
288
|
+
useH2c: h2Options?.useH2c ?? useH2c,
|
|
248
289
|
timeout: connectTimeout,
|
|
249
290
|
...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
|
|
250
291
|
...connect
|
|
@@ -280,16 +321,20 @@ class Client extends DispatcherBase {
|
|
|
280
321
|
this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1
|
|
281
322
|
this[kHTTPContext] = null
|
|
282
323
|
// h2
|
|
283
|
-
this[
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
324
|
+
this[kHTTP2Options] = {
|
|
325
|
+
pingInterval: h2Options?.pingInterval ?? pingInterval ?? 60e3,
|
|
326
|
+
connectionWindowSize: h2Options?.connectionWindowSize ?? connectionWindowSize ?? 524288,
|
|
327
|
+
maxConcurrentStreams: h2Options?.maxConcurrentStreams ?? maxConcurrentStreams ?? 100, // Max peerConcurrentStreams for a Node h2 server
|
|
328
|
+
sessionOptions: {
|
|
329
|
+
// HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:
|
|
330
|
+
// - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)
|
|
331
|
+
// Allows more data to be sent before requiring acknowledgment, improving throughput
|
|
332
|
+
// especially on high-latency networks. This matches common production HTTP/2 servers.
|
|
333
|
+
// - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)
|
|
334
|
+
// Provides better flow control for the entire connection across multiple streams.
|
|
335
|
+
initialWindowSize: h2Options?.initialWindowSize ?? initialWindowSize ?? 262144
|
|
336
|
+
}
|
|
337
|
+
}
|
|
293
338
|
|
|
294
339
|
// kQueue is built up of 3 sections separated by
|
|
295
340
|
// the kRunningIdx and kPendingIdx indices.
|
|
@@ -672,6 +717,7 @@ function _resume (client, sync) {
|
|
|
672
717
|
}
|
|
673
718
|
|
|
674
719
|
if (!client[kHTTPContext]) {
|
|
720
|
+
client[kServerName] = request.servername
|
|
675
721
|
connect(client)
|
|
676
722
|
return
|
|
677
723
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const buffer = require('node:buffer')
|
|
3
4
|
const Dispatcher = require('./dispatcher')
|
|
4
5
|
const {
|
|
5
6
|
ClientDestroyedError,
|
|
@@ -11,6 +12,7 @@ const { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/sy
|
|
|
11
12
|
const kOnDestroyed = Symbol('onDestroyed')
|
|
12
13
|
const kOnClosed = Symbol('onClosed')
|
|
13
14
|
const kWebSocketOptions = Symbol('webSocketOptions')
|
|
15
|
+
const kEventSourceOptions = Symbol('eventSourceOptions')
|
|
14
16
|
|
|
15
17
|
class DispatcherBase extends Dispatcher {
|
|
16
18
|
/** @type {boolean} */
|
|
@@ -31,10 +33,11 @@ class DispatcherBase extends Dispatcher {
|
|
|
31
33
|
constructor (opts) {
|
|
32
34
|
super()
|
|
33
35
|
this[kWebSocketOptions] = opts?.webSocket ?? {}
|
|
36
|
+
this[kEventSourceOptions] = opts?.eventSource ?? {}
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
* @returns {import('../../types/
|
|
40
|
+
* @returns {import('../../types/client').Client.WebSocketOptions}
|
|
38
41
|
*/
|
|
39
42
|
get webSocketOptions () {
|
|
40
43
|
return {
|
|
@@ -43,6 +46,15 @@ class DispatcherBase extends Dispatcher {
|
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @returns {import('../../types/client').Client.EventSourceOptions}
|
|
51
|
+
*/
|
|
52
|
+
get eventSourceOptions () {
|
|
53
|
+
return {
|
|
54
|
+
maxEventSize: this[kEventSourceOptions].maxEventSize ?? buffer.kStringMaxLength
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
46
58
|
/** @returns {boolean} */
|
|
47
59
|
get destroyed () {
|
|
48
60
|
return this[kDestroyed]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
const EventEmitter = require('node:events')
|
|
3
|
+
const { kOriginless, kUrl } = require('../core/symbols')
|
|
3
4
|
|
|
4
5
|
class Dispatcher extends EventEmitter {
|
|
5
6
|
dispatch () {
|
|
@@ -17,6 +18,10 @@ class Dispatcher extends EventEmitter {
|
|
|
17
18
|
compose (...args) {
|
|
18
19
|
// So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...
|
|
19
20
|
const interceptors = Array.isArray(args[0]) ? args[0] : args
|
|
21
|
+
// null disables origin-dependent interceptors; undefined uses opts.origin.
|
|
22
|
+
const interceptorOrigin = this[kOriginless] === true
|
|
23
|
+
? null
|
|
24
|
+
: this[kUrl]?.origin
|
|
20
25
|
let dispatch = this.dispatch.bind(this)
|
|
21
26
|
|
|
22
27
|
for (const interceptor of interceptors) {
|
|
@@ -28,13 +33,22 @@ class Dispatcher extends EventEmitter {
|
|
|
28
33
|
throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
dispatch = interceptor(dispatch)
|
|
36
|
+
dispatch = interceptor(dispatch, interceptorOrigin)
|
|
32
37
|
|
|
33
38
|
if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {
|
|
34
39
|
throw new TypeError('invalid interceptor')
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
|
|
43
|
+
const originalDispatch = dispatch
|
|
44
|
+
const self = this
|
|
45
|
+
dispatch = function (opts, handler) {
|
|
46
|
+
if (opts && typeof opts === 'object' && !opts.origin && self[kUrl]) {
|
|
47
|
+
opts = Object.assign({}, opts, { origin: self[kUrl].origin })
|
|
48
|
+
}
|
|
49
|
+
return originalDispatch(opts, handler)
|
|
50
|
+
}
|
|
51
|
+
|
|
38
52
|
return new Proxy(this, {
|
|
39
53
|
get: (target, key) => key === 'dispatch' ? dispatch : target[key]
|
|
40
54
|
})
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const Dispatcher = require('./dispatcher')
|
|
4
4
|
const { InvalidArgumentError } = require('../core/errors')
|
|
5
5
|
const { toRawHeaders } = require('../core/util')
|
|
6
|
+
const { kOriginless, kUrl } = require('../core/symbols')
|
|
6
7
|
|
|
7
8
|
class LegacyHandlerWrapper {
|
|
8
9
|
#handler
|
|
@@ -71,6 +72,8 @@ class Dispatcher1Wrapper extends Dispatcher {
|
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
this.#dispatcher = dispatcher
|
|
75
|
+
this[kUrl] = dispatcher[kUrl]
|
|
76
|
+
this[kOriginless] = dispatcher[kOriginless]
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
static wrapHandler (handler) {
|