GitNexus/gitnexus/test/unit/group
ChunxueLi b9613ee86b
feat(node): wrapped-client HTTP consumers + leading-prefix template stripping (#3111)
* feat(http-patterns): Patch 8 - extract enterprise wrapped-client HTTP consumers

Recognize the enterprise axios-wrapper call shape X.request({ url, method })
(e.g. httpClient.request from @winex-plugin/win-request) as a consumer
contract source, and strip the leading gateway/service-prefix template
variable so consumer paths align with backend provider routes.

Effect on sr-next group: 1740 contracts / 0 cross-links ->
3540 contracts / 883 exact cross-links (14 frontend repos <-> backend/opt).

Not submitted upstream yet; see CUSTOM_PATCHES.md Patch 8 for details.

Co-Authored-By: Claude <noreply@anthropic.com>

* feat(node): wrapped-client HTTP consumers + leading-prefix template stripping

Consumer extraction for enterprise axios-wrapped clients:
- X.request({ url, method }) member form (httpClient.request from
  win-request and friends): any .request(options) call with url/method|type
  string props; the url template literal is split on ${...} spans and the
  longest /-leading literal segment is kept.
- Leading ${...} gateway/service-prefix variables are stripped as
  consumer-path normalization semantics in normalizeHttpPath
  (stripLeadingTemplatePrefix): `${client}/api/v1/x` → /api/v1/x for
  fetch/axios/wrapped shapes alike. Mid/tail interpolations still round-trip
  through {param}; a stripped remainder not starting with / is dropped
  (same rejection static relative urls get at scan time).
- %7B/%7D unescaping for absolute-URL branches.

On our 16-repo frontend monorepo this took group sync from 1740
contracts / 0 cross-links to 5111 / 2097 (exact links, 16/16 repos linked).

* fix(route): preserve upstream symbol-resolution machinery; strip only

Rebasing correction: an earlier iteration of this change simplified the
symbol probing to a bare line-1 offset and dropped the exact-module match,
which mis-attributed data-table handlers to decoy same-name symbols
(6 data-route-table regressions). Restore the upstream probing
(toZeroBasedLine + exact-module resolution) wholesale; the deltas this
change actually needs are the pure ones: stripLeadingTemplatePrefix,
normalizeConsumerPath returning null for un-reducible urls (callers
drop), and the %7B/%7D brace restoration in the absolute-URL branch.

* style: prettier

* Address PR review feedback (#3111)

Pass wrapped-client URLs through shared consumer-path normalization instead of the longest-segment reducer, emit * for present-but-non-literal methods, restore {param} via a sentinel so literal %7B segments stay encoded, and drop unused decorator helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address PR review feedback (#3111)

Gate wrapped X.request({url}) on axios-proven receivers or a small wrapper allowlist so cy.request/queue.request cannot mint HTTP consumers.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address PR review feedback (#3111)

Use a private-use sentinel so literal path segments are not rewritten, trim wrapped URLs before the scan-time path gate, and treat interpolated/shorthand methods as *.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(autofix): apply prettier + eslint fixes via /autofix command

* fix(http): honest wrapped-request methods and tighter admission (#3111)

Quoted keys and object spreads were minted as GET; drop spelling-only `api`,
align gateway-prefix member verbs with prefix-strip, and keep absolute URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: l.cx <l.cx@winning.com.cn>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: ChunxueLi <mecoloud@users.noreply.gitee.com>
Co-authored-by: Gergő Magyar <gergomagyar@icloud.com>
Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-02 19:59:45 +00:00
..
bridge-db-edge.test.ts fix(deps): upgrade @ladybugdb/core to 0.16.0 to resolve native segfaults (#1235) 2026-04-30 17:40:39 +01:00
bridge-db.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
bridge-meta-swap-window.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
bridge-pairing-precedes-open.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
bridge-storage-tempfile.test.ts fix(security): close URL/regex/tag-filter sanitization cluster (U7) (#1330) 2026-05-08 07:11:29 +01:00
config-parser.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
cross-impact-fanout-cap.test.ts fix(impact): make File risk comparable via shared axes (#3075) (#3082) 2026-08-29 11:58:15 +00:00
cross-impact-incomplete-bridge.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
cross-impact-phase2-timeout.test.ts fix(ingestion): close ReDoS in cobol-preprocessor + rust-workspace + resource-exhaustion in cross-impact (U8) (#1331) 2026-05-08 09:10:07 +01:00
cross-impact.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
cross-trace-incomplete-bridge.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
cross-trace.test.ts feat(group): resolve inline HTTP provider handlers via call-site line (#2276) (#2282) 2026-06-23 17:51:11 +01:00
data-route-table.test.ts feat(routes): support JS data route tables (#2972) 2026-08-18 04:39:45 +01:00
elixir-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
fastapi-composed-provider.test.ts fix: resolve imported/composed FastAPI route path constants (#2391) (#2393) 2026-07-07 13:23:05 +01:00
fixtures.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
fs-utils.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
go-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
graphql-extractor.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
group-path-utils.test.ts feat: cross-repo impact analysis (#794) — @repo MCP routing + group resources (#984) 2026-04-20 11:55:07 +01:00
group-service-group-mode.test.ts feat: cross-repo impact analysis (#794) — @repo MCP routing + group resources (#984) 2026-04-20 11:55:07 +01:00
group-tools.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
grpc-extractor.test.ts fix(group): stop Node gRPC loadPackageDefinition gate from matching every member call (#1916) 2026-05-30 09:31:36 +01:00
http-consumer-signals.test.ts PHP: detect generated-client Request(method, host . resourcePath) consumer shape (#3079) 2026-08-28 17:47:41 +00:00
http-route-extractor.test.ts feat(node): wrapped-client HTTP consumers + leading-prefix template stripping (#3111) 2026-09-02 19:59:45 +00:00
http-route-graph-method.test.ts fix(routes): connect decorator routes to their handler function (#2865) 2026-09-01 14:03:30 +00:00
http-route-multi-verb.test.ts feat(group): cross-repo call trace using PDG (#2269) 2026-06-23 07:54:13 +01:00
impact-by-uid.test.ts feat(group): add sync pipeline, CLI, MCP tools, and monorepo fixture 2026-04-02 00:40:31 +03:00
include-extractor.test.ts fix(storage): stop the Windows \\?\ long-path prefix from breaking repo path matching (#2667) (#2700) 2026-07-26 09:07:55 +01:00
insecure-tempfile.test.ts fix(storage): give every registry write its own tmp path (#2888) (#2920) 2026-08-10 21:16:42 +01:00
java-const-route-parity.test.ts feat(jvm): fold Java static wildcards and Kotlin star imports for route constants (#3110) 2026-08-31 21:58:40 +00:00
java-workspace-extractor.test.ts fix(group): parse Maven child coordinates independently of parent POMs (#3108) 2026-08-31 15:49:43 +00:00
js-http-consumer-resolution.test.ts feat(node): wrapped-client HTTP consumers + leading-prefix template stripping (#3111) 2026-09-02 19:59:45 +00:00
kotlin-const-route-fold.test.ts feat(jvm): fold Java static wildcards and Kotlin star imports for route constants (#3110) 2026-08-31 21:58:40 +00:00
manifest-extractor.test.ts fix(group): replace LadybugDB-incompatible multi-label Cypher (#2325) (#2327) 2026-06-30 15:08:43 +01:00
manifest-label-drift.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
manifest-synthetic-impact.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
matching.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
nest-route-parity.test.ts fix(ingestion): index NestJS decorator routes so api_impact and route_map stop reporting live endpoints as non-existent (#3017) 2026-08-27 08:35:36 +01:00
node-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
php-guzzle-request-ctor.test.ts PHP: detect generated-client Request(method, host . resourcePath) consumer shape (#3079) 2026-08-28 17:47:41 +00:00
python-workspace-extractor.test.ts fix(ingestion): discover nested source directories (#3043) 2026-08-26 12:24:39 +00:00
registry-suppressed-stages.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
registry-unreadable-repos.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
resolve-bridge-neighbors.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
rust-workspace-extractor.test.ts feat(core): adopt pino structured logger (#1336) 2026-05-07 20:56:25 +01:00
service-boundary-detector.test.ts fix(group): address 4 HIGH-priority issues from PR #626 review 2026-04-02 12:55:33 +03:00
service-group-sync-payload.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
service.test.ts feat: cross-repo impact analysis (#794) — @repo MCP routing + group resources (#984) 2026-04-20 11:55:07 +01:00
spring-route-parity.test.ts fix(spring): extract method-level RequestMapping routes (#2857) 2026-08-07 11:43:19 +01:00
storage.test.ts fix(group): address 4 HIGH-priority issues from PR #626 review 2026-04-02 12:55:33 +03:00
sync-exact-only.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
sync-partial-extraction.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
sync-registry-identity.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
sync-unreadable-repos.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
sync-windowed-resolution.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
sync.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
thrift-extractor.test.ts fix(windows): 32767-char tree-sitter crash + VECTOR extension SIGSEGV (#1433) 2026-05-10 16:00:36 +01:00
topic-extractor.test.ts fix(group): contract extractors honour .gitnexusignore via shared IgnoreService (#1185) (#1247) 2026-05-01 16:42:21 +01:00
types.test.ts fix(impact): make File risk comparable via shared axes (#3075) (#3082) 2026-08-29 11:58:15 +00:00