@quilla-be-kit/http 0.6.0 → 0.8.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 (56) hide show
  1. package/README.md +157 -25
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/adapter/hono/hono-request.adapter.d.ts +3 -1
  4. package/dist/adapter/hono/hono-request.adapter.d.ts.map +1 -1
  5. package/dist/adapter/hono/hono-request.adapter.js +4 -2
  6. package/dist/adapter/hono/hono-request.adapter.js.map +1 -1
  7. package/dist/adapter/hono/hono.server.d.ts.map +1 -1
  8. package/dist/adapter/hono/hono.server.js +3 -1
  9. package/dist/adapter/hono/hono.server.js.map +1 -1
  10. package/dist/decorator/authorize-scope.decorator.js +2 -2
  11. package/dist/decorator/authorize-scope.decorator.js.map +1 -1
  12. package/dist/decorator/controller.decorator.d.ts +1 -0
  13. package/dist/decorator/controller.decorator.d.ts.map +1 -1
  14. package/dist/decorator/controller.decorator.js +2 -1
  15. package/dist/decorator/controller.decorator.js.map +1 -1
  16. package/dist/decorator/method.decorators.d.ts +1 -0
  17. package/dist/decorator/method.decorators.d.ts.map +1 -1
  18. package/dist/decorator/method.decorators.js +1 -0
  19. package/dist/decorator/method.decorators.js.map +1 -1
  20. package/dist/decorator/route.metadata.d.ts +10 -1
  21. package/dist/decorator/route.metadata.d.ts.map +1 -1
  22. package/dist/decorator/route.metadata.js +68 -31
  23. package/dist/decorator/route.metadata.js.map +1 -1
  24. package/dist/decorator/validate-request.decorator.js +2 -2
  25. package/dist/decorator/validate-request.decorator.js.map +1 -1
  26. package/dist/request/default.deserializer.d.ts +20 -0
  27. package/dist/request/default.deserializer.d.ts.map +1 -0
  28. package/dist/request/default.deserializer.js +22 -0
  29. package/dist/request/default.deserializer.js.map +1 -0
  30. package/dist/request/http-attributes.d.ts +6 -0
  31. package/dist/request/http-attributes.d.ts.map +1 -1
  32. package/dist/request/http-attributes.js +6 -0
  33. package/dist/request/http-attributes.js.map +1 -1
  34. package/dist/request/index.d.ts +2 -0
  35. package/dist/request/index.d.ts.map +1 -1
  36. package/dist/request/index.js +1 -0
  37. package/dist/request/index.js.map +1 -1
  38. package/dist/request/request-deserializer.interface.d.ts +4 -0
  39. package/dist/request/request-deserializer.interface.d.ts.map +1 -0
  40. package/dist/request/request-deserializer.interface.js +2 -0
  41. package/dist/request/request-deserializer.interface.js.map +1 -0
  42. package/dist/router/auth-middleware-stack.type.d.ts +21 -5
  43. package/dist/router/auth-middleware-stack.type.d.ts.map +1 -1
  44. package/dist/router/http-module-meta.type.d.ts +5 -0
  45. package/dist/router/http-module-meta.type.d.ts.map +1 -1
  46. package/dist/router/normalized-route.type.d.ts +6 -1
  47. package/dist/router/normalized-route.type.d.ts.map +1 -1
  48. package/dist/router/router-options.type.d.ts +28 -8
  49. package/dist/router/router-options.type.d.ts.map +1 -1
  50. package/dist/router/router.d.ts +2 -2
  51. package/dist/router/router.d.ts.map +1 -1
  52. package/dist/router/router.js +92 -16
  53. package/dist/router/router.js.map +1 -1
  54. package/dist/server/http-conventions.type.d.ts +2 -0
  55. package/dist/server/http-conventions.type.d.ts.map +1 -1
  56. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hono.server.d.ts","sourceRoot":"","sources":["../../../src/adapter/hono/hono.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAKvF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;CACxC,CAAC;AAEF,qBAAa,UAAW,YAAW,SAAS;IAQ9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA8B;gBAEf,OAAO,EAAE,iBAAiB;IAWvD,SAAS,IAAI,IAAI;IAsCX,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"hono.server.d.ts","sourceRoot":"","sources":["../../../src/adapter/hono/hono.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAKvF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;CACxC,CAAC;AAEF,qBAAa,UAAW,YAAW,SAAS;IAQ9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA8B;gBAEf,OAAO,EAAE,iBAAiB;IAcvD,SAAS,IAAI,IAAI;IAsCX,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,6 +1,7 @@
1
1
  import { Hono } from 'hono';
2
2
  import { cors } from 'hono/cors';
3
3
  import { DefaultErrorResolver } from '../../error/default.resolver.js';
4
+ import { DefaultRequestDeserializer } from '../../request/default.deserializer.js';
4
5
  import { DefaultResponseSerializer } from '../../request/default.serializer.js';
5
6
  import { HttpAttributes } from '../../request/http-attributes.js';
6
7
  import { getRequestAttributes } from './get-request-attributes.js';
@@ -18,7 +19,8 @@ export class HonoServer {
18
19
  this.options = options;
19
20
  this.errorResolver = options.conventions?.errorResolver ?? new DefaultErrorResolver();
20
21
  const responseSerializer = options.conventions?.responseSerializer ?? new DefaultResponseSerializer();
21
- this.requestAdapter = new HonoRequestAdapter(options.router.getExecutionContextProvider(), responseSerializer);
22
+ const requestDeserializer = options.conventions?.requestDeserializer ?? new DefaultRequestDeserializer();
23
+ this.requestAdapter = new HonoRequestAdapter(options.router.getExecutionContextProvider(), responseSerializer, requestDeserializer);
22
24
  this.middlewareAdapter = new HonoMiddlewareAdapter(this.requestAdapter);
23
25
  }
24
26
  bootstrap() {
@@ -1 +1 @@
1
- {"version":3,"file":"hono.server.js","sourceRoot":"","sources":["../../../src/adapter/hono/hono.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hono.server.js","sourceRoot":"","sources":["../../../src/adapter/hono/hono.server.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { ForbiddenError } from '@quilla-be-kit/errors';
2
2
  import { HttpAttributes } from '../request/http-attributes.js';
3
- import { updateLastRoute } from './route.metadata.js';
3
+ import { addRoutePatch } from './route.metadata.js';
4
4
  export function AuthorizeScope(scopes, mode = 'any') {
5
5
  return (originalMethod, context) => {
6
6
  if (context.kind !== 'method') {
7
7
  throw new Error('@AuthorizeScope can only be applied to methods');
8
8
  }
9
9
  const required = Array.isArray(scopes) ? scopes : [scopes];
10
- updateLastRoute(context.metadata, context.name, {
10
+ addRoutePatch(context.metadata, context.name, {
11
11
  scopes: required,
12
12
  scopeMode: mode,
13
13
  });
@@ -1 +1 @@
1
- {"version":3,"file":"authorize-scope.decorator.js","sourceRoot":"","sources":["../../src/decorator/authorize-scope.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,UAAU,cAAc,CAAC,MAAkC,EAAE,OAAsB,KAAK;IAC5F,OAAO,CACL,cAAgC,EAChC,OAAoC,EAClB,EAAE;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAgB,CAAC,CAAC;QAErE,eAAe,CAAC,OAAO,CAAC,QAA4C,EAAE,OAAO,CAAC,IAAc,EAAE;YAC5F,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,UAAyB,OAAoB;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAqB,cAAc,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GACZ,IAAI,KAAK,KAAK;gBACZ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"authorize-scope.decorator.js","sourceRoot":"","sources":["../../src/decorator/authorize-scope.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,UAAU,cAAc,CAAC,MAAkC,EAAE,OAAsB,KAAK;IAC5F,OAAO,CACL,cAAgC,EAChC,OAAoC,EAClB,EAAE;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAgB,CAAC,CAAC;QAErE,aAAa,CAAC,OAAO,CAAC,QAA4C,EAAE,OAAO,CAAC,IAAc,EAAE;YAC1F,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,UAAyB,OAAoB;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAqB,cAAc,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GACZ,IAAI,KAAK,KAAK;gBACZ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export type ControllerOptions = {
2
2
  readonly version?: string;
3
+ readonly authStack?: string;
3
4
  };
4
5
  export declare function Controller(prefix: string, options?: ControllerOptions): (_target: unknown, context: ClassDecoratorContext) => void;
5
6
  //# sourceMappingURL=controller.decorator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.decorator.d.ts","sourceRoot":"","sources":["../../src/decorator/controller.decorator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAI9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,IAC5D,SAAS,OAAO,EAAE,SAAS,qBAAqB,KAAG,IAAI,CAKhE"}
1
+ {"version":3,"file":"controller.decorator.d.ts","sourceRoot":"","sources":["../../src/decorator/controller.decorator.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,iBAAiB,GAAG;IAI9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAK1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,IAC5D,SAAS,OAAO,EAAE,SAAS,qBAAqB,KAAG,IAAI,CAMhE"}
@@ -1,9 +1,10 @@
1
- import { setControllerPrefix, setControllerVersion } from './route.metadata.js';
1
+ import { setControllerAuthStack, setControllerPrefix, setControllerVersion, } from './route.metadata.js';
2
2
  export function Controller(prefix, options) {
3
3
  return (_target, context) => {
4
4
  const metadata = context.metadata;
5
5
  setControllerPrefix(metadata, prefix);
6
6
  setControllerVersion(metadata, options?.version);
7
+ setControllerAuthStack(metadata, options?.authStack);
7
8
  };
8
9
  }
9
10
  //# sourceMappingURL=controller.decorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.decorator.js","sourceRoot":"","sources":["../../src/decorator/controller.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAShF,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,OAA2B;IACpE,OAAO,CAAC,OAAgB,EAAE,OAA8B,EAAQ,EAAE;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA4C,CAAC;QACtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"controller.decorator.js","sourceRoot":"","sources":["../../src/decorator/controller.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAc7B,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,OAA2B;IACpE,OAAO,CAAC,OAAgB,EAAE,OAA8B,EAAQ,EAAE;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA4C,CAAC;QACtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export type RouteOptions = {
2
2
  readonly version?: string;
3
+ readonly authStack?: string;
3
4
  };
4
5
  export declare const Get: (path: string, options?: RouteOptions) => (_target: unknown, context: ClassMethodDecoratorContext) => void;
5
6
  export declare const Post: (path: string, options?: RouteOptions) => (_target: unknown, context: ClassMethodDecoratorContext) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"method.decorators.d.ts","sourceRoot":"","sources":["../../src/decorator/method.decorators.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IAIzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAmBF,eAAO,MAAM,GAAG,SAhBA,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAef,CAAC;AACvD,eAAO,MAAM,IAAI,SAjBD,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAgBb,CAAC;AACzD,eAAO,MAAM,GAAG,SAlBA,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAiBf,CAAC;AACvD,eAAO,MAAM,KAAK,SAnBF,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAkBX,CAAC;AAC3D,eAAO,MAAM,MAAM,SApBH,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAmBT,CAAC;AAE7D,eAAO,MAAM,SAAS,SAtBN,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAqBV,CAAC;AAC5D,eAAO,MAAM,UAAU,SAvBP,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAsBR,CAAC;AAC9D,eAAO,MAAM,SAAS,SAxBN,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAuBV,CAAC;AAC5D,eAAO,MAAM,WAAW,SAzBR,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAwBN,CAAC;AAChE,eAAO,MAAM,YAAY,SA1BT,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAyBJ,CAAC"}
1
+ {"version":3,"file":"method.decorators.d.ts","sourceRoot":"","sources":["../../src/decorator/method.decorators.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IAIzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAM1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAoBF,eAAO,MAAM,GAAG,SAjBA,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAgBf,CAAC;AACvD,eAAO,MAAM,IAAI,SAlBD,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAiBb,CAAC;AACzD,eAAO,MAAM,GAAG,SAnBA,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAkBf,CAAC;AACvD,eAAO,MAAM,KAAK,SApBF,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAmBX,CAAC;AAC3D,eAAO,MAAM,MAAM,SArBH,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAoBT,CAAC;AAE7D,eAAO,MAAM,SAAS,SAvBN,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAsBV,CAAC;AAC5D,eAAO,MAAM,UAAU,SAxBP,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAuBR,CAAC;AAC9D,eAAO,MAAM,SAAS,SAzBN,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAwBV,CAAC;AAC5D,eAAO,MAAM,WAAW,SA1BR,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IAyBN,CAAC;AAChE,eAAO,MAAM,YAAY,SA3BT,MAAM,YAAY,YAAY,MAClC,SAAS,OAAO,EAAE,SAAS,2BAA2B,KAAG,IA0BJ,CAAC"}
@@ -11,6 +11,7 @@ function createMethodDecorator(httpMethod, isPublic) {
11
11
  path,
12
12
  public: isPublic,
13
13
  ...(options?.version !== undefined ? { version: options.version } : {}),
14
+ ...(options?.authStack !== undefined ? { authStack: options.authStack } : {}),
14
15
  });
15
16
  };
16
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"method.decorators.js","sourceRoot":"","sources":["../../src/decorator/method.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAShE,SAAS,qBAAqB,CAAC,UAAsB,EAAE,QAAiB;IACtE,OAAO,CAAC,IAAY,EAAE,OAAsB,EAAE,EAAE;QAC9C,OAAO,CAAC,OAAgB,EAAE,OAAoC,EAAQ,EAAE;YACtE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,iCAAiC,CAAC,CAAC;YACnE,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,QAA4C,EAAE;gBAC7D,iBAAiB,EAAE,OAAO,CAAC,IAAc;gBACzC,UAAU;gBACV,IAAI;gBACJ,MAAM,EAAE,QAAQ;gBAChB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxE,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"method.decorators.js","sourceRoot":"","sources":["../../src/decorator/method.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAehE,SAAS,qBAAqB,CAAC,UAAsB,EAAE,QAAiB;IACtE,OAAO,CAAC,IAAY,EAAE,OAAsB,EAAE,EAAE;QAC9C,OAAO,CAAC,OAAgB,EAAE,OAAoC,EAAQ,EAAE;YACtE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,iCAAiC,CAAC,CAAC;YACnE,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,QAA4C,EAAE;gBAC7D,iBAAiB,EAAE,OAAO,CAAC,IAAc;gBACzC,UAAU;gBACV,IAAI;gBACJ,MAAM,EAAE,QAAQ;gBAChB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9E,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC"}
@@ -6,6 +6,7 @@ export type RouteDefinition = {
6
6
  readonly path: string;
7
7
  readonly public: boolean;
8
8
  readonly version?: string;
9
+ readonly authStack?: string;
9
10
  readonly scopes?: readonly string[];
10
11
  readonly scopeMode?: 'any' | 'all';
11
12
  readonly validation?: {
@@ -13,13 +14,21 @@ export type RouteDefinition = {
13
14
  readonly sources: readonly RequestSource[];
14
15
  };
15
16
  };
17
+ /**
18
+ * Fields a patch decorator (`@AuthorizeScope`, `@ValidateRequest`) may set.
19
+ * Narrowed deliberately: path, method, `public`, and `authStack` are decided by
20
+ * the method decorator and must not be rewritable from a patch.
21
+ */
22
+ export type RoutePatch = Pick<RouteDefinition, 'scopes' | 'scopeMode' | 'validation'>;
16
23
  type MetadataBag = Record<string | symbol, unknown>;
17
24
  export declare function setControllerPrefix(metadata: MetadataBag, prefix: string): void;
18
25
  export declare function getControllerPrefix(controllerInstance: object): string;
19
26
  export declare function setControllerVersion(metadata: MetadataBag, version: string | undefined): void;
20
27
  export declare function getControllerVersion(controllerInstance: object): string | undefined;
28
+ export declare function setControllerAuthStack(metadata: MetadataBag, authStack: string | undefined): void;
29
+ export declare function getControllerAuthStack(controllerInstance: object): string | undefined;
21
30
  export declare function addRoute(metadata: MetadataBag, route: RouteDefinition): void;
22
- export declare function updateLastRoute(metadata: MetadataBag, methodName: string, patch: Partial<RouteDefinition>): void;
31
+ export declare function addRoutePatch(metadata: MetadataBag, methodName: string, patch: RoutePatch): void;
23
32
  export declare function getControllerRoutes(controllerInstance: object): readonly RouteDefinition[];
24
33
  export {};
25
34
  //# sourceMappingURL=route.metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.metadata.d.ts","sourceRoot":"","sources":["../../src/decorator/route.metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAazE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;KAC5C,CAAC;CACH,CAAC;AAMF,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/E;AAKD,wBAAgB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG7F;AAID,wBAAgB,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAI5E;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAC9B,IAAI,CAUN;AAED,wBAAgB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAO1F"}
1
+ {"version":3,"file":"route.metadata.d.ts","sourceRoot":"","sources":["../../src/decorator/route.metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAazE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;KAC5C,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAQtF,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/E;AAkBD,wBAAgB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG7F;AAID,wBAAgB,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAGjG;AAGD,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErF;AAMD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAM5E;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAMhG;AAED,wBAAgB,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAuB1F"}
@@ -10,20 +10,30 @@ if (Symbol.metadata === undefined) {
10
10
  }
11
11
  const CONTROLLER_PREFIX_KEY = Symbol.for('quilla-be-kit.http.controller-prefix');
12
12
  const CONTROLLER_VERSION_KEY = Symbol.for('quilla-be-kit.http.controller-version');
13
+ const CONTROLLER_AUTH_STACK_KEY = Symbol.for('quilla-be-kit.http.controller-auth-stack');
13
14
  const ROUTES_KEY = Symbol.for('quilla-be-kit.http.routes');
15
+ const ROUTE_PATCHES_KEY = Symbol.for('quilla-be-kit.http.route-patches');
14
16
  export function setControllerPrefix(metadata, prefix) {
15
17
  metadata[CONTROLLER_PREFIX_KEY] = prefix;
16
18
  }
19
+ // Class-level settings OVERRIDE down the hierarchy: the nearest declaration
20
+ // wins. Read WITHOUT `Object.hasOwn`, unlike the route bag below — a subclass's
21
+ // metadata is prototype-linked to its parent's, so an undecorated subclass
22
+ // resolves the parent's value on the first walk step, which is exactly the
23
+ // child-wins-else-inherit precedence we want. Routes need the opposite
24
+ // (own-property) semantics because they ACCUMULATE rather than override.
25
+ function readInherited(controllerInstance, key) {
26
+ for (const metadata of walkMetadata(controllerInstance)) {
27
+ if (typeof metadata[key] === 'string')
28
+ return metadata[key];
29
+ }
30
+ return undefined;
31
+ }
17
32
  // Returns `''` (not `undefined`) when unset: prefixes from every level are
18
33
  // concatenated, so an absent level just contributes nothing — unlike version
19
34
  // (see getControllerVersion), where one level wins by precedence.
20
35
  export function getControllerPrefix(controllerInstance) {
21
- for (const metadata of walkMetadata(controllerInstance)) {
22
- if (typeof metadata[CONTROLLER_PREFIX_KEY] === 'string') {
23
- return metadata[CONTROLLER_PREFIX_KEY];
24
- }
25
- }
26
- return '';
36
+ return readInherited(controllerInstance, CONTROLLER_PREFIX_KEY) ?? '';
27
37
  }
28
38
  export function setControllerVersion(metadata, version) {
29
39
  if (version === undefined)
@@ -33,46 +43,73 @@ export function setControllerVersion(metadata, version) {
33
43
  // Returns `undefined` (not `''`) when unset so the router's nullish-coalescing
34
44
  // precedence chain (route ?? controller ?? module) falls through correctly.
35
45
  export function getControllerVersion(controllerInstance) {
36
- for (const metadata of walkMetadata(controllerInstance)) {
37
- if (typeof metadata[CONTROLLER_VERSION_KEY] === 'string') {
38
- return metadata[CONTROLLER_VERSION_KEY];
39
- }
40
- }
41
- return undefined;
46
+ return readInherited(controllerInstance, CONTROLLER_VERSION_KEY);
47
+ }
48
+ export function setControllerAuthStack(metadata, authStack) {
49
+ if (authStack === undefined)
50
+ return;
51
+ metadata[CONTROLLER_AUTH_STACK_KEY] = authStack;
42
52
  }
53
+ // Same precedence semantics as getControllerVersion.
54
+ export function getControllerAuthStack(controllerInstance) {
55
+ return readInherited(controllerInstance, CONTROLLER_AUTH_STACK_KEY);
56
+ }
57
+ // `Object.hasOwn`, not `??`: a subclass's metadata bag is prototype-linked to
58
+ // its parent's, so a bare read would resolve the parent's array and push the
59
+ // subclass's routes into it — leaking child routes onto the parent and making
60
+ // every inherited route collect twice.
43
61
  export function addRoute(metadata, route) {
44
- const existing = metadata[ROUTES_KEY] ?? [];
62
+ const existing = Object.hasOwn(metadata, ROUTES_KEY)
63
+ ? metadata[ROUTES_KEY]
64
+ : [];
45
65
  existing.push(route);
46
66
  metadata[ROUTES_KEY] = existing;
47
67
  }
48
- export function updateLastRoute(metadata, methodName, patch) {
49
- const routes = metadata[ROUTES_KEY];
50
- if (!routes)
51
- return;
52
- for (let i = routes.length - 1; i >= 0; i--) {
53
- const route = routes[i];
54
- if (route && route.handlerMethodName === methodName) {
55
- routes[i] = { ...route, ...patch };
56
- return;
57
- }
58
- }
68
+ // Patches are accumulated per class and merged at read time so decorator order
69
+ // relative to the method decorator does not matter.
70
+ export function addRoutePatch(metadata, methodName, patch) {
71
+ const bucket = Object.hasOwn(metadata, ROUTE_PATCHES_KEY)
72
+ ? metadata[ROUTE_PATCHES_KEY]
73
+ : new Map();
74
+ bucket.set(methodName, { ...bucket.get(methodName), ...patch });
75
+ metadata[ROUTE_PATCHES_KEY] = bucket;
59
76
  }
60
77
  export function getControllerRoutes(controllerInstance) {
61
78
  const collected = [];
79
+ const patches = new Map();
62
80
  for (const metadata of walkMetadata(controllerInstance)) {
63
- const routes = metadata[ROUTES_KEY];
64
- if (routes)
65
- collected.unshift(...routes);
81
+ if (Object.hasOwn(metadata, ROUTES_KEY)) {
82
+ collected.unshift(...metadata[ROUTES_KEY]);
83
+ }
84
+ if (Object.hasOwn(metadata, ROUTE_PATCHES_KEY)) {
85
+ for (const [name, patch] of metadata[ROUTE_PATCHES_KEY]) {
86
+ // walkMetadata yields child-first, so anything already collected came
87
+ // from the subclass and must win field-by-field over this parent's.
88
+ const fromSubclass = patches.get(name);
89
+ patches.set(name, { ...patch, ...fromSubclass });
90
+ }
91
+ }
66
92
  }
67
- return collected;
93
+ if (patches.size === 0)
94
+ return collected;
95
+ return collected.map((def) => {
96
+ const patch = patches.get(def.handlerMethodName);
97
+ return patch ? { ...def, ...patch } : def;
98
+ });
68
99
  }
100
+ // Yields each class's OWN metadata bag, nearest class first.
101
+ //
102
+ // `Symbol.metadata` is inherited down the static constructor chain, so a class
103
+ // with no decorators of its own exposes its parent's bag. Reading the own
104
+ // property descriptor skips those classes entirely, which makes yielding the
105
+ // same bag twice impossible by construction rather than by bookkeeping.
69
106
  function* walkMetadata(instance) {
70
107
  // biome-ignore lint/suspicious/noExplicitAny: prototype reflection is inherently untyped
71
108
  let ctor = instance.constructor;
72
109
  while (ctor && ctor !== Object) {
73
- const metadata = ctor[Symbol.metadata];
74
- if (metadata)
75
- yield metadata;
110
+ const own = Object.getOwnPropertyDescriptor(ctor, Symbol.metadata);
111
+ if (own?.value)
112
+ yield own.value;
76
113
  const proto = ctor.prototype;
77
114
  ctor = proto ? Object.getPrototypeOf(proto)?.constructor : null;
78
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.metadata.js","sourceRoot":"","sources":["../../src/decorator/route.metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.metadata.js","sourceRoot":"","sources":["../../src/decorator/route.metadata.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ValidationError } from '@quilla-be-kit/errors';
2
2
  import { HttpAttributes } from '../request/http-attributes.js';
3
- import { updateLastRoute } from './route.metadata.js';
3
+ import { addRoutePatch } from './route.metadata.js';
4
4
  const SOURCE_READERS = {
5
5
  body: (req) => {
6
6
  const body = req.getBody();
@@ -14,7 +14,7 @@ export function ValidateRequest(schema, sources) {
14
14
  if (context.kind !== 'method') {
15
15
  throw new Error('@ValidateRequest can only be applied to methods');
16
16
  }
17
- updateLastRoute(context.metadata, context.name, {
17
+ addRoutePatch(context.metadata, context.name, {
18
18
  validation: { schema, sources },
19
19
  });
20
20
  return function (request) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate-request.decorator.js","sourceRoot":"","sources":["../../src/decorator/validate-request.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,cAAc,GAAwD;IAC1E,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE;IAChC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,OAAiC;IAChF,OAAO,CACL,cAAgC,EAChC,OAAoC,EAClB,EAAE;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,eAAe,CAAC,OAAO,CAAC,QAA4C,EAAE,OAAO,CAAC,IAAc,EAAE;YAC5F,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO,UAAyB,OAAoB;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAmB,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAA4B,EAAE,CAAC;YACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,uEAAuE;YACvE,mEAAmE;YACnE,mEAAmE;YACnE,sEAAsE;YACtE,qEAAqE;YACrE,gBAAgB;YAChB,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC;gBACtD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;oBACxE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,eAAe,CAAC;oBACxB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;iBAClC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAClE,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validate-request.decorator.js","sourceRoot":"","sources":["../../src/decorator/validate-request.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,cAAc,GAAwD;IAC1E,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE;IAChC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,OAAiC;IAChF,OAAO,CACL,cAAgC,EAChC,OAAoC,EAClB,EAAE;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,aAAa,CAAC,OAAO,CAAC,QAA4C,EAAE,OAAO,CAAC,IAAc,EAAE;YAC1F,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO,UAAyB,OAAoB;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAmB,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAA4B,EAAE,CAAC;YACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,uEAAuE;YACvE,mEAAmE;YACnE,mEAAmE;YACnE,sEAAsE;YACtE,qEAAqE;YACrE,gBAAgB;YAChB,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC;gBACtD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;oBACxE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,eAAe,CAAC;oBACxB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;iBAClC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAClE,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { RequestDeserializer } from './request-deserializer.interface.js';
2
+ export type DefaultRequestDeserializerOptions = {
3
+ /**
4
+ * Rename the query keys a consumer's dialect uses onto the canonical
5
+ * `page` / `pageSize` that a list schema parses. Configured once on the
6
+ * server, so `?p=2&per_page=50` reaches every handler as `page` / `pageSize`
7
+ * without touching any DTO. `sort` is intentionally not remappable — the
8
+ * `sort` key already agrees across request and response ends.
9
+ */
10
+ readonly paginationKeys?: {
11
+ readonly page?: string;
12
+ readonly pageSize?: string;
13
+ };
14
+ };
15
+ export declare class DefaultRequestDeserializer implements RequestDeserializer {
16
+ private readonly renames;
17
+ constructor(options?: DefaultRequestDeserializerOptions);
18
+ deserializeQuery(query: Record<string, string | readonly string[]>): Record<string, string | readonly string[]>;
19
+ }
20
+ //# sourceMappingURL=default.deserializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.deserializer.d.ts","sourceRoot":"","sources":["../../src/request/default.deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH,CAAC;AAEF,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;gBAE1C,OAAO,GAAE,iCAAsC;IAQ3D,gBAAgB,CACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAQ9C"}
@@ -0,0 +1,22 @@
1
+ export class DefaultRequestDeserializer {
2
+ renames;
3
+ constructor(options = {}) {
4
+ const renames = new Map();
5
+ const { page, pageSize } = options.paginationKeys ?? {};
6
+ if (page && page !== 'page')
7
+ renames.set(page, 'page');
8
+ if (pageSize && pageSize !== 'pageSize')
9
+ renames.set(pageSize, 'pageSize');
10
+ this.renames = renames;
11
+ }
12
+ deserializeQuery(query) {
13
+ if (this.renames.size === 0)
14
+ return query;
15
+ const out = {};
16
+ for (const [key, value] of Object.entries(query)) {
17
+ out[this.renames.get(key) ?? key] = value;
18
+ }
19
+ return out;
20
+ }
21
+ }
22
+ //# sourceMappingURL=default.deserializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.deserializer.js","sourceRoot":"","sources":["../../src/request/default.deserializer.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,0BAA0B;IACpB,OAAO,CAA8B;IAEtD,YAAY,UAA6C,EAAE;QACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACxD,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,QAAQ,IAAI,QAAQ,KAAK,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,gBAAgB,CACd,KAAiD;QAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,GAAG,GAA+C,EAAE,CAAC;QAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -1,5 +1,11 @@
1
1
  export declare const HttpAttributes: {
2
2
  readonly VERIFIED_TOKEN: "verifiedToken";
3
+ /**
4
+ * Name of the auth stack that authenticated the request. Set by Router before
5
+ * the stack runs, so guards can assert *which* stack authenticated the caller
6
+ * — `scopes` share one flat namespace across stacks and cannot carry that.
7
+ */
8
+ readonly AUTH_STACK: "authStack";
3
9
  readonly VALIDATED_INPUT: "__validated_input__";
4
10
  readonly REQUEST_VALIDATOR: "__request_validator__";
5
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"http-attributes.d.ts","sourceRoot":"","sources":["../../src/request/http-attributes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;CAIjB,CAAC"}
1
+ {"version":3,"file":"http-attributes.d.ts","sourceRoot":"","sources":["../../src/request/http-attributes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;IAEzB;;;;OAIG;;;;CAIK,CAAC"}
@@ -1,5 +1,11 @@
1
1
  export const HttpAttributes = {
2
2
  VERIFIED_TOKEN: 'verifiedToken',
3
+ /**
4
+ * Name of the auth stack that authenticated the request. Set by Router before
5
+ * the stack runs, so guards can assert *which* stack authenticated the caller
6
+ * — `scopes` share one flat namespace across stacks and cannot carry that.
7
+ */
8
+ AUTH_STACK: 'authStack',
3
9
  VALIDATED_INPUT: '__validated_input__',
4
10
  REQUEST_VALIDATOR: '__request_validator__',
5
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"http-attributes.js","sourceRoot":"","sources":["../../src/request/http-attributes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;CAClC,CAAC"}
1
+ {"version":3,"file":"http-attributes.js","sourceRoot":"","sources":["../../src/request/http-attributes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,eAAe;IAC/B;;;;OAIG;IACH,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;CAClC,CAAC"}
@@ -5,4 +5,6 @@ export type { AuthenticatedToken } from './authenticated-token.interface.js';
5
5
  export { HttpAttributes } from './http-attributes.js';
6
6
  export type { ResponseSerializer } from './response-serializer.interface.js';
7
7
  export { DefaultResponseSerializer } from './default.serializer.js';
8
+ export type { RequestDeserializer } from './request-deserializer.interface.js';
9
+ export { DefaultRequestDeserializer, type DefaultRequestDeserializerOptions, } from './default.deserializer.js';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,2BAA2B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { HttpAttributes } from './http-attributes.js';
2
2
  export { DefaultResponseSerializer } from './default.serializer.js';
3
+ export { DefaultRequestDeserializer, } from './default.deserializer.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EACL,0BAA0B,GAE3B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface RequestDeserializer {
2
+ deserializeQuery(query: Record<string, string | readonly string[]>): Record<string, string | readonly string[]>;
3
+ }
4
+ //# sourceMappingURL=request-deserializer.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-deserializer.interface.d.ts","sourceRoot":"","sources":["../../src/request/request-deserializer.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAKlC,gBAAgB,CACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;CAC/C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request-deserializer.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-deserializer.interface.js","sourceRoot":"","sources":["../../src/request/request-deserializer.interface.ts"],"names":[],"mappings":""}
@@ -1,13 +1,29 @@
1
1
  import type { HttpMiddleware } from '../request/http-middleware.type.js';
2
2
  /**
3
- * Router runs phases in fixed order regardless of key declaration —
4
- * `tokenVerification` first, then `sessionLoad` if present. Phase
5
- * misordering is a type error, not a runtime bug.
3
+ * One named authentication stack. Router runs phases in fixed order regardless
4
+ * of key declaration — `credentialVerification` first, then `sessionLoad` if
5
+ * present. Phase misordering is a type error, not a runtime bug.
6
+ *
7
+ * The phase is named for the credential rather than the token because a stack
8
+ * may verify a JWT, an opaque token, an API key, or a client certificate. The
9
+ * attribute it populates keeps the `VERIFIED_TOKEN` name, which is the
10
+ * long-standing contract with `@quilla-be-kit/security`'s `Token`.
6
11
  */
7
12
  export type AuthMiddlewareStack = {
8
13
  /** Must populate `HttpAttributes.VERIFIED_TOKEN` on success. */
9
- readonly tokenVerification: HttpMiddleware;
10
- /** Optional — omit for services that verify tokens but don't load sessions. */
14
+ readonly credentialVerification: HttpMiddleware;
15
+ /**
16
+ * Optional — omit for services that verify credentials but don't load
17
+ * sessions.
18
+ *
19
+ * When present it must populate `ExecutionContext.session` (`scopeId` +
20
+ * `userId`) and set `actorType`, via a nested `runWithContext`. Downstream
21
+ * toolkit surfaces treat session presence as the single source of truth for
22
+ * auth-derived identity: `@ValidateRequest` injects `scopeId`/`userId` into
23
+ * validated input only when `session` is set, so a stack that sets
24
+ * `actorType` but omits `session` fails open — the handler runs with an
25
+ * undefined scope instead of being rejected.
26
+ */
11
27
  readonly sessionLoad?: HttpMiddleware;
12
28
  };
13
29
  //# sourceMappingURL=auth-middleware-stack.type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-middleware-stack.type.d.ts","sourceRoot":"","sources":["../../src/router/auth-middleware-stack.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;CACvC,CAAC"}
1
+ {"version":3,"file":"auth-middleware-stack.type.d.ts","sourceRoot":"","sources":["../../src/router/auth-middleware-stack.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,gEAAgE;IAChE,QAAQ,CAAC,sBAAsB,EAAE,cAAc,CAAC;IAChD;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;CACvC,CAAC"}
@@ -5,5 +5,10 @@ export type HttpModuleMeta = {
5
5
  readonly middlewares?: readonly HttpMiddleware[];
6
6
  readonly prefix?: string;
7
7
  readonly version?: string;
8
+ /**
9
+ * Module-level default auth stack, overridden by a controller- or route-level
10
+ * `authStack`. Must name a stack declared in `RouterOptions.authStacks`.
11
+ */
12
+ readonly authStack?: string;
8
13
  };
9
14
  //# sourceMappingURL=http-module-meta.type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-module-meta.type.d.ts","sourceRoot":"","sources":["../../src/router/http-module-meta.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"http-module-meta.type.d.ts","sourceRoot":"","sources":["../../src/router/http-module-meta.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC"}
@@ -6,9 +6,14 @@ export type NormalizedRoute = {
6
6
  readonly httpMethod: HttpMethod;
7
7
  readonly fullPath: string;
8
8
  readonly public: boolean;
9
+ /**
10
+ * Resolved auth stack name. `undefined` on public routes, and on every route
11
+ * when no `authStacks` are configured.
12
+ */
13
+ readonly authStack: string | undefined;
9
14
  /**
10
15
  * Complete ordered middleware chain for this route:
11
- * `[system? → globalMiddlewares → (public ? [] : authMiddlewares) → moduleMiddlewares → registrationMiddlewares]`.
16
+ * `[system? → globalMiddlewares → (public ? [] : resolved auth stack) → moduleMiddlewares → registrationMiddlewares]`.
12
17
  * Adapters iterate and wrap each entry; they do not re-compose the chain.
13
18
  */
14
19
  readonly middlewareChain: readonly HttpMiddleware[];
@@ -1 +1 @@
1
- {"version":3,"file":"normalized-route.type.d.ts","sourceRoot":"","sources":["../../src/router/normalized-route.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC"}
1
+ {"version":3,"file":"normalized-route.type.d.ts","sourceRoot":"","sources":["../../src/router/normalized-route.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC"}