@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.
- package/README.md +157 -25
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapter/hono/hono-request.adapter.d.ts +3 -1
- package/dist/adapter/hono/hono-request.adapter.d.ts.map +1 -1
- package/dist/adapter/hono/hono-request.adapter.js +4 -2
- package/dist/adapter/hono/hono-request.adapter.js.map +1 -1
- package/dist/adapter/hono/hono.server.d.ts.map +1 -1
- package/dist/adapter/hono/hono.server.js +3 -1
- package/dist/adapter/hono/hono.server.js.map +1 -1
- package/dist/decorator/authorize-scope.decorator.js +2 -2
- package/dist/decorator/authorize-scope.decorator.js.map +1 -1
- package/dist/decorator/controller.decorator.d.ts +1 -0
- package/dist/decorator/controller.decorator.d.ts.map +1 -1
- package/dist/decorator/controller.decorator.js +2 -1
- package/dist/decorator/controller.decorator.js.map +1 -1
- package/dist/decorator/method.decorators.d.ts +1 -0
- package/dist/decorator/method.decorators.d.ts.map +1 -1
- package/dist/decorator/method.decorators.js +1 -0
- package/dist/decorator/method.decorators.js.map +1 -1
- package/dist/decorator/route.metadata.d.ts +10 -1
- package/dist/decorator/route.metadata.d.ts.map +1 -1
- package/dist/decorator/route.metadata.js +68 -31
- package/dist/decorator/route.metadata.js.map +1 -1
- package/dist/decorator/validate-request.decorator.js +2 -2
- package/dist/decorator/validate-request.decorator.js.map +1 -1
- package/dist/request/default.deserializer.d.ts +20 -0
- package/dist/request/default.deserializer.d.ts.map +1 -0
- package/dist/request/default.deserializer.js +22 -0
- package/dist/request/default.deserializer.js.map +1 -0
- package/dist/request/http-attributes.d.ts +6 -0
- package/dist/request/http-attributes.d.ts.map +1 -1
- package/dist/request/http-attributes.js +6 -0
- package/dist/request/http-attributes.js.map +1 -1
- package/dist/request/index.d.ts +2 -0
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +1 -0
- package/dist/request/index.js.map +1 -1
- package/dist/request/request-deserializer.interface.d.ts +4 -0
- package/dist/request/request-deserializer.interface.d.ts.map +1 -0
- package/dist/request/request-deserializer.interface.js +2 -0
- package/dist/request/request-deserializer.interface.js.map +1 -0
- package/dist/router/auth-middleware-stack.type.d.ts +21 -5
- package/dist/router/auth-middleware-stack.type.d.ts.map +1 -1
- package/dist/router/http-module-meta.type.d.ts +5 -0
- package/dist/router/http-module-meta.type.d.ts.map +1 -1
- package/dist/router/normalized-route.type.d.ts +6 -1
- package/dist/router/normalized-route.type.d.ts.map +1 -1
- package/dist/router/router-options.type.d.ts +28 -8
- package/dist/router/router-options.type.d.ts.map +1 -1
- package/dist/router/router.d.ts +2 -2
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +92 -16
- package/dist/router/router.js.map +1 -1
- package/dist/server/http-conventions.type.d.ts +2 -0
- package/dist/server/http-conventions.type.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -15,23 +15,43 @@ export type RouterExecutionContextOptions = {
|
|
|
15
15
|
/** Header name to read the inbound correlation id from. Default: `x-correlation-id`. */
|
|
16
16
|
readonly correlationIdHeader?: string;
|
|
17
17
|
};
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* `S` is inferred from the keys of `authStacks`, which constrains
|
|
20
|
+
* `defaultAuthStack` to a declared name. Route-, controller-, and module-level
|
|
21
|
+
* `authStack` cannot be typed this way — decorators and module metadata are
|
|
22
|
+
* evaluated independently of Router construction — so those are validated at
|
|
23
|
+
* construction instead.
|
|
24
|
+
*
|
|
25
|
+
* Defaults to `string`, not `never`: inference from an inline `authStacks`
|
|
26
|
+
* literal still narrows `S` to the declared keys, while a consumer who names
|
|
27
|
+
* the type (`const options: RouterOptions = ...`) degrades to "any name"
|
|
28
|
+
* rather than "no name is valid".
|
|
29
|
+
*/
|
|
30
|
+
export type RouterOptions<S extends string = string> = {
|
|
19
31
|
readonly controllers?: readonly (object | ControllerRegistration)[];
|
|
20
32
|
readonly modules?: readonly Component<HttpModuleMeta>[];
|
|
21
33
|
/**
|
|
22
34
|
* Optional — when provided, Router installs a system-owned bootstrap that
|
|
23
|
-
* runs on every route. Required iff `
|
|
24
|
-
*
|
|
25
|
-
*
|
|
35
|
+
* runs on every route. Required iff `authStacks` is set (Router throws at
|
|
36
|
+
* construction otherwise). Handlers that never read `ExecutionContext` can
|
|
37
|
+
* skip this.
|
|
26
38
|
*/
|
|
27
39
|
readonly executionContext?: RouterExecutionContextOptions;
|
|
28
40
|
/** Custom middlewares that run on every route after the system bootstrap. */
|
|
29
41
|
readonly globalMiddlewares?: readonly HttpMiddleware[];
|
|
30
42
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
43
|
+
* Named, phase-ordered auth stacks. A route resolves to exactly one stack,
|
|
44
|
+
* which runs only when the route is non-public, after `globalMiddlewares`.
|
|
45
|
+
*
|
|
46
|
+
* Omit entirely for a service with no authentication. An empty record throws
|
|
47
|
+
* at construction — it would leave every non-public route unauthenticated
|
|
48
|
+
* while looking configured.
|
|
49
|
+
*/
|
|
50
|
+
readonly authStacks?: Readonly<Record<S, AuthMiddlewareStack>>;
|
|
51
|
+
/**
|
|
52
|
+
* Stack applied to routes that declare none. Required whenever `authStacks`
|
|
53
|
+
* is present, and constrained to its keys.
|
|
34
54
|
*/
|
|
35
|
-
readonly
|
|
55
|
+
readonly defaultAuthStack?: NoInfer<S>;
|
|
36
56
|
};
|
|
37
57
|
//# sourceMappingURL=router-options.type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-options.type.d.ts","sourceRoot":"","sources":["../../src/router/router-options.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;
|
|
1
|
+
{"version":3,"file":"router-options.type.d.ts","sourceRoot":"","sources":["../../src/router/router-options.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;IAExD;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IAE1D,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAEvD;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC"}
|
package/dist/router/router.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { ExecutionContextProvider } from '@quilla-be-kit/execution-context';
|
|
2
2
|
import type { NormalizedRoute } from './normalized-route.type.js';
|
|
3
3
|
import type { RouterOptions } from './router-options.type.js';
|
|
4
|
-
export declare class Router {
|
|
4
|
+
export declare class Router<S extends string = string> {
|
|
5
5
|
private readonly routes;
|
|
6
6
|
private readonly executionContextProvider;
|
|
7
|
-
constructor(options: RouterOptions);
|
|
7
|
+
constructor(options: RouterOptions<S>);
|
|
8
8
|
getRoutes(): readonly NormalizedRoute[];
|
|
9
9
|
getExecutionContextProvider(): ExecutionContextProvider | undefined;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAcjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAiC,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAS7F,qBAAa,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuC;gBAEpE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAoErC,SAAS,IAAI,SAAS,eAAe,EAAE;IAIvC,2BAA2B,IAAI,wBAAwB,GAAG,SAAS;CAGpE"}
|
package/dist/router/router.js
CHANGED
|
@@ -1,23 +1,36 @@
|
|
|
1
|
-
import { getControllerPrefix, getControllerRoutes, getControllerVersion, } from '../decorator/route.metadata.js';
|
|
1
|
+
import { getControllerAuthStack, getControllerPrefix, getControllerRoutes, getControllerVersion, } from '../decorator/route.metadata.js';
|
|
2
|
+
import { HttpAttributes } from '../request/http-attributes.js';
|
|
2
3
|
export class Router {
|
|
3
4
|
routes;
|
|
4
5
|
executionContextProvider;
|
|
5
6
|
constructor(options) {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
const { authStacks, defaultAuthStack } = options;
|
|
8
|
+
const authChains = buildAuthChains(authStacks);
|
|
9
|
+
const declared = declaredList(authChains);
|
|
10
|
+
if (authStacks && authChains.size === 0) {
|
|
11
|
+
throw new Error('Router: `authStacks` is empty — every non-public route would run unauthenticated. Omit the option entirely for a service with no authentication.');
|
|
12
|
+
}
|
|
13
|
+
if (authChains.size > 0 && !options.executionContext) {
|
|
14
|
+
throw new Error('Router: `authStacks` requires `executionContext` — auth middlewares depend on an active ExecutionContext scope. Wire `{ provider }` on the `executionContext` option.');
|
|
15
|
+
}
|
|
16
|
+
if (authChains.size > 0 && defaultAuthStack === undefined) {
|
|
17
|
+
throw new Error(`Router: \`defaultAuthStack\` is required when \`authStacks\` is declared (declared: ${declared}). Name the stack routes fall back to.`);
|
|
18
|
+
}
|
|
19
|
+
if (defaultAuthStack !== undefined && !authChains.has(defaultAuthStack)) {
|
|
20
|
+
throw new Error(`Router: \`defaultAuthStack: "${defaultAuthStack}"\` is not a declared stack — declared: ${declared}`);
|
|
8
21
|
}
|
|
9
22
|
this.executionContextProvider = options.executionContext?.provider;
|
|
10
23
|
const systemMiddleware = options.executionContext
|
|
11
24
|
? buildExecutionContextMiddleware(options.executionContext)
|
|
12
25
|
: undefined;
|
|
13
26
|
const globalMiddlewares = options.globalMiddlewares ?? [];
|
|
14
|
-
const authChain = flattenAuthStack(options.authMiddlewares);
|
|
15
27
|
const registrations = [];
|
|
16
28
|
for (const raw of options.controllers ?? []) {
|
|
17
29
|
registrations.push({
|
|
18
30
|
...normalizeRegistration(raw),
|
|
19
31
|
modulePrefix: '',
|
|
20
32
|
moduleVersion: undefined,
|
|
33
|
+
moduleAuthStack: undefined,
|
|
21
34
|
moduleMiddlewares: [],
|
|
22
35
|
});
|
|
23
36
|
}
|
|
@@ -30,14 +43,18 @@ export class Router {
|
|
|
30
43
|
...normalizeRegistration(raw),
|
|
31
44
|
modulePrefix: meta.prefix ?? '',
|
|
32
45
|
moduleVersion: meta.version,
|
|
46
|
+
moduleAuthStack: meta.authStack,
|
|
33
47
|
moduleMiddlewares: meta.middlewares ?? [],
|
|
34
48
|
});
|
|
35
49
|
}
|
|
36
50
|
}
|
|
51
|
+
assertDeclaredStacks(registrations, authChains, declared);
|
|
37
52
|
this.routes = buildRoutes(registrations, {
|
|
38
53
|
systemMiddleware,
|
|
39
54
|
globalMiddlewares,
|
|
40
|
-
|
|
55
|
+
authChains,
|
|
56
|
+
declared,
|
|
57
|
+
defaultAuthStack,
|
|
41
58
|
});
|
|
42
59
|
}
|
|
43
60
|
getRoutes() {
|
|
@@ -56,42 +73,98 @@ function buildExecutionContextMiddleware(options) {
|
|
|
56
73
|
await provider.runWithContext(ctx, next);
|
|
57
74
|
};
|
|
58
75
|
}
|
|
59
|
-
function
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
function buildAuthChains(stacks) {
|
|
77
|
+
const chains = new Map();
|
|
78
|
+
if (!stacks)
|
|
79
|
+
return chains;
|
|
80
|
+
for (const [name, stack] of Object.entries(stacks)) {
|
|
81
|
+
if (!stack)
|
|
82
|
+
continue;
|
|
83
|
+
// Records the stack that authenticated the request, so guards can assert
|
|
84
|
+
// scheme identity — `scopes` are one flat namespace shared across stacks.
|
|
85
|
+
const stamp = async (request, next) => {
|
|
86
|
+
request.setAttribute(HttpAttributes.AUTH_STACK, name);
|
|
87
|
+
await next();
|
|
88
|
+
};
|
|
89
|
+
const chain = [stamp, stack.credentialVerification];
|
|
90
|
+
if (stack.sessionLoad)
|
|
91
|
+
chain.push(stack.sessionLoad);
|
|
92
|
+
chains.set(name, chain);
|
|
93
|
+
}
|
|
94
|
+
return chains;
|
|
95
|
+
}
|
|
96
|
+
function declaredList(authChains) {
|
|
97
|
+
return [...authChains.keys()].join(', ') || '(none)';
|
|
98
|
+
}
|
|
99
|
+
// Runs before route building so a stack typo is never masked by a duplicate-path
|
|
100
|
+
// collision on the same controller.
|
|
101
|
+
function assertDeclaredStacks(registrations, authChains, declared) {
|
|
102
|
+
const violations = [];
|
|
103
|
+
for (const reg of registrations) {
|
|
104
|
+
const controllerName = reg.controller.constructor.name;
|
|
105
|
+
const controllerStack = getControllerAuthStack(reg.controller);
|
|
106
|
+
if (controllerStack !== undefined && !authChains.has(controllerStack)) {
|
|
107
|
+
violations.push(` @Controller on "${controllerName}" declares unknown auth stack "${controllerStack}"`);
|
|
108
|
+
}
|
|
109
|
+
if (reg.moduleAuthStack !== undefined && !authChains.has(reg.moduleAuthStack)) {
|
|
110
|
+
violations.push(` module registering "${controllerName}" declares unknown auth stack "${reg.moduleAuthStack}"`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (violations.length > 0) {
|
|
114
|
+
throw new Error(`Router: unknown auth stack(s) — declared stacks: ${declared}\n${violations.join('\n')}`);
|
|
115
|
+
}
|
|
65
116
|
}
|
|
66
117
|
function buildRoutes(registrations, chain) {
|
|
67
118
|
const normalized = [];
|
|
68
119
|
const seen = new Map();
|
|
120
|
+
const stackViolations = [];
|
|
69
121
|
for (const reg of registrations) {
|
|
70
122
|
const controllerPrefix = getControllerPrefix(reg.controller);
|
|
71
123
|
const controllerVersion = getControllerVersion(reg.controller);
|
|
124
|
+
const controllerAuthStack = getControllerAuthStack(reg.controller);
|
|
72
125
|
const controllerName = reg.controller.constructor.name;
|
|
73
126
|
const routeDefs = getControllerRoutes(reg.controller);
|
|
74
127
|
for (const def of routeDefs) {
|
|
75
128
|
const effectiveVersion = def.version ?? controllerVersion ?? reg.moduleVersion ?? '';
|
|
76
129
|
const fullPath = joinPath(reg.modulePrefix, effectiveVersion, reg.prefix ?? '', controllerPrefix, def.path);
|
|
130
|
+
const site = `${controllerName}.${def.handlerMethodName}`;
|
|
77
131
|
const key = `${def.httpMethod} ${fullPath}`;
|
|
78
132
|
const existing = seen.get(key);
|
|
79
133
|
if (existing) {
|
|
80
|
-
throw new Error(`Duplicate route: ${key} declared in both "${existing}" and "${
|
|
134
|
+
throw new Error(`Duplicate route: ${key} declared in both "${existing}" and "${site}"`);
|
|
81
135
|
}
|
|
82
|
-
seen.set(key,
|
|
136
|
+
seen.set(key, site);
|
|
137
|
+
if (def.public && def.authStack !== undefined) {
|
|
138
|
+
stackViolations.push(` "${site}" is a *Public route but declares \`authStack: "${def.authStack}"\` — public routes skip the auth phase, so the stack would never run`);
|
|
139
|
+
}
|
|
140
|
+
const resolvedAuthStack = def.public
|
|
141
|
+
? undefined
|
|
142
|
+
: (def.authStack ?? controllerAuthStack ?? reg.moduleAuthStack ?? chain.defaultAuthStack);
|
|
143
|
+
// The lookup IS the guard — no `?? []` fallback anywhere near the auth
|
|
144
|
+
// segment, so an unresolvable stack can never degrade to "no auth".
|
|
145
|
+
let authChain = [];
|
|
146
|
+
if (resolvedAuthStack !== undefined) {
|
|
147
|
+
const resolved = chain.authChains.get(resolvedAuthStack);
|
|
148
|
+
if (!resolved) {
|
|
149
|
+
stackViolations.push(` "${site}" resolves to unknown auth stack "${resolvedAuthStack}"`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
authChain = resolved;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// `authChain` is already empty on public routes — `resolvedAuthStack` is
|
|
156
|
+
// undefined there — so this needs no second public check.
|
|
83
157
|
const registrationMiddlewares = reg.middlewares ?? [];
|
|
84
158
|
const middlewareChain = [];
|
|
85
159
|
if (chain.systemMiddleware)
|
|
86
160
|
middlewareChain.push(chain.systemMiddleware);
|
|
87
|
-
middlewareChain.push(...chain.globalMiddlewares);
|
|
88
|
-
if (!def.public)
|
|
89
|
-
middlewareChain.push(...chain.authChain);
|
|
161
|
+
middlewareChain.push(...chain.globalMiddlewares, ...authChain);
|
|
90
162
|
middlewareChain.push(...reg.moduleMiddlewares, ...registrationMiddlewares);
|
|
91
163
|
normalized.push({
|
|
92
164
|
httpMethod: def.httpMethod,
|
|
93
165
|
fullPath,
|
|
94
166
|
public: def.public,
|
|
167
|
+
authStack: resolvedAuthStack,
|
|
95
168
|
middlewareChain,
|
|
96
169
|
handler: buildHandler(reg.controller, def),
|
|
97
170
|
handlerMethodName: def.handlerMethodName,
|
|
@@ -100,6 +173,9 @@ function buildRoutes(registrations, chain) {
|
|
|
100
173
|
});
|
|
101
174
|
}
|
|
102
175
|
}
|
|
176
|
+
if (stackViolations.length > 0) {
|
|
177
|
+
throw new Error(`Router: invalid auth stack selection — declared stacks: ${chain.declared}\n${stackViolations.join('\n')}`);
|
|
178
|
+
}
|
|
103
179
|
return normalized.sort(compareBySpecificity);
|
|
104
180
|
}
|
|
105
181
|
function normalizeRegistration(raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ErrorResolver } from '../error/error-resolver.interface.js';
|
|
2
|
+
import type { RequestDeserializer } from '../request/request-deserializer.interface.js';
|
|
2
3
|
import type { ResponseSerializer } from '../request/response-serializer.interface.js';
|
|
3
4
|
export type HttpConventions = {
|
|
4
5
|
readonly errorResolver?: ErrorResolver;
|
|
5
6
|
readonly responseSerializer?: ResponseSerializer;
|
|
7
|
+
readonly requestDeserializer?: RequestDeserializer;
|
|
6
8
|
};
|
|
7
9
|
//# sourceMappingURL=http-conventions.type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-conventions.type.d.ts","sourceRoot":"","sources":["../../src/server/http-conventions.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEtF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"http-conventions.type.d.ts","sourceRoot":"","sources":["../../src/server/http-conventions.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEtF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CACpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quilla-be-kit/http",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Framework-agnostic HTTP layer: decorators (@Controller/@Get/@Post/.../@AuthorizeScope/@ValidateRequest), framework-agnostic router, WebServer interface, and a Hono adapter sub-path.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Max Martinez",
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
"provenance": true
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@quilla-be-kit/errors": "^0.2.1",
|
|
59
58
|
"@quilla-be-kit/execution-context": "^0.2.2",
|
|
60
59
|
"@quilla-be-kit/observability": "^0.2.2",
|
|
60
|
+
"@quilla-be-kit/errors": "^0.2.1",
|
|
61
61
|
"@quilla-be-kit/runtime": "^0.2.2"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|