@node9/proxy 2.36.0 → 2.37.0

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.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) {