@scopebond/hook 0.8.1 → 0.10.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/README.md +239 -0
- package/dist/budget-load.d.ts +68 -0
- package/dist/budget-load.d.ts.map +1 -0
- package/dist/budget-load.js +164 -0
- package/dist/budget-load.js.map +1 -0
- package/dist/capabilities.d.ts +103 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +212 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/classify.d.ts +17 -0
- package/dist/classify.d.ts.map +1 -0
- package/dist/classify.js +78 -0
- package/dist/classify.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +585 -13
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +8 -0
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js.map +1 -1
- package/dist/dispatch-cli.d.ts +2 -0
- package/dist/dispatch-cli.d.ts.map +1 -0
- package/dist/dispatch-cli.js +128 -0
- package/dist/dispatch-cli.js.map +1 -0
- package/dist/explain.d.ts.map +1 -1
- package/dist/explain.js +2 -1
- package/dist/explain.js.map +1 -1
- package/dist/group.d.ts +12 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/group.js +55 -0
- package/dist/group.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +10 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +56 -0
- package/dist/install.js.map +1 -1
- package/dist/managed.d.ts +69 -0
- package/dist/managed.d.ts.map +1 -0
- package/dist/managed.js +184 -0
- package/dist/managed.js.map +1 -0
- package/dist/map.d.ts +4 -0
- package/dist/map.d.ts.map +1 -1
- package/dist/map.js +29 -1
- package/dist/map.js.map +1 -1
- package/dist/obs-emitter.d.ts +132 -0
- package/dist/obs-emitter.d.ts.map +1 -0
- package/dist/obs-emitter.js +415 -0
- package/dist/obs-emitter.js.map +1 -0
- package/dist/obs-store.d.ts +160 -0
- package/dist/obs-store.d.ts.map +1 -0
- package/dist/obs-store.js +367 -0
- package/dist/obs-store.js.map +1 -0
- package/dist/obs-upload.d.ts +24 -0
- package/dist/obs-upload.d.ts.map +1 -0
- package/dist/obs-upload.js +231 -0
- package/dist/obs-upload.js.map +1 -0
- package/dist/observation.d.ts +232 -0
- package/dist/observation.d.ts.map +1 -0
- package/dist/observation.js +308 -0
- package/dist/observation.js.map +1 -0
- package/dist/paths.d.ts +15 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +79 -0
- package/dist/paths.js.map +1 -0
- package/dist/policy-load.d.ts +60 -0
- package/dist/policy-load.d.ts.map +1 -0
- package/dist/policy-load.js +151 -0
- package/dist/policy-load.js.map +1 -0
- package/dist/policy-sync.d.ts +45 -0
- package/dist/policy-sync.d.ts.map +1 -0
- package/dist/policy-sync.js +171 -0
- package/dist/policy-sync.js.map +1 -0
- package/dist/proof.d.ts +30 -0
- package/dist/proof.d.ts.map +1 -0
- package/dist/proof.js +186 -0
- package/dist/proof.js.map +1 -0
- package/dist/rules.d.ts +20 -0
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +50 -0
- package/dist/rules.js.map +1 -1
- package/dist/runtime.d.ts +21 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +77 -10
- package/dist/runtime.js.map +1 -1
- package/dist/scan.d.ts +7 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +38 -0
- package/dist/scan.js.map +1 -0
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +12 -3
- package/dist/shell.js.map +1 -1
- package/dist/sql-classify.d.ts +11 -0
- package/dist/sql-classify.d.ts.map +1 -0
- package/dist/sql-classify.js +251 -0
- package/dist/sql-classify.js.map +1 -0
- package/dist/typed-infra.d.ts +73 -0
- package/dist/typed-infra.d.ts.map +1 -0
- package/dist/typed-infra.js +758 -0
- package/dist/typed-infra.js.map +1 -0
- package/dist/typed-ops.d.ts +140 -0
- package/dist/typed-ops.d.ts.map +1 -0
- package/dist/typed-ops.js +549 -0
- package/dist/typed-ops.js.map +1 -0
- package/dist/vectors.d.ts +40 -0
- package/dist/vectors.d.ts.map +1 -0
- package/dist/vectors.js +219 -0
- package/dist/vectors.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-infra.js","sourceRoot":"","sources":["../src/typed-infra.ts"],"names":[],"mappings":"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","sourcesContent":["// Typed `network`, `cloudflare_resource` and `database` operations, derived from the ACTUAL\n// command line or tool input before it runs.\n//\n// Same rules as typed-ops.ts: a fact that cannot be read from the request stays unknown or\n// leaves no operation at all, and nothing raw is exported. What each operation carries:\n//\n// network scheme, lowercase IDNA host, effective port, method and read/write/upload. Never\n// the path, query, credentials, headers or body. A redirect hop is not followed\n// or bound (`redirect_binding` is always omitted), so a redirected request is\n// not qualified against the origin's approval.\n// cloudflare resource kind, verb, keyed account and resource ids, an artifact digest of the\n// local files a Pages deploy or an R2 put sends. `wrangler` has no DNS command,\n// so dns_record and Worker/KV/secret changes made any other way are not seen.\n// database provider, verb, predicate class and a keyed digest of the statement or the\n// local migration set. Never SQL text, table or column names, or rows. A\n// statement the classifier cannot place leaves no operation (the closed\n// schema has no \"unknown\" verb).\n\nimport { createHash } from \"node:crypto\";\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { isAbsolute, join } from \"node:path\";\nimport { canonProgram, decomposeShell, type SimpleCommand } from \"./shell.js\";\nimport { classifySql, type SqlClass } from \"./sql-classify.js\";\nimport { scan, flagValue, type Scanned } from \"./scan.js\";\nimport type { BindingKey } from \"./observation.js\";\n\ntype Operation = Record<string, unknown>;\n\n/** Everything the derivations read from disk or the environment. Injected in tests and by the proof runner. */\nexport interface FileProbe {\n /** UTF-8 text of a file, or null when missing, unreadable or larger than `max` bytes. */\n readText(path: string, max: number): string | null;\n /** Lowercase SHA-256 of a file's bytes, or null. */\n sha256File(path: string): string | null;\n /** Lowercase SHA-256 over the relative paths and bytes of every file under a directory, or null. */\n sha256Dir(path: string): string | null;\n /** The `.sql` files of a directory in name order, or null when it cannot be read or holds none. */\n listSql(path: string): Array<{ name: string; text: string }> | null;\n}\n\nconst MAX_FILE = 20 * 1024 * 1024;\nconst MAX_TREE_FILES = 5000;\nconst MAX_TREE_BYTES = 100 * 1024 * 1024;\n\nexport const systemFiles: FileProbe = {\n readText(path, max) {\n try { const st = statSync(path); if (!st.isFile() || st.size > max) return null; return readFileSync(path, \"utf8\"); } catch { return null; }\n },\n sha256File(path) {\n try { const st = statSync(path); if (!st.isFile() || st.size > MAX_FILE) return null; return createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\"); } catch { return null; }\n },\n sha256Dir(path) {\n try {\n const files: string[] = [];\n const walk = (dir: string, rel: string): void => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const r = rel === \"\" ? entry.name : `${rel}/${entry.name}`;\n if (entry.isDirectory()) walk(join(dir, entry.name), r);\n else if (entry.isFile()) files.push(r);\n if (files.length > MAX_TREE_FILES) throw new Error(\"too many files\");\n }\n };\n if (!statSync(path).isDirectory()) return null;\n walk(path, \"\");\n if (files.length === 0) return null;\n files.sort();\n const hash = createHash(\"sha256\");\n let total = 0;\n for (const f of files) {\n const bytes = readFileSync(join(path, f));\n total += bytes.length;\n if (total > MAX_TREE_BYTES) return null;\n hash.update(`${f}\\0${bytes.length}\\0`).update(bytes);\n }\n return hash.digest(\"hex\");\n } catch { return null; }\n },\n listSql(path) {\n try {\n const names = readdirSync(path).filter((n) => /\\.sql$/i.test(n)).sort();\n if (names.length === 0) return null;\n const out: Array<{ name: string; text: string }> = [];\n for (const name of names) {\n const text = systemFiles.readText(join(path, name), 5 * 1024 * 1024);\n if (text === null) return null;\n out.push({ name, text });\n }\n return out;\n } catch { return null; }\n },\n};\n\n/** No files, deterministic: what the proof fixtures read, so a proof never depends on the machine it runs on. */\nexport const fixtureFiles: FileProbe = { readText: () => null, sha256File: () => null, sha256Dir: () => null, listSql: () => null };\n\n/** What the derivations need beyond the binding key. */\nexport interface InfraContext {\n key: BindingKey;\n cwd: string;\n referenceSetVersion: string;\n files?: FileProbe;\n /** Environment variable lookup for account and PostgreSQL defaults; `process.env` when absent. */\n env?: (name: string) => string | undefined;\n}\n\n/** What the database and Wrangler readers need: no key, because they only read facts. */\nexport type ReadContext = Pick<InfraContext, \"cwd\" | \"files\" | \"env\">;\n\nconst UNBOUND = \"unbound\";\nconst filesOf = (ctx: ReadContext): FileProbe => ctx.files ?? systemFiles;\nconst envOf = (ctx: ReadContext, name: string): string | undefined => (ctx.env ? ctx.env(name) : process.env[name]);\nconst resolvePath = (cwd: string, p: string): string => (isAbsolute(p) || /^[A-Za-z]:[\\\\/]/.test(p) ? p : join(cwd, p));\n\nfunction common(ctx: InfraContext, request: unknown, environment_class: string): Operation {\n return {\n environment_class, reference_set_version: ctx.referenceSetVersion,\n request_digest: ctx.key.requestDigest(request), digest_key_generation: ctx.key.generation,\n };\n}\n\n// ---- network -------------------------------------------------------------------------------------------\n\nconst HOST_OK = /^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;\n\n/** A URL reduced to scheme, IDNA-lowercase host and effective port. Null for anything else\n * (an unexpanded variable, a glob, an IPv6 literal, a non-HTTP scheme, a host that is not a\n * plain hostname). A scheme-less operand reads as `http`, as curl does. */\nexport function parseDestination(raw: string, assumeHttp: boolean): { scheme: \"http\" | \"https\"; host: string; port: number } | null {\n let text = raw.trim();\n if (text === \"\" || /[$`{}\\[\\]*\\s]/.test(text.replace(/^[a-z][a-z0-9+.-]*:\\/\\/[^/]*@/i, \"\"))) return null;\n if (!/^[a-z][a-z0-9+.-]*:\\/\\//i.test(text)) {\n if (!assumeHttp || text.startsWith(\"//\") || text.startsWith(\"/\")) return null;\n text = `http://${text}`;\n }\n let u: URL;\n try { u = new URL(text); } catch { return null; }\n if (u.protocol !== \"http:\" && u.protocol !== \"https:\") return null;\n const host = u.hostname.replace(/\\.$/, \"\");\n if (!HOST_OK.test(host) || host.includes(\"..\")) return null;\n const scheme = u.protocol === \"https:\" ? \"https\" : \"http\";\n const port = u.port !== \"\" ? Number(u.port) : scheme === \"https\" ? 443 : 80;\n return Number.isInteger(port) && port >= 1 && port <= 65535 ? { scheme, host, port } : null;\n}\n\nconst METHODS = new Set([\"GET\", \"HEAD\", \"OPTIONS\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"]);\n\nfunction networkOperation(dest: { scheme: \"http\" | \"https\"; host: string; port: number }, method: string, hasBody: boolean, ctx: InfraContext, request: unknown): Operation | null {\n if (!METHODS.has(method)) return null;\n const net_operation = method === \"GET\" || method === \"HEAD\" || method === \"OPTIONS\" ? \"read\"\n : method === \"DELETE\" ? \"write\" : hasBody ? \"upload\" : \"write\";\n return {\n type: \"network\", resource_id: ctx.key.resourceId(\"net-dest\", `${dest.host}:${dest.port}`), ...common(ctx, request, \"unknown\"),\n scheme: dest.scheme, host: dest.host, port: dest.port, method, net_operation,\n };\n}\n\n/** A WebFetch tool call: a GET of the URL in its input. */\nexport function fetchOperation(url: string, ctx: InfraContext, request: unknown): Operation | null {\n const dest = parseDestination(url, false);\n return dest ? networkOperation(dest, \"GET\", false, ctx, request) : null;\n}\n\n// Curl options whose next argument is a value (so it is never read as the URL).\nconst CURL_VALUED = new Set([\"-X\", \"--request\", \"-H\", \"--header\", \"-d\", \"--data\", \"--data-ascii\", \"--data-binary\", \"--data-raw\", \"--data-urlencode\", \"--json\", \"-F\", \"--form\", \"--form-string\",\n \"-u\", \"--user\", \"-o\", \"--output\", \"-T\", \"--upload-file\", \"-A\", \"--user-agent\", \"-e\", \"--referer\", \"-b\", \"--cookie\", \"-c\", \"--cookie-jar\", \"-w\", \"--write-out\", \"-m\", \"--max-time\", \"--connect-timeout\",\n \"-r\", \"--range\", \"-y\", \"--speed-time\", \"-Y\", \"--speed-limit\", \"-z\", \"--time-cond\", \"-E\", \"--cert\", \"--key\", \"--cacert\", \"--capath\", \"--retry\", \"--retry-delay\", \"--retry-max-time\", \"--max-redirs\",\n \"--limit-rate\", \"--oauth2-bearer\", \"--proxy-user\", \"-U\", \"--interface\", \"--dns-servers\", \"--aws-sigv4\", \"--cert-type\", \"--key-type\", \"--pass\", \"--proto\", \"--proto-redir\", \"--ciphers\",\n \"--tls-max\", \"--expect100-timeout\", \"-P\", \"--ftp-port\", \"--stderr\", \"--trace\", \"--trace-ascii\", \"--create-file-mode\", \"--max-filesize\", \"--url-query\", \"--variable\", \"--etag-save\", \"--etag-compare\", \"--hsts\", \"--alt-svc\", \"--happy-eyeballs-timeout-ms\"]);\n// Options that send the request somewhere other than the URL names, or read more requests from elsewhere.\nconst CURL_REROUTE = new Set([\"-x\", \"--proxy\", \"--preproxy\", \"--connect-to\", \"--resolve\", \"--unix-socket\", \"--abstract-unix-socket\", \"-K\", \"--config\", \"--next\", \"-:\", \"--doh-url\", \"-q\", \"--disable\"]);\nconst CURL_BODY = new Set([\"-d\", \"--data\", \"--data-ascii\", \"--data-binary\", \"--data-raw\", \"--data-urlencode\", \"--json\", \"-F\", \"--form\", \"--form-string\", \"-T\", \"--upload-file\"]);\nconst CURL_SHORT_VALUED = \"XHdFuoTAebcwmrxyYzEUPK\";\n\ninterface FetchRequest { url: string; method: string; hasBody: boolean }\n\nfunction parseCurl(argv: string[]): FetchRequest | null {\n const urls: string[] = [];\n let method: string | undefined;\n let head = false;\n let get = false;\n let body = false;\n let upload = false;\n for (let i = 0; i < argv.length; i++) {\n const t = argv[i];\n if (t === \"--\") { urls.push(...argv.slice(i + 1)); break; }\n if (t.startsWith(\"--\")) {\n const at = t.indexOf(\"=\");\n const name = at > 0 ? t.slice(0, at) : t;\n let value: string | undefined = at > 0 ? t.slice(at + 1) : undefined;\n if (CURL_REROUTE.has(name)) return null;\n if (CURL_VALUED.has(name) && value === undefined) value = argv[++i];\n if (name === \"--request\") method = (value ?? \"\").toUpperCase();\n else if (name === \"--url\") { if (value) urls.push(value); }\n else if (name === \"--head\") head = true;\n else if (name === \"--get\") get = true;\n else if (name === \"--upload-file\") { upload = true; body = true; }\n else if (CURL_BODY.has(name)) body = true;\n continue;\n }\n if (t.startsWith(\"-\") && t.length > 1) {\n if (CURL_REROUTE.has(t)) return null;\n for (let k = 1; k < t.length; k++) {\n const c = t[k];\n if (CURL_REROUTE.has(`-${c}`)) return null;\n if (CURL_SHORT_VALUED.includes(c)) {\n const value = k + 1 < t.length ? t.slice(k + 1) : argv[++i];\n if (c === \"X\") method = (value ?? \"\").toUpperCase();\n else if (c === \"T\") { upload = true; body = true; }\n else if (c === \"d\" || c === \"F\") body = true;\n break;\n }\n if (c === \"I\") head = true;\n else if (c === \"G\") get = true;\n }\n continue;\n }\n urls.push(t);\n }\n const candidates = urls.filter((u) => /^[a-z][a-z0-9+.-]*:\\/\\//i.test(u) || /^[A-Za-z0-9.-]+\\.[A-Za-z]{2,}(?::\\d+)?(?:[/?#]|$)/.test(u) || /^(?:localhost|\\d{1,3}(?:\\.\\d{1,3}){3})(?::\\d+)?(?:[/?#]|$)/i.test(u));\n if (candidates.length !== 1 || candidates.length !== urls.length) return null;\n const effective = method && method !== \"\" ? method : head ? \"HEAD\" : get ? \"GET\" : upload ? \"PUT\" : body ? \"POST\" : \"GET\";\n return { url: candidates[0], method: effective, hasBody: (body && !get) || upload };\n}\n\nconst WGET_VALUED = new Set([\"-O\", \"--output-document\", \"-o\", \"--output-file\", \"-P\", \"--directory-prefix\", \"-t\", \"--tries\", \"-T\", \"--timeout\", \"-w\", \"--wait\", \"-U\", \"--user-agent\", \"--header\", \"--http-user\", \"--http-password\", \"--user\", \"--password\",\n \"-e\", \"--execute\", \"--method\", \"--post-data\", \"--post-file\", \"--body-data\", \"--body-file\", \"-l\", \"--level\", \"-A\", \"--accept\", \"-R\", \"--reject\", \"-I\", \"--include-directories\", \"-X\", \"--exclude-directories\", \"--referer\", \"--load-cookies\", \"--save-cookies\",\n \"--certificate\", \"--private-key\", \"--ca-certificate\", \"--ca-directory\", \"--bind-address\", \"-Q\", \"--quota\", \"--limit-rate\", \"--waitretry\", \"--connect-timeout\", \"--read-timeout\", \"--dns-timeout\", \"--secure-protocol\", \"--proxy-user\", \"--proxy-password\"]);\n\nfunction parseWget(argv: string[]): FetchRequest | null {\n const urls: string[] = [];\n let method: string | undefined;\n let body = false;\n let spider = false;\n for (let i = 0; i < argv.length; i++) {\n const t = argv[i];\n if (t === \"--\") { urls.push(...argv.slice(i + 1)); break; }\n if (t.startsWith(\"-\") && t.length > 1) {\n const at = t.startsWith(\"--\") ? t.indexOf(\"=\") : -1;\n const name = at > 0 ? t.slice(0, at) : t;\n let value: string | undefined = at > 0 ? t.slice(at + 1) : undefined;\n if ([\"-i\", \"--input-file\", \"-B\", \"--base\", \"-e\", \"--execute\"].includes(name)) return null;\n if (name.startsWith(\"--\")) {\n if (WGET_VALUED.has(name) && value === undefined) value = argv[++i];\n if (name === \"--method\") method = (value ?? \"\").toUpperCase();\n else if ([\"--post-data\", \"--post-file\", \"--body-data\", \"--body-file\"].includes(name)) { body = true; method ??= \"POST\"; }\n else if (name === \"--spider\") spider = true;\n continue;\n }\n // Short options: the first letter that takes a value ends the cluster.\n for (let k = 1; k < t.length; k++) {\n if (WGET_VALUED.has(`-${t[k]}`)) { if (k + 1 >= t.length) i++; break; }\n }\n continue;\n }\n urls.push(t);\n }\n const candidates = urls.filter((u) => /^[a-z][a-z0-9+.-]*:\\/\\//i.test(u) || /^[A-Za-z0-9.-]+\\.[A-Za-z]{2,}(?::\\d+)?(?:[/?#]|$)/.test(u));\n if (candidates.length !== 1 || candidates.length !== urls.length) return null;\n return { url: candidates[0], method: method ?? (spider ? \"HEAD\" : \"GET\"), hasBody: body };\n}\n\nconst PS_SWITCH = new Set([\"usebasicparsing\", \"skipcertificatecheck\", \"skipheadervalidation\", \"skiphttperrorcheck\", \"allowunencryptedauthentication\", \"passthru\", \"resume\", \"preservehttpmethodonredirect\", \"noproxy\", \"allowinsecureredirect\", \"usedefaultcredentials\", \"disablekeepalive\", \"verbose\", \"debug\"]);\nconst PS_REROUTE = new Set([\"proxy\", \"sessionvariable\", \"websession\"]);\n\nfunction parsePowerShell(argv: string[]): FetchRequest | null {\n let uri: string | undefined;\n let method: string | undefined;\n let body = false;\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const t = argv[i];\n const m = /^-([A-Za-z]+)(?::(.*))?$/.exec(t);\n if (!m) { positional.push(t); continue; }\n const name = m[1].toLowerCase();\n if (PS_REROUTE.has(name)) return null;\n let value = m[2];\n if (!PS_SWITCH.has(name) && value === undefined) value = argv[++i];\n if (name === \"uri\" || name === \"u\") uri = value;\n else if (name === \"method\" || name === \"m\") method = (value ?? \"\").toUpperCase();\n else if (name === \"body\" || name === \"infile\") body = true;\n }\n if (uri === undefined) { if (positional.length !== 1) return null; uri = positional[0]; }\n else if (positional.length > 0) return null;\n return { url: uri, method: method ?? (body ? \"POST\" : \"GET\"), hasBody: body };\n}\n\nfunction fetchFromCommand(sc: SimpleCommand, dialect: \"posix\" | \"powershell\"): FetchRequest | null {\n const program = canonProgram(sc.program);\n if ([\"invoke-webrequest\", \"iwr\", \"invoke-restmethod\", \"irm\"].includes(program)) return parsePowerShell(sc.argv);\n const exe = /\\.exe$/i.test(sc.programRaw);\n if (dialect === \"powershell\" && !exe && (program === \"curl\" || program === \"wget\")) return parsePowerShell(sc.argv);\n if (program === \"curl\") return parseCurl(sc.argv);\n if (program === \"wget\") return parseWget(sc.argv);\n return null;\n}\n\n// ---- wrangler ----------------------------------------------------------------------------------------------\n\n/** The argument list of a `wrangler` invocation, through the usual launchers. */\nfunction wranglerArgv(sc: SimpleCommand): string[] | null {\n const program = canonProgram(sc.program);\n const isWrangler = (t: string | undefined): boolean => t !== undefined && /^wrangler(?:@[^\\s]+)?$/i.test(t);\n if (program === \"wrangler\") return sc.argv;\n let rest: string[];\n if (program === \"npx\" || program === \"bunx\" || program === \"pnpx\") rest = sc.argv;\n else if (program === \"pnpm\" || program === \"yarn\" || program === \"bun\") { const [sub, ...r] = sc.argv; if (sub !== \"exec\" && sub !== \"dlx\" && sub !== \"x\") return null; rest = r; }\n else if (program === \"npm\") { const [sub, ...r] = sc.argv; if (sub !== \"exec\") return null; rest = r; }\n else return null;\n const at = rest.findIndex((t) => !t.startsWith(\"-\") || t === \"--\");\n if (at < 0) return null;\n const start = rest[at] === \"--\" ? at + 1 : at;\n return isWrangler(rest[start]) ? rest.slice(start + 1) : null;\n}\n\nconst WR_VALUED = [\"--env\", \"-e\", \"--config\", \"-c\", \"--name\", \"--command\", \"--file\", \"--project-name\", \"--branch\", \"--commit-hash\", \"--commit-message\", \"--compatibility-date\", \"--compatibility-flags\",\n \"--var\", \"--define\", \"--route\", \"--routes\", \"--outdir\", \"--tag\", \"--message\", \"--content-type\", \"--content-disposition\", \"--cache-control\", \"--expires\", \"--content-language\", \"--storage-class\", \"--jurisdiction\", \"-J\",\n \"--persist-to\", \"--database\", \"--binding\", \"--format\", \"--limit\", \"--location\", \"--account-id\", \"--production-branch\", \"--assets\", \"--site\", \"--cwd\"];\nconst WR_FLAGS = new Set([...WR_VALUED, \"--remote\", \"--local\", \"--preview\", \"--dry-run\", \"--json\", \"--yes\", \"-y\", \"--help\", \"-h\", \"--version\", \"-v\", \"--skip-confirmation\", \"--keep-vars\", \"--no-bundle\", \"--node-compat\",\n \"--experimental-json-config\", \"--persist\", \"--no-minify\", \"--latest\", \"--strict\", \"--force\", \"-f\", \"--no-x-remote-bindings\", \"--x-remote-bindings\", \"--experimental-provision\", \"--x-provision\", \"--unsafe\", \"--include-secrets\", \"--dev-url\", \"--minify\", \"--workers-dev\", \"--triggers\", \"--legacy-env\"]);\n\ninterface WranglerConfig { name?: string; account_id?: string; migrationsDir?: string; envName?: string }\n\nfunction stripJsonc(text: string): string {\n let out = \"\";\n for (let i = 0; i < text.length;) {\n const c = text[i];\n if (c === '\"') { let j = i + 1; while (j < text.length && text[j] !== '\"') j += text[j] === \"\\\\\" ? 2 : 1; out += text.slice(i, j + 1); i = j + 1; continue; }\n if (c === \"/\" && text[i + 1] === \"/\") { while (i < text.length && text[i] !== \"\\n\") i++; continue; }\n if (c === \"/\" && text[i + 1] === \"*\") { const e = text.indexOf(\"*/\", i + 2); i = e < 0 ? text.length : e + 2; continue; }\n out += c; i++;\n }\n return out.replace(/,(\\s*[}\\]])/g, \"$1\");\n}\n\nfunction readWranglerConfig(cwd: string, files: FileProbe, configFlag: string | undefined, env: string | undefined): WranglerConfig {\n const candidates = configFlag ? [resolvePath(cwd, configFlag)] : [\"wrangler.jsonc\", \"wrangler.json\", \"wrangler.toml\"].map((f) => join(cwd, f));\n for (const file of candidates) {\n const text = files.readText(file, 1024 * 1024);\n if (text === null) continue;\n try {\n if (/\\.toml$/i.test(file)) {\n const top = text.split(/^\\s*\\[/m)[0];\n const pick = (src: string, k: string): string | undefined => new RegExp(`^\\\\s*${k}\\\\s*=\\\\s*\"([^\"\\\\n]+)\"`, \"m\").exec(src)?.[1];\n const base = pick(top, \"name\");\n let name = base;\n if (env) {\n const section = new RegExp(`^\\\\s*\\\\[env\\\\.${env.replace(/[^A-Za-z0-9_-]/g, \"\")}\\\\]([\\\\s\\\\S]*?)(?=^\\\\s*\\\\[|$(?![\\\\s\\\\S]))`, \"m\").exec(text)?.[1];\n name = (section && pick(section, \"name\")) ?? (base ? `${base}-${env}` : undefined);\n }\n const dir = /^\\s*migrations_dir\\s*=\\s*\"([^\"\\n]+)\"/m.exec(text)?.[1];\n return { name, account_id: pick(top, \"account_id\"), migrationsDir: dir };\n }\n const json = JSON.parse(stripJsonc(text)) as { name?: unknown; account_id?: unknown; env?: Record<string, { name?: unknown }>; d1_databases?: Array<{ migrations_dir?: unknown }> };\n const base = typeof json.name === \"string\" ? json.name : undefined;\n let name = base;\n if (env) { const e = json.env?.[env]?.name; name = typeof e === \"string\" ? e : base ? `${base}-${env}` : undefined; }\n const dir = json.d1_databases?.find((d) => typeof d.migrations_dir === \"string\")?.migrations_dir;\n return { name, ...(typeof json.account_id === \"string\" ? { account_id: json.account_id } : {}), ...(typeof dir === \"string\" ? { migrationsDir: dir } : {}) };\n } catch { return {}; }\n }\n return {};\n}\n\nconst envClassOf = (env: string | undefined): string => {\n const e = (env ?? \"\").toLowerCase();\n if (e === \"\") return \"unknown\";\n if (/^(?:prod|production|live)$/.test(e)) return \"production\";\n if (/^(?:stage|staging|preprod|uat)$/.test(e)) return \"staging\";\n if (/^(?:dev|development|test|testing|preview|local)$/.test(e)) return \"development\";\n return \"unknown\";\n};\n\n/** A `KEY=value` assignment for `name` written before the program in the raw command. */\nfunction inlineAssignment(raw: string, name: string): string | undefined {\n const m = new RegExp(`(?:^|\\\\s)${name}=(?:\"([^\"]*)\"|'([^']*)'|([^\\\\s\"']+))`).exec(raw);\n return m ? (m[1] ?? m[2] ?? m[3]) : undefined;\n}\n\ninterface Wrangler { area: string; sub: string; pos: string[]; s: Scanned; env: string | undefined; cfg: WranglerConfig; accountId: string }\n\nfunction parseWrangler(sc: SimpleCommand, ctx: ReadContext): Wrangler | null {\n const argv = wranglerArgv(sc);\n if (!argv) return null;\n const s = scan(argv, WR_VALUED);\n // A flag this reader does not know might take a value, which would shift the positionals: no guess.\n for (const f of s.flags.keys()) if (!WR_FLAGS.has(f)) return null;\n const pos = s.positionals;\n if (pos.length === 0) return null;\n const env = flagValue(s, \"--env\", \"-e\");\n const cfg = readWranglerConfig(ctx.cwd, filesOf(ctx), flagValue(s, \"--config\", \"-c\"), env);\n const accountId = inlineAssignment(sc.raw, \"CLOUDFLARE_ACCOUNT_ID\") ?? flagValue(s, \"--account-id\") ?? cfg.account_id ?? envOf(ctx, \"CLOUDFLARE_ACCOUNT_ID\") ?? UNBOUND;\n return { area: pos[0], sub: pos[1] ?? \"\", pos, s, env, cfg, accountId };\n}\n\nconst CF_KINDS = { worker: \"worker\", pages_project: \"pages_project\", pages_deployment: \"pages_deployment\", d1_database: \"d1_database\", r2_bucket: \"r2_bucket\", r2_object: \"r2_object\" } as const;\n\nfunction cloudflareOp(w: Wrangler, ctx: InfraContext, request: unknown, kind: keyof typeof CF_KINDS, verb: string, name: string | undefined, extra: Operation = {}, environmentClass?: string): Operation {\n const bound = name !== undefined && name !== \"\";\n return {\n type: \"cloudflare_resource\", resource_id: ctx.key.resourceId(`cf:${kind}`, bound ? name : `\\0${UNBOUND}`), ...common(ctx, request, environmentClass ?? envClassOf(w.env)),\n verb, resource_kind: kind, account_id: w.accountId === UNBOUND ? UNBOUND : ctx.key.resourceId(\"cf:account\", w.accountId),\n ...(w.env ? { environment_binding: ctx.key.resourceId(\"cf:env\", w.env) } : {}),\n ...extra,\n };\n}\n\n/** A local file path a Wrangler command sends, resolved and digested (plain SHA-256: the file is what is deployed). */\nconst fileDigest = (ctx: ReadContext, path: string | undefined): Operation => {\n if (!path) return {};\n const d = filesOf(ctx).sha256File(resolvePath(ctx.cwd, path));\n return d ? { artifact_digest: d } : {};\n};\n\n// ---- database ------------------------------------------------------------------------------------------------\n\n/** What a database command is, before it is wrapped in an operation. */\nexport interface DatabaseFacts {\n provider: \"cloudflare_d1\" | \"postgres\" | \"sqlite\";\n verb: string;\n predicate_class: \"bounded\" | \"all\" | \"not_applicable\";\n /** A drop, a delete of every row, an ALTER that drops, or an unbounded UPDATE; `unknown` when the SQL could not be read. */\n risk: \"ordinary\" | \"destructive\" | \"unknown\";\n scope: \"remote\" | \"local\" | \"unknown\";\n /** Environment class the command itself shows. */\n environment: string;\n /** Provider-scoped name the id is keyed from. */\n databaseKey: string;\n databaseKind: string;\n /** Keyed digest input: the statement text or the migration set. Never exported. */\n digestInput?: unknown;\n migrate?: boolean;\n}\n\nconst riskOf = (c: SqlClass): DatabaseFacts[\"risk\"] => (c.destructive || (c.verb === \"update\" && c.predicate_class === \"all\") ? \"destructive\" : \"ordinary\");\n\nfunction d1Facts(w: Wrangler, ctx: ReadContext): DatabaseFacts | null {\n const remote = w.s.flags.has(\"--remote\") || w.s.flags.has(\"--preview\");\n const local = w.s.flags.has(\"--local\");\n if (remote && local) return null;\n const scope: DatabaseFacts[\"scope\"] = remote ? \"remote\" : local ? \"local\" : \"unknown\";\n const environment = local ? \"development\" : envClassOf(w.env);\n const files = filesOf(ctx);\n if (w.area === \"d1\" && w.sub === \"execute\") {\n const db = w.pos[2];\n const command = flagValue(w.s, \"--command\");\n const file = flagValue(w.s, \"--file\");\n if (!db || (command === undefined) === (file === undefined)) return null;\n const text = command ?? files.readText(resolvePath(ctx.cwd, file as string), 5 * 1024 * 1024);\n if (text === null) return null;\n const c = classifySql(text);\n if (!c) return null;\n return { provider: \"cloudflare_d1\", verb: c.verb, predicate_class: c.predicate_class, risk: riskOf(c), scope, environment, databaseKey: db, databaseKind: \"cf:d1_database\", digestInput: { sql: text } };\n }\n if (w.area === \"d1\" && w.sub === \"migrations\" && w.pos[2] === \"apply\") {\n const db = w.pos[3];\n if (!db) return null;\n const dir = w.cfg.migrationsDir ?? \"migrations\";\n const set = files.listSql(resolvePath(ctx.cwd, dir));\n if (!set) return null;\n const c = classifySql(set.map((f) => f.text).join(\";\\n\"));\n return { provider: \"cloudflare_d1\", verb: \"migrate\", predicate_class: \"not_applicable\", risk: c ? riskOf(c) : \"unknown\", scope, environment, databaseKey: db, databaseKind: \"cf:d1_database\", digestInput: { migrations: set }, migrate: true };\n }\n return null;\n}\n\nconst LOCAL_HOSTS = new Set([\"\", \"localhost\", \"127.0.0.1\", \"::1\", \"[::1]\"]);\n\nconst PSQL_VALUED_LONG = [\"--host\", \"--port\", \"--username\", \"--dbname\", \"--command\", \"--file\", \"--output\", \"--set\", \"--variable\", \"--pset\", \"--field-separator\", \"--record-separator\", \"--table-attr\", \"--log-file\"];\nconst PSQL_SHORT = \"hpUdcfoLvPFRT\";\n\nfunction psqlFacts(sc: SimpleCommand, ctx: ReadContext): DatabaseFacts | null {\n const commands: string[] = [];\n const files: string[] = [];\n let host: string | undefined, port: string | undefined, db: string | undefined;\n const positional: string[] = [];\n const argv = sc.argv;\n for (let i = 0; i < argv.length; i++) {\n const t = argv[i];\n if (t === \"--\") { positional.push(...argv.slice(i + 1)); break; }\n let name: string | undefined, value: string | undefined;\n if (t.startsWith(\"--\")) {\n const at = t.indexOf(\"=\");\n name = at > 0 ? t.slice(0, at) : t;\n value = at > 0 ? t.slice(at + 1) : PSQL_VALUED_LONG.includes(name) ? argv[++i] : undefined;\n } else if (t.startsWith(\"-\") && t.length > 1) {\n for (let k = 1; k < t.length; k++) {\n if (PSQL_SHORT.includes(t[k])) { name = `-${t[k]}`; value = k + 1 < t.length ? t.slice(k + 1) : argv[++i]; break; }\n }\n if (name === undefined) continue;\n } else { positional.push(t); continue; }\n if (name === \"-c\" || name === \"--command\") { if (value !== undefined) commands.push(value); }\n else if (name === \"-f\" || name === \"--file\") { if (value !== undefined) files.push(value); }\n else if (name === \"-h\" || name === \"--host\") host = value;\n else if (name === \"-p\" || name === \"--port\") port = value;\n else if (name === \"-d\" || name === \"--dbname\") db = value;\n }\n if (commands.length + files.length === 0) return null;\n const texts: string[] = [...commands];\n for (const f of files) {\n if (f === \"-\") return null;\n const text = filesOf(ctx).readText(resolvePath(ctx.cwd, f), 5 * 1024 * 1024);\n if (text === null) return null;\n texts.push(text);\n }\n const c = classifySql(texts.join(\";\\n\"));\n if (!c) return null;\n // The connection: a URI, a key=value string, or a database name; credentials never read further than the host.\n const target = db ?? positional[0];\n if (target && /^postgres(?:ql)?:\\/\\//i.test(target)) {\n try { const u = new URL(target); host ??= u.hostname; port ??= u.port; db = decodeURIComponent(u.pathname.replace(/^\\//, \"\")); } catch { return null; }\n } else if (target && /(?:^|\\s)(?:host|dbname|port)=/.test(target)) {\n const kv = (k: string): string | undefined => new RegExp(`(?:^|\\\\s)${k}=([^\\\\s]+)`).exec(target)?.[1];\n host ??= kv(\"host\"); port ??= kv(\"port\"); db = kv(\"dbname\");\n } else db = target;\n host ??= envOf(ctx, \"PGHOST\") ?? \"\";\n port ??= envOf(ctx, \"PGPORT\") ?? \"5432\";\n db ??= envOf(ctx, \"PGDATABASE\") ?? \"\";\n const isLocal = LOCAL_HOSTS.has(host.toLowerCase());\n return {\n provider: \"postgres\", verb: c.verb, predicate_class: c.predicate_class, risk: riskOf(c), scope: isLocal ? \"local\" : \"remote\",\n environment: isLocal ? \"development\" : \"unknown\", databaseKey: `${host.toLowerCase()}:${port}/${db}`, databaseKind: \"pg\", digestInput: { sql: texts.join(\";\\n\") },\n };\n}\n\nconst SQLITE_VALUED = new Set([\"-cmd\", \"-init\", \"-separator\", \"-newline\", \"-nullvalue\", \"-vfs\", \"-mmap\", \"-pagecache\", \"-lookaside\", \"-maxsize\", \"-A\"]);\n\nfunction sqliteFacts(sc: SimpleCommand, ctx: ReadContext): DatabaseFacts | null {\n const positional: string[] = [];\n const texts: string[] = [];\n for (let i = 0; i < sc.argv.length; i++) {\n const t = sc.argv[i];\n if (t === \"-init\" || t === \"-vfs\" || t === \"-A\") return null;\n if (SQLITE_VALUED.has(t)) { const v = sc.argv[++i]; if (t === \"-cmd\" && v !== undefined) texts.push(v); continue; }\n if (t.startsWith(\"-\") && t.length > 1) continue;\n positional.push(t);\n }\n const [dbPath, ...sql] = positional;\n if (!dbPath || sql.length === 0) return null; // interactive, or SQL on standard input\n const c = classifySql([...texts, ...sql].join(\";\\n\"));\n if (!c) return null;\n const key = dbPath === \":memory:\" ? dbPath : resolvePath(ctx.cwd, dbPath).replace(/\\\\/g, \"/\").toLowerCase();\n return { provider: \"sqlite\", verb: c.verb, predicate_class: c.predicate_class, risk: riskOf(c), scope: \"local\", environment: dbPath === \":memory:\" ? \"development\" : \"unknown\", databaseKey: key, databaseKind: \"sqlite\", digestInput: { sql: [...texts, ...sql].join(\";\\n\") } };\n}\n\n/** The database facts of a simple command, or null when it is not a readable database command. */\nexport function databaseFacts(sc: SimpleCommand, ctx: ReadContext): DatabaseFacts | null {\n if (sc.opaque) return null;\n const program = canonProgram(sc.program);\n if (program === \"psql\") return psqlFacts(sc, ctx);\n if (program === \"sqlite3\" || program === \"sqlite\") return sqliteFacts(sc, ctx);\n const w = parseWrangler(sc, ctx);\n return w ? d1Facts(w, ctx) : null;\n}\n\nfunction databaseOperation(f: DatabaseFacts, ctx: InfraContext, request: unknown): Operation {\n const id = ctx.key.resourceId(f.databaseKind, f.databaseKey);\n return {\n type: \"database\", resource_id: id, ...common(ctx, request, f.environment),\n provider: f.provider, verb: f.verb, predicate_class: f.predicate_class, database_id: id, reviewed_destructive: false,\n ...(f.digestInput !== undefined && (f.migrate || f.verb !== \"read\") ? { migration_digest: ctx.key.requestDigest({ domain: \"sql\", input: f.digestInput }) } : {}),\n };\n}\n\n// ---- Cloudflare ------------------------------------------------------------------------------------------------\n\nfunction cloudflareFromWrangler(w: Wrangler, ctx: InfraContext, request: unknown): Operation | null {\n const { area, sub, pos, s } = w;\n if (s.flags.has(\"--dry-run\") || s.flags.has(\"--help\") || s.flags.has(\"-h\")) return null;\n const name = (n: string | undefined): string | undefined => n ?? undefined;\n if (area === \"deploy\" || area === \"publish\") return cloudflareOp(w, ctx, request, \"worker\", \"update\", name(flagValue(s, \"--name\") ?? w.cfg.name));\n if (area === \"delete\" && pos.length <= 2) return cloudflareOp(w, ctx, request, \"worker\", \"delete\", name(flagValue(s, \"--name\") ?? pos[1] ?? w.cfg.name));\n if (area === \"pages\" && sub === \"deploy\") {\n const dir = pos[2];\n if (!dir) return null;\n const digest = filesOf(ctx).sha256Dir(resolvePath(ctx.cwd, dir));\n const branch = flagValue(s, \"--branch\");\n return cloudflareOp(w, ctx, request, \"pages_deployment\", \"create\", name(flagValue(s, \"--project-name\")), {\n ...(digest ? { artifact_digest: digest } : {}), ...(branch ? { environment_binding: ctx.key.resourceId(\"cf:pages-branch\", branch) } : {}),\n });\n }\n if (area === \"pages\" && sub === \"project\" && (pos[2] === \"create\" || pos[2] === \"delete\") && pos[3]) return cloudflareOp(w, ctx, request, \"pages_project\", pos[2], pos[3]);\n if (area === \"d1\" && (sub === \"create\" || sub === \"delete\") && pos[2]) return cloudflareOp(w, ctx, request, \"d1_database\", sub, pos[2]);\n if (area === \"r2\" && sub === \"bucket\" && (pos[2] === \"create\" || pos[2] === \"delete\") && pos[3]) return cloudflareOp(w, ctx, request, \"r2_bucket\", pos[2], pos[3]);\n if (area === \"r2\" && sub === \"bucket\" && pos[2] === \"dev-url\" && (pos[3] === \"enable\" || pos[3] === \"disable\") && pos[4]) {\n return cloudflareOp(w, ctx, request, \"r2_bucket\", \"set_visibility\", pos[4], pos[3] === \"enable\"\n ? { visibility_before: \"unknown\", visibility_after: \"public\" } : { visibility_before: \"unknown\", visibility_after: \"private\" });\n }\n if (area === \"r2\" && sub === \"object\" && (pos[2] === \"put\" || pos[2] === \"delete\") && pos[3]) {\n return cloudflareOp(w, ctx, request, \"r2_object\", pos[2] === \"put\" ? \"write\" : \"delete\", pos[3], pos[2] === \"put\" ? fileDigest(ctx, flagValue(s, \"--file\")) : {});\n }\n return null;\n}\n\n// ---- entry points -------------------------------------------------------------------------------------------------\n\n/** The typed operation for one simple command: a Wrangler or database CLI call, or a shell fetcher. */\nexport function deriveInfraOperation(sc: SimpleCommand, ctx: InfraContext, request: unknown, dialect: \"posix\" | \"powershell\" = \"posix\", networkOnly = false): Operation | null {\n if (sc.opaque) return null;\n if (networkOnly) return networkFromCommand(sc, ctx, request, dialect);\n const facts = databaseFacts(sc, ctx);\n if (facts) return databaseOperation(facts, ctx, request);\n const w = parseWrangler(sc, ctx);\n if (w) return cloudflareFromWrangler(w, ctx, request);\n return networkFromCommand(sc, ctx, request, dialect);\n}\n\nfunction networkFromCommand(sc: SimpleCommand, ctx: InfraContext, request: unknown, dialect: \"posix\" | \"powershell\"): Operation | null {\n const fetch = fetchFromCommand(sc, dialect);\n if (!fetch) return null;\n const dest = parseDestination(fetch.url, true);\n return dest ? networkOperation(dest, fetch.method, fetch.hasBody, ctx, request) : null;\n}\n\n/** One remote-database action per command of a shell call that touches a remote database, for\n * the opt-in enforcement rule. `risk` is the same classification the typed operation uses. */\nexport interface DatabaseGuardAction { provider: string; verb: string; scope: string; risk: string }\n\nexport function databaseGuardActions(command: string, dialect: \"posix\" | \"powershell\", ctx: ReadContext): DatabaseGuardAction[] {\n const src = dialect === \"powershell\" ? command.replace(/`(.)/g, \"$1\").replace(/\\\\/g, \"/\") : command;\n const out: DatabaseGuardAction[] = [];\n for (const sc of decomposeShell(src)) {\n if (sc.opaque) continue;\n let facts: DatabaseFacts | null = null;\n try { facts = databaseFacts(sc, ctx); } catch { facts = null; }\n if (facts) { if (facts.scope !== \"local\") out.push({ provider: facts.provider, verb: facts.verb, scope: facts.scope, risk: facts.risk }); continue; }\n // A wrangler d1 command whose SQL could not be read is not silently allowed on a remote database.\n const w = parseWrangler(sc, ctx);\n if (w && w.area === \"d1\" && (w.sub === \"execute\" || (w.sub === \"migrations\" && w.pos[2] === \"apply\")) && !w.s.flags.has(\"--local\")) {\n out.push({ provider: \"cloudflare_d1\", verb: \"unknown\", scope: w.s.flags.has(\"--remote\") ? \"remote\" : \"unknown\", risk: \"unknown\" });\n } else if (canonProgram(sc.program) === \"psql\") {\n const raw = sc.argv.join(\" \");\n if (!/(?:^|\\s)(?:-h\\s*|--host[= ])(?:localhost|127\\.0\\.0\\.1)\\b/.test(raw) && /\\s-[a-zA-Z]*[cf]|--command|--file/.test(` ${raw}`)) out.push({ provider: \"postgres\", verb: \"unknown\", scope: \"unknown\", risk: \"unknown\" });\n }\n }\n return out;\n}\n"]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { type SimpleCommand } from "./shell.js";
|
|
2
|
+
import { type FileProbe } from "./typed-infra.js";
|
|
3
|
+
import type { BindingKey } from "./observation.js";
|
|
4
|
+
export type Operation = Record<string, unknown>;
|
|
5
|
+
/** Read-only view of the local repository. Injected in tests. */
|
|
6
|
+
export interface GitProbe {
|
|
7
|
+
/** HEAD commit id, or null when unreadable. */
|
|
8
|
+
head(cwd: string): string | null;
|
|
9
|
+
/** Current branch short name, or null when detached or unreadable. */
|
|
10
|
+
branch(cwd: string): string | null;
|
|
11
|
+
/** The URL a remote name resolves to for pushing, or null. */
|
|
12
|
+
remoteUrl(cwd: string, remote: string): string | null;
|
|
13
|
+
/** The remote a plain push from this branch uses (`origin` unless configured). */
|
|
14
|
+
defaultRemote(cwd: string, branch: string | null): string;
|
|
15
|
+
/** Commit id a revision resolves to locally, or null. */
|
|
16
|
+
revParse(cwd: string, rev: string): string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare const systemGit: GitProbe;
|
|
19
|
+
export interface GithubRepo {
|
|
20
|
+
host: string;
|
|
21
|
+
owner: string;
|
|
22
|
+
repo: string;
|
|
23
|
+
}
|
|
24
|
+
export interface TypedContext {
|
|
25
|
+
key: BindingKey;
|
|
26
|
+
cwd: string;
|
|
27
|
+
/** Keyed id of the workspace repository. */
|
|
28
|
+
repositoryId: string;
|
|
29
|
+
referenceSetVersion: string;
|
|
30
|
+
probe?: GitProbe;
|
|
31
|
+
isProtectedRef?: (ref: string) => boolean;
|
|
32
|
+
/** The required-check policy version the workspace configured, when known. Otherwise
|
|
33
|
+
* merge and release operations carry `unbound`, which no reference set matches. */
|
|
34
|
+
requiredCheckPolicyVersion?: string;
|
|
35
|
+
/** Platform read-back for a pull request named only by number. Absent by default. */
|
|
36
|
+
resolvePullRequest?: (repo: GithubRepo, number: string) => {
|
|
37
|
+
head_sha: string;
|
|
38
|
+
base_sha: string;
|
|
39
|
+
} | null;
|
|
40
|
+
/** The pinned `packageManager` of the project, when it names this manager. */
|
|
41
|
+
packageManagerVersion?: (cwd: string, manager: string) => string | undefined;
|
|
42
|
+
/** Local files and environment the Cloudflare, database and network derivations read. The real ones by default. */
|
|
43
|
+
files?: FileProbe;
|
|
44
|
+
env?: (name: string) => string | undefined;
|
|
45
|
+
}
|
|
46
|
+
export declare const UNBOUND = "unbound";
|
|
47
|
+
/** The opaque id this installation gives a value, so a reference set (protected refs, approved
|
|
48
|
+
* remotes and repositories) can be written in the ids observations carry. Null for a value
|
|
49
|
+
* that cannot be read as that kind. Kinds: ref, remote, ghrepo, repo (a workspace path as the
|
|
50
|
+
* hook sees it), mcp (server, tool) and mcp-resource (kind, value), net-dest (host, port), cf (resource kind, name) and database (pg or sqlite, key). */
|
|
51
|
+
export declare function keyedIdFor(key: BindingKey, kind: string, values: string[]): string | null;
|
|
52
|
+
/** A remote reduced to `host` and `path`, with credentials, query, fragment and a trailing
|
|
53
|
+
* `.git` removed. Null for anything that is not readable as a remote (an unexpanded variable,
|
|
54
|
+
* an empty string). Local paths keep their path and use the host `local`. */
|
|
55
|
+
export declare function normalizeRemote(url: string): {
|
|
56
|
+
host: string;
|
|
57
|
+
path: string;
|
|
58
|
+
} | null;
|
|
59
|
+
/** The `git` operation for one dispatched push, from the parameters the hook evaluated
|
|
60
|
+
* (`ref`, `remote`, `force`, `delete`, `all`) and the local repository. */
|
|
61
|
+
export declare function gitPushOperation(params: Record<string, unknown>, ctx: TypedContext, headSha?: string | null, request?: unknown): Operation | null;
|
|
62
|
+
export interface GithubRequest {
|
|
63
|
+
verb: "pr_create" | "pr_update" | "pr_merge" | "release_create";
|
|
64
|
+
repo?: GithubRepo;
|
|
65
|
+
/** A pull request number, or a URL/branch selector that could not be reduced to one. */
|
|
66
|
+
pr?: string;
|
|
67
|
+
head?: string;
|
|
68
|
+
base?: string;
|
|
69
|
+
matchHead?: string;
|
|
70
|
+
tag?: string;
|
|
71
|
+
target?: string;
|
|
72
|
+
}
|
|
73
|
+
/** A `gh` command reduced to what it asks for. Only the four typed verbs; anything else,
|
|
74
|
+
* including `gh api`, is not described. */
|
|
75
|
+
export declare function parseGh(sc: SimpleCommand): GithubRequest | null;
|
|
76
|
+
/** The known GitHub MCP tools, from the tool call input. Tool names are the ones the GitHub
|
|
77
|
+
* MCP server publishes; a different server keeps its plain MCP operation. */
|
|
78
|
+
export declare function parseGithubMcp(server: string, tool: string, input: Record<string, unknown>): GithubRequest | null;
|
|
79
|
+
/** The `github_resource` operation for a request, or null when a field the closed schema
|
|
80
|
+
* requires cannot be read from the request and the local repository. */
|
|
81
|
+
export declare function githubOperation(req: GithubRequest, ctx: TypedContext, request: unknown): Operation | null;
|
|
82
|
+
/** The `package` operation for an install, add or update that names its packages. A command
|
|
83
|
+
* that installs whatever a lockfile or requirements file lists (`npm ci`, `pnpm install`,
|
|
84
|
+
* `pip install -r …`, `uv sync`) has no package operation: its package set is not in the
|
|
85
|
+
* request, and an empty or guessed list would read as a complete one. */
|
|
86
|
+
export declare function packageOperation(sc: SimpleCommand, ctx: TypedContext, request: unknown): Operation | null;
|
|
87
|
+
/** The request a tool call was dispatched with, as the harness sent it: a shell tool's raw command or an MCP tool's input. */
|
|
88
|
+
export interface CallRequest {
|
|
89
|
+
command?: string;
|
|
90
|
+
dialect?: "posix" | "powershell";
|
|
91
|
+
fetch?: {
|
|
92
|
+
url: string;
|
|
93
|
+
};
|
|
94
|
+
mcp?: {
|
|
95
|
+
server: string;
|
|
96
|
+
tool: string;
|
|
97
|
+
input: Record<string, unknown>;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** The tool call as the harness sent it, for typed operations: a shell tool's raw command
|
|
101
|
+
* (Claude Code, Codex and Cursor each name it differently) or an MCP tool's actual input. */
|
|
102
|
+
export declare function callRequestOf(input: Record<string, unknown>): CallRequest | undefined;
|
|
103
|
+
export interface DispatchedItem {
|
|
104
|
+
action: {
|
|
105
|
+
action_type: string;
|
|
106
|
+
params: Record<string, unknown>;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export interface DeriveInput {
|
|
110
|
+
/** The raw command of a shell tool call, as sent. */
|
|
111
|
+
command?: string;
|
|
112
|
+
dialect?: "posix" | "powershell";
|
|
113
|
+
/** A WebFetch tool call: the URL as sent. */
|
|
114
|
+
fetch?: {
|
|
115
|
+
url: string;
|
|
116
|
+
};
|
|
117
|
+
/** MCP tool call: server and tool names with the actual input. */
|
|
118
|
+
mcp?: {
|
|
119
|
+
server: string;
|
|
120
|
+
tool: string;
|
|
121
|
+
input: Record<string, unknown>;
|
|
122
|
+
};
|
|
123
|
+
dispatched: DispatchedItem[];
|
|
124
|
+
/** The redaction the mapper applied to a simple command, to find its dispatched item. */
|
|
125
|
+
redact: (raw: string) => string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Typed operations for the dispatched items of one tool call, by item index. A shell item is
|
|
129
|
+
* matched to its simple command by the same redacted text the mapper recorded, so an operation
|
|
130
|
+
* is always about the command that was evaluated. A `cd` earlier in the same command line moves
|
|
131
|
+
* later commands away from the workspace, so repository-dependent operations are skipped after
|
|
132
|
+
* one (they stay plain shell actions).
|
|
133
|
+
*/
|
|
134
|
+
export declare function deriveTypedOperations(input: DeriveInput, ctx: TypedContext): Map<number, Operation>;
|
|
135
|
+
/** A repository the fixtures describe: deterministic, no git process, no network. */
|
|
136
|
+
export declare const fixtureProbe: GitProbe;
|
|
137
|
+
/** Capability cells for typed operations. These describe observations, not receipts, so a
|
|
138
|
+
* proof for one has no receipt of its own action type to name and is never sent to a workspace. */
|
|
139
|
+
export declare const TYPED_ACTION_TYPES: ReadonlySet<string>;
|
|
140
|
+
//# sourceMappingURL=typed-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-ops.d.ts","sourceRoot":"","sources":["../src/typed-ops.ts"],"names":[],"mappings":"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"}
|