@capixjs/transport-rest 0.1.0-alpha.2 → 0.1.0-alpha.22

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.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * coercion.ts — schema-aware coercion of string request values.
3
+ *
4
+ * Query strings, path params, and multipart text fields arrive as strings.
5
+ * Instead of blindly coercing anything numeric-looking (which corrupted
6
+ * string fields: ?name=123 became the number 123 and failed z.string(),
7
+ * ?code=0123 silently became 123), coercion targets are derived from each
8
+ * capability's Zod input schema at mount time. A value is coerced to
9
+ * number/boolean only when the schema types that field as number/boolean;
10
+ * everything else stays a raw string.
11
+ *
12
+ * JSON bodies are never coerced — JSON already expresses numbers and
13
+ * booleans, so a string where a number belongs is a genuine type error.
14
+ */
15
+ import type { CapabilityRegistry } from '@capixjs/core';
16
+ export type CoercionKind = 'number' | 'boolean';
17
+ /** field name → coercion target, per capability dot-path. */
18
+ export type CoercionMaps = Map<string, Map<string, CoercionKind>>;
19
+ /**
20
+ * Builds per-capability coercion maps from compiled input schemas.
21
+ * Capabilities without a ZodObject input schema (no schema, z.record, z.any)
22
+ * get no map — their string values pass through untouched.
23
+ */
24
+ export declare function buildCoercionMaps(registry: CapabilityRegistry): CoercionMaps;
25
+ /**
26
+ * Coerces a raw string toward the schema's target type. Values that don't
27
+ * parse cleanly are returned as-is so Zod reports the error on the original
28
+ * input instead of a mangled one.
29
+ */
30
+ export declare function coerceValue(raw: string, kind: CoercionKind): unknown;
31
+ /** Coerces matching string fields of obj in place. */
32
+ export declare function coerceFields(obj: Record<string, unknown>, fields: ReadonlyMap<string, CoercionKind>): void;
33
+ //# sourceMappingURL=coercion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coercion.d.ts","sourceRoot":"","sources":["../src/coercion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhD,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAqElE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY,CAkB5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CASpE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,IAAI,CAKN"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * coercion.ts — schema-aware coercion of string request values.
3
+ *
4
+ * Query strings, path params, and multipart text fields arrive as strings.
5
+ * Instead of blindly coercing anything numeric-looking (which corrupted
6
+ * string fields: ?name=123 became the number 123 and failed z.string(),
7
+ * ?code=0123 silently became 123), coercion targets are derived from each
8
+ * capability's Zod input schema at mount time. A value is coerced to
9
+ * number/boolean only when the schema types that field as number/boolean;
10
+ * everything else stays a raw string.
11
+ *
12
+ * JSON bodies are never coerced — JSON already expresses numbers and
13
+ * booleans, so a string where a number belongs is a genuine type error.
14
+ */
15
+ function defOf(schema) {
16
+ if (typeof schema !== 'object' || schema === null)
17
+ return null;
18
+ const def = schema._zod?.def;
19
+ return typeof def === 'object' && def !== null ? def : null;
20
+ }
21
+ /** Wrapper types whose inner schema determines the coercion target. */
22
+ const WRAPPERS = new Set([
23
+ 'optional',
24
+ 'nullable',
25
+ 'default',
26
+ 'prefault',
27
+ 'catch',
28
+ 'readonly',
29
+ 'nonoptional',
30
+ 'pipe', // .transform() — the input side is what the client sends
31
+ ]);
32
+ /** Unwraps optional/nullable/default/pipe layers to the underlying def. */
33
+ function unwrap(schema) {
34
+ let def = defOf(schema);
35
+ let depth = 0;
36
+ while (def !== null && def.type !== undefined && WRAPPERS.has(def.type) && depth < 16) {
37
+ def = defOf(def.innerType ?? def.in);
38
+ depth++;
39
+ }
40
+ return def;
41
+ }
42
+ function kindOf(fieldSchema) {
43
+ const def = unwrap(fieldSchema);
44
+ if (def === null)
45
+ return null;
46
+ switch (def.type) {
47
+ case 'number':
48
+ return 'number';
49
+ case 'boolean':
50
+ return 'boolean';
51
+ case 'union': {
52
+ // Coerce only when every meaningful branch agrees on one primitive kind
53
+ // (e.g. z.union([z.number(), z.null()])). A string branch means the raw
54
+ // string is already acceptable — leave it alone.
55
+ const kinds = new Set();
56
+ for (const option of def.options ?? []) {
57
+ const inner = unwrap(option);
58
+ if (inner?.type === 'null' || inner?.type === 'undefined')
59
+ continue;
60
+ kinds.add(inner?.type === 'number' ? 'number' : inner?.type === 'boolean' ? 'boolean' : null);
61
+ }
62
+ if (kinds.size === 1) {
63
+ const only = kinds.values().next().value;
64
+ return only ?? null;
65
+ }
66
+ return null;
67
+ }
68
+ default:
69
+ return null;
70
+ }
71
+ }
72
+ /**
73
+ * Builds per-capability coercion maps from compiled input schemas.
74
+ * Capabilities without a ZodObject input schema (no schema, z.record, z.any)
75
+ * get no map — their string values pass through untouched.
76
+ */
77
+ export function buildCoercionMaps(registry) {
78
+ const maps = new Map();
79
+ for (const [dotPath, cap] of registry) {
80
+ if (cap.inputSchema === null)
81
+ continue;
82
+ const def = unwrap(cap.inputSchema);
83
+ if (def?.type !== 'object')
84
+ continue;
85
+ const shape = def.shape ?? {};
86
+ const fields = new Map();
87
+ for (const [key, fieldSchema] of Object.entries(shape)) {
88
+ const kind = kindOf(fieldSchema);
89
+ if (kind !== null)
90
+ fields.set(key, kind);
91
+ }
92
+ if (fields.size > 0)
93
+ maps.set(dotPath, fields);
94
+ }
95
+ return maps;
96
+ }
97
+ /**
98
+ * Coerces a raw string toward the schema's target type. Values that don't
99
+ * parse cleanly are returned as-is so Zod reports the error on the original
100
+ * input instead of a mangled one.
101
+ */
102
+ export function coerceValue(raw, kind) {
103
+ if (kind === 'boolean') {
104
+ if (raw === 'true')
105
+ return true;
106
+ if (raw === 'false')
107
+ return false;
108
+ return raw;
109
+ }
110
+ // number — require non-blank text; Number('') and Number(' ') are 0
111
+ if (raw.trim() !== '' && !Number.isNaN(Number(raw)))
112
+ return Number(raw);
113
+ return raw;
114
+ }
115
+ /** Coerces matching string fields of obj in place. */
116
+ export function coerceFields(obj, fields) {
117
+ for (const [key, kind] of fields) {
118
+ const val = obj[key];
119
+ if (typeof val === 'string')
120
+ obj[key] = coerceValue(val, kind);
121
+ }
122
+ }
123
+ //# sourceMappingURL=coercion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coercion.js","sourceRoot":"","sources":["../src/coercion.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@ export { compileRouter, generateRoutes } from './router.js';
7
7
  export type { RouteDefinition, RouterMatch, Router, GenerateRoutesOptions, HttpOverride } from './router.js';
8
8
  export { uploadedFile } from './multipart.js';
9
9
  export type { UploadedFile, MultipartOptions } from './multipart.js';
10
+ export { generateOpenAPI } from './openapi.js';
11
+ export type { OpenAPIOptions, OpenAPIServer } from './openapi.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,5 @@
4
4
  export { restTransport } from './transport.js';
5
5
  export { compileRouter, generateRoutes } from './router.js';
6
6
  export { uploadedFile } from './multipart.js';
7
+ export { generateOpenAPI } from './openapi.js';
7
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * openapi.ts — generate an OpenAPI 3.1 document from a capability registry.
3
+ *
4
+ * Routes come from the same inference engine the REST transport uses at mount
5
+ * time (generateRoutes), so the spec always matches what the server actually
6
+ * serves — including urlCase and route overrides. Input schemas become path
7
+ * parameters, query parameters (for GET/DELETE), or a JSON request body
8
+ * (for POST/PATCH/PUT); output schemas become the `data` payload of the 200
9
+ * response, mirroring the transport's `{ "data": ... }` envelope.
10
+ *
11
+ * Use programmatically:
12
+ * import { generateOpenAPI } from '@capixjs/transport-rest';
13
+ * const spec = generateOpenAPI(registry, { title: 'My API', version: '1.0.0' });
14
+ *
15
+ * Or via the CLI:
16
+ * capix openapi --output openapi.json
17
+ */
18
+ import type { CapabilityRegistry } from '@capixjs/core';
19
+ import type { HttpOverride } from './router.js';
20
+ export type OpenAPIServer = {
21
+ readonly url: string;
22
+ readonly description?: string;
23
+ };
24
+ export type OpenAPIOptions = {
25
+ /** info.title — default 'Capix API'. */
26
+ readonly title?: string;
27
+ /** info.version — default '0.0.0'. */
28
+ readonly version?: string;
29
+ /** info.description. */
30
+ readonly description?: string;
31
+ /** servers array (e.g. [{ url: 'https://api.example.com' }]). */
32
+ readonly servers?: ReadonlyArray<OpenAPIServer>;
33
+ /** Case style for inferred URL segments — must match the restTransport option. */
34
+ readonly urlCase?: 'kebab' | 'camel' | 'snake';
35
+ /** Route overrides — must match the restTransport option for an accurate spec. */
36
+ readonly overrides?: Record<string, HttpOverride>;
37
+ };
38
+ /**
39
+ * Generates an OpenAPI 3.1 document for every capability in the registry.
40
+ *
41
+ * Pass the same `urlCase` and `overrides` you give to `restTransport` so the
42
+ * generated paths match the running server.
43
+ */
44
+ export declare function generateOpenAPI(registry: CapabilityRegistry, options?: OpenAPIOptions): Record<string, unknown>;
45
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACnD,CAAC;AAwDF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8HzB"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * openapi.ts — generate an OpenAPI 3.1 document from a capability registry.
3
+ *
4
+ * Routes come from the same inference engine the REST transport uses at mount
5
+ * time (generateRoutes), so the spec always matches what the server actually
6
+ * serves — including urlCase and route overrides. Input schemas become path
7
+ * parameters, query parameters (for GET/DELETE), or a JSON request body
8
+ * (for POST/PATCH/PUT); output schemas become the `data` payload of the 200
9
+ * response, mirroring the transport's `{ "data": ... }` envelope.
10
+ *
11
+ * Use programmatically:
12
+ * import { generateOpenAPI } from '@capixjs/transport-rest';
13
+ * const spec = generateOpenAPI(registry, { title: 'My API', version: '1.0.0' });
14
+ *
15
+ * Or via the CLI:
16
+ * capix openapi --output openapi.json
17
+ */
18
+ import { z } from 'zod';
19
+ import { generateRoutes } from './router.js';
20
+ const NO_BODY_METHODS = new Set(['GET', 'HEAD', 'DELETE']);
21
+ const ERROR_RESPONSE_SCHEMA = {
22
+ type: 'object',
23
+ properties: {
24
+ error: { type: 'string', description: 'Machine-readable error code (e.g. NotFound)' },
25
+ message: { type: 'string', description: 'Human-readable error message' },
26
+ meta: { type: 'object', additionalProperties: true, description: 'Optional error details' },
27
+ },
28
+ required: ['error', 'message'],
29
+ };
30
+ function errorRef(description) {
31
+ return {
32
+ description,
33
+ content: {
34
+ 'application/json': {
35
+ schema: { $ref: '#/components/schemas/ErrorResponse' },
36
+ },
37
+ },
38
+ };
39
+ }
40
+ /**
41
+ * Converts a Zod schema to JSON Schema; null when conversion fails.
42
+ * Targets draft 2020-12 — the dialect OpenAPI 3.1 uses natively.
43
+ * `io` picks the schema side: 'input' for request schemas (fields with
44
+ * defaults become optional), 'output' for response schemas.
45
+ */
46
+ function toJsonSchema(schema, io) {
47
+ try {
48
+ const js = z.toJSONSchema(schema, {
49
+ io,
50
+ reused: 'inline',
51
+ unrepresentable: 'any',
52
+ });
53
+ delete js['$schema'];
54
+ return js;
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ function pathParamNames(routePath) {
61
+ const names = [];
62
+ for (const seg of routePath.split('/')) {
63
+ if (seg.startsWith(':'))
64
+ names.push(seg.slice(1));
65
+ }
66
+ return names;
67
+ }
68
+ /**
69
+ * Generates an OpenAPI 3.1 document for every capability in the registry.
70
+ *
71
+ * Pass the same `urlCase` and `overrides` you give to `restTransport` so the
72
+ * generated paths match the running server.
73
+ */
74
+ export function generateOpenAPI(registry, options = {}) {
75
+ const routes = generateRoutes(registry, {
76
+ ...(options.urlCase !== undefined ? { urlCase: options.urlCase } : {}),
77
+ ...(options.overrides !== undefined ? { overrides: options.overrides } : {}),
78
+ });
79
+ const paths = {};
80
+ const tags = new Set();
81
+ for (const route of routes) {
82
+ const cap = registry.get(route.capability);
83
+ if (cap === undefined)
84
+ continue;
85
+ const openapiPath = route.path.replace(/:([^/]+)/g, '{$1}');
86
+ const params = pathParamNames(route.path);
87
+ const paramSet = new Set(params);
88
+ const inputJs = cap.inputSchema !== null ? toJsonSchema(cap.inputSchema, 'input') : null;
89
+ const properties = (inputJs?.['properties'] ?? {});
90
+ const requiredFields = new Set((inputJs?.['required'] ?? []));
91
+ // Object schemas split into parameters/body; non-object schemas (z.record,
92
+ // z.any) can't be decomposed — they become the whole request body.
93
+ const isObjectSchema = inputJs !== null && 'properties' in inputJs;
94
+ const parameters = [];
95
+ for (const name of params) {
96
+ parameters.push({
97
+ name,
98
+ in: 'path',
99
+ required: true,
100
+ schema: properties[name] ?? { type: 'string' },
101
+ });
102
+ }
103
+ let requestBody = null;
104
+ if (NO_BODY_METHODS.has(route.method)) {
105
+ // Remaining schema fields are query parameters
106
+ for (const [name, schema] of Object.entries(properties)) {
107
+ if (paramSet.has(name))
108
+ continue;
109
+ parameters.push({
110
+ name,
111
+ in: 'query',
112
+ required: requiredFields.has(name),
113
+ schema,
114
+ });
115
+ }
116
+ }
117
+ else if (isObjectSchema) {
118
+ const bodyProps = {};
119
+ const bodyRequired = [];
120
+ for (const [name, schema] of Object.entries(properties)) {
121
+ if (paramSet.has(name))
122
+ continue;
123
+ bodyProps[name] = schema;
124
+ if (requiredFields.has(name))
125
+ bodyRequired.push(name);
126
+ }
127
+ if (Object.keys(bodyProps).length > 0) {
128
+ requestBody = {
129
+ required: bodyRequired.length > 0,
130
+ content: {
131
+ 'application/json': {
132
+ schema: {
133
+ type: 'object',
134
+ properties: bodyProps,
135
+ ...(bodyRequired.length > 0 ? { required: bodyRequired } : {}),
136
+ },
137
+ },
138
+ },
139
+ };
140
+ }
141
+ }
142
+ else if (inputJs !== null) {
143
+ requestBody = {
144
+ required: true,
145
+ content: { 'application/json': { schema: inputJs } },
146
+ };
147
+ }
148
+ const outputJs = cap.outputSchema !== null ? toJsonSchema(cap.outputSchema, 'output') : null;
149
+ const responses = {
150
+ '200': {
151
+ description: 'Success',
152
+ content: {
153
+ 'application/json': {
154
+ schema: {
155
+ type: 'object',
156
+ properties: { data: outputJs ?? {} },
157
+ required: ['data'],
158
+ },
159
+ },
160
+ },
161
+ },
162
+ ...(cap.inputSchema !== null ? { '400': errorRef('Validation error') } : {}),
163
+ default: errorRef('Error'),
164
+ };
165
+ const segments = route.capability.split('.');
166
+ const group = segments.length > 1 ? segments[0] : null;
167
+ if (group !== null)
168
+ tags.add(group);
169
+ const operation = {
170
+ operationId: route.capability.replaceAll('.', '_'),
171
+ summary: route.capability,
172
+ ...(group !== null ? { tags: [group] } : {}),
173
+ ...(parameters.length > 0 ? { parameters } : {}),
174
+ ...(requestBody !== null ? { requestBody } : {}),
175
+ responses,
176
+ };
177
+ if (!(openapiPath in paths))
178
+ paths[openapiPath] = {};
179
+ paths[openapiPath][route.method.toLowerCase()] = operation;
180
+ }
181
+ return {
182
+ openapi: '3.1.0',
183
+ info: {
184
+ title: options.title ?? 'Capix API',
185
+ version: options.version ?? '0.0.0',
186
+ ...(options.description !== undefined ? { description: options.description } : {}),
187
+ },
188
+ ...(options.servers !== undefined && options.servers.length > 0
189
+ ? { servers: options.servers }
190
+ : {}),
191
+ paths,
192
+ components: { schemas: { ErrorResponse: ERROR_RESPONSE_SCHEMA } },
193
+ ...(tags.size > 0 ? { tags: [...tags].sort().map((name) => ({ name })) } : {}),
194
+ };
195
+ }
196
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
package/dist/router.d.ts CHANGED
@@ -15,6 +15,7 @@ export type RouterMatch = {
15
15
  } | {
16
16
  readonly found: false;
17
17
  readonly allowedMethods?: string[];
18
+ readonly malformed?: boolean;
18
19
  };
19
20
  export type Router = {
20
21
  match(method: string, path: string): RouterMatch;
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAGvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;CAAE,GACrG;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C,CAAC;AA0IF,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAmB/D;AA0BD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,eAAe,EAAE,CAqBnB"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAGvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;CAAE,GACrG;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhG,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C,CAAC;AA4JF,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAmB/D;AA0BD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,eAAe,EAAE,CAqBnB"}
package/dist/router.js CHANGED
@@ -2,10 +2,24 @@
2
2
  * router.ts — radix-tree router for the REST transport
3
3
  * No core dependency except types (CapabilityRegistry, AnyCapability).
4
4
  */
5
- import { inferIntent } from '@capixjs/core';
5
+ import { resolveIntent } from '@capixjs/core';
6
6
  function newNode() {
7
7
  return { handlers: new Map(), staticChildren: new Map() };
8
8
  }
9
+ /**
10
+ * decodeURIComponent that returns null instead of throwing on malformed
11
+ * percent-encoding ('%zz', truncated '%E0%A4', overlong sequences).
12
+ * A throwing decode here would escape the transport's synchronous request
13
+ * path and crash the process.
14
+ */
15
+ function safeDecode(s) {
16
+ try {
17
+ return decodeURIComponent(s);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
9
23
  /** Splits a URL path into segments in a single pass (no intermediate array from filter). */
10
24
  function splitPath(path) {
11
25
  const segments = [];
@@ -74,14 +88,18 @@ function matchRoute(root, method, segments, index, params) {
74
88
  const result = matchRoute(staticChild, method, segments, index + 1, params);
75
89
  if (result.found)
76
90
  return result;
77
- // If static matched path but not method, return that result
78
- if (!result.found && result.allowedMethods !== undefined)
91
+ // If static matched path but not method (or a deeper segment was undecodable), return that result
92
+ if (!result.found && (result.allowedMethods !== undefined || result.malformed === true))
79
93
  return result;
80
94
  }
81
95
  // Param match — look up the param name for the current method
82
96
  if (root.paramChild !== undefined) {
83
97
  // Conditional decode: skip when there are no percent-encoded chars
84
- const decoded = seg.includes('%') ? decodeURIComponent(seg) : seg;
98
+ const decoded = seg.includes('%') ? safeDecode(seg) : seg;
99
+ if (decoded === null) {
100
+ // Undecodable segment can never bind to a param — the URL itself is invalid.
101
+ return { found: false, malformed: true };
102
+ }
85
103
  const paramName = root.paramChild.methodNames.get(method) ??
86
104
  root.paramChild.methodNames.values().next().value ??
87
105
  'id';
@@ -174,8 +192,8 @@ function inferRoutes(dotPath, cap, urlCase) {
174
192
  // Group path = all segments except the last one, with case conversion applied
175
193
  const groupSegments = segments.slice(0, -1).map((s) => applyUrlCase(s, urlCase));
176
194
  const groupPath = '/' + groupSegments.join('/');
177
- // Use cap.intent when the user set it explicitly; otherwise infer from key name
178
- const intent = cap._intentExplicit ? cap.intent : inferIntent(key);
195
+ // Explicit intent wins; otherwise inferred from the key name
196
+ const intent = resolveIntent(cap, key);
179
197
  const hasIdField = cap.inputSchema
180
198
  ? 'shape' in cap.inputSchema &&
181
199
  typeof cap.inputSchema.shape === 'object' &&
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export { DEFAULT as defaultSerializer };
13
13
  /**
14
14
  * Builds per-capability serializers from compiled output schemas.
15
15
  * Falls back to JSON.stringify for capabilities without an outputSchema or
16
- * if zod-to-json-schema cannot convert the schema.
16
+ * if the schema cannot be converted to JSON Schema (e.g. contains z.date()).
17
17
  */
18
18
  export declare function buildSerializers(registry: CapabilityRegistry): Map<string, ResponseSerializer>;
19
19
  //# sourceMappingURL=serializer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE3D,QAAA,MAAM,OAAO,EAAE,kBAAsE,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAwB9F"}
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE3D,QAAA,MAAM,OAAO,EAAE,kBAAsE,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAyB9F"}
@@ -6,13 +6,13 @@
6
6
  * per-request setup cost.
7
7
  */
8
8
  import fastJsonStringify from 'fast-json-stringify';
9
- import { zodToJsonSchema } from 'zod-to-json-schema';
9
+ import { z } from 'zod';
10
10
  const DEFAULT = (data) => '{"data":' + JSON.stringify(data) + '}';
11
11
  export { DEFAULT as defaultSerializer };
12
12
  /**
13
13
  * Builds per-capability serializers from compiled output schemas.
14
14
  * Falls back to JSON.stringify for capabilities without an outputSchema or
15
- * if zod-to-json-schema cannot convert the schema.
15
+ * if the schema cannot be converted to JSON Schema (e.g. contains z.date()).
16
16
  */
17
17
  export function buildSerializers(registry) {
18
18
  const map = new Map();
@@ -20,9 +20,10 @@ export function buildSerializers(registry) {
20
20
  if (cap.outputSchema === null)
21
21
  continue;
22
22
  try {
23
- const jsonSchema = zodToJsonSchema(cap.outputSchema, {
24
- target: 'jsonSchema7',
25
- $refStrategy: 'none',
23
+ const jsonSchema = z.toJSONSchema(cap.outputSchema, {
24
+ target: 'draft-7',
25
+ io: 'output',
26
+ reused: 'inline',
26
27
  });
27
28
  // Remove the $schema meta field — fjs doesn't need it
28
29
  if (typeof jsonSchema === 'object' && jsonSchema !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,MAAM,OAAO,GAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAElD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI;YAAE,SAAS;QAExC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE;gBACnD,MAAM,EAAE,aAAa;gBACrB,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;YACH,sDAAsD;YACtD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAQ,UAAsC,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAqD,CAAC,CAAC;YAC/F,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,mGAAmG;QACrG,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,OAAO,GAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAElD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI;YAAE,SAAS;QAExC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,YAAyB,EAAE;gBAC/D,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,QAAQ;gBACZ,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,sDAAsD;YACtD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAQ,UAAsC,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAqD,CAAC,CAAC;YAC/F,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,mGAAmG;QACrG,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -54,6 +54,12 @@ export type RestTransportOptions = {
54
54
  * Use to prevent non-REST capabilities from getting HTTP endpoints.
55
55
  */
56
56
  readonly capabilities?: GroupTree;
57
+ /**
58
+ * How long unmount() waits for in-flight requests before force-closing
59
+ * their connections, in milliseconds. Idle keep-alive connections are
60
+ * dropped immediately. Default: 10_000.
61
+ */
62
+ readonly shutdownTimeoutMs?: number;
57
63
  };
58
64
  /** Creates a REST transport using node:http. */
59
65
  export declare function restTransport(options: RestTransportOptions): TransportWithCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAyD,SAAS,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEjI,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;QACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChD,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;CACnC,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,yBAAyB,CAsStF"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAyD,SAAS,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEjI,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AASvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;QACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChD,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,yBAAyB,CA4WtF"}
package/dist/transport.js CHANGED
@@ -8,9 +8,11 @@
8
8
  * Depends on: router.ts, capix core
9
9
  */
10
10
  import * as http from 'node:http';
11
+ import { closeHttpServerGracefully } from '@capixjs/core';
11
12
  import { compileRouter, generateRoutes } from './router.js';
12
13
  import { parseMultipart } from './multipart-parser.js';
13
14
  import { buildSerializers, defaultSerializer } from './serializer.js';
15
+ import { buildCoercionMaps, coerceFields, coerceValue } from './coercion.js';
14
16
  const DEFAULT_MAX_BODY_SIZE = 1024 * 1024; // 1MB
15
17
  const EMPTY_INPUT = {};
16
18
  /** Creates a REST transport using node:http. */
@@ -19,6 +21,7 @@ export function restTransport(options) {
19
21
  let router = null;
20
22
  let invokeFn = null;
21
23
  let serializers = null;
24
+ let coercers = null;
22
25
  const corsOriginOpt = options.cors?.origin ?? '*';
23
26
  const maxBodySize = options.maxBodySize ?? DEFAULT_MAX_BODY_SIZE;
24
27
  const corsMethodsValue = options.cors?.methods ?? 'GET, POST, PATCH, PUT, DELETE, OPTIONS';
@@ -73,15 +76,20 @@ export function restTransport(options) {
73
76
  req.on('error', reject);
74
77
  });
75
78
  }
76
- function coerceQueryValue(val) {
77
- if (val === 'true')
78
- return true;
79
- if (val === 'false')
80
- return false;
81
- if (val !== '' && !isNaN(Number(val)))
82
- return Number(val);
83
- return val;
79
+ // Malformed percent-encoding falls back to the raw text (WHATWG URLSearchParams
80
+ // behavior) instead of throwing out of the synchronous request path.
81
+ function safeDecode(s) {
82
+ if (!s.includes('%'))
83
+ return s;
84
+ try {
85
+ return decodeURIComponent(s);
86
+ }
87
+ catch {
88
+ return s;
89
+ }
84
90
  }
91
+ // Values stay raw strings here; schema-aware coercion is applied afterwards
92
+ // using the matched capability's coercion map (see coercion.ts).
85
93
  function parseQueryString(url) {
86
94
  const idx = url.indexOf('?');
87
95
  if (idx === -1)
@@ -92,18 +100,40 @@ export function restTransport(options) {
92
100
  const eqIdx = part.indexOf('=');
93
101
  if (eqIdx === -1)
94
102
  continue;
95
- const key = decodeURIComponent(part.slice(0, eqIdx));
96
- const val = decodeURIComponent(part.slice(eqIdx + 1));
97
- result[key] = coerceQueryValue(val);
103
+ const key = safeDecode(part.slice(0, eqIdx));
104
+ if (key === '__proto__')
105
+ continue; // never allow prototype-setting keys into input
106
+ result[key] = safeDecode(part.slice(eqIdx + 1));
98
107
  }
99
108
  return result;
100
109
  }
110
+ /** Object.assign with [[Set]]-semantics '__proto__' assignment excluded. */
111
+ function assignSafe(target, source) {
112
+ for (const key of Object.keys(source)) {
113
+ if (key === '__proto__')
114
+ continue;
115
+ target[key] = source[key];
116
+ }
117
+ }
101
118
  function sendJson(res, status, body) {
102
119
  const json = JSON.stringify(body);
103
120
  res.writeHead(status, _jsonHeadersErr ?? { 'Content-Type': 'application/json' });
104
121
  res.end(json);
105
122
  }
123
+ // Defense in depth: a synchronous throw in the request path would otherwise
124
+ // escape node:http as an uncaughtException and kill the process.
106
125
  function handler(req, res) {
126
+ try {
127
+ handleRequest(req, res);
128
+ }
129
+ catch (err) {
130
+ console.error('[capix:rest] Unhandled synchronous error in handler:', err);
131
+ if (!res.headersSent) {
132
+ sendJson(res, 500, { error: 'Internal', message: 'Internal server error' });
133
+ }
134
+ }
135
+ }
136
+ function handleRequest(req, res) {
107
137
  // Fast path: pre-built static headers avoid per-request setHeader calls.
108
138
  // Dynamic origin functions still use setCorsHeaders.
109
139
  if (hasDynamicOrigin)
@@ -129,7 +159,10 @@ export function restTransport(options) {
129
159
  const method = (req.method ?? 'GET').toUpperCase();
130
160
  const match = router.match(method, url);
131
161
  if (!match.found) {
132
- if (match.allowedMethods !== undefined) {
162
+ if (match.malformed === true) {
163
+ sendJson(res, 400, { error: 'BadRequest', message: 'Malformed URL encoding' });
164
+ }
165
+ else if (match.allowedMethods !== undefined) {
133
166
  res.setHeader('Allow', match.allowedMethods.join(', '));
134
167
  sendJson(res, 405, { error: 'MethodNotAllowed', message: 'Method not allowed' });
135
168
  }
@@ -138,7 +171,11 @@ export function restTransport(options) {
138
171
  }
139
172
  return;
140
173
  }
174
+ // Schema-derived coercion targets for this capability (null → leave strings raw)
175
+ const fieldKinds = coercers?.get(match.capability) ?? null;
141
176
  const queryParams = parseQueryString(url);
177
+ if (queryParams !== null && fieldKinds !== null)
178
+ coerceFields(queryParams, fieldKinds);
142
179
  const pathParams = match.params;
143
180
  const noBody = method === 'GET' || method === 'HEAD' || method === 'DELETE';
144
181
  // Async continuation to keep handler signature synchronous (avoids unhandled rejection)
@@ -165,10 +202,16 @@ export function restTransport(options) {
165
202
  const multipartOpts = typeof options.multipart === 'object' ? options.multipart : {};
166
203
  try {
167
204
  const parsed = await parseMultipart(req.headers, rawBody, multipartOpts);
168
- for (const [k, v] of Object.entries(parsed.fields))
169
- bodyParams[k] = coerceQueryValue(v);
170
- for (const [k, f] of Object.entries(parsed.files))
171
- bodyParams[k] = f;
205
+ for (const [k, v] of Object.entries(parsed.fields)) {
206
+ if (k === '__proto__')
207
+ continue;
208
+ const kind = fieldKinds?.get(k);
209
+ bodyParams[k] = kind !== undefined ? coerceValue(v, kind) : v;
210
+ }
211
+ for (const [k, f] of Object.entries(parsed.files)) {
212
+ if (k !== '__proto__')
213
+ bodyParams[k] = f;
214
+ }
172
215
  }
173
216
  catch (err) {
174
217
  const status = err.status ?? 400;
@@ -178,13 +221,21 @@ export function restTransport(options) {
178
221
  }
179
222
  }
180
223
  else if (contentType.includes('application/json')) {
224
+ let parsed;
181
225
  try {
182
- bodyParams = JSON.parse(rawBody.toString('utf8'));
226
+ parsed = JSON.parse(rawBody.toString('utf8'));
183
227
  }
184
228
  catch {
185
229
  sendJson(res, 400, { error: 'BadRequest', message: 'Invalid JSON body' });
186
230
  return;
187
231
  }
232
+ // Arrays and primitives cannot merge into the input object — reject
233
+ // instead of producing index-keyed garbage ({ '0': ..., '1': ... }).
234
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
235
+ sendJson(res, 400, { error: 'BadRequest', message: 'JSON body must be an object' });
236
+ return;
237
+ }
238
+ bodyParams = parsed;
188
239
  }
189
240
  }
190
241
  }
@@ -199,9 +250,17 @@ export function restTransport(options) {
199
250
  input = {};
200
251
  if (queryParams !== null)
201
252
  Object.assign(input, queryParams);
202
- Object.assign(input, bodyParams);
203
- if (pathParams !== null)
204
- Object.assign(input, pathParams);
253
+ // JSON.parse can produce an own '__proto__' data property — Object.assign
254
+ // would turn that into a prototype write on input. assignSafe skips it.
255
+ // JSON body values are deliberately NOT coerced: JSON expresses numbers
256
+ // and booleans itself, so a string where a number belongs is a real error.
257
+ assignSafe(input, bodyParams);
258
+ if (pathParams !== null) {
259
+ for (const k of Object.keys(pathParams)) {
260
+ const kind = fieldKinds?.get(k);
261
+ input[k] = kind !== undefined ? coerceValue(pathParams[k], kind) : pathParams[k];
262
+ }
263
+ }
205
264
  }
206
265
  // Build flat headers map using for..in (avoids Object.entries array allocation).
207
266
  const headers = {};
@@ -210,7 +269,13 @@ export function restTransport(options) {
210
269
  if (v !== undefined)
211
270
  headers[k] = Array.isArray(v) ? v.join(', ') : v;
212
271
  }
213
- const signal = _noTimeoutSignal ?? AbortSignal.timeout(requestTimeout);
272
+ // Manual controller + timer instead of AbortSignal.timeout: the timer is
273
+ // cleared as soon as the invocation settles. AbortSignal.timeout would keep
274
+ // its timer (and the race's abort-listener closure) alive for the full
275
+ // timeout window after every completed request — at high RPS that retains
276
+ // hundreds of thousands of dead closures at steady state.
277
+ const controller = requestTimeout === false ? null : new AbortController();
278
+ const signal = controller?.signal ?? _noTimeoutSignal;
214
279
  const invocation = invokeFn({
215
280
  capability: match.capability,
216
281
  input,
@@ -218,19 +283,30 @@ export function restTransport(options) {
218
283
  signal,
219
284
  ...(rawBodyForContext !== undefined ? { rawBody: rawBodyForContext } : {}),
220
285
  });
221
- // Race invocation against the abort signal so hung capabilities don't hold resources.
222
- // When timeout: false the signal never fires, so we await directly.
223
- const response = requestTimeout === false
224
- ? await invocation
225
- : await Promise.race([
226
- invocation,
227
- new Promise((resolve) => {
228
- signal.addEventListener('abort', () => resolve({
286
+ // Race invocation against the timeout so hung capabilities don't hold the
287
+ // connection. When timeout: false there is no timer, so we await directly.
288
+ let response;
289
+ if (controller === null) {
290
+ response = await invocation;
291
+ }
292
+ else {
293
+ let timer;
294
+ const timeoutPromise = new Promise((resolve) => {
295
+ timer = setTimeout(() => {
296
+ controller.abort();
297
+ resolve({
229
298
  ok: false,
230
299
  error: { status: 504, error: 'GatewayTimeout', message: 'Request timed out' },
231
- }), { once: true });
232
- }),
233
- ]);
300
+ });
301
+ }, requestTimeout);
302
+ });
303
+ try {
304
+ response = await Promise.race([invocation, timeoutPromise]);
305
+ }
306
+ finally {
307
+ clearTimeout(timer);
308
+ }
309
+ }
234
310
  if (response.ok) {
235
311
  if (response.data === null || response.data === undefined) {
236
312
  res.writeHead(204, _preflightHeaders ?? undefined);
@@ -273,6 +349,7 @@ export function restTransport(options) {
273
349
  const routes = generateRoutes(mountOptions.registry, routeOpts);
274
350
  router = compileRouter(routes);
275
351
  serializers = buildSerializers(mountOptions.registry);
352
+ coercers = buildCoercionMaps(mountOptions.registry);
276
353
  console.log('\nCapix REST transport starting...');
277
354
  for (const route of routes) {
278
355
  console.log(` ✓ ${route.method.padEnd(7)} ${route.path}`);
@@ -287,16 +364,11 @@ export function restTransport(options) {
287
364
  });
288
365
  },
289
366
  async unmount() {
290
- return new Promise((resolve, reject) => {
291
- if (!server)
292
- return resolve();
293
- server.close((err) => {
294
- if (err)
295
- reject(err);
296
- else
297
- resolve();
298
- });
299
- });
367
+ if (!server)
368
+ return;
369
+ const s = server;
370
+ server = null;
371
+ await closeHttpServerGracefully(s, options.shutdownTimeoutMs ?? 10_000);
300
372
  },
301
373
  };
302
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capixjs/transport-rest",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.22",
4
4
  "description": "Capix HTTP/REST transport",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -33,8 +33,7 @@
33
33
  "dependencies": {
34
34
  "busboy": "^1.6.0",
35
35
  "fast-json-stringify": "^6.4.0",
36
- "zod": "^3.23.0",
37
- "zod-to-json-schema": "^3.25.2"
36
+ "zod": "^4.0.0"
38
37
  },
39
38
  "peerDependencies": {
40
39
  "@capixjs/core": ">=0.1.0-0"
@@ -46,7 +45,7 @@
46
45
  "form-data": "^4.0.5",
47
46
  "typescript": "^5.5.0",
48
47
  "vitest": "^1.6.0",
49
- "@capixjs/core": "0.1.0-alpha.2"
48
+ "@capixjs/core": "0.1.0-alpha.22"
50
49
  },
51
50
  "scripts": {
52
51
  "build": "tsc",