You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(migration): mark v3.1.0 leftovers as off-bridge in per-version leftovers table
Both `getMessageDocsSwagger` and `getObpConnectorLoopback` are listed
in the per-version-leftovers table as if they still hit the Lift
bridge, but they don't. Audit confirms zero bridge hits for either.
- `getObpConnectorLoopback` — native http4s route in `Http4s310.scala`
(~line 4875) that returns 400 NotImplemented, mirroring Lift's
deprecated-stub behaviour. No bridge dispatch.
- `getMessageDocsSwagger` — real handler is `Http4sResourceDocs.handleGetMessageDocsSwagger`,
matched by the wildcard `/obp/*/message-docs/{CONNECTOR}/swagger2.0`
route before any per-version service. `Http4s310.scala` keeps a
one-line `HttpRoutes.empty` stub + a `ResourceDoc` entry so
`nameOf(getMessageDocsSwagger)` compiles in test files and the
`FrozenClassTest` STABLE-API-surface guard keeps passing.
The doc table previously said "kept until the bridge-removal PR
retires it" / "Both retire together in the bridge-removal PR" —
which was the original plan, but the work has actually happened in
the meantime. Update the rows to reflect reality + cross out the
matching item in the Resource-docs workstream steps and the
bridge-leftovers summary.
No code change. Both stubs remain deletable in the future
bridge-removal PR alongside the frozen-snapshot refresh.
Copy file name to clipboardExpand all lines: LIFT_HTTP4S_MIGRATION.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -118,7 +118,7 @@ Bottom-up — each version depends on the one below it being done.
118
118
| 5 |`APIMethods210`| 28 |**Done** — `Http4s210.scala`: 25 own endpoints + path-rewriting bridge to `Http4s200`; all 79 v2.1.0 tests pass |
119
119
| 6 |`APIMethods220`| 19 |**Done** — `Http4s220.scala`: 18 own endpoints + path-rewriting bridge to `Http4s210`; all 27 v2.2.0 tests pass |
120
120
| 7 |`APIMethods300`| 47 |**Done** — `Http4s300.scala`: 47 own endpoints + path-rewriting bridge to `Http4s220`; all 86 v3.0.0 tests pass |
121
-
| 8 |`APIMethods310`| 102 |**Done** — `Http4s310.scala` has all 100 functional endpoints (42 GET, 10 DELETE, 19 POST, 25 PUT, 1 GET-shaped revoke, 3 SCA aliases) + path-rewriting bridge to `Http4s300`; 181 v3.1.0 tests pass. `getMessageDocsSwagger`is shadowed in production by `Http4sResourceDocs.routes` but the Lift `lazy val` is intentionally kept — its deletion is caught by `FrozenClassTest` as a STABLE-API surface reduction. Both `getMessageDocsSwagger` and `getObpConnectorLoopback` retire together in the bridge-removal PR. |
121
+
| 8 |`APIMethods310`| 102 |**Done** — `Http4s310.scala` has all 100 functional endpoints (42 GET, 10 DELETE, 19 POST, 25 PUT, 1 GET-shaped revoke, 3 SCA aliases) + path-rewriting bridge to `Http4s300`; 181 v3.1.0 tests pass. The Lift `APIMethods310` trait is now a stub (live code commented out). `getObpConnectorLoopback` has a real native http4s route (always returns 400 NotImplemented). `getMessageDocsSwagger` has a `HttpRoutes.empty` stub in `Http4s310` — actual routing is owned by `Http4sResourceDocs`, the stub exists only so `nameOf(getMessageDocsSwagger)` compiles for `FrozenClassTest`. Both stubs deletable in the bridge-removal PR alongside a frozen-snapshot refresh. |
122
122
| 9 |`APIMethods400`| 258 |**Done — 258 / 258 (100%)**. `Http4s400.scala` covers all 253 unique handlers (`lazy val NAME: HttpRoutes[IO]`) plus 8 ResourceDoc aliases for the transaction-request-type variants (ACCOUNT, ACCOUNT_OTP, SEPA, COUNTERPARTY, REFUND, FREE_FORM, SIMPLE, AGENT_CASH_WITHDRAWAL — handled by the shared `createTransactionRequest` wildcard handler; the `literalAllCapsSegments` set in `Http4sSupport.scala` dispatches the matcher to the per-type doc for swagger purposes). Adopts the **lazy val + helper-def init pattern** (Batches 1–19) introduced in v6 to dodge the JVM 64KB `<init>` method-size limit. **Bridge-cascade hijack** historically threatened v4's overrides; resolved by migrating all 35/35 v4-over-older URL+verb overrides. |
| 11 |`APIMethods510`| 111 |**Done** — `Http4s510.scala`. v5.1.0's `createConsent` Lift handler is exposed in Http4s510 under the alias name `createConsentImplicit` (a single handler with `if scaMethod == "EMAIL" \|\| scaMethod == "SMS" \|\| scaMethod == "IMPLICIT"` guard covers all three SCA-method URLs). |
@@ -159,7 +159,7 @@ Currently served via a raw Lift `serve { case Req(..., "openapi.yaml", ...) }` b
159
159
1. Fix aggregation bug in `getResourceDocsObpV700` → make `V7ResourceDocsAggregationTest` pass.
160
160
2. Extract shared handler logic into `Http4sResourceDocs` service; wire into `Http4sApp`.
161
161
3. Add `openapi.yaml` route to the same service.
162
-
4. Port `getMessageDocsSwagger` from `APIMethods310` into the same service (currently still served by the Lift bridge — see "Per-version Lift leftovers" below).
162
+
4.~~Port `getMessageDocsSwagger` from `APIMethods310` into the same service~~ — **Done.** Now served by `Http4sResourceDocs.handleGetMessageDocsSwagger` via the wildcard `/obp/*/message-docs/{CONNECTOR}/swagger2.0` route matched before any per-version service. The `val getMessageDocsSwagger: HttpRoutes[IO] = HttpRoutes.empty` stub in `Http4s310.scala` exists only to satisfy the `FrozenClassTest` API-surface check.
163
163
5. Remove resource-docs from the per-version Lift objects (`ResourceDocs140`–`ResourceDocs600`) once the centralized service covers them.
164
164
165
165
---
@@ -332,8 +332,8 @@ An `APIMethods{version}` file is marked **done** in the progress table when ever
332
332
333
333
| Endpoint | Origin | Why on Lift | Retired by |
334
334
|---|---|---|---|
335
-
|`getMessageDocsSwagger` (`GET /message-docs/CONNECTOR/swagger2.0`) |`APIMethods310`| The URL is already served by `Http4sResourceDocs.routes` (`handleGetMessageDocsSwagger`), so the Lift `lazy val` is shadowed dead code. **But** deleting it reduces v3.1.0's STABLE API surface, which `FrozenClassTest` correctly rejects (the frozen-API guard sees a `lazy val ... : OBPEndpoint` go missing from `Implementations3_1_0`). Refreshing the frozen snapshot via `FrozenClassUtil.main` is the documented way out, but doing so also requires touching `GetMessageDocsSwaggerTest`, which is below v7.0.0. Kept as-is until the bridge-removal PR retires it. | The bridge-removal PR. |
336
-
|`getObpConnectorLoopback` (`GET /connector/loopback`) |`APIMethods310`|Deprecated stub that unconditionally throws `IllegalStateException(NotImplemented)`; no functional behaviour | Either a 3-line native http4s route that throws the same exception or outright deletion, decided when the Lift bridge is removed|
335
+
|`getMessageDocsSwagger` (`GET /message-docs/CONNECTOR/swagger2.0`) |`Http4s310` (stub) + `Http4sResourceDocs` (real handler) |**Effectively done.** The real handler lives in `Http4sResourceDocs.handleGetMessageDocsSwagger`, matched by the wildcard `/obp/*/message-docs/{CONNECTOR}/swagger2.0` before any per-version service. `Http4s310.scala` keeps a stub `val getMessageDocsSwagger: HttpRoutes[IO] = HttpRoutes.empty` plus a `ResourceDoc` entry so the ResourceDoc surface stays consistent and the `FrozenClassTest` surface check keeps passing (`nameOf(getMessageDocsSwagger)` compiles). No bridge dispatch is involved. | The stub can be deleted as part of the bridge-removal PR alongside the frozen-snapshot refresh; until then the wiring above is correct in production. |
336
+
|`getObpConnectorLoopback` (`GET /connector/loopback`) |`Http4s310`|**Done.** Native http4s route in `Http4s310.scala` (~line 4875) — `booleanToFuture(NotImplemented, failCode = 400) { false }`, i.e. the route always returns 400 NotImplemented, mirroring Lift's original deprecated-stub behaviour. No bridge dispatch. | Deletable in the bridge-removal PR (or kept indefinitely as a documented deprecation stub).|
337
337
|~~`testResourceDoc`~~|~~`APIMethods140`~~| Dev-mode-only `/dummy` stub deleted — returned a dummy `APIInfoJSON`, no production behaviour. Removed from `OBPAPI1_4_0.routes` and `Implementations1_4_0`. `FrozenClassTest` did not flag it because v1.4.0's `testResourceDoc` ResourceDoc was registered behind `if (Props.devMode)` — the frozen snapshot (captured in test mode) never contained it. |**Done.**|
338
338
339
339
Track new leftovers here when later version files are migrated — the bridge-removal milestone in "Done Criteria" only requires the per-version files to be **done** in this table's sense (functional endpoints migrated, tests green). Leftovers folded into the Resource-docs or Auth-stack workstreams retire via those workstreams.
@@ -404,7 +404,7 @@ Already partly described in the next major section, but counted here for complet
404
404
-`ResourceDocs140` … `ResourceDocs600` — six separate Lift files, each registered via `LiftRules.statelessDispatch.append` in `Boot.scala`.
-`openapi.yaml` route — raw `Lift serve { ... }` block, no native http4s handler.
407
-
-`getMessageDocsSwagger` (v3.1.0) — folds into the centralised `Http4sResourceDocs` service when it ships.
407
+
-~~`getMessageDocsSwagger` (v3.1.0) — folds into the centralised `Http4sResourceDocs` service when it ships.~~**Done** — served by `Http4sResourceDocs.handleGetMessageDocsSwagger` via the wildcard `/obp/*/message-docs/{CONNECTOR}/swagger2.0` route.
408
408
- One-PR opportunity: build `Http4sResourceDocs` above the Lift bridge in `Http4sApp`, intercept all `/obp/*/resource-docs/*` traffic, retire six Lift dispatch entries in a single change.
409
409
410
410
### Small singleton Lift endpoints
@@ -580,7 +580,7 @@ Binds to `hostname` / `dev.port` from your props file (defaults: `127.0.0.1:8080
580
580
|`APIMethods210`| done — `Http4s210.scala` (25 own endpoints; path-rewriting bridge to Http4s200) |
581
581
|`APIMethods220`| done — `Http4s220.scala` (18 own endpoints; path-rewriting bridge to Http4s210) |
582
582
|`APIMethods300`| done — `Http4s300.scala` (47 own endpoints; path-rewriting bridge to Http4s220; all 86 v3.0.0 tests pass) |
583
-
|`APIMethods310`| done — `Http4s310.scala` (100 own endpoints + `updateCustomerAddress`; path-rewriting bridge to Http4s300; 2 endpoints still on Lift: `getMessageDocsSwagger`(shadowed by `Http4sResourceDocs.routes`, kept to satisfy`FrozenClassTest`) and `getObpConnectorLoopback`)|
583
+
|`APIMethods310`| done — `Http4s310.scala` (100 own endpoints + `updateCustomerAddress`; path-rewriting bridge to Http4s300). Two former Lift leftovers now both off-bridge: `getMessageDocsSwagger`served by `Http4sResourceDocs` (in-file stub kept only for`FrozenClassTest`), `getObpConnectorLoopback` served by a native http4s route that returns 400 NotImplemented.|
584
584
|`APIMethods400`|**done — 258 / 258 (100%)**. `Http4s400.scala` covers all 253 unique handlers + 8 ResourceDoc aliases for transaction-request-type variants (served by the shared wildcard handler). |
0 commit comments