@node9/proxy 2.36.0 → 2.37.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/dist/cli.js +954 -233
- package/dist/cli.mjs +954 -233
- package/dist/dashboard.mjs +305 -2
- package/dist/index.js +298 -1
- package/dist/index.mjs +298 -1
- package/dist/scan-ink.mjs +303 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -7730,7 +7730,7 @@ function* stringValues(obj, depth = 0) {
|
|
|
7730
7730
|
}
|
|
7731
7731
|
for (const v of Object.values(obj)) yield* stringValues(v, depth + 1);
|
|
7732
7732
|
}
|
|
7733
|
-
var aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, VERDICTS, CHECK_VERDICT_RANK, CHECK_GROUPS, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, MAX_PAYLOAD_NESTING, payloadNesting, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, MAX_ALTERNATIVES, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, exempt, RANK, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, SPANISH_LETTERS, HETU_CHARS, MAX, UNTRUSTED_TOOLS, SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, DLP_SCAN_LIMITS, BATCH_SEPARATOR, ENCODED_RUN_RE, syntax3, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS, MAX_NESTING, SHELL_VALUE_FLAGS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, VERDICT_RANK, SQL_DML_KEYWORDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, syntax4, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS2, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, CONTROL_CHAR_RE, LOOP_MAX_RECORDS, FINDING_TO_SIGNAL, SCAN_SIGNAL_WEIGHTS, LOOP_THRESHOLD_FOR_WASTE, MAX_BLAST_PATH, DESTRUCTIVE_OP_RE, SENSITIVE_PATH_RE, FILE_TOOLS, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES, CANONICAL_EXTRACTOR_VERSION, DEDUPE_PREVIEW_LEN, ENGINE_VERSION;
|
|
7733
|
+
var aws_default, bash_safe_default, docker_default, filesystem_default, finance_default, github_default, identity_default, k8s_default, mongodb_default, postgres_default, project_jail_default, publishing_default, redis_default, BUILTIN_SHIELDS, ACTION_SHIELD_NAMES, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, VERDICTS, CHECK_VERDICT_RANK, CHECK_GROUPS, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, MAX_PAYLOAD_NESTING, payloadNesting, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, MAX_ALTERNATIVES, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, exempt, RANK, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, SPANISH_LETTERS, HETU_CHARS, MAX, UNTRUSTED_TOOLS, SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, DLP_SCAN_LIMITS, BATCH_SEPARATOR, ENCODED_RUN_RE, syntax3, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS, MAX_NESTING, SHELL_VALUE_FLAGS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, VERDICT_RANK, SQL_DML_KEYWORDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, syntax4, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS2, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, CONTROL_CHAR_RE, LOOP_MAX_RECORDS, FINDING_TO_SIGNAL, SCAN_SIGNAL_WEIGHTS, LOOP_THRESHOLD_FOR_WASTE, MAX_BLAST_PATH, DESTRUCTIVE_OP_RE, SENSITIVE_PATH_RE, FILE_TOOLS, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES, CANONICAL_EXTRACTOR_VERSION, DEDUPE_PREVIEW_LEN, ENGINE_VERSION;
|
|
7734
7734
|
var init_dist = __esm({
|
|
7735
7735
|
"packages/policy-engine/dist/index.mjs"() {
|
|
7736
7736
|
"use strict";
|
|
@@ -8035,6 +8035,77 @@ var init_dist = __esm({
|
|
|
8035
8035
|
],
|
|
8036
8036
|
dangerousWords: ["wipefs"]
|
|
8037
8037
|
};
|
|
8038
|
+
finance_default = {
|
|
8039
|
+
name: "finance",
|
|
8040
|
+
description: "Asks before money moves through a payment or banking app (refunds, payouts, transfers, charges, invoices), whatever the request said. Reads are never asked about.",
|
|
8041
|
+
aliases: ["payments", "money"],
|
|
8042
|
+
smartRules: [
|
|
8043
|
+
{
|
|
8044
|
+
name: "shield:finance:review-refund",
|
|
8045
|
+
tool: "{,mcp__*__}{create_refund,refund_payment,refund_charge,refund_order,issue_refund}",
|
|
8046
|
+
conditions: [],
|
|
8047
|
+
verdict: "review",
|
|
8048
|
+
reason: "A refund returns money to a customer. node9 asks before money moves, whatever the request said (Finance shield)."
|
|
8049
|
+
},
|
|
8050
|
+
{
|
|
8051
|
+
name: "shield:finance:review-payout",
|
|
8052
|
+
tool: "{,mcp__*__}{create_payout,send_payout,payout,create_payouts_batch}",
|
|
8053
|
+
conditions: [],
|
|
8054
|
+
verdict: "review",
|
|
8055
|
+
reason: "A payout moves the balance to a bank account. node9 asks before money moves (Finance shield)."
|
|
8056
|
+
},
|
|
8057
|
+
{
|
|
8058
|
+
name: "shield:finance:review-transfer",
|
|
8059
|
+
tool: "{,mcp__*__}{transfer_create,transfer_authorization_create,create_transfer,transfer_money,transfer_funds,send_money,wire_transfer,create_wire,schedule_transaction,update_scheduled_transaction,create_transaction}",
|
|
8060
|
+
conditions: [],
|
|
8061
|
+
verdict: "review",
|
|
8062
|
+
reason: "A transfer moves money between accounts. node9 asks before money moves (Finance shield)."
|
|
8063
|
+
},
|
|
8064
|
+
{
|
|
8065
|
+
name: "shield:finance:review-charge",
|
|
8066
|
+
tool: "{,mcp__*__}{create_payment_intent,confirm_payment_intent,capture_payment_intent,create_charge,create_payment,capture_payment,capture_order,create_order,authorize_order,create_checkout_session}",
|
|
8067
|
+
conditions: [],
|
|
8068
|
+
verdict: "review",
|
|
8069
|
+
reason: "This charges a card or captures a payment. node9 asks before money moves (Finance shield)."
|
|
8070
|
+
},
|
|
8071
|
+
{
|
|
8072
|
+
name: "shield:finance:review-payment-link",
|
|
8073
|
+
tool: "{,mcp__*__}{create_payment_link,create_invoice,finalize_invoice,send_invoice,pay_invoice,create_invoice_item}",
|
|
8074
|
+
conditions: [],
|
|
8075
|
+
verdict: "review",
|
|
8076
|
+
reason: "This bills someone or creates a link that charges a card. node9 asks before money moves (Finance shield)."
|
|
8077
|
+
},
|
|
8078
|
+
{
|
|
8079
|
+
name: "shield:finance:review-subscription",
|
|
8080
|
+
tool: "{,mcp__*__}{create_subscription,cancel_subscription,update_subscription,pause_subscription,resume_subscription}",
|
|
8081
|
+
conditions: [],
|
|
8082
|
+
verdict: "review",
|
|
8083
|
+
reason: "A subscription starts or stops recurring charges. node9 asks before money moves (Finance shield)."
|
|
8084
|
+
},
|
|
8085
|
+
{
|
|
8086
|
+
name: "shield:finance:review-dispute",
|
|
8087
|
+
tool: "{,mcp__*__}{update_dispute,accept_dispute,close_dispute}",
|
|
8088
|
+
conditions: [],
|
|
8089
|
+
verdict: "review",
|
|
8090
|
+
reason: "This answers or concedes a chargeback. node9 asks before money moves (Finance shield)."
|
|
8091
|
+
},
|
|
8092
|
+
{
|
|
8093
|
+
name: "shield:finance:review-card",
|
|
8094
|
+
tool: "{,mcp__*__}{issue_card,create_virtual_card,create_issuing_card,update_card_limit}",
|
|
8095
|
+
conditions: [],
|
|
8096
|
+
verdict: "review",
|
|
8097
|
+
reason: "This issues a card or changes its limit. node9 asks before money moves (Finance shield)."
|
|
8098
|
+
},
|
|
8099
|
+
{
|
|
8100
|
+
name: "shield:finance:review-withdraw",
|
|
8101
|
+
tool: "{,mcp__*__}{withdraw,withdraw_funds,create_withdrawal,request_withdrawal}",
|
|
8102
|
+
conditions: [],
|
|
8103
|
+
verdict: "review",
|
|
8104
|
+
reason: "A withdrawal moves money out. node9 asks before money moves (Finance shield)."
|
|
8105
|
+
}
|
|
8106
|
+
],
|
|
8107
|
+
dangerousWords: []
|
|
8108
|
+
};
|
|
8038
8109
|
github_default = {
|
|
8039
8110
|
name: "github",
|
|
8040
8111
|
description: "Protects GitHub repositories from destructive AI operations",
|
|
@@ -8061,6 +8132,56 @@ var init_dist = __esm({
|
|
|
8061
8132
|
],
|
|
8062
8133
|
dangerousWords: []
|
|
8063
8134
|
};
|
|
8135
|
+
identity_default = {
|
|
8136
|
+
name: "identity",
|
|
8137
|
+
description: "Asks before a password, a key, a token, a role or a user changes in an identity or admin app, whatever the request said. Reads are never asked about.",
|
|
8138
|
+
aliases: ["access", "iam"],
|
|
8139
|
+
smartRules: [
|
|
8140
|
+
{
|
|
8141
|
+
name: "shield:identity:review-password",
|
|
8142
|
+
tool: "{,mcp__*__}{change_password,update_password,reset_password,set_password,expire_password,force_password_reset}",
|
|
8143
|
+
conditions: [],
|
|
8144
|
+
verdict: "review",
|
|
8145
|
+
reason: "This changes or resets a password. node9 asks before credentials change, whatever the request said (Identity shield)."
|
|
8146
|
+
},
|
|
8147
|
+
{
|
|
8148
|
+
name: "shield:identity:review-key",
|
|
8149
|
+
tool: "{,mcp__*__}{rotate_key,rotate_api_key,create_api_key,create_token,create_access_token,create_personal_access_token,regenerate_secret,rotate_secret,create_service_account_key,create_credential}",
|
|
8150
|
+
conditions: [],
|
|
8151
|
+
verdict: "review",
|
|
8152
|
+
reason: "This creates or rotates a key, token or secret. node9 asks before credentials change (Identity shield)."
|
|
8153
|
+
},
|
|
8154
|
+
{
|
|
8155
|
+
name: "shield:identity:review-access",
|
|
8156
|
+
tool: "{,mcp__*__}{grant_access,grant_permission,grant_role,revoke_access,revoke_permission,revoke_role,revoke_token,set_permission,set_permissions,set_role,assign_role,update_role,add_permission,remove_permission,attach_policy,detach_policy}",
|
|
8157
|
+
conditions: [],
|
|
8158
|
+
verdict: "review",
|
|
8159
|
+
reason: "This grants or revokes access. node9 asks before access changes (Identity shield)."
|
|
8160
|
+
},
|
|
8161
|
+
{
|
|
8162
|
+
name: "shield:identity:review-membership",
|
|
8163
|
+
tool: "{,mcp__*__}{add_member,remove_member,add_user_to_group,remove_user_from_group,add_collaborator,remove_collaborator,invite_user,invite_member,invite_user_to_slack,invite_users,add_org_member,remove_org_member,add_team_member,remove_team_member}",
|
|
8164
|
+
conditions: [],
|
|
8165
|
+
verdict: "review",
|
|
8166
|
+
reason: "This changes who belongs where. node9 asks before membership changes (Identity shield)."
|
|
8167
|
+
},
|
|
8168
|
+
{
|
|
8169
|
+
name: "shield:identity:review-user",
|
|
8170
|
+
tool: "{,mcp__*__}{create_user,delete_user,deactivate_user,suspend_user,activate_user,unlock_user,make_admin,promote_user,demote_user,update_user_role}",
|
|
8171
|
+
conditions: [],
|
|
8172
|
+
verdict: "review",
|
|
8173
|
+
reason: "This creates, removes or promotes an account. node9 asks before accounts change (Identity shield)."
|
|
8174
|
+
},
|
|
8175
|
+
{
|
|
8176
|
+
name: "shield:identity:review-mfa",
|
|
8177
|
+
tool: "{,mcp__*__}{reset_mfa,reset_factors,disable_mfa,enroll_factor,deactivate_factor}",
|
|
8178
|
+
conditions: [],
|
|
8179
|
+
verdict: "review",
|
|
8180
|
+
reason: "This changes a second factor. node9 asks before credentials change (Identity shield)."
|
|
8181
|
+
}
|
|
8182
|
+
],
|
|
8183
|
+
dangerousWords: []
|
|
8184
|
+
};
|
|
8064
8185
|
k8s_default = {
|
|
8065
8186
|
name: "k8s",
|
|
8066
8187
|
description: "Protects Kubernetes clusters from destructive AI operations",
|
|
@@ -8393,6 +8514,175 @@ var init_dist = __esm({
|
|
|
8393
8514
|
],
|
|
8394
8515
|
dangerousWords: []
|
|
8395
8516
|
};
|
|
8517
|
+
publishing_default = {
|
|
8518
|
+
name: "publishing",
|
|
8519
|
+
description: "Asks before something goes public or ships outside the organisation (a release, a package, a deploy, a post), whatever the request said. The same switch covers the shell commands that publish.",
|
|
8520
|
+
aliases: ["release", "deploy"],
|
|
8521
|
+
smartRules: [
|
|
8522
|
+
{
|
|
8523
|
+
name: "shield:publishing:review-release",
|
|
8524
|
+
tool: "{,mcp__*__}{create_release,publish_release,create_tag_release,update_release,promote_release}",
|
|
8525
|
+
conditions: [],
|
|
8526
|
+
verdict: "review",
|
|
8527
|
+
reason: "A release ships code to everyone who installs it. node9 asks before publishing, whatever the request said (Publishing shield)."
|
|
8528
|
+
},
|
|
8529
|
+
{
|
|
8530
|
+
name: "shield:publishing:review-package",
|
|
8531
|
+
tool: "{,mcp__*__}{publish_package,npm_publish,pypi_upload,publish_version,publish_extension}",
|
|
8532
|
+
conditions: [],
|
|
8533
|
+
verdict: "review",
|
|
8534
|
+
reason: "This publishes a package. node9 asks before publishing (Publishing shield)."
|
|
8535
|
+
},
|
|
8536
|
+
{
|
|
8537
|
+
name: "shield:publishing:review-deploy",
|
|
8538
|
+
tool: "{,mcp__*__}{deploy,create_deployment,deploy_site,promote_deployment,trigger_deploy,deploy_to_production,rollout}",
|
|
8539
|
+
conditions: [],
|
|
8540
|
+
verdict: "review",
|
|
8541
|
+
reason: "This deploys to an environment other people use. node9 asks before publishing (Publishing shield)."
|
|
8542
|
+
},
|
|
8543
|
+
{
|
|
8544
|
+
name: "shield:publishing:review-post",
|
|
8545
|
+
tool: "{,mcp__*__}{post_tweet,create_tweet,post_webpage,publish_post,create_post,publish_page,send_announcement,post_announcement,create_linkedin_post,schedule_post}",
|
|
8546
|
+
conditions: [],
|
|
8547
|
+
verdict: "review",
|
|
8548
|
+
reason: "This posts outside the organisation. node9 asks before publishing (Publishing shield)."
|
|
8549
|
+
},
|
|
8550
|
+
{
|
|
8551
|
+
name: "shield:publishing:review-visibility",
|
|
8552
|
+
tool: "{,mcp__*__}{set_visibility,make_public,set_public,publish_repository,change_visibility,update_visibility}",
|
|
8553
|
+
conditions: [],
|
|
8554
|
+
verdict: "review",
|
|
8555
|
+
reason: "This makes something public. node9 asks before publishing (Publishing shield)."
|
|
8556
|
+
},
|
|
8557
|
+
{
|
|
8558
|
+
name: "shield:publishing:review-npm-publish",
|
|
8559
|
+
tool: "bash",
|
|
8560
|
+
conditions: [
|
|
8561
|
+
{
|
|
8562
|
+
field: "command",
|
|
8563
|
+
op: "matches",
|
|
8564
|
+
value: "(?:^|[^\\w-])(?:npm|pnpm)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
8565
|
+
flags: "i"
|
|
8566
|
+
}
|
|
8567
|
+
],
|
|
8568
|
+
verdict: "review",
|
|
8569
|
+
reason: "npm publish ships the package to everyone who installs it. node9 asks before publishing (Publishing shield)."
|
|
8570
|
+
},
|
|
8571
|
+
{
|
|
8572
|
+
name: "shield:publishing:review-yarn-publish",
|
|
8573
|
+
tool: "bash",
|
|
8574
|
+
conditions: [
|
|
8575
|
+
{
|
|
8576
|
+
field: "command",
|
|
8577
|
+
op: "matches",
|
|
8578
|
+
value: "(?:^|[^\\w-])(?:yarn)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
8579
|
+
flags: "i"
|
|
8580
|
+
}
|
|
8581
|
+
],
|
|
8582
|
+
verdict: "review",
|
|
8583
|
+
reason: "yarn publish ships the package to everyone who installs it. node9 asks before publishing (Publishing shield)."
|
|
8584
|
+
},
|
|
8585
|
+
{
|
|
8586
|
+
name: "shield:publishing:review-twine-upload",
|
|
8587
|
+
tool: "bash",
|
|
8588
|
+
conditions: [
|
|
8589
|
+
{
|
|
8590
|
+
field: "command",
|
|
8591
|
+
op: "matches",
|
|
8592
|
+
value: "(?:^|[^\\w-])(?:twine)(?![\\w-])[^;&|]{0,200}?\\s(?:upload)(?![\\w-])",
|
|
8593
|
+
flags: "i"
|
|
8594
|
+
}
|
|
8595
|
+
],
|
|
8596
|
+
verdict: "review",
|
|
8597
|
+
reason: "twine upload publishes to PyPI. node9 asks before publishing (Publishing shield)."
|
|
8598
|
+
},
|
|
8599
|
+
{
|
|
8600
|
+
name: "shield:publishing:review-python-publish",
|
|
8601
|
+
tool: "bash",
|
|
8602
|
+
conditions: [
|
|
8603
|
+
{
|
|
8604
|
+
field: "command",
|
|
8605
|
+
op: "matches",
|
|
8606
|
+
value: "(?:^|[^\\w-])(?:poetry|uv|hatch|flit)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
8607
|
+
flags: "i"
|
|
8608
|
+
}
|
|
8609
|
+
],
|
|
8610
|
+
verdict: "review",
|
|
8611
|
+
reason: "This publishes the Python package to PyPI. node9 asks before publishing (Publishing shield)."
|
|
8612
|
+
},
|
|
8613
|
+
{
|
|
8614
|
+
name: "shield:publishing:review-release-tool-publish",
|
|
8615
|
+
tool: "bash",
|
|
8616
|
+
conditions: [
|
|
8617
|
+
{
|
|
8618
|
+
field: "command",
|
|
8619
|
+
op: "matches",
|
|
8620
|
+
value: "(?:^|[^\\w-])(?:lerna|changeset|vsce|ovsx)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
8621
|
+
flags: "i"
|
|
8622
|
+
}
|
|
8623
|
+
],
|
|
8624
|
+
verdict: "review",
|
|
8625
|
+
reason: "This publishes packages or an editor extension through a release tool. node9 asks before publishing (Publishing shield)."
|
|
8626
|
+
},
|
|
8627
|
+
{
|
|
8628
|
+
name: "shield:publishing:review-cargo-publish",
|
|
8629
|
+
tool: "bash",
|
|
8630
|
+
conditions: [
|
|
8631
|
+
{
|
|
8632
|
+
field: "command",
|
|
8633
|
+
op: "matches",
|
|
8634
|
+
value: "(?:^|[^\\w-])(?:cargo)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
8635
|
+
flags: "i"
|
|
8636
|
+
}
|
|
8637
|
+
],
|
|
8638
|
+
verdict: "review",
|
|
8639
|
+
reason: "cargo publish ships the crate. node9 asks before publishing (Publishing shield)."
|
|
8640
|
+
},
|
|
8641
|
+
{
|
|
8642
|
+
name: "shield:publishing:review-gem-push",
|
|
8643
|
+
tool: "bash",
|
|
8644
|
+
conditions: [
|
|
8645
|
+
{
|
|
8646
|
+
field: "command",
|
|
8647
|
+
op: "matches",
|
|
8648
|
+
value: "(?:^|[^\\w-])(?:gem)(?![\\w-])[^;&|]{0,200}?\\s(?:push)(?![\\w-])",
|
|
8649
|
+
flags: "i"
|
|
8650
|
+
}
|
|
8651
|
+
],
|
|
8652
|
+
verdict: "review",
|
|
8653
|
+
reason: "gem push publishes to RubyGems. node9 asks before publishing (Publishing shield)."
|
|
8654
|
+
},
|
|
8655
|
+
{
|
|
8656
|
+
name: "shield:publishing:review-docker-push",
|
|
8657
|
+
tool: "bash",
|
|
8658
|
+
conditions: [
|
|
8659
|
+
{
|
|
8660
|
+
field: "command",
|
|
8661
|
+
op: "matches",
|
|
8662
|
+
value: "(?:^|[^\\w-])(?:docker|podman)(?![\\w-])[^;&|]{0,200}?\\s(?:push|--push)(?![\\w-])",
|
|
8663
|
+
flags: "i"
|
|
8664
|
+
}
|
|
8665
|
+
],
|
|
8666
|
+
verdict: "review",
|
|
8667
|
+
reason: "docker push publishes the image to a registry. node9 asks before publishing (Publishing shield)."
|
|
8668
|
+
},
|
|
8669
|
+
{
|
|
8670
|
+
name: "shield:publishing:review-gh-release",
|
|
8671
|
+
tool: "bash",
|
|
8672
|
+
conditions: [
|
|
8673
|
+
{
|
|
8674
|
+
field: "command",
|
|
8675
|
+
op: "matches",
|
|
8676
|
+
value: "(?:^|[^\\w-])(?:gh)(?![\\w-])[^;&|]{0,200}?\\srelease\\s+(?:create|upload|edit)(?![\\w-])",
|
|
8677
|
+
flags: "i"
|
|
8678
|
+
}
|
|
8679
|
+
],
|
|
8680
|
+
verdict: "review",
|
|
8681
|
+
reason: "gh release ships a release on GitHub. node9 asks before publishing (Publishing shield)."
|
|
8682
|
+
}
|
|
8683
|
+
],
|
|
8684
|
+
dangerousWords: []
|
|
8685
|
+
};
|
|
8396
8686
|
redis_default = {
|
|
8397
8687
|
name: "redis",
|
|
8398
8688
|
description: "Protects Redis instances from destructive AI operations",
|
|
@@ -8477,13 +8767,25 @@ var init_dist = __esm({
|
|
|
8477
8767
|
[bash_safe_default.name]: bash_safe_default,
|
|
8478
8768
|
[docker_default.name]: docker_default,
|
|
8479
8769
|
[filesystem_default.name]: filesystem_default,
|
|
8770
|
+
// Dangerous actions as category shields (node9Firewall#385): an MCP app's
|
|
8771
|
+
// money, credential and publishing tools, asked about whatever the request
|
|
8772
|
+
// said. One glob per rule covers the bare name the gateway sends and the
|
|
8773
|
+
// mcp__<server>__ name the agent hook sends.
|
|
8774
|
+
[finance_default.name]: finance_default,
|
|
8480
8775
|
[github_default.name]: github_default,
|
|
8776
|
+
[identity_default.name]: identity_default,
|
|
8481
8777
|
[k8s_default.name]: k8s_default,
|
|
8482
8778
|
[mongodb_default.name]: mongodb_default,
|
|
8483
8779
|
[postgres_default.name]: postgres_default,
|
|
8484
8780
|
[project_jail_default.name]: project_jail_default,
|
|
8781
|
+
[publishing_default.name]: publishing_default,
|
|
8485
8782
|
[redis_default.name]: redis_default
|
|
8486
8783
|
};
|
|
8784
|
+
ACTION_SHIELD_NAMES = /* @__PURE__ */ new Set([
|
|
8785
|
+
"finance",
|
|
8786
|
+
"identity",
|
|
8787
|
+
"publishing"
|
|
8788
|
+
]);
|
|
8487
8789
|
assertBuiltinShieldRegexesAreSafe();
|
|
8488
8790
|
SSRF_MAX_HOST = 253;
|
|
8489
8791
|
METADATA_ADDRESSES = /* @__PURE__ */ new Set([
|
|
@@ -30957,7 +31259,7 @@ function renderPanelScorecard(input, now = /* @__PURE__ */ new Date()) {
|
|
|
30957
31259
|
const hitShieldSet = new Set(
|
|
30958
31260
|
shieldImpacts.filter((i) => i.totalCatches > 0).map((i) => i.shieldName)
|
|
30959
31261
|
);
|
|
30960
|
-
const zeroHitAll = Object.keys(BUILTIN_SHIELDS).filter((name) => !hitShieldSet.has(name)).sort();
|
|
31262
|
+
const zeroHitAll = Object.keys(BUILTIN_SHIELDS).filter((name) => !hitShieldSet.has(name) && !ACTION_SHIELD_NAMES.has(name)).sort();
|
|
30961
31263
|
const zeroHitBuiltins = zeroHitAll.filter((name) => !enabledSet.has(name));
|
|
30962
31264
|
const zeroHitEnabled = zeroHitAll.filter((name) => enabledSet.has(name));
|
|
30963
31265
|
if (zeroHitEnabled.length > 0) {
|
|
@@ -31449,7 +31751,7 @@ function registerScanCommand(program2) {
|
|
|
31449
31751
|
const hitShieldIds = new Set(
|
|
31450
31752
|
summary.sections.filter((s) => s.sourceType === "shield" && s.shieldKey).map((s) => s.shieldKey)
|
|
31451
31753
|
);
|
|
31452
|
-
const noHitShields = Object.keys(SHIELDS).filter((n) => !hitShieldIds.has(n)).sort();
|
|
31754
|
+
const noHitShields = Object.keys(SHIELDS).filter((n) => !hitShieldIds.has(n) && !ACTION_SHIELD_NAMES.has(n)).sort();
|
|
31453
31755
|
const quietEnabled = noHitShields.filter((n) => enabledShieldSet.has(n));
|
|
31454
31756
|
const emptyShields = noHitShields.filter((n) => !enabledShieldSet.has(n));
|
|
31455
31757
|
if (quietEnabled.length > 0) {
|
|
@@ -39299,6 +39601,7 @@ var require_symbols = __commonJS({
|
|
|
39299
39601
|
kDestroy: /* @__PURE__ */ Symbol("destroy"),
|
|
39300
39602
|
kDispatch: /* @__PURE__ */ Symbol("dispatch"),
|
|
39301
39603
|
kUrl: /* @__PURE__ */ Symbol("url"),
|
|
39604
|
+
kRedirectCacheControl: /* @__PURE__ */ Symbol("redirect cache control"),
|
|
39302
39605
|
kWriting: /* @__PURE__ */ Symbol("writing"),
|
|
39303
39606
|
kResuming: /* @__PURE__ */ Symbol("resuming"),
|
|
39304
39607
|
kQueue: /* @__PURE__ */ Symbol("queue"),
|
|
@@ -41593,10 +41896,27 @@ var require_request = __commonJS({
|
|
|
41593
41896
|
return false;
|
|
41594
41897
|
}
|
|
41595
41898
|
}
|
|
41596
|
-
|
|
41899
|
+
/**
|
|
41900
|
+
* @param {number} statusCode
|
|
41901
|
+
* @param {Buffer[]|string[]} headers
|
|
41902
|
+
* @param {import('node:stream').Duplex} socket
|
|
41903
|
+
* @param {string} [statusText]
|
|
41904
|
+
*/
|
|
41905
|
+
onUpgrade(statusCode, headers, socket, statusText = "") {
|
|
41906
|
+
this.onFinally();
|
|
41597
41907
|
assert(!this.aborted);
|
|
41598
41908
|
assert(!this.completed);
|
|
41599
|
-
|
|
41909
|
+
if (channels.headers.hasSubscribers) {
|
|
41910
|
+
channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
|
|
41911
|
+
}
|
|
41912
|
+
const result = this[kHandler].onUpgrade(statusCode, headers, socket);
|
|
41913
|
+
if (!this.aborted) {
|
|
41914
|
+
this.completed = true;
|
|
41915
|
+
if (channels.trailers.hasSubscribers) {
|
|
41916
|
+
channels.trailers.publish({ request: this, trailers: [] });
|
|
41917
|
+
}
|
|
41918
|
+
}
|
|
41919
|
+
return result;
|
|
41600
41920
|
}
|
|
41601
41921
|
onComplete(trailers) {
|
|
41602
41922
|
this.onFinally();
|
|
@@ -41946,6 +42266,7 @@ var require_unwrap_handler = __commonJS({
|
|
|
41946
42266
|
var require_dispatcher_base = __commonJS({
|
|
41947
42267
|
"node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports, module) {
|
|
41948
42268
|
"use strict";
|
|
42269
|
+
var buffer = __require("buffer");
|
|
41949
42270
|
var Dispatcher = require_dispatcher();
|
|
41950
42271
|
var UnwrapHandler = require_unwrap_handler();
|
|
41951
42272
|
var {
|
|
@@ -41957,6 +42278,7 @@ var require_dispatcher_base = __commonJS({
|
|
|
41957
42278
|
var kOnDestroyed = /* @__PURE__ */ Symbol("onDestroyed");
|
|
41958
42279
|
var kOnClosed = /* @__PURE__ */ Symbol("onClosed");
|
|
41959
42280
|
var kWebSocketOptions = /* @__PURE__ */ Symbol("webSocketOptions");
|
|
42281
|
+
var kEventSourceOptions = /* @__PURE__ */ Symbol("eventSourceOptions");
|
|
41960
42282
|
var DispatcherBase = class extends Dispatcher {
|
|
41961
42283
|
/** @type {boolean} */
|
|
41962
42284
|
[kDestroyed] = false;
|
|
@@ -41972,6 +42294,7 @@ var require_dispatcher_base = __commonJS({
|
|
|
41972
42294
|
constructor(opts) {
|
|
41973
42295
|
super();
|
|
41974
42296
|
this[kWebSocketOptions] = opts?.webSocket ?? {};
|
|
42297
|
+
this[kEventSourceOptions] = opts?.eventSource ?? {};
|
|
41975
42298
|
}
|
|
41976
42299
|
/**
|
|
41977
42300
|
* @returns {import('../../types/dispatcher').WebSocketOptions}
|
|
@@ -41983,6 +42306,14 @@ var require_dispatcher_base = __commonJS({
|
|
|
41983
42306
|
// 128 MB default
|
|
41984
42307
|
};
|
|
41985
42308
|
}
|
|
42309
|
+
/**
|
|
42310
|
+
* @returns {import('../../types/client').Client.EventSourceOptions}
|
|
42311
|
+
*/
|
|
42312
|
+
get eventSourceOptions() {
|
|
42313
|
+
return {
|
|
42314
|
+
maxEventSize: this[kEventSourceOptions].maxEventSize ?? buffer.kStringMaxLength
|
|
42315
|
+
};
|
|
42316
|
+
}
|
|
41986
42317
|
/** @returns {boolean} */
|
|
41987
42318
|
get destroyed() {
|
|
41988
42319
|
return this[kDestroyed];
|
|
@@ -42128,15 +42459,19 @@ var require_connect = __commonJS({
|
|
|
42128
42459
|
if (this._sessionCache.has(sessionKey)) {
|
|
42129
42460
|
this._sessionCache.delete(sessionKey);
|
|
42130
42461
|
} else if (this._sessionCache.size >= this._maxCachedSessions) {
|
|
42462
|
+
let evicted = false;
|
|
42131
42463
|
for (const [key, ref] of this._sessionCache) {
|
|
42132
42464
|
if (ref.deref() === void 0) {
|
|
42133
42465
|
this._sessionCache.delete(key);
|
|
42134
|
-
|
|
42466
|
+
evicted = true;
|
|
42467
|
+
break;
|
|
42135
42468
|
}
|
|
42136
42469
|
}
|
|
42137
|
-
|
|
42138
|
-
|
|
42139
|
-
|
|
42470
|
+
if (!evicted) {
|
|
42471
|
+
const oldest = this._sessionCache.keys().next();
|
|
42472
|
+
if (!oldest.done) {
|
|
42473
|
+
this._sessionCache.delete(oldest.value);
|
|
42474
|
+
}
|
|
42140
42475
|
}
|
|
42141
42476
|
}
|
|
42142
42477
|
this._sessionCache.set(sessionKey, new WeakRef(session));
|
|
@@ -43195,6 +43530,10 @@ var require_infra = __commonJS({
|
|
|
43195
43530
|
return input.slice(start, position.position);
|
|
43196
43531
|
}
|
|
43197
43532
|
var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g;
|
|
43533
|
+
var nonASCIIRegex = /[^\x00-\x7F]/;
|
|
43534
|
+
function asciiLowercase(str2) {
|
|
43535
|
+
return nonASCIIRegex.test(str2) ? str2.replace(/[A-Z]+/g, (upper) => upper.toLowerCase()) : str2.toLowerCase();
|
|
43536
|
+
}
|
|
43198
43537
|
function forgivingBase64(data) {
|
|
43199
43538
|
data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, "");
|
|
43200
43539
|
let dataLength = data.length;
|
|
@@ -43269,6 +43608,7 @@ var require_infra = __commonJS({
|
|
|
43269
43608
|
return result;
|
|
43270
43609
|
}
|
|
43271
43610
|
module.exports = {
|
|
43611
|
+
asciiLowercase,
|
|
43272
43612
|
collectASequenceOfCodePoints,
|
|
43273
43613
|
collectASequenceOfCodePointsFast,
|
|
43274
43614
|
forgivingBase64,
|
|
@@ -45893,7 +46233,13 @@ var require_client_h1 = __commonJS({
|
|
|
45893
46233
|
function lazyllhttp() {
|
|
45894
46234
|
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
|
|
45895
46235
|
let mod;
|
|
45896
|
-
let useWasmSIMD =
|
|
46236
|
+
let useWasmSIMD = true;
|
|
46237
|
+
if (process.arch === "ppc64") {
|
|
46238
|
+
const [major, minor] = process.versions.node.split(".").map((n) => parseInt(n, 10));
|
|
46239
|
+
if (major < 24 || major === 24 && minor < 12) {
|
|
46240
|
+
useWasmSIMD = false;
|
|
46241
|
+
}
|
|
46242
|
+
}
|
|
45897
46243
|
if (process.env.UNDICI_NO_WASM_SIMD === "1") {
|
|
45898
46244
|
useWasmSIMD = false;
|
|
45899
46245
|
} else if (process.env.UNDICI_NO_WASM_SIMD === "0") {
|
|
@@ -46247,7 +46593,7 @@ var require_client_h1 = __commonJS({
|
|
|
46247
46593
|
* @param {Buffer} head
|
|
46248
46594
|
*/
|
|
46249
46595
|
onUpgrade(head) {
|
|
46250
|
-
const { upgrade, client, socket, headers, statusCode } = this;
|
|
46596
|
+
const { upgrade, client, socket, headers, statusCode, statusText } = this;
|
|
46251
46597
|
assert(upgrade);
|
|
46252
46598
|
assert(client[kSocket] === socket);
|
|
46253
46599
|
assert(!socket.destroyed);
|
|
@@ -46272,8 +46618,9 @@ var require_client_h1 = __commonJS({
|
|
|
46272
46618
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
46273
46619
|
client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade"));
|
|
46274
46620
|
try {
|
|
46275
|
-
request2.onUpgrade(statusCode, headers, socket);
|
|
46621
|
+
request2.onUpgrade(statusCode, headers, socket, statusText);
|
|
46276
46622
|
} catch (err2) {
|
|
46623
|
+
util.errorRequest(client, request2, err2);
|
|
46277
46624
|
util.destroy(socket, err2);
|
|
46278
46625
|
}
|
|
46279
46626
|
client[kResume]();
|
|
@@ -46541,7 +46888,6 @@ var require_client_h1 = __commonJS({
|
|
|
46541
46888
|
};
|
|
46542
46889
|
}
|
|
46543
46890
|
function onHttpSocketError(err2) {
|
|
46544
|
-
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
46545
46891
|
const parser = this[kParser];
|
|
46546
46892
|
if (err2.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
|
|
46547
46893
|
const parserErr = parser.finish();
|
|
@@ -47321,7 +47667,6 @@ var require_client_h2 = __commonJS({
|
|
|
47321
47667
|
}
|
|
47322
47668
|
}
|
|
47323
47669
|
function onHttp2SessionError(err2) {
|
|
47324
|
-
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
47325
47670
|
this[kSocket][kError] = err2;
|
|
47326
47671
|
this[kClient][kOnError](err2);
|
|
47327
47672
|
}
|
|
@@ -47411,7 +47756,6 @@ var require_client_h2 = __commonJS({
|
|
|
47411
47756
|
client[kResume]();
|
|
47412
47757
|
}
|
|
47413
47758
|
function onHttp2SocketError(err2) {
|
|
47414
|
-
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
47415
47759
|
this[kError] = err2;
|
|
47416
47760
|
this[kClient][kOnError](err2);
|
|
47417
47761
|
}
|
|
@@ -47505,10 +47849,15 @@ var require_client_h2 = __commonJS({
|
|
|
47505
47849
|
}
|
|
47506
47850
|
stream = session.request(headers, { endStream: false, signal });
|
|
47507
47851
|
stream[kHTTP2Stream] = true;
|
|
47852
|
+
++session[kOpenStreams];
|
|
47508
47853
|
stream.once("response", (headers2, _flags) => {
|
|
47509
47854
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
47510
|
-
|
|
47511
|
-
|
|
47855
|
+
try {
|
|
47856
|
+
request2.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
|
|
47857
|
+
} catch (err2) {
|
|
47858
|
+
abort(err2);
|
|
47859
|
+
return;
|
|
47860
|
+
}
|
|
47512
47861
|
completeRequest(client, request2);
|
|
47513
47862
|
});
|
|
47514
47863
|
stream.on("error", () => {
|
|
@@ -47525,10 +47874,15 @@ var require_client_h2 = __commonJS({
|
|
|
47525
47874
|
}
|
|
47526
47875
|
stream = session.request(headers, { endStream: false, signal });
|
|
47527
47876
|
stream[kHTTP2Stream] = true;
|
|
47877
|
+
++session[kOpenStreams];
|
|
47528
47878
|
stream.on("response", (headers2) => {
|
|
47529
47879
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
47530
|
-
|
|
47531
|
-
|
|
47880
|
+
try {
|
|
47881
|
+
request2.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
|
|
47882
|
+
} catch (err2) {
|
|
47883
|
+
abort(err2);
|
|
47884
|
+
return;
|
|
47885
|
+
}
|
|
47532
47886
|
completeRequest(client, request2);
|
|
47533
47887
|
});
|
|
47534
47888
|
stream.on("error", abort);
|
|
@@ -47962,7 +48316,8 @@ var require_client = __commonJS({
|
|
|
47962
48316
|
initialWindowSize,
|
|
47963
48317
|
connectionWindowSize,
|
|
47964
48318
|
pingInterval,
|
|
47965
|
-
webSocket
|
|
48319
|
+
webSocket,
|
|
48320
|
+
eventSource
|
|
47966
48321
|
} = {}) {
|
|
47967
48322
|
if (keepAlive !== void 0) {
|
|
47968
48323
|
throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
|
|
@@ -48040,7 +48395,7 @@ var require_client = __commonJS({
|
|
|
48040
48395
|
if (pingInterval != null && (typeof pingInterval !== "number" || !Number.isInteger(pingInterval) || pingInterval < 0)) {
|
|
48041
48396
|
throw new InvalidArgumentError("pingInterval must be a positive integer, greater or equal to 0");
|
|
48042
48397
|
}
|
|
48043
|
-
super({ webSocket });
|
|
48398
|
+
super({ webSocket, eventSource });
|
|
48044
48399
|
if (typeof connect2 !== "function") {
|
|
48045
48400
|
connect2 = buildConnector({
|
|
48046
48401
|
...tls,
|
|
@@ -49021,7 +49376,7 @@ var require_agent = __commonJS({
|
|
|
49021
49376
|
return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
|
|
49022
49377
|
}
|
|
49023
49378
|
var Agent = class extends DispatcherBase {
|
|
49024
|
-
constructor({ factory = defaultFactory, maxOrigins = Infinity, connect, ...options } = {}) {
|
|
49379
|
+
constructor({ factory = defaultFactory, maxOrigins = Infinity, connect, tls, ...options } = {}) {
|
|
49025
49380
|
if (typeof factory !== "function") {
|
|
49026
49381
|
throw new InvalidArgumentError("factory must be a function.");
|
|
49027
49382
|
}
|
|
@@ -49035,7 +49390,10 @@ var require_agent = __commonJS({
|
|
|
49035
49390
|
if (connect && typeof connect !== "function") {
|
|
49036
49391
|
connect = { ...connect };
|
|
49037
49392
|
}
|
|
49038
|
-
|
|
49393
|
+
if (tls && typeof tls !== "function") {
|
|
49394
|
+
tls = { ...tls };
|
|
49395
|
+
}
|
|
49396
|
+
this[kOptions] = { ...util.deepClone(options), maxOrigins, connect, tls };
|
|
49039
49397
|
this[kFactory] = factory;
|
|
49040
49398
|
this[kClients] = /* @__PURE__ */ new Map();
|
|
49041
49399
|
this[kOrigins] = /* @__PURE__ */ new Set();
|
|
@@ -50244,6 +50602,55 @@ var require_retry_handler = __commonJS({
|
|
|
50244
50602
|
});
|
|
50245
50603
|
}
|
|
50246
50604
|
}
|
|
50605
|
+
var RetryController = class {
|
|
50606
|
+
#paused = false;
|
|
50607
|
+
#target = null;
|
|
50608
|
+
set target(target) {
|
|
50609
|
+
this.#target = target;
|
|
50610
|
+
if (this.#paused) {
|
|
50611
|
+
target?.pause();
|
|
50612
|
+
}
|
|
50613
|
+
}
|
|
50614
|
+
get target() {
|
|
50615
|
+
return this.#target;
|
|
50616
|
+
}
|
|
50617
|
+
pause() {
|
|
50618
|
+
this.#paused = true;
|
|
50619
|
+
this.#target?.pause();
|
|
50620
|
+
}
|
|
50621
|
+
resume() {
|
|
50622
|
+
this.#paused = false;
|
|
50623
|
+
this.#target?.resume();
|
|
50624
|
+
}
|
|
50625
|
+
abort(reason) {
|
|
50626
|
+
this.#target?.abort(reason);
|
|
50627
|
+
}
|
|
50628
|
+
get paused() {
|
|
50629
|
+
return this.#paused || (this.#target?.paused ?? false);
|
|
50630
|
+
}
|
|
50631
|
+
get aborted() {
|
|
50632
|
+
return this.#target?.aborted ?? false;
|
|
50633
|
+
}
|
|
50634
|
+
get reason() {
|
|
50635
|
+
return this.#target?.reason ?? null;
|
|
50636
|
+
}
|
|
50637
|
+
get rawHeaders() {
|
|
50638
|
+
return this.#target?.rawHeaders ?? null;
|
|
50639
|
+
}
|
|
50640
|
+
set rawHeaders(value) {
|
|
50641
|
+
if (this.#target) {
|
|
50642
|
+
this.#target.rawHeaders = value;
|
|
50643
|
+
}
|
|
50644
|
+
}
|
|
50645
|
+
get rawTrailers() {
|
|
50646
|
+
return this.#target?.rawTrailers ?? null;
|
|
50647
|
+
}
|
|
50648
|
+
set rawTrailers(value) {
|
|
50649
|
+
if (this.#target) {
|
|
50650
|
+
this.#target.rawTrailers = value;
|
|
50651
|
+
}
|
|
50652
|
+
}
|
|
50653
|
+
};
|
|
50247
50654
|
var RetryHandler = class _RetryHandler {
|
|
50248
50655
|
constructor(opts, { dispatch, handler }) {
|
|
50249
50656
|
const { retryOptions, ...dispatchOpts } = opts;
|
|
@@ -50298,16 +50705,17 @@ var require_retry_handler = __commonJS({
|
|
|
50298
50705
|
this.start = 0;
|
|
50299
50706
|
this.end = null;
|
|
50300
50707
|
this.etag = null;
|
|
50708
|
+
this.controllerProxy = new RetryController();
|
|
50301
50709
|
}
|
|
50302
50710
|
onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err2) {
|
|
50303
50711
|
if (this.retryOpts.throwOnError) {
|
|
50304
50712
|
if (this.retryOpts.statusCodes.includes(statusCode) === false) {
|
|
50305
50713
|
if (this.headersSent) {
|
|
50306
|
-
this.handler.onResponseError?.(
|
|
50714
|
+
this.handler.onResponseError?.(this.controllerProxy, err2);
|
|
50307
50715
|
} else {
|
|
50308
50716
|
this.headersSent = true;
|
|
50309
50717
|
this.checkpointResponseEnd(headers);
|
|
50310
|
-
this.handler.onResponseStart?.(
|
|
50718
|
+
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
|
50311
50719
|
}
|
|
50312
50720
|
} else {
|
|
50313
50721
|
this.error = err2;
|
|
@@ -50317,17 +50725,17 @@ var require_retry_handler = __commonJS({
|
|
|
50317
50725
|
if (isDisturbed(this.opts.body)) {
|
|
50318
50726
|
this.headersSent = true;
|
|
50319
50727
|
this.checkpointResponseEnd(headers);
|
|
50320
|
-
this.handler.onResponseStart?.(
|
|
50728
|
+
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
|
50321
50729
|
return;
|
|
50322
50730
|
}
|
|
50323
50731
|
function shouldRetry(passedErr) {
|
|
50324
50732
|
if (passedErr) {
|
|
50325
50733
|
if (this.headersSent) {
|
|
50326
|
-
this.handler.onResponseError?.(
|
|
50734
|
+
this.handler.onResponseError?.(this.controllerProxy, passedErr);
|
|
50327
50735
|
} else {
|
|
50328
50736
|
this.headersSent = true;
|
|
50329
50737
|
this.checkpointResponseEnd(headers);
|
|
50330
|
-
this.handler.onResponseStart?.(
|
|
50738
|
+
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
|
50331
50739
|
}
|
|
50332
50740
|
controller.resume();
|
|
50333
50741
|
return;
|
|
@@ -50357,12 +50765,13 @@ var require_retry_handler = __commonJS({
|
|
|
50357
50765
|
}
|
|
50358
50766
|
}
|
|
50359
50767
|
onRequestStart(controller, context) {
|
|
50768
|
+
this.controllerProxy.target = controller;
|
|
50360
50769
|
if (!this.headersSent) {
|
|
50361
|
-
this.handler.onRequestStart?.(
|
|
50770
|
+
this.handler.onRequestStart?.(this.controllerProxy, context);
|
|
50362
50771
|
}
|
|
50363
50772
|
}
|
|
50364
|
-
onRequestUpgrade(
|
|
50365
|
-
this.handler.onRequestUpgrade?.(
|
|
50773
|
+
onRequestUpgrade(_controller, statusCode, headers, socket) {
|
|
50774
|
+
this.handler.onRequestUpgrade?.(this.controllerProxy, statusCode, headers, socket);
|
|
50366
50775
|
}
|
|
50367
50776
|
static [kRetryHandlerDefaultRetry](err2, { state, opts }, cb) {
|
|
50368
50777
|
const { statusCode, code: code2, headers } = err2;
|
|
@@ -50450,7 +50859,7 @@ var require_retry_handler = __commonJS({
|
|
|
50450
50859
|
if (range == null) {
|
|
50451
50860
|
this.headersSent = true;
|
|
50452
50861
|
this.handler.onResponseStart?.(
|
|
50453
|
-
|
|
50862
|
+
this.controllerProxy,
|
|
50454
50863
|
statusCode,
|
|
50455
50864
|
headers,
|
|
50456
50865
|
statusMessage
|
|
@@ -50483,7 +50892,7 @@ var require_retry_handler = __commonJS({
|
|
|
50483
50892
|
}
|
|
50484
50893
|
this.headersSent = true;
|
|
50485
50894
|
this.handler.onResponseStart?.(
|
|
50486
|
-
|
|
50895
|
+
this.controllerProxy,
|
|
50487
50896
|
statusCode,
|
|
50488
50897
|
headers,
|
|
50489
50898
|
statusMessage
|
|
@@ -50495,24 +50904,24 @@ var require_retry_handler = __commonJS({
|
|
|
50495
50904
|
});
|
|
50496
50905
|
}
|
|
50497
50906
|
}
|
|
50498
|
-
onResponseData(
|
|
50907
|
+
onResponseData(_controller, chunk2) {
|
|
50499
50908
|
if (this.error) {
|
|
50500
50909
|
return;
|
|
50501
50910
|
}
|
|
50502
50911
|
this.start += chunk2.length;
|
|
50503
|
-
this.handler.onResponseData?.(
|
|
50912
|
+
this.handler.onResponseData?.(this.controllerProxy, chunk2);
|
|
50504
50913
|
}
|
|
50505
|
-
onResponseEnd(
|
|
50914
|
+
onResponseEnd(_controller, trailers) {
|
|
50506
50915
|
if (this.error && this.retryOpts.throwOnError) {
|
|
50507
50916
|
throw this.error;
|
|
50508
50917
|
}
|
|
50509
50918
|
if (!this.error) {
|
|
50510
50919
|
this.retryCount = 0;
|
|
50511
|
-
return this.handler.onResponseEnd?.(
|
|
50920
|
+
return this.handler.onResponseEnd?.(this.controllerProxy, trailers);
|
|
50512
50921
|
}
|
|
50513
|
-
this.retry(
|
|
50922
|
+
this.retry();
|
|
50514
50923
|
}
|
|
50515
|
-
retry(
|
|
50924
|
+
retry() {
|
|
50516
50925
|
if (this.start !== 0) {
|
|
50517
50926
|
const headers = { range: `bytes=${this.start}-${this.end ?? ""}` };
|
|
50518
50927
|
if (this.etag != null) {
|
|
@@ -50530,20 +50939,20 @@ var require_retry_handler = __commonJS({
|
|
|
50530
50939
|
this.retryCountCheckpoint = this.retryCount;
|
|
50531
50940
|
this.dispatch(this.opts, this);
|
|
50532
50941
|
} catch (err2) {
|
|
50533
|
-
this.handler.onResponseError?.(
|
|
50942
|
+
this.handler.onResponseError?.(this.controllerProxy, err2);
|
|
50534
50943
|
}
|
|
50535
50944
|
}
|
|
50536
50945
|
onResponseError(controller, err2) {
|
|
50537
50946
|
if (controller?.aborted || isDisturbed(this.opts.body) || this.headersSent && !this.resume) {
|
|
50538
|
-
this.handler.onResponseError?.(
|
|
50947
|
+
this.handler.onResponseError?.(this.controllerProxy, err2);
|
|
50539
50948
|
return;
|
|
50540
50949
|
}
|
|
50541
50950
|
function shouldRetry(returnedErr) {
|
|
50542
50951
|
if (!returnedErr) {
|
|
50543
|
-
this.retry(
|
|
50952
|
+
this.retry();
|
|
50544
50953
|
return;
|
|
50545
50954
|
}
|
|
50546
|
-
this.handler?.onResponseError?.(
|
|
50955
|
+
this.handler?.onResponseError?.(this.controllerProxy, returnedErr);
|
|
50547
50956
|
}
|
|
50548
50957
|
if (this.retryCount - this.retryCountCheckpoint > 0) {
|
|
50549
50958
|
this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint);
|
|
@@ -53848,7 +54257,7 @@ var require_redirect_handler = __commonJS({
|
|
|
53848
54257
|
"node_modules/undici/lib/handler/redirect-handler.js"(exports, module) {
|
|
53849
54258
|
"use strict";
|
|
53850
54259
|
var util = require_util();
|
|
53851
|
-
var { kBodyUsed } = require_symbols();
|
|
54260
|
+
var { kBodyUsed, kRedirectCacheControl } = require_symbols();
|
|
53852
54261
|
var assert = __require("assert");
|
|
53853
54262
|
var { InvalidArgumentError } = require_errors();
|
|
53854
54263
|
var EE = __require("events");
|
|
@@ -53886,6 +54295,10 @@ var require_redirect_handler = __commonJS({
|
|
|
53886
54295
|
this.maxRedirections = maxRedirections;
|
|
53887
54296
|
this.handler = handler;
|
|
53888
54297
|
this.history = [];
|
|
54298
|
+
Object.defineProperty(this.history, kRedirectCacheControl, {
|
|
54299
|
+
value: [],
|
|
54300
|
+
enumerable: false
|
|
54301
|
+
});
|
|
53889
54302
|
if (util.isStream(this.opts.body)) {
|
|
53890
54303
|
if (util.bodyLength(this.opts.body) === 0) {
|
|
53891
54304
|
this.opts.body.on("data", function() {
|
|
@@ -53936,6 +54349,7 @@ var require_redirect_handler = __commonJS({
|
|
|
53936
54349
|
this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage);
|
|
53937
54350
|
return;
|
|
53938
54351
|
}
|
|
54352
|
+
this.history[kRedirectCacheControl].push(headers["cache-control"]);
|
|
53939
54353
|
const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
|
53940
54354
|
const path99 = search ? `${pathname}${search}` : pathname;
|
|
53941
54355
|
const redirectUrlString = `${origin}${path99}`;
|
|
@@ -55637,6 +56051,7 @@ var require_cache_handler = __commonJS({
|
|
|
55637
56051
|
"node_modules/undici/lib/handler/cache-handler.js"(exports, module) {
|
|
55638
56052
|
"use strict";
|
|
55639
56053
|
var util = require_util();
|
|
56054
|
+
var { kRedirectCacheControl } = require_symbols();
|
|
55640
56055
|
var {
|
|
55641
56056
|
parseCacheControlHeader,
|
|
55642
56057
|
hasInvalidCacheControlDirective,
|
|
@@ -55648,6 +56063,13 @@ var require_cache_handler = __commonJS({
|
|
|
55648
56063
|
var { parseHttpDate } = require_date();
|
|
55649
56064
|
function noop() {
|
|
55650
56065
|
}
|
|
56066
|
+
function sameOrigin(a, b) {
|
|
56067
|
+
try {
|
|
56068
|
+
return new URL(String(a)).origin === new URL(String(b)).origin;
|
|
56069
|
+
} catch {
|
|
56070
|
+
return String(a) === String(b);
|
|
56071
|
+
}
|
|
56072
|
+
}
|
|
55651
56073
|
var HEURISTICALLY_CACHEABLE_STATUS_CODES = [
|
|
55652
56074
|
200,
|
|
55653
56075
|
203,
|
|
@@ -55763,6 +56185,13 @@ var require_cache_handler = __commonJS({
|
|
|
55763
56185
|
* @type {import('node:stream').Writable | undefined}
|
|
55764
56186
|
*/
|
|
55765
56187
|
#writeStream;
|
|
56188
|
+
/**
|
|
56189
|
+
* The URLs visited while following redirects, shared by reference from the
|
|
56190
|
+
* redirect handler through the request context. Carries the suppressed hops'
|
|
56191
|
+
* cache-control under {@link kRedirectCacheControl}.
|
|
56192
|
+
* @type {URL[] | undefined}
|
|
56193
|
+
*/
|
|
56194
|
+
#history;
|
|
55766
56195
|
/**
|
|
55767
56196
|
* @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts
|
|
55768
56197
|
* @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey
|
|
@@ -55778,6 +56207,7 @@ var require_cache_handler = __commonJS({
|
|
|
55778
56207
|
onRequestStart(controller, context) {
|
|
55779
56208
|
this.#writeStream?.destroy();
|
|
55780
56209
|
this.#writeStream = void 0;
|
|
56210
|
+
this.#history = context?.history;
|
|
55781
56211
|
this.#handler.onRequestStart?.(controller, context);
|
|
55782
56212
|
}
|
|
55783
56213
|
onRequestUpgrade(controller, statusCode, headers, socket) {
|
|
@@ -55801,6 +56231,21 @@ var require_cache_handler = __commonJS({
|
|
|
55801
56231
|
invalidateUnsafeRequest(this.#store, this.#cacheKey, resHeaders);
|
|
55802
56232
|
return downstreamOnHeaders();
|
|
55803
56233
|
}
|
|
56234
|
+
if (this.#history && this.#history.length > 0) {
|
|
56235
|
+
const finalUrl = this.#history[this.#history.length - 1];
|
|
56236
|
+
if (!sameOrigin(finalUrl.origin, this.#cacheKey.origin)) {
|
|
56237
|
+
return downstreamOnHeaders();
|
|
56238
|
+
}
|
|
56239
|
+
}
|
|
56240
|
+
const redirectCacheControl = this.#history?.[kRedirectCacheControl];
|
|
56241
|
+
if (redirectCacheControl) {
|
|
56242
|
+
for (const hopCacheControl of redirectCacheControl) {
|
|
56243
|
+
const hopDirectives = hopCacheControl ? parseCacheControlHeader(hopCacheControl) : {};
|
|
56244
|
+
if (hopDirectives["no-store"] === true || this.#cacheType === "shared" && hopDirectives.private === true) {
|
|
56245
|
+
return downstreamOnHeaders();
|
|
56246
|
+
}
|
|
56247
|
+
}
|
|
56248
|
+
}
|
|
55804
56249
|
const cacheControlHeader = resHeaders["cache-control"];
|
|
55805
56250
|
const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {};
|
|
55806
56251
|
if (revalidationResponseDisallowsCachedReuse(this.#cacheType, resHeaders, cacheControlDirectives)) {
|
|
@@ -56877,6 +57322,61 @@ var require_decompress = __commonJS({
|
|
|
56877
57322
|
var { InvalidArgumentError, ResponseExceededMaxSizeError } = require_errors();
|
|
56878
57323
|
var DecoratorHandler = require_decorator_handler();
|
|
56879
57324
|
var { runtimeFeatures } = require_runtime_features();
|
|
57325
|
+
var DecompressController = class {
|
|
57326
|
+
#onPause;
|
|
57327
|
+
#onResume;
|
|
57328
|
+
#onAbort;
|
|
57329
|
+
#paused = false;
|
|
57330
|
+
constructor(onPause, onResume, onAbort) {
|
|
57331
|
+
this.#onPause = onPause;
|
|
57332
|
+
this.#onResume = onResume;
|
|
57333
|
+
this.#onAbort = onAbort;
|
|
57334
|
+
this.target = null;
|
|
57335
|
+
}
|
|
57336
|
+
pause() {
|
|
57337
|
+
if (this.#paused) {
|
|
57338
|
+
return;
|
|
57339
|
+
}
|
|
57340
|
+
this.#paused = true;
|
|
57341
|
+
this.#onPause();
|
|
57342
|
+
}
|
|
57343
|
+
resume() {
|
|
57344
|
+
if (!this.#paused) {
|
|
57345
|
+
return;
|
|
57346
|
+
}
|
|
57347
|
+
this.#paused = false;
|
|
57348
|
+
this.#onResume();
|
|
57349
|
+
}
|
|
57350
|
+
abort(reason) {
|
|
57351
|
+
this.target?.abort(reason);
|
|
57352
|
+
this.#onAbort(reason);
|
|
57353
|
+
}
|
|
57354
|
+
get paused() {
|
|
57355
|
+
return this.#paused;
|
|
57356
|
+
}
|
|
57357
|
+
get aborted() {
|
|
57358
|
+
return this.target?.aborted ?? false;
|
|
57359
|
+
}
|
|
57360
|
+
get reason() {
|
|
57361
|
+
return this.target?.reason ?? null;
|
|
57362
|
+
}
|
|
57363
|
+
get rawHeaders() {
|
|
57364
|
+
return this.target?.rawHeaders ?? null;
|
|
57365
|
+
}
|
|
57366
|
+
set rawHeaders(value) {
|
|
57367
|
+
if (this.target) {
|
|
57368
|
+
this.target.rawHeaders = value;
|
|
57369
|
+
}
|
|
57370
|
+
}
|
|
57371
|
+
get rawTrailers() {
|
|
57372
|
+
return this.target?.rawTrailers ?? null;
|
|
57373
|
+
}
|
|
57374
|
+
set rawTrailers(value) {
|
|
57375
|
+
if (this.target) {
|
|
57376
|
+
this.target.rawTrailers = value;
|
|
57377
|
+
}
|
|
57378
|
+
}
|
|
57379
|
+
};
|
|
56880
57380
|
var supportedEncodings = {
|
|
56881
57381
|
gzip: createGunzip,
|
|
56882
57382
|
"x-gzip": createGunzip,
|
|
@@ -56890,7 +57390,7 @@ var require_decompress = __commonJS({
|
|
|
56890
57390
|
/** @type {const} */
|
|
56891
57391
|
[204, 304]
|
|
56892
57392
|
);
|
|
56893
|
-
var defaultMaxSize =
|
|
57393
|
+
var defaultMaxSize = 0;
|
|
56894
57394
|
function createMaxSizeLimiter(maxSize) {
|
|
56895
57395
|
let size = 0;
|
|
56896
57396
|
return new TransformStream2({
|
|
@@ -56928,14 +57428,124 @@ var require_decompress = __commonJS({
|
|
|
56928
57428
|
#terminated = false;
|
|
56929
57429
|
/** @type {boolean} */
|
|
56930
57430
|
#inputEnded = false;
|
|
57431
|
+
/** @type {boolean} */
|
|
57432
|
+
#inputBackpressured = false;
|
|
57433
|
+
/** @type {boolean} */
|
|
57434
|
+
#upstreamPaused = false;
|
|
57435
|
+
/** @type {boolean} */
|
|
57436
|
+
#draining = false;
|
|
57437
|
+
/** @type {boolean} */
|
|
57438
|
+
#drainRequested = false;
|
|
57439
|
+
/** @type {boolean} */
|
|
57440
|
+
#completionPending = false;
|
|
57441
|
+
/** @type {DecompressorStream | undefined} */
|
|
57442
|
+
#finalDecompressor;
|
|
57443
|
+
/** @type {DecompressController} */
|
|
57444
|
+
#controller;
|
|
56931
57445
|
constructor(handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true, maxSize = defaultMaxSize } = {}) {
|
|
56932
|
-
if (!Number.isSafeInteger(maxSize) || maxSize <
|
|
56933
|
-
throw new InvalidArgumentError("maxSize must be a
|
|
57446
|
+
if (!Number.isSafeInteger(maxSize) || maxSize < 0) {
|
|
57447
|
+
throw new InvalidArgumentError("maxSize must be a non-negative integer");
|
|
56934
57448
|
}
|
|
56935
57449
|
super(handler);
|
|
56936
57450
|
this.#skipStatusCodes = skipStatusCodes;
|
|
56937
57451
|
this.#skipErrorResponses = skipErrorResponses;
|
|
56938
57452
|
this.#maxSize = maxSize;
|
|
57453
|
+
this.#controller = new DecompressController(
|
|
57454
|
+
() => this.#onDownstreamPause(),
|
|
57455
|
+
() => this.#onDownstreamResume(),
|
|
57456
|
+
(reason) => {
|
|
57457
|
+
if (this.#inputEnded && !this.#terminated) {
|
|
57458
|
+
this.onResponseError(this.#controller, reason);
|
|
57459
|
+
}
|
|
57460
|
+
}
|
|
57461
|
+
);
|
|
57462
|
+
}
|
|
57463
|
+
#onDownstreamPause() {
|
|
57464
|
+
this.#pauseUpstream();
|
|
57465
|
+
}
|
|
57466
|
+
#onDownstreamResume() {
|
|
57467
|
+
const drainWasDeferred = this.#draining;
|
|
57468
|
+
this.#drainOutput();
|
|
57469
|
+
if (!drainWasDeferred) {
|
|
57470
|
+
this.#resumeUpstreamIfNeeded();
|
|
57471
|
+
this.#finishIfReady();
|
|
57472
|
+
}
|
|
57473
|
+
}
|
|
57474
|
+
#pauseUpstream() {
|
|
57475
|
+
if (!this.#upstreamPaused && !this.#terminated) {
|
|
57476
|
+
this.#upstreamPaused = true;
|
|
57477
|
+
this.#controller.target?.pause();
|
|
57478
|
+
}
|
|
57479
|
+
}
|
|
57480
|
+
#resumeUpstreamIfNeeded() {
|
|
57481
|
+
if (this.#upstreamPaused && !this.#controller.paused && !this.#inputBackpressured) {
|
|
57482
|
+
this.#upstreamPaused = false;
|
|
57483
|
+
if (!this.#inputEnded) {
|
|
57484
|
+
this.#controller.target?.resume();
|
|
57485
|
+
}
|
|
57486
|
+
}
|
|
57487
|
+
}
|
|
57488
|
+
#drainOutput() {
|
|
57489
|
+
if (this.#terminated || this.#controller.paused || !this.#finalDecompressor) {
|
|
57490
|
+
return;
|
|
57491
|
+
}
|
|
57492
|
+
if (this.#draining) {
|
|
57493
|
+
this.#drainRequested = true;
|
|
57494
|
+
return;
|
|
57495
|
+
}
|
|
57496
|
+
this.#draining = true;
|
|
57497
|
+
try {
|
|
57498
|
+
do {
|
|
57499
|
+
this.#drainRequested = false;
|
|
57500
|
+
let chunk2;
|
|
57501
|
+
while (!this.#terminated && !this.#controller.paused && (chunk2 = this.#finalDecompressor.read()) !== null) {
|
|
57502
|
+
if (this.#maxSize > 0) {
|
|
57503
|
+
const decompressedSize = this.#decompressedSize + chunk2.length;
|
|
57504
|
+
if (decompressedSize > this.#maxSize) {
|
|
57505
|
+
this.#fail(new ResponseExceededMaxSizeError(
|
|
57506
|
+
`Decompressed response size (${decompressedSize}) exceeded maxSize (${this.#maxSize})`
|
|
57507
|
+
));
|
|
57508
|
+
return;
|
|
57509
|
+
}
|
|
57510
|
+
this.#decompressedSize = decompressedSize;
|
|
57511
|
+
}
|
|
57512
|
+
try {
|
|
57513
|
+
const result = super.onResponseData(this.#controller, chunk2);
|
|
57514
|
+
if (result === false && !this.#controller.paused) {
|
|
57515
|
+
this.#controller.pause();
|
|
57516
|
+
}
|
|
57517
|
+
} catch (err2) {
|
|
57518
|
+
this.#fail(err2);
|
|
57519
|
+
return;
|
|
57520
|
+
}
|
|
57521
|
+
}
|
|
57522
|
+
} while (this.#drainRequested && !this.#terminated && !this.#controller.paused);
|
|
57523
|
+
} finally {
|
|
57524
|
+
this.#draining = false;
|
|
57525
|
+
}
|
|
57526
|
+
this.#resumeUpstreamIfNeeded();
|
|
57527
|
+
this.#finishIfReady();
|
|
57528
|
+
}
|
|
57529
|
+
#finishIfReady() {
|
|
57530
|
+
if (this.#terminated || !this.#completionPending || this.#controller.paused || this.#draining) {
|
|
57531
|
+
return;
|
|
57532
|
+
}
|
|
57533
|
+
this.#cleanupDecompressors();
|
|
57534
|
+
try {
|
|
57535
|
+
super.onResponseEnd(this.#controller, this.#trailers);
|
|
57536
|
+
} catch (err2) {
|
|
57537
|
+
this.#fail(err2);
|
|
57538
|
+
return;
|
|
57539
|
+
}
|
|
57540
|
+
this.#terminated = true;
|
|
57541
|
+
}
|
|
57542
|
+
#onDecompressionEnd() {
|
|
57543
|
+
if (this.#terminated) {
|
|
57544
|
+
return;
|
|
57545
|
+
}
|
|
57546
|
+
this.#completionPending = true;
|
|
57547
|
+
this.#drainOutput();
|
|
57548
|
+
this.#finishIfReady();
|
|
56939
57549
|
}
|
|
56940
57550
|
/**
|
|
56941
57551
|
* Determines if decompression should be skipped based on encoding and status code
|
|
@@ -56978,7 +57588,7 @@ var require_decompress = __commonJS({
|
|
|
56978
57588
|
const streams = [];
|
|
56979
57589
|
for (let i = 0; i < decompressors.length; i++) {
|
|
56980
57590
|
streams.push(decompressors[i]);
|
|
56981
|
-
if (i < decompressors.length - 1) {
|
|
57591
|
+
if (i < decompressors.length - 1 && this.#maxSize > 0) {
|
|
56982
57592
|
streams.push(createMaxSizeLimiter(this.#maxSize));
|
|
56983
57593
|
}
|
|
56984
57594
|
}
|
|
@@ -56986,87 +57596,67 @@ var require_decompress = __commonJS({
|
|
|
56986
57596
|
}
|
|
56987
57597
|
/**
|
|
56988
57598
|
* Stops decompression and reports an error.
|
|
56989
|
-
* @param {Controller} controller - The controller to coordinate with
|
|
56990
57599
|
* @param {Error} error - The decompression error
|
|
56991
57600
|
* @returns {void}
|
|
56992
57601
|
*/
|
|
56993
|
-
#fail(
|
|
57602
|
+
#fail(error) {
|
|
56994
57603
|
if (this.#terminated) {
|
|
56995
57604
|
return;
|
|
56996
57605
|
}
|
|
56997
57606
|
if (this.#inputEnded) {
|
|
56998
|
-
this.onResponseError(controller, error);
|
|
57607
|
+
this.onResponseError(this.#controller, error);
|
|
56999
57608
|
} else {
|
|
57000
|
-
controller.abort(error);
|
|
57609
|
+
this.#controller.abort(error);
|
|
57001
57610
|
}
|
|
57002
57611
|
}
|
|
57003
57612
|
/**
|
|
57004
|
-
* Sets up event handlers for
|
|
57613
|
+
* Sets up event handlers for the final decompressor stream.
|
|
57005
57614
|
* @param {DecompressorStream} decompressor - The decompressor stream
|
|
57006
|
-
* @param {Controller} controller - The controller to coordinate with
|
|
57007
57615
|
* @returns {void}
|
|
57008
57616
|
*/
|
|
57009
|
-
#setupDecompressorEvents(decompressor
|
|
57010
|
-
|
|
57011
|
-
|
|
57012
|
-
|
|
57013
|
-
}
|
|
57014
|
-
let chunk2;
|
|
57015
|
-
while ((chunk2 = decompressor.read()) !== null) {
|
|
57016
|
-
const decompressedSize = this.#decompressedSize + chunk2.length;
|
|
57017
|
-
if (decompressedSize > this.#maxSize) {
|
|
57018
|
-
this.#fail(controller, new ResponseExceededMaxSizeError(
|
|
57019
|
-
`Decompressed response size (${decompressedSize}) exceeded maxSize (${this.#maxSize})`
|
|
57020
|
-
));
|
|
57021
|
-
return;
|
|
57022
|
-
}
|
|
57023
|
-
this.#decompressedSize = decompressedSize;
|
|
57024
|
-
const result = super.onResponseData(controller, chunk2);
|
|
57025
|
-
if (result === false) {
|
|
57026
|
-
break;
|
|
57027
|
-
}
|
|
57028
|
-
}
|
|
57029
|
-
});
|
|
57030
|
-
decompressor.on("error", (error) => {
|
|
57031
|
-
this.#fail(controller, error);
|
|
57032
|
-
});
|
|
57617
|
+
#setupDecompressorEvents(decompressor) {
|
|
57618
|
+
this.#finalDecompressor = decompressor;
|
|
57619
|
+
decompressor.on("readable", () => this.#drainOutput());
|
|
57620
|
+
decompressor.on("error", (error) => this.#fail(error));
|
|
57033
57621
|
}
|
|
57034
57622
|
/**
|
|
57035
57623
|
* Sets up event handling for a single decompressor
|
|
57036
|
-
* @param {Controller} controller - The controller to handle events
|
|
57037
57624
|
* @returns {void}
|
|
57038
57625
|
*/
|
|
57039
|
-
#setupSingleDecompressor(
|
|
57626
|
+
#setupSingleDecompressor() {
|
|
57040
57627
|
const decompressor = this.#decompressors[0];
|
|
57041
|
-
this.#setupDecompressorEvents(decompressor
|
|
57042
|
-
decompressor.on("end", () =>
|
|
57043
|
-
if (this.#terminated) {
|
|
57044
|
-
return;
|
|
57045
|
-
}
|
|
57046
|
-
this.#terminated = true;
|
|
57047
|
-
this.#cleanupDecompressors();
|
|
57048
|
-
super.onResponseEnd(controller, this.#trailers);
|
|
57049
|
-
});
|
|
57628
|
+
this.#setupDecompressorEvents(decompressor);
|
|
57629
|
+
decompressor.on("end", () => this.#onDecompressionEnd());
|
|
57050
57630
|
}
|
|
57051
57631
|
/**
|
|
57052
57632
|
* Sets up event handling for multiple chained decompressors using pipeline
|
|
57053
|
-
* @param {Controller} controller - The controller to handle events
|
|
57054
57633
|
* @returns {void}
|
|
57055
57634
|
*/
|
|
57056
|
-
#setupMultipleDecompressors(
|
|
57635
|
+
#setupMultipleDecompressors() {
|
|
57057
57636
|
const lastDecompressor = this.#decompressors[this.#decompressors.length - 1];
|
|
57058
|
-
this.#setupDecompressorEvents(lastDecompressor
|
|
57637
|
+
this.#setupDecompressorEvents(lastDecompressor);
|
|
57059
57638
|
pipeline2(this.#decompressors, (err2) => {
|
|
57060
57639
|
if (this.#terminated) {
|
|
57061
57640
|
return;
|
|
57062
57641
|
}
|
|
57063
57642
|
if (err2) {
|
|
57064
|
-
this.#fail(
|
|
57643
|
+
this.#fail(err2);
|
|
57065
57644
|
return;
|
|
57066
57645
|
}
|
|
57067
|
-
this.#
|
|
57068
|
-
|
|
57069
|
-
|
|
57646
|
+
this.#onDecompressionEnd();
|
|
57647
|
+
});
|
|
57648
|
+
}
|
|
57649
|
+
#setupInputBackpressure() {
|
|
57650
|
+
const decompressor = this.#decompressors[0];
|
|
57651
|
+
decompressor.on("drain", () => {
|
|
57652
|
+
if (this.#terminated) {
|
|
57653
|
+
return;
|
|
57654
|
+
}
|
|
57655
|
+
this.#inputBackpressured = false;
|
|
57656
|
+
if (!this.#controller.paused) {
|
|
57657
|
+
this.#drainOutput();
|
|
57658
|
+
this.#resumeUpstreamIfNeeded();
|
|
57659
|
+
}
|
|
57070
57660
|
});
|
|
57071
57661
|
}
|
|
57072
57662
|
/**
|
|
@@ -57075,6 +57665,14 @@ var require_decompress = __commonJS({
|
|
|
57075
57665
|
*/
|
|
57076
57666
|
#cleanupDecompressors() {
|
|
57077
57667
|
this.#decompressors.length = 0;
|
|
57668
|
+
this.#finalDecompressor = void 0;
|
|
57669
|
+
}
|
|
57670
|
+
onRequestStart(controller, context) {
|
|
57671
|
+
this.#controller.target = controller;
|
|
57672
|
+
return super.onRequestStart(this.#controller, context);
|
|
57673
|
+
}
|
|
57674
|
+
onRequestUpgrade(controller, statusCode, headers, socket) {
|
|
57675
|
+
return super.onRequestUpgrade(this.#controller, statusCode, headers, socket);
|
|
57078
57676
|
}
|
|
57079
57677
|
/**
|
|
57080
57678
|
* @param {Controller} controller
|
|
@@ -57086,17 +57684,17 @@ var require_decompress = __commonJS({
|
|
|
57086
57684
|
onResponseStart(controller, statusCode, headers, statusMessage) {
|
|
57087
57685
|
const contentEncoding = headers["content-encoding"];
|
|
57088
57686
|
if (this.#shouldSkipDecompression(contentEncoding, statusCode)) {
|
|
57089
|
-
return super.onResponseStart(controller, statusCode, headers, statusMessage);
|
|
57687
|
+
return super.onResponseStart(this.#controller, statusCode, headers, statusMessage);
|
|
57090
57688
|
}
|
|
57091
57689
|
const decompressors = this.#createDecompressionChain(contentEncoding.toLowerCase());
|
|
57092
57690
|
if (decompressors.length === 0) {
|
|
57093
57691
|
this.#cleanupDecompressors();
|
|
57094
|
-
return super.onResponseStart(controller, statusCode, headers, statusMessage);
|
|
57692
|
+
return super.onResponseStart(this.#controller, statusCode, headers, statusMessage);
|
|
57095
57693
|
}
|
|
57096
57694
|
this.#decompressors = decompressors;
|
|
57097
57695
|
const { "content-encoding": _, "content-length": __, ...newHeaders } = headers;
|
|
57098
|
-
if (controller
|
|
57099
|
-
const rawHeaders = controller.rawHeaders;
|
|
57696
|
+
if (this.#controller.rawHeaders) {
|
|
57697
|
+
const rawHeaders = this.#controller.rawHeaders;
|
|
57100
57698
|
if (Array.isArray(rawHeaders)) {
|
|
57101
57699
|
const filteredHeaders = [];
|
|
57102
57700
|
for (let i = 0; i < rawHeaders.length; i += 2) {
|
|
@@ -57118,12 +57716,13 @@ var require_decompress = __commonJS({
|
|
|
57118
57716
|
}
|
|
57119
57717
|
}
|
|
57120
57718
|
}
|
|
57719
|
+
this.#setupInputBackpressure();
|
|
57121
57720
|
if (this.#decompressors.length === 1) {
|
|
57122
|
-
this.#setupSingleDecompressor(
|
|
57721
|
+
this.#setupSingleDecompressor();
|
|
57123
57722
|
} else {
|
|
57124
|
-
this.#setupMultipleDecompressors(
|
|
57723
|
+
this.#setupMultipleDecompressors();
|
|
57125
57724
|
}
|
|
57126
|
-
return super.onResponseStart(controller, statusCode, newHeaders, statusMessage);
|
|
57725
|
+
return super.onResponseStart(this.#controller, statusCode, newHeaders, statusMessage);
|
|
57127
57726
|
}
|
|
57128
57727
|
/**
|
|
57129
57728
|
* @param {Controller} controller
|
|
@@ -57132,10 +57731,13 @@ var require_decompress = __commonJS({
|
|
|
57132
57731
|
*/
|
|
57133
57732
|
onResponseData(controller, chunk2) {
|
|
57134
57733
|
if (this.#decompressors.length > 0) {
|
|
57135
|
-
this.#decompressors[0].write(chunk2)
|
|
57734
|
+
if (!this.#decompressors[0].write(chunk2)) {
|
|
57735
|
+
this.#inputBackpressured = true;
|
|
57736
|
+
this.#pauseUpstream();
|
|
57737
|
+
}
|
|
57136
57738
|
return;
|
|
57137
57739
|
}
|
|
57138
|
-
super.onResponseData(controller, chunk2);
|
|
57740
|
+
return super.onResponseData(this.#controller, chunk2);
|
|
57139
57741
|
}
|
|
57140
57742
|
/**
|
|
57141
57743
|
* @param {Controller} controller
|
|
@@ -57149,7 +57751,7 @@ var require_decompress = __commonJS({
|
|
|
57149
57751
|
this.#decompressors[0].end();
|
|
57150
57752
|
return;
|
|
57151
57753
|
}
|
|
57152
|
-
super.onResponseEnd(controller, trailers);
|
|
57754
|
+
return super.onResponseEnd(this.#controller, trailers);
|
|
57153
57755
|
}
|
|
57154
57756
|
/**
|
|
57155
57757
|
* @param {Controller} controller
|
|
@@ -57165,7 +57767,7 @@ var require_decompress = __commonJS({
|
|
|
57165
57767
|
decompressor.destroy();
|
|
57166
57768
|
}
|
|
57167
57769
|
this.#cleanupDecompressors();
|
|
57168
|
-
super.onResponseError(controller, err2);
|
|
57770
|
+
super.onResponseError(this.#controller, err2);
|
|
57169
57771
|
}
|
|
57170
57772
|
};
|
|
57171
57773
|
function createDecompressInterceptor(options = {}) {
|
|
@@ -57198,6 +57800,18 @@ var require_deduplication_handler = __commonJS({
|
|
|
57198
57800
|
* @type {DispatchHandler}
|
|
57199
57801
|
*/
|
|
57200
57802
|
#primaryHandler;
|
|
57803
|
+
/**
|
|
57804
|
+
* Whether the primary request has started (onRequestStart received). Until
|
|
57805
|
+
* then the request context is unknown and cannot be given to waiting handlers.
|
|
57806
|
+
* @type {boolean}
|
|
57807
|
+
*/
|
|
57808
|
+
#requestStarted = false;
|
|
57809
|
+
/**
|
|
57810
|
+
* The primary request context, replayed to waiting handlers so they observe
|
|
57811
|
+
* the same redirect history as the primary.
|
|
57812
|
+
* @type {any}
|
|
57813
|
+
*/
|
|
57814
|
+
#context = null;
|
|
57201
57815
|
/**
|
|
57202
57816
|
* @type {WaitingHandler[]}
|
|
57203
57817
|
*/
|
|
@@ -57266,18 +57880,22 @@ var require_deduplication_handler = __commonJS({
|
|
|
57266
57880
|
const waitingHandler = this.#createWaitingHandler(handler);
|
|
57267
57881
|
const waitingController = waitingHandler.controller;
|
|
57268
57882
|
try {
|
|
57269
|
-
|
|
57270
|
-
|
|
57271
|
-
|
|
57272
|
-
|
|
57273
|
-
|
|
57274
|
-
|
|
57275
|
-
|
|
57276
|
-
|
|
57277
|
-
|
|
57278
|
-
|
|
57279
|
-
|
|
57280
|
-
|
|
57883
|
+
if (this.#requestStarted) {
|
|
57884
|
+
handler.onRequestStart?.(waitingController, this.#context);
|
|
57885
|
+
if (waitingController.aborted) {
|
|
57886
|
+
waitingHandler.done = true;
|
|
57887
|
+
return true;
|
|
57888
|
+
}
|
|
57889
|
+
if (this.#responseStarted) {
|
|
57890
|
+
handler.onResponseStart?.(
|
|
57891
|
+
waitingController,
|
|
57892
|
+
this.#statusCode,
|
|
57893
|
+
this.#headers,
|
|
57894
|
+
this.#statusMessage
|
|
57895
|
+
);
|
|
57896
|
+
}
|
|
57897
|
+
} else {
|
|
57898
|
+
waitingHandler.pendingStart = true;
|
|
57281
57899
|
}
|
|
57282
57900
|
} catch {
|
|
57283
57901
|
waitingHandler.done = true;
|
|
@@ -57294,6 +57912,21 @@ var require_deduplication_handler = __commonJS({
|
|
|
57294
57912
|
*/
|
|
57295
57913
|
onRequestStart(controller, context) {
|
|
57296
57914
|
this.#controller = controller;
|
|
57915
|
+
if (!this.#requestStarted) {
|
|
57916
|
+
this.#requestStarted = true;
|
|
57917
|
+
this.#context = context;
|
|
57918
|
+
for (const waitingHandler of this.#waitingHandlers) {
|
|
57919
|
+
if (waitingHandler.pendingStart && !waitingHandler.done && !waitingHandler.controller.aborted) {
|
|
57920
|
+
waitingHandler.pendingStart = false;
|
|
57921
|
+
try {
|
|
57922
|
+
waitingHandler.handler.onRequestStart?.(waitingHandler.controller, context);
|
|
57923
|
+
} catch {
|
|
57924
|
+
waitingHandler.done = true;
|
|
57925
|
+
}
|
|
57926
|
+
}
|
|
57927
|
+
}
|
|
57928
|
+
this.#pruneDoneWaitingHandlers();
|
|
57929
|
+
}
|
|
57297
57930
|
this.#primaryHandler.onRequestStart?.(controller, context);
|
|
57298
57931
|
}
|
|
57299
57932
|
/**
|
|
@@ -57431,7 +58064,8 @@ var require_deduplication_handler = __commonJS({
|
|
|
57431
58064
|
bufferedChunks: [],
|
|
57432
58065
|
bufferedBytes: 0,
|
|
57433
58066
|
pendingTrailers: null,
|
|
57434
|
-
done: false
|
|
58067
|
+
done: false,
|
|
58068
|
+
pendingStart: false
|
|
57435
58069
|
};
|
|
57436
58070
|
const state = {
|
|
57437
58071
|
aborted: false,
|
|
@@ -59640,6 +60274,7 @@ var require_subresource_integrity = __commonJS({
|
|
|
59640
60274
|
"use strict";
|
|
59641
60275
|
var assert = __require("assert");
|
|
59642
60276
|
var { runtimeFeatures } = require_runtime_features();
|
|
60277
|
+
var { asciiLowercase } = require_infra();
|
|
59643
60278
|
var validSRIHashAlgorithmTokenSet = /* @__PURE__ */ new Map([["sha256", 0], ["sha384", 1], ["sha512", 2]]);
|
|
59644
60279
|
var crypto12;
|
|
59645
60280
|
if (runtimeFeatures.has("crypto")) {
|
|
@@ -59662,10 +60297,7 @@ var require_subresource_integrity = __commonJS({
|
|
|
59662
60297
|
validSRIHashAlgorithmTokenSet
|
|
59663
60298
|
)
|
|
59664
60299
|
);
|
|
59665
|
-
var isValidSRIHashAlgorithm = (
|
|
59666
|
-
/** @type {IsValidSRIHashAlgorithm} */
|
|
59667
|
-
Map.prototype.has.bind(validSRIHashAlgorithmTokenSet)
|
|
59668
|
-
);
|
|
60300
|
+
var isValidSRIHashAlgorithm = (algorithm) => validSRIHashAlgorithmTokenSet.has(asciiLowercase(algorithm));
|
|
59669
60301
|
var bytesMatch = runtimeFeatures.has("crypto") === false || validSRIHashAlgorithmTokenSet.size === 0 ? () => true : (bytes, metadataList) => {
|
|
59670
60302
|
const parsedMetadata = parseMetadata(metadataList);
|
|
59671
60303
|
if (parsedMetadata.length === 0) {
|
|
@@ -59726,7 +60358,8 @@ var require_subresource_integrity = __commonJS({
|
|
|
59726
60358
|
base64Value = algorithmAndValue[1];
|
|
59727
60359
|
}
|
|
59728
60360
|
const metadata2 = {
|
|
59729
|
-
|
|
60361
|
+
// Possible spec bug?
|
|
60362
|
+
alg: asciiLowercase(algorithm),
|
|
59730
60363
|
val: base64Value
|
|
59731
60364
|
};
|
|
59732
60365
|
result.push(metadata2);
|
|
@@ -60775,7 +61408,6 @@ var require_fetch = __commonJS({
|
|
|
60775
61408
|
}
|
|
60776
61409
|
}
|
|
60777
61410
|
const location = headersList.get("location", true);
|
|
60778
|
-
this.body = new Readable2({ read: resume });
|
|
60779
61411
|
const willFollow = location && request2.redirect === "follow" && redirectStatusSet.has(status);
|
|
60780
61412
|
const decoders = [];
|
|
60781
61413
|
if (request2.method !== "HEAD" && request2.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
|
|
@@ -60783,7 +61415,7 @@ var require_fetch = __commonJS({
|
|
|
60783
61415
|
const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : [];
|
|
60784
61416
|
const maxContentEncodings = 5;
|
|
60785
61417
|
if (codings.length > maxContentEncodings) {
|
|
60786
|
-
|
|
61418
|
+
this.abort(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`));
|
|
60787
61419
|
return true;
|
|
60788
61420
|
}
|
|
60789
61421
|
for (let i = codings.length - 1; i >= 0; --i) {
|
|
@@ -60818,6 +61450,7 @@ var require_fetch = __commonJS({
|
|
|
60818
61450
|
}
|
|
60819
61451
|
}
|
|
60820
61452
|
}
|
|
61453
|
+
this.body = new Readable2({ read: resume });
|
|
60821
61454
|
const onError = this.onError.bind(this);
|
|
60822
61455
|
resolve2({
|
|
60823
61456
|
status,
|
|
@@ -61797,8 +62430,12 @@ var require_util4 = __commonJS({
|
|
|
61797
62430
|
validateCookiePath(cookie.path);
|
|
61798
62431
|
out.push(`Path=${cookie.path}`);
|
|
61799
62432
|
}
|
|
61800
|
-
if (cookie.expires
|
|
61801
|
-
|
|
62433
|
+
if (cookie.expires != null) {
|
|
62434
|
+
const expiresMs = cookie.expires instanceof Date ? cookie.expires.getTime() : cookie.expires;
|
|
62435
|
+
const maxTimeValue = 864e13;
|
|
62436
|
+
if (typeof expiresMs === "number" && Number.isFinite(expiresMs) && Math.abs(expiresMs) <= maxTimeValue) {
|
|
62437
|
+
out.push(`Expires=${toIMFDate(cookie.expires)}`);
|
|
62438
|
+
}
|
|
61802
62439
|
}
|
|
61803
62440
|
if (cookie.sameSite) {
|
|
61804
62441
|
out.push(`SameSite=${cookie.sameSite}`);
|
|
@@ -61873,88 +62510,89 @@ var require_parse = __commonJS({
|
|
|
61873
62510
|
};
|
|
61874
62511
|
}
|
|
61875
62512
|
function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) {
|
|
61876
|
-
|
|
61877
|
-
|
|
61878
|
-
|
|
61879
|
-
|
|
61880
|
-
|
|
61881
|
-
|
|
61882
|
-
|
|
61883
|
-
|
|
61884
|
-
|
|
61885
|
-
|
|
61886
|
-
|
|
61887
|
-
|
|
61888
|
-
|
|
61889
|
-
|
|
61890
|
-
cookieAv = unparsedAttributes;
|
|
61891
|
-
unparsedAttributes = "";
|
|
61892
|
-
}
|
|
61893
|
-
let attributeName = "";
|
|
61894
|
-
let attributeValue = "";
|
|
61895
|
-
if (cookieAv.includes("=")) {
|
|
61896
|
-
const position = { position: 0 };
|
|
61897
|
-
attributeName = collectASequenceOfCodePointsFast(
|
|
61898
|
-
"=",
|
|
61899
|
-
cookieAv,
|
|
61900
|
-
position
|
|
61901
|
-
);
|
|
61902
|
-
attributeValue = cookieAv.slice(position.position + 1);
|
|
61903
|
-
} else {
|
|
61904
|
-
attributeName = cookieAv;
|
|
61905
|
-
}
|
|
61906
|
-
attributeName = attributeName.trim();
|
|
61907
|
-
attributeValue = attributeValue.trim();
|
|
61908
|
-
if (attributeValue.length > maxAttributeValueSize) {
|
|
61909
|
-
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
61910
|
-
}
|
|
61911
|
-
const attributeNameLowercase = attributeName.toLowerCase();
|
|
61912
|
-
if (attributeNameLowercase === "expires") {
|
|
61913
|
-
const expiryTime = new Date(attributeValue);
|
|
61914
|
-
cookieAttributeList.expires = expiryTime;
|
|
61915
|
-
} else if (attributeNameLowercase === "max-age") {
|
|
61916
|
-
const charCode = attributeValue.charCodeAt(0);
|
|
61917
|
-
if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
|
|
61918
|
-
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
61919
|
-
}
|
|
61920
|
-
if (!/^\d+$/.test(attributeValue)) {
|
|
61921
|
-
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
61922
|
-
}
|
|
61923
|
-
const deltaSeconds = Number(attributeValue);
|
|
61924
|
-
cookieAttributeList.maxAge = deltaSeconds;
|
|
61925
|
-
} else if (attributeNameLowercase === "domain") {
|
|
61926
|
-
let cookieDomain = attributeValue;
|
|
61927
|
-
if (cookieDomain[0] === ".") {
|
|
61928
|
-
cookieDomain = cookieDomain.slice(1);
|
|
61929
|
-
}
|
|
61930
|
-
cookieDomain = cookieDomain.toLowerCase();
|
|
61931
|
-
cookieAttributeList.domain = cookieDomain;
|
|
61932
|
-
} else if (attributeNameLowercase === "path") {
|
|
61933
|
-
let cookiePath = "";
|
|
61934
|
-
if (attributeValue.length === 0 || attributeValue[0] !== "/") {
|
|
61935
|
-
cookiePath = "/";
|
|
62513
|
+
while (true) {
|
|
62514
|
+
if (unparsedAttributes.length === 0) {
|
|
62515
|
+
return cookieAttributeList;
|
|
62516
|
+
}
|
|
62517
|
+
assert(unparsedAttributes[0] === ";");
|
|
62518
|
+
unparsedAttributes = unparsedAttributes.slice(1);
|
|
62519
|
+
let cookieAv = "";
|
|
62520
|
+
if (unparsedAttributes.includes(";")) {
|
|
62521
|
+
cookieAv = collectASequenceOfCodePointsFast(
|
|
62522
|
+
";",
|
|
62523
|
+
unparsedAttributes,
|
|
62524
|
+
{ position: 0 }
|
|
62525
|
+
);
|
|
62526
|
+
unparsedAttributes = unparsedAttributes.slice(cookieAv.length);
|
|
61936
62527
|
} else {
|
|
61937
|
-
|
|
61938
|
-
|
|
61939
|
-
|
|
61940
|
-
|
|
61941
|
-
|
|
61942
|
-
|
|
61943
|
-
|
|
61944
|
-
|
|
61945
|
-
|
|
61946
|
-
|
|
61947
|
-
|
|
61948
|
-
|
|
61949
|
-
|
|
61950
|
-
} else
|
|
61951
|
-
|
|
62528
|
+
cookieAv = unparsedAttributes;
|
|
62529
|
+
unparsedAttributes = "";
|
|
62530
|
+
}
|
|
62531
|
+
let attributeName = "";
|
|
62532
|
+
let attributeValue = "";
|
|
62533
|
+
if (cookieAv.includes("=")) {
|
|
62534
|
+
const position = { position: 0 };
|
|
62535
|
+
attributeName = collectASequenceOfCodePointsFast(
|
|
62536
|
+
"=",
|
|
62537
|
+
cookieAv,
|
|
62538
|
+
position
|
|
62539
|
+
);
|
|
62540
|
+
attributeValue = cookieAv.slice(position.position + 1);
|
|
62541
|
+
} else {
|
|
62542
|
+
attributeName = cookieAv;
|
|
62543
|
+
}
|
|
62544
|
+
attributeName = attributeName.trim();
|
|
62545
|
+
attributeValue = attributeValue.trim();
|
|
62546
|
+
if (attributeValue.length > maxAttributeValueSize) {
|
|
62547
|
+
continue;
|
|
62548
|
+
}
|
|
62549
|
+
const attributeNameLowercase = attributeName.toLowerCase();
|
|
62550
|
+
if (attributeNameLowercase === "expires") {
|
|
62551
|
+
const expiryTime = new Date(attributeValue);
|
|
62552
|
+
cookieAttributeList.expires = expiryTime;
|
|
62553
|
+
} else if (attributeNameLowercase === "max-age") {
|
|
62554
|
+
const charCode = attributeValue.charCodeAt(0);
|
|
62555
|
+
if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
|
|
62556
|
+
continue;
|
|
62557
|
+
}
|
|
62558
|
+
if (!/^\d+$/.test(attributeValue)) {
|
|
62559
|
+
continue;
|
|
62560
|
+
}
|
|
62561
|
+
const deltaSeconds = Number(attributeValue);
|
|
62562
|
+
cookieAttributeList.maxAge = deltaSeconds;
|
|
62563
|
+
} else if (attributeNameLowercase === "domain") {
|
|
62564
|
+
let cookieDomain = attributeValue;
|
|
62565
|
+
if (cookieDomain[0] === ".") {
|
|
62566
|
+
cookieDomain = cookieDomain.slice(1);
|
|
62567
|
+
}
|
|
62568
|
+
cookieDomain = cookieDomain.toLowerCase();
|
|
62569
|
+
cookieAttributeList.domain = cookieDomain;
|
|
62570
|
+
} else if (attributeNameLowercase === "path") {
|
|
62571
|
+
let cookiePath = "";
|
|
62572
|
+
if (attributeValue.length === 0 || attributeValue[0] !== "/") {
|
|
62573
|
+
cookiePath = "/";
|
|
62574
|
+
} else {
|
|
62575
|
+
cookiePath = attributeValue;
|
|
62576
|
+
}
|
|
62577
|
+
cookieAttributeList.path = cookiePath;
|
|
62578
|
+
} else if (attributeNameLowercase === "secure") {
|
|
62579
|
+
cookieAttributeList.secure = true;
|
|
62580
|
+
} else if (attributeNameLowercase === "httponly") {
|
|
62581
|
+
cookieAttributeList.httpOnly = true;
|
|
62582
|
+
} else if (attributeNameLowercase === "samesite") {
|
|
62583
|
+
const attributeValueLowercase = attributeValue.toLowerCase();
|
|
62584
|
+
if (attributeValueLowercase === "none") {
|
|
62585
|
+
cookieAttributeList.sameSite = "None";
|
|
62586
|
+
} else if (attributeValueLowercase === "strict") {
|
|
62587
|
+
cookieAttributeList.sameSite = "Strict";
|
|
62588
|
+
} else if (attributeValueLowercase === "lax") {
|
|
62589
|
+
cookieAttributeList.sameSite = "Lax";
|
|
62590
|
+
}
|
|
62591
|
+
} else {
|
|
62592
|
+
cookieAttributeList.unparsed ??= [];
|
|
62593
|
+
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
|
|
61952
62594
|
}
|
|
61953
|
-
} else {
|
|
61954
|
-
cookieAttributeList.unparsed ??= [];
|
|
61955
|
-
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
|
|
61956
62595
|
}
|
|
61957
|
-
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
61958
62596
|
}
|
|
61959
62597
|
module.exports = {
|
|
61960
62598
|
parseSetCookie,
|
|
@@ -61976,7 +62614,7 @@ var require_cookies = __commonJS({
|
|
|
61976
62614
|
webidl.argumentLengthCheck(arguments, 1, "getCookies");
|
|
61977
62615
|
brandChecks(headers);
|
|
61978
62616
|
const cookie = headers.get("cookie");
|
|
61979
|
-
const out = {};
|
|
62617
|
+
const out = { __proto__: null };
|
|
61980
62618
|
if (!cookie) {
|
|
61981
62619
|
return out;
|
|
61982
62620
|
}
|
|
@@ -62752,11 +63390,11 @@ var require_connection = __commonJS({
|
|
|
62752
63390
|
processResponse(response) {
|
|
62753
63391
|
if (response.type === "error" || response.status !== 101) {
|
|
62754
63392
|
if (response.socket?.session == null) {
|
|
62755
|
-
|
|
63393
|
+
failHandshake(handler, response, 1002, "Received network error or non-101 status code.", response.error);
|
|
62756
63394
|
return;
|
|
62757
63395
|
}
|
|
62758
63396
|
if (response.status !== 200) {
|
|
62759
|
-
|
|
63397
|
+
failHandshake(handler, response, 1002, "Received network error or non-200 status code.", response.error);
|
|
62760
63398
|
return;
|
|
62761
63399
|
}
|
|
62762
63400
|
}
|
|
@@ -62765,21 +63403,21 @@ var require_connection = __commonJS({
|
|
|
62765
63403
|
warningEmitted = true;
|
|
62766
63404
|
}
|
|
62767
63405
|
if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) {
|
|
62768
|
-
|
|
63406
|
+
failHandshake(handler, response, 1002, "Server did not respond with sent protocols.");
|
|
62769
63407
|
return;
|
|
62770
63408
|
}
|
|
62771
63409
|
if (response.socket.session == null && response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") {
|
|
62772
|
-
|
|
63410
|
+
failHandshake(handler, response, 1002, 'Server did not set Upgrade header to "websocket".');
|
|
62773
63411
|
return;
|
|
62774
63412
|
}
|
|
62775
63413
|
if (response.socket.session == null && response.headersList.get("Connection")?.toLowerCase() !== "upgrade") {
|
|
62776
|
-
|
|
63414
|
+
failHandshake(handler, response, 1002, 'Server did not set Connection header to "upgrade".');
|
|
62777
63415
|
return;
|
|
62778
63416
|
}
|
|
62779
63417
|
const secWSAccept = response.headersList.get("Sec-WebSocket-Accept");
|
|
62780
63418
|
const digest = crypto12.hash("sha1", keyValue + uid, "base64");
|
|
62781
63419
|
if (secWSAccept !== digest) {
|
|
62782
|
-
|
|
63420
|
+
failHandshake(handler, response, 1002, "Incorrect hash received in Sec-WebSocket-Accept header.");
|
|
62783
63421
|
return;
|
|
62784
63422
|
}
|
|
62785
63423
|
const secExtension = response.headersList.get("Sec-WebSocket-Extensions");
|
|
@@ -62787,7 +63425,7 @@ var require_connection = __commonJS({
|
|
|
62787
63425
|
if (secExtension !== null) {
|
|
62788
63426
|
extensions = parseExtensions(secExtension);
|
|
62789
63427
|
if (!extensions.has("permessage-deflate")) {
|
|
62790
|
-
|
|
63428
|
+
failHandshake(handler, response, 1002, "Sec-WebSocket-Extensions header does not match.");
|
|
62791
63429
|
return;
|
|
62792
63430
|
}
|
|
62793
63431
|
}
|
|
@@ -62795,7 +63433,7 @@ var require_connection = __commonJS({
|
|
|
62795
63433
|
if (secProtocol !== null) {
|
|
62796
63434
|
const requestProtocols = getDecodeSplit("sec-websocket-protocol", request2.headersList);
|
|
62797
63435
|
if (requestProtocols === null || !requestProtocols.includes(secProtocol)) {
|
|
62798
|
-
|
|
63436
|
+
failHandshake(handler, response, 1002, "Protocol was not set in the opening handshake.");
|
|
62799
63437
|
return;
|
|
62800
63438
|
}
|
|
62801
63439
|
}
|
|
@@ -62841,6 +63479,12 @@ var require_connection = __commonJS({
|
|
|
62841
63479
|
object.readyState = states.CLOSING;
|
|
62842
63480
|
}
|
|
62843
63481
|
}
|
|
63482
|
+
function failHandshake(handler, response, code2, reason, cause) {
|
|
63483
|
+
if (response.socket?.session != null && !response.socket.destroyed) {
|
|
63484
|
+
response.socket.destroy();
|
|
63485
|
+
}
|
|
63486
|
+
failWebsocketConnection(handler, code2, reason, cause);
|
|
63487
|
+
}
|
|
62844
63488
|
function failWebsocketConnection(handler, code2, reason, cause) {
|
|
62845
63489
|
if (isEstablished(handler.readyState)) {
|
|
62846
63490
|
closeWebSocketConnection(handler, code2, reason, false);
|
|
@@ -63119,6 +63763,15 @@ var require_receiver = __commonJS({
|
|
|
63119
63763
|
if (isControlFrame(this.#info.opcode)) {
|
|
63120
63764
|
this.#loop = this.parseControlFrame(body);
|
|
63121
63765
|
this.#state = parserStates.INFO;
|
|
63766
|
+
if (this.#loop && this.#handler.socket.writableNeedDrain) {
|
|
63767
|
+
this.#loop = false;
|
|
63768
|
+
this.#handler.socket.once("drain", () => {
|
|
63769
|
+
if (this.destroyed) return;
|
|
63770
|
+
this.#loop = true;
|
|
63771
|
+
this.run(callback);
|
|
63772
|
+
});
|
|
63773
|
+
return;
|
|
63774
|
+
}
|
|
63122
63775
|
} else {
|
|
63123
63776
|
if (!this.#info.compressed) {
|
|
63124
63777
|
if (!this.writeFragments(body)) {
|
|
@@ -64294,6 +64947,7 @@ var require_util6 = __commonJS({
|
|
|
64294
64947
|
var require_eventsource_stream = __commonJS({
|
|
64295
64948
|
"node_modules/undici/lib/web/eventsource/eventsource-stream.js"(exports, module) {
|
|
64296
64949
|
"use strict";
|
|
64950
|
+
var buffer = __require("buffer");
|
|
64297
64951
|
var { Transform } = __require("stream");
|
|
64298
64952
|
var { isASCIINumber, isValidLastEventId } = require_util6();
|
|
64299
64953
|
var BOM = [239, 187, 191];
|
|
@@ -64301,24 +64955,28 @@ var require_eventsource_stream = __commonJS({
|
|
|
64301
64955
|
var CR = 13;
|
|
64302
64956
|
var COLON = 58;
|
|
64303
64957
|
var SPACE = 32;
|
|
64958
|
+
var defaultMaxEventSize = buffer.kStringMaxLength;
|
|
64304
64959
|
var DATA = Buffer.from("data");
|
|
64305
64960
|
var EVENT = Buffer.from("event");
|
|
64306
64961
|
var ID = Buffer.from("id");
|
|
64307
64962
|
var RETRY = Buffer.from("retry");
|
|
64308
|
-
|
|
64309
|
-
|
|
64963
|
+
var minParserItems = 1024;
|
|
64964
|
+
var maxParserItems = 131072;
|
|
64965
|
+
var bytesPerParserItem = 128;
|
|
64966
|
+
function isASCIINumberBytes(buffer2, start) {
|
|
64967
|
+
if (start >= buffer2.length) {
|
|
64310
64968
|
return false;
|
|
64311
64969
|
}
|
|
64312
|
-
for (let i = start; i <
|
|
64313
|
-
if (
|
|
64970
|
+
for (let i = start; i < buffer2.length; i++) {
|
|
64971
|
+
if (buffer2[i] < 48 || buffer2[i] > 57) {
|
|
64314
64972
|
return false;
|
|
64315
64973
|
}
|
|
64316
64974
|
}
|
|
64317
64975
|
return true;
|
|
64318
64976
|
}
|
|
64319
|
-
function isValidLastEventIdBytes(
|
|
64320
|
-
for (let i = start; i <
|
|
64321
|
-
if (
|
|
64977
|
+
function isValidLastEventIdBytes(buffer2, start) {
|
|
64978
|
+
for (let i = start; i < buffer2.length; i++) {
|
|
64979
|
+
if (buffer2[i] === 0) {
|
|
64322
64980
|
return false;
|
|
64323
64981
|
}
|
|
64324
64982
|
}
|
|
@@ -64335,6 +64993,11 @@ var require_eventsource_stream = __commonJS({
|
|
|
64335
64993
|
}
|
|
64336
64994
|
return true;
|
|
64337
64995
|
}
|
|
64996
|
+
function createMaxEventSizeExceededError() {
|
|
64997
|
+
const error = new Error("EventSource message size exceeded");
|
|
64998
|
+
error.aborted = false;
|
|
64999
|
+
return error;
|
|
65000
|
+
}
|
|
64338
65001
|
var EventSourceStream = class extends Transform {
|
|
64339
65002
|
/**
|
|
64340
65003
|
* @type {eventSourceSettings}
|
|
@@ -64361,6 +65024,13 @@ var require_eventsource_stream = __commonJS({
|
|
|
64361
65024
|
pos = 0;
|
|
64362
65025
|
lineChunkIndex = 0;
|
|
64363
65026
|
linePos = 0;
|
|
65027
|
+
lineLength = 0;
|
|
65028
|
+
eventSize = 0;
|
|
65029
|
+
eventFieldSizes = { data: 0, event: 0, id: 0, retry: 0 };
|
|
65030
|
+
dataLineCount = 0;
|
|
65031
|
+
maxEventSize;
|
|
65032
|
+
maxDataLines;
|
|
65033
|
+
maxBufferedChunks;
|
|
64364
65034
|
event = {
|
|
64365
65035
|
data: void 0,
|
|
64366
65036
|
event: void 0,
|
|
@@ -64370,6 +65040,7 @@ var require_eventsource_stream = __commonJS({
|
|
|
64370
65040
|
/**
|
|
64371
65041
|
* @param {object} options
|
|
64372
65042
|
* @param {boolean} [options.readableObjectMode]
|
|
65043
|
+
* @param {number} [options.maxEventSize]
|
|
64373
65044
|
* @param {eventSourceSettings} [options.eventSourceSettings]
|
|
64374
65045
|
* @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]
|
|
64375
65046
|
*/
|
|
@@ -64377,6 +65048,10 @@ var require_eventsource_stream = __commonJS({
|
|
|
64377
65048
|
options.readableObjectMode = true;
|
|
64378
65049
|
super(options);
|
|
64379
65050
|
this.state = options.eventSourceSettings || {};
|
|
65051
|
+
this.maxEventSize = options.maxEventSize ?? defaultMaxEventSize;
|
|
65052
|
+
const parserItemLimit = this.maxEventSize > 0 ? Math.min(maxParserItems, Math.max(minParserItems, Math.floor(this.maxEventSize / bytesPerParserItem))) : 0;
|
|
65053
|
+
this.maxDataLines = parserItemLimit;
|
|
65054
|
+
this.maxBufferedChunks = parserItemLimit;
|
|
64380
65055
|
if (options.push) {
|
|
64381
65056
|
this.push = options.push;
|
|
64382
65057
|
}
|
|
@@ -64392,6 +65067,10 @@ var require_eventsource_stream = __commonJS({
|
|
|
64392
65067
|
callback();
|
|
64393
65068
|
return;
|
|
64394
65069
|
}
|
|
65070
|
+
if (this.maxEventSize > 0 && this.chunks.length >= this.maxBufferedChunks && chunk2[0] !== LF && chunk2[0] !== CR) {
|
|
65071
|
+
callback(createMaxEventSizeExceededError());
|
|
65072
|
+
return;
|
|
65073
|
+
}
|
|
64395
65074
|
this.chunks.push(chunk2);
|
|
64396
65075
|
if (this.checkBOM) {
|
|
64397
65076
|
if (this.handleBOM()) {
|
|
@@ -64428,15 +65107,29 @@ var require_eventsource_stream = __commonJS({
|
|
|
64428
65107
|
if (byte === CR) {
|
|
64429
65108
|
this.crlfCheck = true;
|
|
64430
65109
|
}
|
|
64431
|
-
|
|
65110
|
+
try {
|
|
65111
|
+
this.parseLine(this.readLine(), this.event);
|
|
65112
|
+
} catch (error) {
|
|
65113
|
+
callback(error);
|
|
65114
|
+
return;
|
|
65115
|
+
}
|
|
64432
65116
|
this.consumeCurrentByte();
|
|
64433
65117
|
this.eventEndCheck = true;
|
|
64434
65118
|
continue;
|
|
64435
65119
|
}
|
|
65120
|
+
if (this.maxEventSize > 0 && ++this.lineLength > this.maxEventSize + 7) {
|
|
65121
|
+
callback(createMaxEventSizeExceededError());
|
|
65122
|
+
return;
|
|
65123
|
+
}
|
|
64436
65124
|
this.advanceCursor();
|
|
64437
65125
|
}
|
|
64438
65126
|
callback();
|
|
64439
65127
|
}
|
|
65128
|
+
_destroy(error, callback) {
|
|
65129
|
+
this.chunks.length = 0;
|
|
65130
|
+
this.clearEvent();
|
|
65131
|
+
super._destroy(error, callback);
|
|
65132
|
+
}
|
|
64440
65133
|
/**
|
|
64441
65134
|
* @param {Buffer} line
|
|
64442
65135
|
* @param {EventSourceStreamEvent} event
|
|
@@ -64459,6 +65152,12 @@ var require_eventsource_stream = __commonJS({
|
|
|
64459
65152
|
}
|
|
64460
65153
|
}
|
|
64461
65154
|
if (isFieldName(line, fieldLength, DATA)) {
|
|
65155
|
+
if (this.maxEventSize > 0 && this.dataLineCount >= this.maxDataLines) {
|
|
65156
|
+
throw createMaxEventSizeExceededError();
|
|
65157
|
+
}
|
|
65158
|
+
const valueBytes = line.length - valueStart;
|
|
65159
|
+
const dataSize = this.eventFieldSizes.data + (event.data === void 0 ? 0 : 1) + valueBytes;
|
|
65160
|
+
this.setEventFieldSize("data", dataSize);
|
|
64462
65161
|
const value = line.toString("utf8", valueStart);
|
|
64463
65162
|
if (event.data === void 0) {
|
|
64464
65163
|
event.data = value;
|
|
@@ -64466,27 +65165,38 @@ var require_eventsource_stream = __commonJS({
|
|
|
64466
65165
|
event.data += `
|
|
64467
65166
|
${value}`;
|
|
64468
65167
|
}
|
|
65168
|
+
this.dataLineCount++;
|
|
64469
65169
|
return;
|
|
64470
65170
|
}
|
|
64471
65171
|
if (isFieldName(line, fieldLength, RETRY)) {
|
|
64472
65172
|
if (isASCIINumberBytes(line, valueStart)) {
|
|
65173
|
+
this.setEventFieldSize("retry", line.length - valueStart);
|
|
64473
65174
|
event.retry = line.toString("utf8", valueStart);
|
|
64474
65175
|
}
|
|
64475
65176
|
return;
|
|
64476
65177
|
}
|
|
64477
65178
|
if (isFieldName(line, fieldLength, ID)) {
|
|
64478
65179
|
if (isValidLastEventIdBytes(line, valueStart)) {
|
|
65180
|
+
this.setEventFieldSize("id", line.length - valueStart);
|
|
64479
65181
|
event.id = line.toString("utf8", valueStart);
|
|
64480
65182
|
}
|
|
64481
65183
|
return;
|
|
64482
65184
|
}
|
|
64483
65185
|
if (isFieldName(line, fieldLength, EVENT)) {
|
|
64484
|
-
|
|
64485
|
-
|
|
64486
|
-
event.event =
|
|
65186
|
+
if (valueStart < line.length) {
|
|
65187
|
+
this.setEventFieldSize("event", line.length - valueStart);
|
|
65188
|
+
event.event = line.toString("utf8", valueStart);
|
|
64487
65189
|
}
|
|
64488
65190
|
}
|
|
64489
65191
|
}
|
|
65192
|
+
setEventFieldSize(field, size) {
|
|
65193
|
+
const eventSize = this.eventSize - this.eventFieldSizes[field] + size;
|
|
65194
|
+
if (this.maxEventSize > 0 && eventSize > this.maxEventSize) {
|
|
65195
|
+
throw createMaxEventSizeExceededError();
|
|
65196
|
+
}
|
|
65197
|
+
this.eventSize = eventSize;
|
|
65198
|
+
this.eventFieldSizes[field] = size;
|
|
65199
|
+
}
|
|
64490
65200
|
/**
|
|
64491
65201
|
* @param {EventSourceStreamEvent} event
|
|
64492
65202
|
*/
|
|
@@ -64513,6 +65223,12 @@ ${value}`;
|
|
|
64513
65223
|
this.event.event = void 0;
|
|
64514
65224
|
this.event.id = void 0;
|
|
64515
65225
|
this.event.retry = void 0;
|
|
65226
|
+
this.eventSize = 0;
|
|
65227
|
+
this.dataLineCount = 0;
|
|
65228
|
+
this.eventFieldSizes.data = 0;
|
|
65229
|
+
this.eventFieldSizes.event = 0;
|
|
65230
|
+
this.eventFieldSizes.id = 0;
|
|
65231
|
+
this.eventFieldSizes.retry = 0;
|
|
64516
65232
|
}
|
|
64517
65233
|
hasPendingEvent() {
|
|
64518
65234
|
return this.event.data !== void 0 || this.event.event !== void 0 || this.event.id !== void 0 || this.event.retry !== void 0;
|
|
@@ -64537,13 +65253,15 @@ ${value}`;
|
|
|
64537
65253
|
syncLineStartToCursor() {
|
|
64538
65254
|
this.lineChunkIndex = this.chunkIndex;
|
|
64539
65255
|
this.linePos = this.pos;
|
|
65256
|
+
this.lineLength = 0;
|
|
64540
65257
|
this.dropConsumedChunks();
|
|
64541
65258
|
}
|
|
64542
65259
|
dropConsumedChunks() {
|
|
64543
|
-
|
|
64544
|
-
this.
|
|
64545
|
-
this.
|
|
64546
|
-
this.
|
|
65260
|
+
if (this.lineChunkIndex > 0) {
|
|
65261
|
+
const consumed = this.lineChunkIndex;
|
|
65262
|
+
this.chunks.splice(0, consumed);
|
|
65263
|
+
this.lineChunkIndex = 0;
|
|
65264
|
+
this.chunkIndex -= consumed;
|
|
64547
65265
|
}
|
|
64548
65266
|
if (this.chunkIndex === this.chunks.length) {
|
|
64549
65267
|
this.chunks.length = 0;
|
|
@@ -64645,6 +65363,7 @@ var require_eventsource = __commonJS({
|
|
|
64645
65363
|
var { isNetworkError } = require_response();
|
|
64646
65364
|
var { kEnumerableProperty } = require_util();
|
|
64647
65365
|
var { environmentSettingsObject } = require_util2();
|
|
65366
|
+
var { getGlobalDispatcher } = require_global2();
|
|
64648
65367
|
var experimentalWarned = false;
|
|
64649
65368
|
var defaultReconnectionTime = 3e3;
|
|
64650
65369
|
var CONNECTING = 0;
|
|
@@ -64786,6 +65505,7 @@ var require_eventsource = __commonJS({
|
|
|
64786
65505
|
this.#state.origin = response.urlList[response.urlList.length - 1].origin;
|
|
64787
65506
|
const eventSourceStream = new EventSourceStream({
|
|
64788
65507
|
eventSourceSettings: this.#state,
|
|
65508
|
+
maxEventSize: this.#dispatcher.eventSourceOptions?.maxEventSize,
|
|
64789
65509
|
push: (event) => {
|
|
64790
65510
|
this.dispatchEvent(createFastMessageEvent(
|
|
64791
65511
|
event.type,
|
|
@@ -64922,7 +65642,8 @@ var require_eventsource = __commonJS({
|
|
|
64922
65642
|
{
|
|
64923
65643
|
key: "dispatcher",
|
|
64924
65644
|
// undici only
|
|
64925
|
-
converter: webidl.converters.any
|
|
65645
|
+
converter: webidl.converters.any,
|
|
65646
|
+
defaultValue: () => getGlobalDispatcher()
|
|
64926
65647
|
},
|
|
64927
65648
|
{
|
|
64928
65649
|
key: "node",
|