UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

81 lines (80 loc) 2.64 kB
import { h as redactToolPayloadText } from "./redact-BtvPPfTi.js"; //#region src/config/redact-argv.ts const SECRET_FLAG_NAMES = /* @__PURE__ */ new Set([ "--token", "--api-key", "--apikey", "--secret", "--password", "--provider-env", "--auth-token", "--access-token", "--refresh-token", "--client-secret", "--hook-token", "--gateway-token", "--bot-token", "--app-token", "--remote-token", "--push-token", "--webhook-secret", "--webhook-token", "--service-account-token", "--op-service-account-token", "--bearer", "--bearer-token", "--pat", "--personal-access-token", "--oauth-token", "--id-token", "--identity-token", "--session-token", "--service-token", "--private-key", "--recovery-key", "--gateway-key", "--session-key", "--active-key" ]); const SECRET_FLAG_SUFFIX_PATTERN = /^--(?:[a-z0-9]+(?:[-_][a-z0-9]+)*[-_])?(?:token|secret|password|passwd|passphrase|pin|api[-_]?key|api[-_]?secret|secret[-_]?key|secret[-_]?access[-_]?key|access[-_]?key(?:[-_]?id)?|account[-_]?key|client[-_]?key|consumer[-_]?key|license[-_]?key|subscription[-_]?key|webhook|credentials?|creds?|auth(?:orization)?|bearer|pat|cookie|private[-_]?key|recovery[-_]?key|signing[-_]?key|encryption[-_]?key|master[-_]?key|session[-_]?key|gateway[-_]?key|service[-_]?key|hook[-_]?key)$/; function parseFlagName(arg) { if (!arg.startsWith("--")) return null; const equalsIndex = arg.indexOf("="); return (equalsIndex === -1 ? arg : arg.slice(0, equalsIndex)).toLowerCase(); } function isSecretFlagName(flagName) { return SECRET_FLAG_NAMES.has(flagName) || SECRET_FLAG_SUFFIX_PATTERN.test(flagName); } /** * Redacts recognized argv secrets without changing array length or non-secret flags. * Known secret flags bind the next value even when it begins with a dash; other * elements use the shared deterministic secret-text patterns. */ function redactSensitiveArgv(argv, redactedValue) { const replacement = redactedValue ?? "***"; const result = []; let redactNext = false; for (const current of argv) { if (redactNext) { redactNext = false; result.push(replacement); continue; } const currentFlag = parseFlagName(current); if (currentFlag !== null && isSecretFlagName(currentFlag)) { const equalsIndex = current.indexOf("="); if (equalsIndex !== -1) { result.push(`${current.slice(0, equalsIndex + 1)}${replacement}`); continue; } result.push(current); redactNext = true; continue; } const redacted = redactToolPayloadText(current); result.push(redacted === current ? current : redactedValue ?? redacted); } return result; } //#endregion export { redactSensitiveArgv as t };