@_mustachio/openauth 0.13.1 → 0.13.3

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/esm/domain/authorize.js +11 -3
  2. package/dist/esm/domain/callback.js +9 -2
  3. package/dist/esm/domain/method-dispatch.js +1 -0
  4. package/dist/esm/domain/method-route.js +2 -0
  5. package/dist/esm/domain/mount.js +29 -0
  6. package/dist/esm/http/handlers/method-route.js +8 -3
  7. package/dist/esm/index.js +3 -0
  8. package/dist/esm/methods/code.js +9 -8
  9. package/dist/esm/methods/oauth2-generic.js +2 -1
  10. package/dist/esm/methods/passkey.js +3 -2
  11. package/dist/esm/methods/password.js +9 -8
  12. package/dist/esm/methods/saml-sp/metadata.js +2 -1
  13. package/dist/types/domain/authorize.d.ts.map +1 -1
  14. package/dist/types/domain/callback.d.ts +6 -5
  15. package/dist/types/domain/callback.d.ts.map +1 -1
  16. package/dist/types/domain/method-dispatch.d.ts +5 -0
  17. package/dist/types/domain/method-dispatch.d.ts.map +1 -1
  18. package/dist/types/domain/method-route.d.ts +6 -0
  19. package/dist/types/domain/method-route.d.ts.map +1 -1
  20. package/dist/types/domain/mount.d.ts +90 -0
  21. package/dist/types/domain/mount.d.ts.map +1 -0
  22. package/dist/types/http/handlers/method-route.d.ts.map +1 -1
  23. package/dist/types/index.d.ts +16 -0
  24. package/dist/types/index.d.ts.map +1 -1
  25. package/dist/types/methods/code.d.ts.map +1 -1
  26. package/dist/types/methods/oauth2-generic.d.ts.map +1 -1
  27. package/dist/types/methods/passkey.d.ts.map +1 -1
  28. package/dist/types/methods/password.d.ts.map +1 -1
  29. package/dist/types/methods/saml-sp/metadata.d.ts.map +1 -1
  30. package/dist/types/types/idp.d.ts +16 -1
  31. package/dist/types/types/idp.d.ts.map +1 -1
  32. package/dist/types/types/method.d.ts +11 -0
  33. package/dist/types/types/method.d.ts.map +1 -1
  34. package/package.json +2 -1
  35. package/src/domain/authorize.ts +15 -4
  36. package/src/domain/callback.ts +18 -7
  37. package/src/domain/method-dispatch.ts +6 -0
  38. package/src/domain/method-route.ts +8 -0
  39. package/src/domain/mount.ts +113 -0
  40. package/src/http/handlers/method-route.ts +9 -5
  41. package/src/index.ts +17 -0
  42. package/src/methods/code.ts +15 -6
  43. package/src/methods/oauth2-generic.ts +6 -1
  44. package/src/methods/passkey.ts +6 -2
  45. package/src/methods/password.ts +19 -4
  46. package/src/methods/saml-sp/metadata.ts +5 -1
  47. package/src/types/idp.ts +16 -1
  48. package/src/types/method.ts +11 -0
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../../src/methods/passkey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,iBAAiB,CAAA;AAGxB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACtE,QAAQ,CACN,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACnC,oEAAoE;IACpE,aAAa,CAAC,KAAK,EAAE;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,6CAA6C;IAC7C,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,gBAAgB,CAAA;QAC5B,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,WAAW,EAAE,sBAAsB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E;;;;;;;;GAQG;AACH,QAAA,MAAM,YAAY;IAChB,kDAAkD;;IAElD,iDAAiD;;IAEjD,mEAAmE;;IAEnE,2BAA2B;;;;;;;;;;;;EAE3B,CAAA;AACF,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAkBjD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,GACzB,iBAAiB,CAAC,iBAAiB,EAAE,YAAY,EAAE,aAAa,CAAC,CAiDnE"}
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../../src/methods/passkey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,iBAAiB,CAAA;AAIxB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACtE,QAAQ,CACN,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACnC,oEAAoE;IACpE,aAAa,CAAC,KAAK,EAAE;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,6CAA6C;IAC7C,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,gBAAgB,CAAA;QAC5B,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,WAAW,EAAE,sBAAsB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E;;;;;;;;GAQG;AACH,QAAA,MAAM,YAAY;IAChB,kDAAkD;;IAElD,iDAAiD;;IAEjD,mEAAmE;;IAEnE,2BAA2B;;;;;;;;;;;;EAE3B,CAAA;AACF,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAkBjD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,GACzB,iBAAiB,CAAC,iBAAiB,EAAE,YAAY,EAAE,aAAa,CAAC,CAoDnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/methods/password.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,iBAAiB,CAAA;AAGxB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC1E;;;;OAIG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,sCAAsC;IACtC,KAAK,EAAE,iBAAiB,CAAA;IACxB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,iGAAiG;AACjG,QAAA,MAAM,YAAY,iDAAwB,CAAA;AAC1C,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAYlD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,qBAAqB,GAC1B,iBAAiB,CAAC,kBAAkB,EAAE,aAAa,EAAE,cAAc,CAAC,CAwCtE"}
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/methods/password.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,iBAAiB,CAAA;AAIxB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC1E;;;;OAIG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,sCAAsC;IACtC,KAAK,EAAE,iBAAiB,CAAA;IACxB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,iGAAiG;AACjG,QAAA,MAAM,YAAY,iDAAwB,CAAA;AAC1C,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAYlD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,qBAAqB,GAC1B,iBAAiB,CAAC,kBAAkB,EAAE,aAAa,EAAE,cAAc,CAAC,CAwCtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/methods/saml-sp/metadata.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGrE,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACZ,MAAM,SAAS,CAAA;AAqBhB,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAkDjE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAkDtD"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/methods/saml-sp/metadata.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGrE,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACZ,MAAM,SAAS,CAAA;AAqBhB,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAkDjE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAqDtD"}
@@ -233,7 +233,22 @@ export type IdPOptions = {
233
233
  * mechanism (see plan §"Tenant Recovery Across Redirects").
234
234
  */
235
235
  resolveTenant: (req: Request) => Promise<Result<TenantId, AuthError>>;
236
- /** Opt-in for partitioned callback hosts (recovery mechanism #2). */
236
+ /**
237
+ * Opt-in for partitioned callback hosts (recovery mechanism #2).
238
+ *
239
+ * Returns the hostname a given tenant's callbacks arrive on, so the
240
+ * tenant is recoverable from the `Host` header before the state
241
+ * envelope is verified.
242
+ *
243
+ * **The issuer's mount prefix still applies to the returned host.** If
244
+ * `issuerUrl` is `https://example.com/idp`, a tenant host of
245
+ * `acme.example.com` produces `https://acme.example.com/idp/cb/<id>`.
246
+ * This option varies the *authority* of one deployment — those hosts
247
+ * are served by this same service behind the same proxy, so they share
248
+ * its mount. A deployment needing partitioned hosts mounted differently
249
+ * from the issuer is describing two mounts, which one `issuerUrl`
250
+ * cannot express; a second option must not be added to paper over it.
251
+ */
237
252
  callbackHostFor?: (tenantId: TenantId) => string;
238
253
  /**
239
254
  * HMAC-SHA-256 key ring used to MAC the minimal state envelope. The
@@ -1 +1 @@
1
- {"version":3,"file":"idp.d.ts","sourceRoot":"","sources":["../../../src/types/idp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idp.d.ts","sourceRoot":"","sources":["../../../src/types/idp.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,17 @@ export type MethodHandler<P, S> = (ctx: MethodContext<S>) => Promise<MethodResul
107
107
  export type MethodContext<S = unknown> = {
108
108
  /** The raw Web Fetch `Request`. Web standard, not Hono `Context`. */
109
109
  request: Request;
110
+ /**
111
+ * The issuer URL of this IdP, always present.
112
+ *
113
+ * Distinct from `dispatch.issuerUrl`, which is only populated for
114
+ * `GET /authorize`. Methods that render their own URLs — a form action
115
+ * re-rendered on a validation error, say — need it on every route, and
116
+ * must build those URLs with `mountedPath` so they carry the
117
+ * deployment's mount prefix. `ctx.request.url` is not a substitute: a
118
+ * proxy-stripped inbound URL has already lost that prefix.
119
+ */
120
+ issuerUrl: string;
110
121
  /** Path within the method's mount, e.g. `"/callback"` (without the `/<id>` prefix). */
111
122
  subPath: string;
112
123
  tenant: TenantContext;
@@ -1 +1 @@
1
- {"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../../src/types/method.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../../src/types/method.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@_mustachio/openauth",
3
- "version": "0.13.1",
3
+ "version": "0.13.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -11,6 +11,7 @@
11
11
  "build": "bun run script/build.ts",
12
12
  "build:watch": "bun run script/build-watch.ts",
13
13
  "test": "bun test",
14
+ "typecheck": "tsc --noEmit -p tsconfig.test.json",
14
15
  "preview:ui": "bun --hot run script/preview-ui.ts"
15
16
  },
16
17
  "sideEffects": false,
@@ -51,6 +51,7 @@ import { safeAudit } from "./audit"
51
51
  import { randomId, randomToken } from "./crypto"
52
52
  import { MethodCache } from "./method-cache"
53
53
  import { dispatchMethod } from "./method-dispatch"
54
+ import { callbackTarget } from "./mount"
54
55
  import { mintStateEnvelope } from "./state-envelope"
55
56
  import { saveEncryptedCode } from "./token"
56
57
 
@@ -200,10 +201,19 @@ export async function startAuthorize(
200
201
  const nonce = (deps.newNonce ?? randomToken)()
201
202
  const flowTtl = deps.flowTtlMs ?? DEFAULT_FLOW_TTL_MS
202
203
  const now = deps.clock()
203
- const callbackHost =
204
- deps.callbackHostFor?.(tenant.id) ?? new URL(deps.issuerUrl).host
205
- const callbackPath = `/cb/${methodId}`
206
- const callbackUrl = `${new URL(deps.issuerUrl).protocol}//${callbackHost}${callbackPath}`
204
+ // Source of truth for callback derivation — every other site that needs
205
+ // this URL goes through `callbackTarget` so they cannot drift apart.
206
+ // Note `path` is the *inbound* route (no mount prefix; the proxy strips
207
+ // it before we see the request) while `url` is the public form.
208
+ const {
209
+ host: callbackHost,
210
+ path: callbackPath,
211
+ url: callbackUrl,
212
+ } = callbackTarget({
213
+ issuerUrl: deps.issuerUrl,
214
+ methodId,
215
+ callbackHost: deps.callbackHostFor?.(tenant.id),
216
+ })
207
217
 
208
218
  const record: FlowRecord = {
209
219
  flowId,
@@ -262,6 +272,7 @@ export async function startAuthorize(
262
272
  flow: record,
263
273
  cookies: input.cookies,
264
274
  sessionStore: deps.sessionStore,
275
+ issuerUrl: deps.issuerUrl,
265
276
  dispatch: {
266
277
  state: stateEnvelope,
267
278
  callbackUrl,
@@ -35,6 +35,7 @@ import { safeAudit } from "./audit"
35
35
  import { randomToken } from "./crypto"
36
36
  import { MethodCache } from "./method-cache"
37
37
  import { dispatchMethod } from "./method-dispatch"
38
+ import { callbackTarget } from "./mount"
38
39
  import { saveEncryptedCode } from "./token"
39
40
  import { verifyStateEnvelope } from "./state-envelope"
40
41
  import { AUTH_CODE_TTL_MS } from "./authorize"
@@ -67,12 +68,13 @@ export type HandleCallbackInput = {
67
68
  */
68
69
  tenant?: TenantContext
69
70
  /**
70
- * Per-request issuer URL (HTTP layer). Used only by the
71
- * IdP-initiated path to derive the SP entityID / ACS — the same
72
- * derivation the AuthnRequest and metadata paths use, so the values
73
- * cannot drift.
71
+ * Per-request issuer URL (HTTP layer). The IdP-initiated path derives
72
+ * the SP entityID / ACS from it — the same derivation the AuthnRequest
73
+ * and metadata paths use, so the values cannot drift — and every
74
+ * dispatched method receives it as `MethodContext.issuerUrl` to build
75
+ * mount-prefixed URLs of its own.
74
76
  */
75
- issuerUrl?: string
77
+ issuerUrl: string
76
78
  }
77
79
 
78
80
  export type HandleCallbackDeps = {
@@ -241,6 +243,7 @@ export async function handleCallback(
241
243
  flow,
242
244
  cookies: input.cookies,
243
245
  sessionStore: deps.sessionStore,
246
+ issuerUrl: input.issuerUrl,
244
247
  dispatch: null,
245
248
  })
246
249
  if (isErr(dispatched)) return err(dispatched.error)
@@ -351,7 +354,7 @@ async function tryIdpInitiated(
351
354
  url: URL,
352
355
  ): Promise<Result<CallbackOutput, AuthError> | null> {
353
356
  if (input.rawRequest.method !== "POST") return null
354
- if (!input.tenant || !input.issuerUrl) return null
357
+ if (!input.tenant) return null
355
358
 
356
359
  const segments = url.pathname.split("/").filter(Boolean)
357
360
  if (segments.length < 2 || segments[0] !== "cb") return null
@@ -365,7 +368,14 @@ async function tryIdpInitiated(
365
368
  const method = methodRes.value
366
369
  if (method.unsolicitedCallback !== true) return null
367
370
 
368
- const callbackUrl = `${url.protocol}//${url.host}/cb/${methodId}`
371
+ // Derived from `issuerUrl`, not the inbound request URL: a path-mounted
372
+ // deployment sees a proxy-stripped pathname, so rebuilding from `url`
373
+ // would emit a callback URL missing the mount prefix.
374
+ const { url: callbackUrl } = callbackTarget({
375
+ issuerUrl: input.issuerUrl,
376
+ methodId,
377
+ callbackHost: url.host,
378
+ })
369
379
  const dispatched = await dispatchMethod({
370
380
  method,
371
381
  route: "GET /callback",
@@ -375,6 +385,7 @@ async function tryIdpInitiated(
375
385
  flow: null,
376
386
  cookies: input.cookies,
377
387
  sessionStore: deps.sessionStore,
388
+ issuerUrl: input.issuerUrl,
378
389
  dispatch: { state: "", callbackUrl, issuerUrl: input.issuerUrl },
379
390
  })
380
391
  if (isErr(dispatched)) return err(dispatched.error)
@@ -33,6 +33,11 @@ export type DispatchInput = {
33
33
  flow: FlowRecord | null
34
34
  cookies: ReadonlyMap<string, string>
35
35
  sessionStore: SessionStore
36
+ /**
37
+ * Issuer URL of this IdP. Always required — unlike `dispatch`, methods
38
+ * need it on every route to emit mount-prefixed URLs of their own.
39
+ */
40
+ issuerUrl: string
36
41
  /** Populated at `GET /authorize`; null on callbacks. */
37
42
  dispatch: MethodDispatchData | null
38
43
  }
@@ -57,6 +62,7 @@ export async function dispatchMethod(
57
62
 
58
63
  const ctx: MethodContext<unknown> = {
59
64
  request: input.request,
65
+ issuerUrl: input.issuerUrl,
60
66
  subPath: input.subPath,
61
67
  tenant: input.tenant,
62
68
  flow: input.flow,
@@ -79,6 +79,12 @@ export type HandleMethodRouteInput = {
79
79
  /** flowId from the `idp.flow` cookie. */
80
80
  flowId: string
81
81
  cookies: ReadonlyMap<string, string>
82
+ /**
83
+ * Issuer URL — passed to the method so it can emit mount-prefixed URLs
84
+ * (a re-rendered form action, say). The inbound request URL cannot
85
+ * supply this: a proxy has already stripped the mount prefix from it.
86
+ */
87
+ issuerUrl: string
82
88
  }
83
89
 
84
90
  export type HandleMethodRouteDeps = {
@@ -139,6 +145,7 @@ export async function handleMethodRoute(
139
145
  flow,
140
146
  cookies: input.cookies,
141
147
  sessionStore: deps.sessionStore,
148
+ issuerUrl: input.issuerUrl,
142
149
  dispatch: null,
143
150
  })
144
151
  if (isErr(dispatched)) return err(dispatched.error)
@@ -295,6 +302,7 @@ export async function handlePublicMethodRoute(
295
302
  flow: null,
296
303
  cookies: new Map(),
297
304
  sessionStore: deps.sessionStore,
305
+ issuerUrl: input.dispatch.issuerUrl,
298
306
  dispatch: input.dispatch,
299
307
  })
300
308
  if (isErr(dispatched)) return err(dispatched.error)
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Mount prefix — where this IdP sits under its origin.
3
+ *
4
+ * The library serves its routes at its own root (`/authorize`, `/m/*`,
5
+ * `/cb/*`); a deployment may sit behind a reverse proxy that strips a path
6
+ * prefix before forwarding. Routing is unaffected — but every URL the
7
+ * library *emits* (form actions, upstream `redirect_uri`s, SAML metadata)
8
+ * is consumed on the public side of that proxy and must carry the prefix.
9
+ *
10
+ * `issuerUrl` already carries it. It is the single source of truth: there
11
+ * is deliberately no `basePath` option, because two sources could disagree
12
+ * and the `iss` claim would then contradict the URLs we hand out.
13
+ *
14
+ * All emitted-URL construction goes through this module. `metadata.test.ts`
15
+ * is an anti-drift test asserting the SAML entityID/ACS equal what
16
+ * `buildAuthnRequestRedirect` derives; funnelling every site through
17
+ * `callbackTarget` is what keeps that true.
18
+ */
19
+
20
+ /**
21
+ * The normalised mount prefix of `issuerUrl`: `""` for a root-mounted
22
+ * deployment, otherwise a leading-slash, no-trailing-slash path.
23
+ *
24
+ * https://example.com -> ""
25
+ * https://example.com/ -> ""
26
+ * https://example.com/idp -> "/idp"
27
+ * https://example.com/idp/ -> "/idp"
28
+ * https://example.com//idp// -> "/idp"
29
+ *
30
+ * A root-mounted issuer must yield `""` and not `"/"`, so that existing
31
+ * deployments emit byte-identical URLs to before this existed.
32
+ *
33
+ * An unparseable `issuerUrl` yields `""` rather than throwing: emitting a
34
+ * root-relative URL degrades to the pre-existing behaviour, whereas
35
+ * throwing would turn a misconfiguration into a 500 from inside form
36
+ * rendering. Misconfiguration still fails loudly at `/authorize`, which
37
+ * parses `issuerUrl` for the callback host.
38
+ */
39
+ export function mountPath(issuerUrl: string): string {
40
+ let pathname: string
41
+ try {
42
+ pathname = new URL(issuerUrl).pathname
43
+ } catch {
44
+ return ""
45
+ }
46
+ const segments = pathname.split("/").filter(Boolean)
47
+ return segments.length === 0 ? "" : `/${segments.join("/")}`
48
+ }
49
+
50
+ /**
51
+ * A path-absolute URL for one of the library's own routes, carrying the
52
+ * deployment's mount prefix. `path` is the route as the service itself
53
+ * serves it, with a leading slash.
54
+ *
55
+ * mountedPath("https://x/idp", "/m/code/send") -> "/idp/m/code/send"
56
+ * mountedPath("https://x", "/m/code/send") -> "/m/code/send"
57
+ */
58
+ export function mountedPath(issuerUrl: string, path: string): string {
59
+ return `${mountPath(issuerUrl)}${path}`
60
+ }
61
+
62
+ /**
63
+ * Where a method's callback lives, in the two forms the framework needs.
64
+ *
65
+ * The distinction matters under a path-mounted deployment and is the
66
+ * reason these are derived together rather than one from the other:
67
+ * `url` is public (registered with upstream providers, advertised in SAML
68
+ * metadata) and carries the mount prefix, while `path` is what the
69
+ * inbound request actually looks like after the proxy has stripped that
70
+ * prefix, and so must not.
71
+ */
72
+ export type CallbackTarget = {
73
+ /** Public, fully-qualified callback URL. Carries the mount prefix. */
74
+ url: string
75
+ /** Host the callback is expected to arrive on. */
76
+ host: string
77
+ /**
78
+ * Expected pathname of the inbound request — this service's own route,
79
+ * *without* the mount prefix, because the proxy has already stripped it.
80
+ * Persisted on `FlowRecord.callbackPath` and matched in `domain/callback.ts`.
81
+ */
82
+ path: string
83
+ }
84
+
85
+ /**
86
+ * The single derivation point for a method's callback URL.
87
+ *
88
+ * `callbackHost` is the optional per-tenant override from
89
+ * `IdPOptions.callbackHostFor`. **The issuer's mount prefix applies even
90
+ * when that override is in effect.** `callbackHostFor` exists to partition
91
+ * callbacks across hostnames so a tenant is recoverable from the `Host`
92
+ * header before the state envelope is verified (tenant-recovery mechanism
93
+ * #2) — it varies the authority of the *same* deployment, not the
94
+ * deployment itself. Those hosts are served by this service behind the
95
+ * same proxy, so they share its mount. A deployment needing partitioned
96
+ * hosts mounted differently from the issuer is describing two mounts,
97
+ * which one `issuerUrl` cannot express and a second option must not be
98
+ * introduced to paper over.
99
+ */
100
+ export function callbackTarget(input: {
101
+ issuerUrl: string
102
+ methodId: string
103
+ callbackHost?: string | undefined
104
+ }): CallbackTarget {
105
+ const issuer = new URL(input.issuerUrl)
106
+ const host = input.callbackHost ?? issuer.host
107
+ const path = `/cb/${input.methodId}`
108
+ return {
109
+ host,
110
+ path,
111
+ url: `${issuer.protocol}//${host}${mountPath(input.issuerUrl)}${path}`,
112
+ }
113
+ }
@@ -12,6 +12,7 @@ import {
12
12
  handlePublicMethodRoute,
13
13
  } from "../../domain/method-route"
14
14
  import type { RouteKey } from "../../domain/method-dispatch"
15
+ import { callbackTarget } from "../../domain/mount"
15
16
  import { authError } from "../../types/error"
16
17
  import { isErr } from "../../types/result"
17
18
 
@@ -51,13 +52,15 @@ export function makeMethodRouteHandler(deps: HttpDeps) {
51
52
  resolved.value.publicRoutes?.includes(routeKey)
52
53
  ) {
53
54
  const issuerUrl = c.get("issuerUrl")
54
- const callbackHost =
55
- deps.callbackHostFor?.(tenant.id) ?? new URL(issuerUrl).host
56
- // Mirrors the ACS URL derivation in domain/authorize.ts
57
- // (callbackHost/path/url). Source of truth is there; the
55
+ // Same derivation as domain/authorize.ts — both call
56
+ // `callbackTarget`, which is the single source of truth. The
58
57
  // metadata.test.ts anti-drift test asserts the emitted
59
58
  // entityID/ACS equal what buildAuthnRequestRedirect derives.
60
- const callbackUrl = `${new URL(issuerUrl).protocol}//${callbackHost}/cb/${methodId}`
59
+ const { url: callbackUrl } = callbackTarget({
60
+ issuerUrl,
61
+ methodId,
62
+ callbackHost: deps.callbackHostFor?.(tenant.id),
63
+ })
61
64
  const pub = await handlePublicMethodRoute(
62
65
  {
63
66
  rawRequest: c.req.raw,
@@ -122,6 +125,7 @@ export function makeMethodRouteHandler(deps: HttpDeps) {
122
125
  httpMethod,
123
126
  flowId,
124
127
  cookies,
128
+ issuerUrl: c.get("issuerUrl"),
125
129
  },
126
130
  {
127
131
  sessionStore: deps.sessionStore,
package/src/index.ts CHANGED
@@ -133,6 +133,23 @@ export type { TokenStore } from "./ports/token-store"
133
133
  */
134
134
  export { revokeAllForSubject } from "./domain/revoke"
135
135
 
136
+ /**
137
+ * Build a path-absolute URL for one of the library's own routes, carrying
138
+ * the mount prefix from `issuerUrl`.
139
+ *
140
+ * Custom methods that render their own URLs — a form `action`, say — must
141
+ * use this rather than a path-absolute literal, or the URL will 404 under
142
+ * a deployment mounted behind a proxy at a path prefix. Root-mounted
143
+ * issuers yield the literal unchanged.
144
+ *
145
+ * mountedPath(ctx.issuerUrl, `/m/${id}/send`)
146
+ * // "https://x" -> "/m/mycode/send"
147
+ * // "https://x/idp" -> "/idp/m/mycode/send"
148
+ *
149
+ * See INTEGRATION.md § 8.
150
+ */
151
+ export { mountedPath, mountPath } from "./domain/mount"
152
+
136
153
  // Phase 4 — credential + WebAuthn method factories.
137
154
  export { passwordMethod } from "./methods/password"
138
155
  export type {
@@ -31,6 +31,7 @@ import type {
31
31
  MethodContext,
32
32
  MethodResult,
33
33
  } from "../types/method"
34
+ import { mountedPath } from "../domain/mount"
34
35
  import { renderForm } from "../ui/forms"
35
36
 
36
37
  export type CodeProperties = {
@@ -120,12 +121,12 @@ export function codeMethod(
120
121
  kind,
121
122
  type: "code",
122
123
  routes: {
123
- "GET /authorize": async (_ctx) => ({
124
+ "GET /authorize": async (ctx) => ({
124
125
  kind: "challenge",
125
126
  response: htmlResponse(
126
127
  renderForm({
127
128
  title: titleRequest,
128
- action: `/m/${id}/send`,
129
+ action: mountedPath(ctx.issuerUrl, `/m/${id}/send`),
129
130
  fields: destinationField(destinationKind),
130
131
  submit: "Send code",
131
132
  }),
@@ -169,7 +170,7 @@ async function handleSend(
169
170
  response: htmlResponse(
170
171
  renderForm({
171
172
  title: titleRequest,
172
- action: `/m/${methodId}/send`,
173
+ action: mountedPath(ctx.issuerUrl, `/m/${methodId}/send`),
173
174
  fields: destinationField(destinationKind),
174
175
  submit: "Send code",
175
176
  error: "Please enter a valid destination.",
@@ -193,7 +194,7 @@ async function handleSend(
193
194
  response: htmlResponse(
194
195
  renderForm({
195
196
  title: titleVerify,
196
- action: `/m/${methodId}/verify`,
197
+ action: mountedPath(ctx.issuerUrl, `/m/${methodId}/verify`),
197
198
  fields: [
198
199
  {
199
200
  name: "code",
@@ -238,7 +239,13 @@ async function handleVerify(
238
239
  const form = await safeForm(ctx.request)
239
240
  const parsed = verifyBody.safeParse(form)
240
241
  if (!parsed.success) {
241
- return verifyError(methodId, state, titleVerify, "Please enter the code.")
242
+ return verifyError(
243
+ ctx.issuerUrl,
244
+ methodId,
245
+ state,
246
+ titleVerify,
247
+ "Please enter the code.",
248
+ )
242
249
  }
243
250
 
244
251
  const submittedHash = base64url.encode(
@@ -246,6 +253,7 @@ async function handleVerify(
246
253
  )
247
254
  if (!timingSafeEqualStr(submittedHash, state.codeHash)) {
248
255
  return verifyError(
256
+ ctx.issuerUrl,
249
257
  methodId,
250
258
  { ...state, attempts: state.attempts + 1 },
251
259
  titleVerify,
@@ -261,6 +269,7 @@ async function handleVerify(
261
269
  }
262
270
 
263
271
  function verifyError(
272
+ issuerUrl: string,
264
273
  methodId: string,
265
274
  next: CodeState,
266
275
  titleVerify: string,
@@ -271,7 +280,7 @@ function verifyError(
271
280
  response: htmlResponse(
272
281
  renderForm({
273
282
  title: titleVerify,
274
- action: `/m/${methodId}/verify`,
283
+ action: mountedPath(issuerUrl, `/m/${methodId}/verify`),
275
284
  fields: [
276
285
  {
277
286
  name: "code",
@@ -37,6 +37,7 @@ import { createRemoteJWKSet, jwtVerify } from "jose"
37
37
  */
38
38
  type IdTokenClaims = Record<string, unknown>
39
39
 
40
+ import { mountedPath } from "../domain/mount"
40
41
  import { authError } from "../types/error"
41
42
  import type { AuthMethod, MethodContext, MethodResult } from "../types/method"
42
43
  import type { MethodType } from "../types/tenant"
@@ -212,7 +213,11 @@ async function exchangeAndSucceed(
212
213
  error: authError.internalError("flow missing on callback"),
213
214
  }
214
215
  }
215
- const callbackUrl = `${new URL(ctx.request.url).protocol}//${ctx.flow.callbackHost}${ctx.flow.callbackPath}`
216
+ // The `redirect_uri` on the token exchange must be byte-identical to the
217
+ // one sent on the authorize redirect (OAuth 2.1 §4.1.3). `flow.callbackPath`
218
+ // is the *inbound* route, which a path-mounted proxy has stripped the mount
219
+ // prefix from, so re-apply it here rather than replaying the stored path.
220
+ const callbackUrl = `${new URL(ctx.request.url).protocol}//${ctx.flow.callbackHost}${mountedPath(ctx.issuerUrl, ctx.flow.callbackPath)}`
216
221
 
217
222
  const body = new URLSearchParams({
218
223
  grant_type: "authorization_code",
@@ -32,6 +32,7 @@ import type {
32
32
  MethodContext,
33
33
  MethodResult,
34
34
  } from "../types/method"
35
+ import { mountedPath } from "../domain/mount"
35
36
  import { renderForm } from "../ui/forms"
36
37
 
37
38
  export type PasskeyProperties = {
@@ -146,12 +147,15 @@ export function passkeyMethod(
146
147
  kind,
147
148
  type: "passkey",
148
149
  routes: {
149
- "GET /authorize": async () => ({
150
+ "GET /authorize": async (ctx) => ({
150
151
  kind: "challenge",
151
152
  response: htmlResponse(
152
153
  renderForm({
153
154
  title: settings.title,
154
- action: `/m/${id}/authenticate-options`,
155
+ action: mountedPath(
156
+ ctx.issuerUrl,
157
+ `/m/${id}/authenticate-options`,
158
+ ),
155
159
  fields: [
156
160
  {
157
161
  name: "username",