@hookwarden/engine 0.3.1 → 0.4.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.
Files changed (48) hide show
  1. package/dist/adapters/index.d.ts +3 -1
  2. package/dist/adapters/index.d.ts.map +1 -1
  3. package/dist/adapters/index.js +8 -1
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/adapters/symfony.d.ts +4 -0
  6. package/dist/adapters/symfony.d.ts.map +1 -0
  7. package/dist/adapters/symfony.js +177 -0
  8. package/dist/adapters/symfony.js.map +1 -0
  9. package/dist/adapters/vanilla-php.d.ts +4 -0
  10. package/dist/adapters/vanilla-php.d.ts.map +1 -0
  11. package/dist/adapters/vanilla-php.js +160 -0
  12. package/dist/adapters/vanilla-php.js.map +1 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/model/build.js +72 -0
  18. package/dist/model/build.js.map +1 -1
  19. package/dist/model/catalog.d.ts.map +1 -1
  20. package/dist/model/catalog.js +139 -0
  21. package/dist/model/catalog.js.map +1 -1
  22. package/dist/model/evidence.d.ts.map +1 -1
  23. package/dist/model/evidence.js +28 -4
  24. package/dist/model/evidence.js.map +1 -1
  25. package/dist/parsers/babel.d.ts.map +1 -1
  26. package/dist/parsers/babel.js +10 -2
  27. package/dist/parsers/babel.js.map +1 -1
  28. package/dist/parsers/index.d.ts +3 -0
  29. package/dist/parsers/index.d.ts.map +1 -1
  30. package/dist/parsers/index.js +3 -0
  31. package/dist/parsers/index.js.map +1 -1
  32. package/dist/parsers/php-literals.d.ts +5 -0
  33. package/dist/parsers/php-literals.d.ts.map +1 -0
  34. package/dist/parsers/php-literals.js +73 -0
  35. package/dist/parsers/php-literals.js.map +1 -0
  36. package/dist/parsers/php-loader.d.ts +10 -0
  37. package/dist/parsers/php-loader.d.ts.map +1 -0
  38. package/dist/parsers/php-loader.js +28 -0
  39. package/dist/parsers/php-loader.js.map +1 -0
  40. package/dist/parsers/php.d.ts +8 -0
  41. package/dist/parsers/php.d.ts.map +1 -0
  42. package/dist/parsers/php.js +117 -0
  43. package/dist/parsers/php.js.map +1 -0
  44. package/dist/types/handler.d.ts +1 -1
  45. package/dist/types/handler.d.ts.map +1 -1
  46. package/dist/types/project-model.d.ts +2 -2
  47. package/dist/types/project-model.d.ts.map +1 -1
  48. package/package.json +2 -1
@@ -3,7 +3,9 @@ import type { ParsedFile } from "../types/project-model.js";
3
3
  import { djangoAdapter } from "./django.js";
4
4
  import { fastapiAdapter } from "./fastapi.js";
5
5
  import { nextjsAdapter } from "./nextjs.js";
6
+ import { symfonyAdapter } from "./symfony.js";
7
+ import { vanillaPhpAdapter } from "./vanilla-php.js";
6
8
  export type FrameworkAdapter = (file: ParsedFile, allFiles: ReadonlyArray<ParsedFile>) => ReadonlyArray<CandidateHandler>;
7
9
  export declare const ALL_ADAPTERS: ReadonlyArray<FrameworkAdapter>;
8
- export { djangoAdapter, fastapiAdapter, nextjsAdapter };
10
+ export { djangoAdapter, fastapiAdapter, nextjsAdapter, symfonyAdapter, vanillaPhpAdapter };
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,KAChC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAErC,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAIxD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,KAChC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAKrC,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAMxD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,10 +1,17 @@
1
1
  import { djangoAdapter } from "./django.js";
2
2
  import { fastapiAdapter } from "./fastapi.js";
3
3
  import { nextjsAdapter } from "./nextjs.js";
4
+ import { symfonyAdapter } from "./symfony.js";
5
+ import { vanillaPhpAdapter } from "./vanilla-php.js";
6
+ // Order matters: framework-imports-required adapters precede the heuristic catch-all
7
+ // (vanilla-PHP). symfonyAdapter's negative-gating-via-imports leaves vanilla-PHP free to
8
+ // fire only on files with zero framework imports.
4
9
  export const ALL_ADAPTERS = [
5
10
  nextjsAdapter,
6
11
  fastapiAdapter,
7
12
  djangoAdapter,
13
+ symfonyAdapter,
14
+ vanillaPhpAdapter,
8
15
  ];
9
- export { djangoAdapter, fastapiAdapter, nextjsAdapter };
16
+ export { djangoAdapter, fastapiAdapter, nextjsAdapter, symfonyAdapter, vanillaPhpAdapter };
10
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,MAAM,CAAC,MAAM,YAAY,GAAoC;IAC3D,aAAa;IACb,cAAc;IACd,aAAa;CACd,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,qFAAqF;AACrF,yFAAyF;AACzF,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAoC;IAC3D,aAAa;IACb,cAAc;IACd,aAAa;IACb,cAAc;IACd,iBAAiB;CAClB,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CandidateHandler } from "../model/catalog.js";
2
+ import type { ParsedFile } from "../types/project-model.js";
3
+ export declare function symfonyAdapter(file: ParsedFile, _allFiles: ReadonlyArray<ParsedFile>): ReadonlyArray<CandidateHandler>;
4
+ //# sourceMappingURL=symfony.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symfony.d.ts","sourceRoot":"","sources":["../../src/adapters/symfony.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA8B5D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,GACnC,aAAa,CAAC,gBAAgB,CAAC,CAqBjC"}
@@ -0,0 +1,177 @@
1
+ // D-31 bespoke adapter: Symfony. PHP attribute routing only:
2
+ // `#[Route('/x', methods: ['POST'])]` on a controller method.
3
+ //
4
+ // YAML routing scope (Symfony's `config/routes/*.yaml`) is OUT OF SCOPE in v1:
5
+ // - Engine purity (D-01) bans a YAML parser dep; ParsedFile types only model code dialects.
6
+ // - The Phase 8.1 walker (Plan 04) emits PHP source files only — YAML files never reach this
7
+ // adapter as ParsedFile inputs.
8
+ // - Per CONTEXT D-03 Claude's-Discretion: documented as a known limit. Real-world webhook
9
+ // handlers overwhelmingly use attribute routing or src/Controller/ convention; YAML routing
10
+ // for webhooks specifically is uncommon. Plan 10 FP measurement covers the trade-off.
11
+ //
12
+ // Pure: tree-sitter trees + ParsedFile only. No I/O.
13
+ // Symfony's default attribute when `methods:` is omitted accepts all HTTP verbs. The rule pack
14
+ // keys on body-bearing methods (POST/PUT/PATCH/DELETE), so omitting `methods:` defaults to the
15
+ // permissive set — rules still fire on POST while documentation-style verbs (GET/HEAD/OPTIONS)
16
+ // stay quiet at the rule layer per their own gating.
17
+ const SYMFONY_DEFAULT_METHODS = [
18
+ "GET",
19
+ "HEAD",
20
+ "POST",
21
+ "PUT",
22
+ "PATCH",
23
+ "DELETE",
24
+ "OPTIONS",
25
+ ];
26
+ const CONTROLLER_PATH_RE = /(^|\/)src\/Controller\//;
27
+ export function symfonyAdapter(file, _allFiles) {
28
+ if (file.dialect !== "tree-sitter-php")
29
+ return [];
30
+ if (file.parse_error !== null || file.raw_ast === null)
31
+ return [];
32
+ const usesSymfony = file.imports.some((i) => i.to_module.startsWith("Symfony\\"));
33
+ const isControllerConvention = CONTROLLER_PATH_RE.test(file.file_path);
34
+ if (!usesSymfony && !isControllerConvention)
35
+ return [];
36
+ const tree = file.raw_ast;
37
+ const out = [];
38
+ for (const klass of tree.rootNode.descendantsOfType(["class_declaration"])) {
39
+ const className = klass.childForFieldName("name")?.text ?? null;
40
+ const body = klass.childForFieldName("body");
41
+ if (!body)
42
+ continue;
43
+ for (const method of body.descendantsOfType(["method_declaration"])) {
44
+ const handler = matchAttributeRoutedMethod(method, file, className);
45
+ if (handler !== null)
46
+ out.push(handler);
47
+ }
48
+ }
49
+ return out;
50
+ }
51
+ function matchAttributeRoutedMethod(method, file, className) {
52
+ const attrList = method.childForFieldName("attributes");
53
+ if (!attrList)
54
+ return null;
55
+ for (const group of attrList.descendantsOfType(["attribute_group"])) {
56
+ for (const attr of group.namedChildren) {
57
+ if (attr.type !== "attribute")
58
+ continue;
59
+ if (!isRouteAttribute(attr))
60
+ continue;
61
+ const route = readRouteAttribute(attr);
62
+ if (route === null)
63
+ continue;
64
+ const methodName = method.childForFieldName("name")?.text ?? null;
65
+ const body = method.childForFieldName("body");
66
+ const span = body
67
+ ? { start: body.startIndex, end: body.endIndex }
68
+ : { start: method.startIndex, end: method.endIndex };
69
+ return {
70
+ framework: "symfony",
71
+ framework_version: null, // D-01 — engine never reads composer.json
72
+ route_pattern: route.path,
73
+ http_methods: route.methods,
74
+ file_path: file.file_path,
75
+ location: locOf(attr),
76
+ handler_function_name: className && methodName ? `${className}::${methodName}` : methodName,
77
+ handler_body_node: body ?? method,
78
+ handler_source_start: span.start,
79
+ handler_source_end: span.end,
80
+ };
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+ // Match attributes named `Route` (unqualified) or any qualified name ending in `\Route` —
86
+ // catches the canonical `Symfony\Component\Routing\Attribute\Route` plus aliased forms after
87
+ // `use Symfony\Component\Routing\Attribute\Route as ApiRoute;` (alias case stays out of scope
88
+ // for v1 — only the literal attribute name is checked).
89
+ function isRouteAttribute(attr) {
90
+ const nameNode = attr.namedChildren.find((c) => c.type === "name" || c.type === "qualified_name" || c.type === "relative_name");
91
+ if (!nameNode)
92
+ return false;
93
+ const name = nameNode.text;
94
+ if (name === "Route")
95
+ return true;
96
+ return name.endsWith("\\Route");
97
+ }
98
+ function readRouteAttribute(attr) {
99
+ const args = attr.childForFieldName("parameters");
100
+ if (!args)
101
+ return null;
102
+ let path = null;
103
+ const methods = [];
104
+ let pathFromNamedArg = false;
105
+ for (const arg of args.namedChildren) {
106
+ if (arg.type !== "argument")
107
+ continue;
108
+ const argName = arg.childForFieldName("name")?.text ?? null;
109
+ const valueNode = arg.namedChildren.find((c) => c.type !== "name" && c.type !== "reference_modifier");
110
+ if (!valueNode)
111
+ continue;
112
+ // First positional argument or `path:` named arg = route path.
113
+ if (argName === null && path === null && !pathFromNamedArg) {
114
+ const literal = readStringLiteral(valueNode);
115
+ if (literal !== null)
116
+ path = literal;
117
+ continue;
118
+ }
119
+ if (argName === "path") {
120
+ const literal = readStringLiteral(valueNode);
121
+ if (literal !== null) {
122
+ path = literal;
123
+ pathFromNamedArg = true;
124
+ }
125
+ continue;
126
+ }
127
+ if (argName === "methods") {
128
+ methods.push(...readMethodsArg(valueNode));
129
+ }
130
+ }
131
+ if (path === null)
132
+ return null;
133
+ return {
134
+ path,
135
+ methods: methods.length > 0 ? methods : SYMFONY_DEFAULT_METHODS,
136
+ };
137
+ }
138
+ function readMethodsArg(value) {
139
+ if (value.type === "array_creation_expression") {
140
+ const out = [];
141
+ for (const elem of value.namedChildren) {
142
+ if (elem.type !== "array_element_initializer")
143
+ continue;
144
+ const literal = elem.namedChildren.find((c) => c.type === "string" || c.type === "encapsed_string");
145
+ if (!literal)
146
+ continue;
147
+ const m = stripPhpString(literal.text);
148
+ if (m !== "")
149
+ out.push(m.toUpperCase());
150
+ }
151
+ return out;
152
+ }
153
+ // Shorthand: `methods: 'POST'`
154
+ const literal = readStringLiteral(value);
155
+ return literal !== null ? [literal.toUpperCase()] : [];
156
+ }
157
+ function readStringLiteral(node) {
158
+ if (node.type !== "string" && node.type !== "encapsed_string")
159
+ return null;
160
+ return stripPhpString(node.text);
161
+ }
162
+ function stripPhpString(raw) {
163
+ if (raw.startsWith("'") && raw.endsWith("'"))
164
+ return raw.slice(1, -1);
165
+ if (raw.startsWith('"') && raw.endsWith('"'))
166
+ return raw.slice(1, -1);
167
+ return raw;
168
+ }
169
+ function locOf(n) {
170
+ return {
171
+ line: n.startPosition.row + 1,
172
+ col: n.startPosition.column + 1,
173
+ end_line: n.endPosition.row + 1,
174
+ end_col: n.endPosition.column + 1,
175
+ };
176
+ }
177
+ //# sourceMappingURL=symfony.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symfony.js","sourceRoot":"","sources":["../../src/adapters/symfony.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CandidateHandler } from "../model/catalog.js";
2
+ import type { ParsedFile } from "../types/project-model.js";
3
+ export declare function vanillaPhpAdapter(file: ParsedFile, _allFiles: ReadonlyArray<ParsedFile>): ReadonlyArray<CandidateHandler>;
4
+ //# sourceMappingURL=vanilla-php.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanilla-php.d.ts","sourceRoot":"","sources":["../../src/adapters/vanilla-php.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAkB5D,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,GACnC,aAAa,CAAC,gBAAgB,CAAC,CA4BjC"}
@@ -0,0 +1,160 @@
1
+ // D-31 bespoke adapter: vanilla-PHP single-file webhook handlers. No framework imports;
2
+ // route emerges from the file's basename (per CONTEXT D-03). Detection is heuristic — we
3
+ // look for telltale signals (php://input read, hash_hmac call, $_SERVER signature header,
4
+ // getallheaders) to distinguish a webhook handler from arbitrary PHP source. v1 threshold:
5
+ // >= 1 signal qualifies (per CONTEXT Claude's-Discretion). Plan 10 FP measurement will
6
+ // re-tune if over-emission shows up.
7
+ //
8
+ // Pure: tree-sitter trees + ParsedFile only. No node:path import — basename math is done
9
+ // inline via string slicing to preserve engine purity (D-01).
10
+ // Namespaces that disqualify a file from the vanilla classification — if any framework is
11
+ // imported, that framework's adapter (catalog or bespoke) owns detection.
12
+ const FRAMEWORK_PREFIXES = ["Illuminate\\", "Symfony\\", "Slim\\"];
13
+ export function vanillaPhpAdapter(file, _allFiles) {
14
+ if (file.dialect !== "tree-sitter-php")
15
+ return [];
16
+ if (file.parse_error !== null || file.raw_ast === null)
17
+ return [];
18
+ if (file.imports.some((i) => FRAMEWORK_PREFIXES.some((p) => i.to_module.startsWith(p)))) {
19
+ return [];
20
+ }
21
+ const tree = file.raw_ast;
22
+ const signal = detectVanillaSignals(tree.rootNode);
23
+ if (signal.count < 1)
24
+ return [];
25
+ const routePattern = deriveRoute(file.file_path);
26
+ const httpMethods = detectRequestMethods(tree.rootNode);
27
+ return [
28
+ {
29
+ framework: "vanilla-php",
30
+ framework_version: null,
31
+ route_pattern: routePattern,
32
+ http_methods: httpMethods,
33
+ file_path: file.file_path,
34
+ location: signal.firstLocation,
35
+ handler_function_name: null,
36
+ handler_body_node: tree.rootNode,
37
+ handler_source_start: tree.rootNode.startIndex,
38
+ handler_source_end: tree.rootNode.endIndex,
39
+ },
40
+ ];
41
+ }
42
+ // Walk once and count signals + capture the first signal-bearing node's location.
43
+ function detectVanillaSignals(root) {
44
+ let count = 0;
45
+ let firstLoc = null;
46
+ const mark = (n) => {
47
+ count++;
48
+ if (firstLoc === null)
49
+ firstLoc = locOf(n);
50
+ };
51
+ // Signal A — file_get_contents('php://input')
52
+ for (const call of root.descendantsOfType(["function_call_expression"])) {
53
+ const fn = call.childForFieldName("function");
54
+ if (fn?.text === "file_get_contents") {
55
+ const args = call.childForFieldName("arguments");
56
+ const firstArg = args?.namedChildren.find((c) => c.type === "argument");
57
+ const literal = firstArg?.namedChildren.find((c) => c.type === "string" || c.type === "encapsed_string");
58
+ if (literal && stripPhpString(literal.text) === "php://input")
59
+ mark(call);
60
+ }
61
+ // Signal B — hash_hmac(...)
62
+ if (fn?.text === "hash_hmac")
63
+ mark(call);
64
+ // Signal D — getallheaders()
65
+ if (fn?.text === "getallheaders")
66
+ mark(call);
67
+ }
68
+ // Signal C — $_SERVER['HTTP_*_SIGNATURE'] subscript access. Loose match: any HTTP_* server var
69
+ // could be a signature header. Tight match (HTTP_*SIGNATURE) is more selective; we use tight.
70
+ for (const sub of root.descendantsOfType(["subscript_expression"])) {
71
+ const subject = sub.namedChildren[0];
72
+ if (!subject || subject.type !== "variable_name" || subject.text !== "$_SERVER")
73
+ continue;
74
+ const idx = sub.namedChildren[1];
75
+ if (!idx)
76
+ continue;
77
+ if (idx.type !== "string" && idx.type !== "encapsed_string")
78
+ continue;
79
+ const key = stripPhpString(idx.text);
80
+ if (/^HTTP_.*SIGNATURE/i.test(key))
81
+ mark(sub);
82
+ }
83
+ if (firstLoc === null) {
84
+ firstLoc = { line: 1, col: 1, end_line: 1, end_col: 1 };
85
+ }
86
+ return { count, firstLocation: firstLoc };
87
+ }
88
+ // Derive `/<basename-without-ext>` from a file path. Nested paths collapse to basename per D-03.
89
+ // webhook.php → /webhook
90
+ // webhooks/stripe.php → /stripe
91
+ // src/handlers/x.php → /x
92
+ // Pure string math: no node:path import (engine purity D-01).
93
+ function deriveRoute(filePath) {
94
+ const lastSlash = filePath.lastIndexOf("/");
95
+ const basename = lastSlash === -1 ? filePath : filePath.slice(lastSlash + 1);
96
+ const noExt = basename.endsWith(".php") ? basename.slice(0, -4) : basename;
97
+ return `/${noExt}`;
98
+ }
99
+ const BODY_METHOD_NAMES = new Set([
100
+ "POST",
101
+ "PUT",
102
+ "PATCH",
103
+ "DELETE",
104
+ "GET",
105
+ "HEAD",
106
+ "OPTIONS",
107
+ ]);
108
+ // Detect REQUEST_METHOD gating near the top of the file. Three shapes supported:
109
+ // if ($_SERVER['REQUEST_METHOD'] !== 'POST') ... → ["POST"] (negated guard pattern)
110
+ // if ($_SERVER['REQUEST_METHOD'] === 'POST') ... → ["POST"] (positive form)
111
+ // if (!in_array($_SERVER['REQUEST_METHOD'], ['POST', 'PUT'])) ... → ["POST", "PUT"]
112
+ // Default when no guard found: ["POST"] (vanilla webhooks default to POST per CONTEXT D-03).
113
+ function detectRequestMethods(root) {
114
+ for (const ifs of root.descendantsOfType(["if_statement"])) {
115
+ const cond = ifs.childForFieldName("condition");
116
+ if (!cond)
117
+ continue;
118
+ const methods = extractMethodsFromCondition(cond);
119
+ if (methods.length > 0)
120
+ return methods;
121
+ }
122
+ return ["POST"];
123
+ }
124
+ function extractMethodsFromCondition(cond) {
125
+ const text = cond.text;
126
+ // Quick reject — only conditions that reference REQUEST_METHOD are interesting.
127
+ if (!text.includes("REQUEST_METHOD"))
128
+ return [];
129
+ // in_array form — extract the array literal's string members.
130
+ const inArrayMatch = text.match(/in_array\s*\([^)]*REQUEST_METHOD[^,]*,\s*\[([^\]]+)\]/i);
131
+ if (inArrayMatch?.[1]) {
132
+ return Array.from(inArrayMatch[1].matchAll(/['"]([A-Za-z]+)['"]/g))
133
+ .map((m) => (m[1] ?? "").toUpperCase())
134
+ .filter((m) => BODY_METHOD_NAMES.has(m));
135
+ }
136
+ // Equality form — extract the verb on either side of the comparison.
137
+ const eqMatch = text.match(/REQUEST_METHOD['"]\s*\][^=!]*[=!]==?\s*['"]([A-Za-z]+)['"]/);
138
+ if (eqMatch?.[1]) {
139
+ const verb = eqMatch[1].toUpperCase();
140
+ if (BODY_METHOD_NAMES.has(verb))
141
+ return [verb];
142
+ }
143
+ return [];
144
+ }
145
+ function locOf(n) {
146
+ return {
147
+ line: n.startPosition.row + 1,
148
+ col: n.startPosition.column + 1,
149
+ end_line: n.endPosition.row + 1,
150
+ end_col: n.endPosition.column + 1,
151
+ };
152
+ }
153
+ function stripPhpString(raw) {
154
+ if (raw.startsWith("'") && raw.endsWith("'"))
155
+ return raw.slice(1, -1);
156
+ if (raw.startsWith('"') && raw.endsWith('"'))
157
+ return raw.slice(1, -1);
158
+ return raw;
159
+ }
160
+ //# sourceMappingURL=vanilla-php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanilla-php.js","sourceRoot":"","sources":["../../src/adapters/vanilla-php.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,9 @@ export { ALL_ADAPTERS, type FrameworkAdapter } from "./adapters/index.js";
2
2
  export { evaluate } from "./evaluate.js";
3
3
  export { type BuildProjectModelInput, buildProjectModel } from "./model/index.js";
4
4
  export { type ParseJsTsInput, parseJsTs } from "./parsers/babel.js";
5
+ export { type ParsePhpInput, parsePhp } from "./parsers/php.js";
6
+ export { extractPhpLiterals } from "./parsers/php-literals.js";
7
+ export { type InitPhpRuntimeInput, initPhpRuntime, type PhpRuntime, } from "./parsers/php-loader.js";
5
8
  export { type ParsePythonInput, parsePython } from "./parsers/python.js";
6
9
  export { type InitPythonRuntimeInput, initPythonRuntime, type PythonRuntime, } from "./parsers/python-loader.js";
7
10
  export type { Config, DeclarativeMatcher, Finding, FindingId, Framework, ImportEdge, MatcherName, MiddlewareRegistration, ParsedFile, ParseErrorRecord, ProjectModel, ProviderCatalog, ProviderCatalogEntry, ReachableSymbol, ResolvedMiddleware, RuleDefinition, RulePredicate, RuleSet, ScanMetadata, ScanResult, Severity, SourceLocation, SuppressedPayload, SuppressionSource, Verdict, WebhookEvidence, WebhookEvidenceKind, WebhookHandler, } from "./types/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,MAAM,EACN,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,KAAK,mBAAmB,EACxB,cAAc,EACd,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,MAAM,EACN,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -8,6 +8,9 @@ export { ALL_ADAPTERS } from "./adapters/index.js";
8
8
  export { evaluate } from "./evaluate.js";
9
9
  export { buildProjectModel } from "./model/index.js";
10
10
  export { parseJsTs } from "./parsers/babel.js";
11
+ export { parsePhp } from "./parsers/php.js";
12
+ export { extractPhpLiterals } from "./parsers/php-literals.js";
13
+ export { initPhpRuntime, } from "./parsers/php-loader.js";
11
14
  export { parsePython } from "./parsers/python.js";
12
15
  export { initPythonRuntime, } from "./parsers/python-loader.js";
13
16
  export { ENGINE_VERSION } from "./version.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,qDAAqD;AACrD,sEAAsE;AACtE,gFAAgF;AAChF,kEAAkE;AAElE,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAyB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAA+B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAuB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAyB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAEL,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAgCpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,qDAAqD;AACrD,sEAAsE;AACtE,gFAAgF;AAChF,kEAAkE;AAElE,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAyB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAA+B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAuB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAsB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAEL,cAAc,GAEf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAyB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAEL,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAgCpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -82,10 +82,15 @@ async function assembleHandler(cand, file, input) {
82
82
  // (or bodyParser.raw) is registered as an inline route middleware argument. The handler text
83
83
  // search in evidence.ts only sees the arrow function body, not outer route arguments.
84
84
  const rawBodyMwEvidence = collectRawBodyMiddlewareEvidence(cand, middlewareChain);
85
+ // PHP sdk_verify_call overlay — the reachability pass only handles babel + tree-sitter-python,
86
+ // so PHP scoped-call / member-call verify shapes never surface in reachable_symbols. Walk the
87
+ // handler-bearing file's PHP tree for matching call shapes against catalog sdk_verify_calls.
88
+ const phpVerifyEvidence = collectPhpSdkVerifyEvidence(cand, file, input.ruleSet);
85
89
  const evidence = [
86
90
  ...baseEvidence.evidence,
87
91
  ...sdkVerifyEvidence,
88
92
  ...rawBodyMwEvidence,
93
+ ...phpVerifyEvidence,
89
94
  ];
90
95
  // Recompute provider attribution since sdk_verify_call evidence may shift the count.
91
96
  const provider = recomputeProvider(evidence, baseEvidence.provider);
@@ -133,6 +138,73 @@ const RAW_BODY_MIDDLEWARE_NAMES = new Set([
133
138
  "raw", // named import: import { raw } from 'express' or import { raw } from 'body-parser'
134
139
  ]);
135
140
  const RAW_BODY_IMPORT_SOURCES = new Set(["express", "body-parser"]);
141
+ // PHP sdk_verify_call detection — substring-matches catalog `sdk_verify_calls` against the
142
+ // handler's source-text range. The match is intentionally textual (not AST-based): tree-sitter
143
+ // reachability doesn't traverse PHP, and PHP webhook handlers almost always include the verify
144
+ // call inline (`\Stripe\Webhook::constructEvent($payload, $sig, $secret)`). A future revision
145
+ // can layer cross-file reachability for PHP — out of scope for Phase 8.1 (D-34 v1 cap).
146
+ function collectPhpSdkVerifyEvidence(cand, file, ruleSet) {
147
+ if (file.dialect !== "tree-sitter-php")
148
+ return [];
149
+ if (file.raw_ast === null)
150
+ return [];
151
+ // Walk only the handler's text range to keep evidence scoped to the handler body. Two match
152
+ // shapes: (a) static FQN appears in the body (e.g. `\Stripe\Webhook::constructEvent(...)`),
153
+ // (b) method name appears as instance call (e.g. `$validator->validate(...)`) AND the catalog
154
+ // entry's namespace was imported by the file. Shape (b) covers Twilio's instance-only API.
155
+ const handlerText = file.source_text.slice(cand.handler_source_start, cand.handler_source_end);
156
+ const imports = file.imports;
157
+ const out = [];
158
+ const seen = new Set();
159
+ for (const [providerName, entry] of Object.entries(ruleSet.providers)) {
160
+ for (const verifyCall of entry.sdk_verify_calls) {
161
+ // Only consider PHP-shaped entries (contain `\` or `::`) for PHP overlay. JS-shaped
162
+ // dotted entries fall through to the reachability path.
163
+ const isPhpShape = verifyCall.includes("::") || verifyCall.includes("\\");
164
+ if (!isPhpShape)
165
+ continue;
166
+ const key = `${providerName}|${verifyCall}`;
167
+ if (seen.has(key))
168
+ continue;
169
+ // Shape (a) — static FQN substring match. Tolerate a leading `\` prefix at the call site.
170
+ const stripped = verifyCall.startsWith("\\") ? verifyCall.slice(1) : verifyCall;
171
+ if (handlerText.includes(stripped)) {
172
+ seen.add(key);
173
+ out.push({
174
+ kind: "sdk_verify_call",
175
+ provider: providerName,
176
+ location: cand.location,
177
+ detail: verifyCall,
178
+ });
179
+ continue;
180
+ }
181
+ // Shape (b) — instance-call form. Extract namespace + method from the catalog entry
182
+ // (`Twilio\Security\RequestValidator::validate` → ns `Twilio\Security\RequestValidator`,
183
+ // method `validate`), then check: namespace prefix was imported AND `->method(` appears
184
+ // in handler body. The namespace-import check anchors the match to the right provider.
185
+ const sepIdx = stripped.indexOf("::");
186
+ if (sepIdx === -1)
187
+ continue;
188
+ const nsClass = stripped.slice(0, sepIdx); // e.g. "Twilio\\Security\\RequestValidator"
189
+ const methodName = stripped.slice(sepIdx + 2); // e.g. "validate"
190
+ if (methodName === "")
191
+ continue;
192
+ const nsImported = imports.some((i) => i.to_module === nsClass || i.to_module.startsWith(`${nsClass}\\`));
193
+ if (!nsImported)
194
+ continue;
195
+ if (handlerText.includes(`->${methodName}(`)) {
196
+ seen.add(key);
197
+ out.push({
198
+ kind: "sdk_verify_call",
199
+ provider: providerName,
200
+ location: cand.location,
201
+ detail: verifyCall,
202
+ });
203
+ }
204
+ }
205
+ }
206
+ return out;
207
+ }
136
208
  function collectRawBodyMiddlewareEvidence(cand, middlewareChain) {
137
209
  const hasRawMiddleware = middlewareChain.some((m) => RAW_BODY_MIDDLEWARE_NAMES.has(m.name) &&
138
210
  m.import_source !== null &&
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/model/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/model/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/model/catalog.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAEpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AA6BD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAK7F"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/model/catalog.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAEpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AA6BD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAM7F"}