@zudojs/api 0.1.0 → 0.1.2
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/dist/.tsbuildinfo +1 -1
- package/dist/api/constants.d.ts +2 -0
- package/dist/api/constants.d.ts.map +1 -1
- package/dist/api/constants.js +2 -0
- package/dist/api/constants.js.map +1 -1
- package/dist/api/context/context.type.d.ts.map +1 -1
- package/dist/api/context/context.type.js +2 -1
- package/dist/api/context/context.type.js.map +1 -1
- package/dist/api/executor/executor.core.d.ts +21 -12
- package/dist/api/executor/executor.core.d.ts.map +1 -1
- package/dist/api/executor/executor.core.js +140 -28
- package/dist/api/executor/executor.core.js.map +1 -1
- package/dist/api/handler/handler.type.d.ts +5 -2
- package/dist/api/handler/handler.type.d.ts.map +1 -1
- package/dist/api/interceptors/interceptor.type.d.ts +5 -0
- package/dist/api/interceptors/interceptor.type.d.ts.map +1 -1
- package/dist/api/interceptors/interceptor.type.js.map +1 -1
- package/dist/api/operation/operation.type.d.ts +5 -0
- package/dist/api/operation/operation.type.d.ts.map +1 -1
- package/dist/api/operation/operation.type.js.map +1 -1
- package/package.json +1 -1
package/dist/api/constants.d.ts
CHANGED
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
export declare const DEFAULT_OPERATION_TIMEOUT = 30000;
|
|
10
10
|
/**
|
|
11
11
|
* Maximum number of interceptors allowed in a pipeline.
|
|
12
|
+
* Enforced by the APIExecutor constructor.
|
|
12
13
|
*/
|
|
13
14
|
export declare const MAX_INTERCEPTORS = 32;
|
|
14
15
|
/**
|
|
15
16
|
* Maximum number of policies allowed on a single operation.
|
|
17
|
+
* Reserved for the policy system — not yet enforced.
|
|
16
18
|
*/
|
|
17
19
|
export declare const MAX_POLICIES = 16;
|
|
18
20
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/api/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/api/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC"}
|
package/dist/api/constants.js
CHANGED
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
export const DEFAULT_OPERATION_TIMEOUT = 30_000;
|
|
10
10
|
/**
|
|
11
11
|
* Maximum number of interceptors allowed in a pipeline.
|
|
12
|
+
* Enforced by the APIExecutor constructor.
|
|
12
13
|
*/
|
|
13
14
|
export const MAX_INTERCEPTORS = 32;
|
|
14
15
|
/**
|
|
15
16
|
* Maximum number of policies allowed on a single operation.
|
|
17
|
+
* Reserved for the policy system — not yet enforced.
|
|
16
18
|
*/
|
|
17
19
|
export const MAX_POLICIES = 16;
|
|
18
20
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/api/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/api/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.type.d.ts","sourceRoot":"","sources":["../../../src/api/context/context.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU,CAAC,MAAM,GAAG,OAAO;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE7C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAE9C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAG,OAAO,EAC/C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,UAAU,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"context.type.d.ts","sourceRoot":"","sources":["../../../src/api/context/context.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU,CAAC,MAAM,GAAG,OAAO;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE7C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAE9C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAG,OAAO,EAC/C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,UAAU,CAAC,MAAM,CAAC,CAsBpB;AAED,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,CAAC"}
|
|
@@ -15,8 +15,9 @@ export function createAPIContext(requestId, state, signal) {
|
|
|
15
15
|
set(key, value) {
|
|
16
16
|
metadata.set(key.name, value);
|
|
17
17
|
},
|
|
18
|
+
// Live read-only view of the internal map (no per-access copy).
|
|
18
19
|
get metadata() {
|
|
19
|
-
return
|
|
20
|
+
return metadata;
|
|
20
21
|
},
|
|
21
22
|
};
|
|
22
23
|
return Object.freeze(context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.type.js","sourceRoot":"","sources":["../../../src/api/context/context.type.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAqB9B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,KAAa,EACb,MAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE5C,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG;QACd,SAAS;QACT,MAAM;QACN,KAAK;QACL,GAAG,CAAI,GAAqB;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC;QACjD,CAAC;QACD,GAAG,CAAI,GAAqB,EAAE,KAAQ;YACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,
|
|
1
|
+
{"version":3,"file":"context.type.js","sourceRoot":"","sources":["../../../src/api/context/context.type.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAqB9B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,KAAa,EACb,MAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE5C,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG;QACd,SAAS;QACT,MAAM;QACN,KAAK;QACL,GAAG,CAAI,GAAqB;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC;QACjD,CAAC;QACD,GAAG,CAAI,GAAqB,EAAE,KAAQ;YACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,gEAAgE;QAChE,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAuB,CAAC;AACtD,CAAC;AAID,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,CAAC"}
|
|
@@ -2,21 +2,22 @@ import type { APIContext } from "../context/context.type.js";
|
|
|
2
2
|
import type { APIResult } from "../result/apiResult.type.js";
|
|
3
3
|
import type { APIOperation } from "../operation/operation.type.js";
|
|
4
4
|
import type { APIInterceptor } from "../interceptors/interceptor.type.js";
|
|
5
|
+
import { APIError } from "../errors/index.js";
|
|
6
|
+
export type { APIExecutionContext } from "../interceptors/interceptor.type.js";
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
8
|
+
* Error normalizer for converting unknown errors into APIError instances.
|
|
9
|
+
*
|
|
10
|
+
* APIErrors pass through untouched. Other errors are wrapped in
|
|
11
|
+
* APIInternalError (`expose: false`), preserving the original message and
|
|
12
|
+
* error for logging via `cause` while keeping internals out of anything
|
|
13
|
+
* a transport would serialize to a client.
|
|
7
14
|
*/
|
|
8
|
-
export
|
|
9
|
-
readonly operation: APIOperation<TInput, TOutput>;
|
|
10
|
-
readonly input: TInput;
|
|
11
|
-
readonly context: APIContext;
|
|
12
|
-
readonly result?: APIResult<TOutput>;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Error normalizer for converting unknown errors into Error instances.
|
|
16
|
-
*/
|
|
17
|
-
export declare function normalizeAPIError(error: unknown, operationName?: string): Error;
|
|
15
|
+
export declare function normalizeAPIError(error: unknown, operationName?: string): APIError;
|
|
18
16
|
/**
|
|
19
17
|
* Executes an API operation through its interceptor pipeline.
|
|
18
|
+
*
|
|
19
|
+
* Enforces the operation timeout, honors the context AbortSignal, and
|
|
20
|
+
* validates input when the operation's `input` is a Standard Schema.
|
|
20
21
|
*/
|
|
21
22
|
export declare class APIExecutor {
|
|
22
23
|
private readonly interceptors;
|
|
@@ -26,7 +27,15 @@ export declare class APIExecutor {
|
|
|
26
27
|
*/
|
|
27
28
|
execute<TInput = unknown, TOutput = unknown>(operation: APIOperation<TInput, TOutput>, input: TInput, context: APIContext): Promise<APIResult<TOutput>>;
|
|
28
29
|
/**
|
|
29
|
-
*
|
|
30
|
+
* Invokes the operation handler under its timeout and abort signal.
|
|
31
|
+
*/
|
|
32
|
+
private invokeHandler;
|
|
33
|
+
/**
|
|
34
|
+
* Runs the interceptor pipeline (Koa-style dispatch).
|
|
35
|
+
*
|
|
36
|
+
* Each interceptor's `next()` may be awaited at most once; a second
|
|
37
|
+
* call rejects instead of silently re-executing the handler while
|
|
38
|
+
* bypassing downstream interceptors.
|
|
30
39
|
*/
|
|
31
40
|
private runPipeline;
|
|
32
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.core.d.ts","sourceRoot":"","sources":["../../../src/api/executor/executor.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"executor.core.d.ts","sourceRoot":"","sources":["../../../src/api/executor/executor.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,QAAQ,EAMT,MAAM,oBAAoB,CAAC;AAI5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,aAAa,CAAC,EAAE,MAAM,GACrB,QAAQ,CAgBV;AAqCD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEzD,YAAY,YAAY,GAAE,SAAS,cAAc,EAAO,EAOvD;IAED;;OAEG;IACG,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC/C,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CA+C7B;IAED;;OAEG;YACW,aAAa;IA2B3B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CAyBpB"}
|
|
@@ -1,62 +1,174 @@
|
|
|
1
|
+
import { APIError, APIInternalError, APITimeoutError, APIValidationError, createAPIError, isAPIError, } from "../errors/index.js";
|
|
2
|
+
import { DEFAULT_OPERATION_TIMEOUT, MAX_INTERCEPTORS } from "../constants.js";
|
|
1
3
|
/**
|
|
2
|
-
* Error normalizer for converting unknown errors into
|
|
4
|
+
* Error normalizer for converting unknown errors into APIError instances.
|
|
5
|
+
*
|
|
6
|
+
* APIErrors pass through untouched. Other errors are wrapped in
|
|
7
|
+
* APIInternalError (`expose: false`), preserving the original message and
|
|
8
|
+
* error for logging via `cause` while keeping internals out of anything
|
|
9
|
+
* a transport would serialize to a client.
|
|
3
10
|
*/
|
|
4
11
|
export function normalizeAPIError(error, operationName) {
|
|
5
|
-
if (error
|
|
12
|
+
if (isAPIError(error)) {
|
|
6
13
|
return error;
|
|
7
14
|
}
|
|
8
|
-
|
|
15
|
+
if (error instanceof Error) {
|
|
16
|
+
const wrapped = new APIInternalError(error.message);
|
|
17
|
+
// The published @zudojs/errors 0.1.0 constructor doesn't accept
|
|
18
|
+
// `cause`; the field is a plain writable property on BaseError.
|
|
19
|
+
// Switch to `new APIInternalError(msg, { cause })` once this package
|
|
20
|
+
// depends on the next @zudojs/errors release.
|
|
21
|
+
wrapped.cause = error;
|
|
22
|
+
return wrapped;
|
|
23
|
+
}
|
|
24
|
+
return new APIInternalError(`Unexpected non-error thrown in operation "${operationName}": ${String(error)}`);
|
|
25
|
+
}
|
|
26
|
+
function isStandardSchema(value) {
|
|
27
|
+
return (typeof value === "object" &&
|
|
28
|
+
value !== null &&
|
|
29
|
+
typeof value["~standard"]
|
|
30
|
+
?.validate === "function");
|
|
9
31
|
}
|
|
10
32
|
/**
|
|
11
33
|
* Executes an API operation through its interceptor pipeline.
|
|
34
|
+
*
|
|
35
|
+
* Enforces the operation timeout, honors the context AbortSignal, and
|
|
36
|
+
* validates input when the operation's `input` is a Standard Schema.
|
|
12
37
|
*/
|
|
13
38
|
export class APIExecutor {
|
|
14
39
|
interceptors;
|
|
15
40
|
constructor(interceptors = []) {
|
|
41
|
+
if (interceptors.length > MAX_INTERCEPTORS) {
|
|
42
|
+
throw new RangeError(`Interceptor pipeline exceeds MAX_INTERCEPTORS (${MAX_INTERCEPTORS}).`);
|
|
43
|
+
}
|
|
16
44
|
this.interceptors = Object.freeze([...interceptors]);
|
|
17
45
|
}
|
|
18
46
|
/**
|
|
19
47
|
* Executes an operation with the given input and context.
|
|
20
48
|
*/
|
|
21
49
|
async execute(operation, input, context) {
|
|
22
|
-
|
|
23
|
-
operation
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const executeNext = async () => {
|
|
50
|
+
if (context.signal?.aborted) {
|
|
51
|
+
return { ok: false, error: abortedError(operation.name) };
|
|
52
|
+
}
|
|
53
|
+
let effectiveInput = input;
|
|
54
|
+
if (isStandardSchema(operation.input)) {
|
|
28
55
|
try {
|
|
29
|
-
const
|
|
30
|
-
|
|
56
|
+
const validation = await operation.input["~standard"].validate(input);
|
|
57
|
+
if (validation.issues) {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
error: new APIValidationError(`Invalid input for operation "${operation.name}".`, validation.issues.map((issue) => issue.message)),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
effectiveInput = validation.value;
|
|
31
64
|
}
|
|
32
65
|
catch (error) {
|
|
33
|
-
return {
|
|
34
|
-
ok: false,
|
|
35
|
-
error: normalizeAPIError(error, operation.name),
|
|
36
|
-
};
|
|
66
|
+
return { ok: false, error: normalizeAPIError(error, operation.name) };
|
|
37
67
|
}
|
|
68
|
+
}
|
|
69
|
+
const executionContext = {
|
|
70
|
+
operation,
|
|
71
|
+
input: effectiveInput,
|
|
72
|
+
context,
|
|
73
|
+
};
|
|
74
|
+
const executeHandler = async () => {
|
|
75
|
+
const result = await this.invokeHandler(operation, effectiveInput, context);
|
|
76
|
+
executionContext.result = result;
|
|
77
|
+
return result;
|
|
38
78
|
};
|
|
39
|
-
|
|
79
|
+
try {
|
|
80
|
+
const result = await this.runPipeline(executionContext, executeHandler);
|
|
81
|
+
executionContext.result = result;
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return { ok: false, error: normalizeAPIError(error, operation.name) };
|
|
86
|
+
}
|
|
40
87
|
}
|
|
41
88
|
/**
|
|
42
|
-
*
|
|
89
|
+
* Invokes the operation handler under its timeout and abort signal.
|
|
43
90
|
*/
|
|
44
|
-
async
|
|
91
|
+
async invokeHandler(operation, input, context) {
|
|
92
|
+
if (context.signal?.aborted) {
|
|
93
|
+
return { ok: false, error: abortedError(operation.name) };
|
|
94
|
+
}
|
|
95
|
+
const timeoutMs = operation.timeout ??
|
|
96
|
+
operation.metadata?.timeout ??
|
|
97
|
+
DEFAULT_OPERATION_TIMEOUT;
|
|
98
|
+
try {
|
|
99
|
+
const output = await withDeadline(operation.handler(input, context), timeoutMs, operation.name, context.signal);
|
|
100
|
+
return { ok: true, data: output };
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return { ok: false, error: normalizeAPIError(error, operation.name) };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Runs the interceptor pipeline (Koa-style dispatch).
|
|
108
|
+
*
|
|
109
|
+
* Each interceptor's `next()` may be awaited at most once; a second
|
|
110
|
+
* call rejects instead of silently re-executing the handler while
|
|
111
|
+
* bypassing downstream interceptors.
|
|
112
|
+
*/
|
|
113
|
+
runPipeline(context, terminal) {
|
|
45
114
|
const interceptors = this.interceptors;
|
|
46
|
-
let
|
|
47
|
-
const
|
|
115
|
+
let lastDispatched = -1;
|
|
116
|
+
const dispatch = async (index) => {
|
|
117
|
+
if (index <= lastDispatched) {
|
|
118
|
+
throw new APIInternalError("next() called multiple times in interceptor pipeline.");
|
|
119
|
+
}
|
|
120
|
+
lastDispatched = index;
|
|
48
121
|
if (index >= interceptors.length) {
|
|
49
|
-
return
|
|
122
|
+
return terminal();
|
|
50
123
|
}
|
|
51
124
|
const interceptor = interceptors[index];
|
|
52
|
-
index
|
|
53
|
-
if (!interceptor) {
|
|
54
|
-
return next();
|
|
55
|
-
}
|
|
56
|
-
return interceptor.intercept(context, runNext);
|
|
125
|
+
return interceptor.intercept(context, () => dispatch(index + 1));
|
|
57
126
|
};
|
|
58
|
-
|
|
59
|
-
|
|
127
|
+
return dispatch(0);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ─── Internal helpers ─────────────────────────────────────────────────────
|
|
131
|
+
function abortedError(operationName) {
|
|
132
|
+
return createAPIError(`Operation "${operationName}" was aborted.`, {
|
|
133
|
+
statusCode: 499,
|
|
134
|
+
expose: true,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Awaits a handler promise, rejecting when the timeout elapses or the
|
|
139
|
+
* abort signal fires. The handler itself keeps running (promises are not
|
|
140
|
+
* cancellable), but the caller stops waiting and resources are released.
|
|
141
|
+
*/
|
|
142
|
+
function withDeadline(promise, timeoutMs, operationName, signal) {
|
|
143
|
+
const useTimeout = Number.isFinite(timeoutMs) && timeoutMs > 0;
|
|
144
|
+
if (!useTimeout && !signal) {
|
|
145
|
+
return promise;
|
|
60
146
|
}
|
|
147
|
+
return new Promise((resolve, reject) => {
|
|
148
|
+
let timer;
|
|
149
|
+
const cleanup = () => {
|
|
150
|
+
if (timer !== undefined)
|
|
151
|
+
clearTimeout(timer);
|
|
152
|
+
signal?.removeEventListener("abort", onAbort);
|
|
153
|
+
};
|
|
154
|
+
const onAbort = () => {
|
|
155
|
+
cleanup();
|
|
156
|
+
reject(abortedError(operationName));
|
|
157
|
+
};
|
|
158
|
+
if (useTimeout) {
|
|
159
|
+
timer = setTimeout(() => {
|
|
160
|
+
cleanup();
|
|
161
|
+
reject(new APITimeoutError(timeoutMs));
|
|
162
|
+
}, timeoutMs);
|
|
163
|
+
}
|
|
164
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
165
|
+
promise.then((value) => {
|
|
166
|
+
cleanup();
|
|
167
|
+
resolve(value);
|
|
168
|
+
}, (error) => {
|
|
169
|
+
cleanup();
|
|
170
|
+
reject(error);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
61
173
|
}
|
|
62
174
|
//# sourceMappingURL=executor.core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.core.js","sourceRoot":"","sources":["../../../src/api/executor/executor.core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.core.js","sourceRoot":"","sources":["../../../src/api/executor/executor.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,11 @@ import type { APIContext } from "../context/context.type.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Handler for an API operation.
|
|
4
4
|
*
|
|
5
|
-
* Receives
|
|
6
|
-
*
|
|
5
|
+
* Receives the operation input and the execution context, and returns
|
|
6
|
+
* the operation output. Input is validated by the executor only when the
|
|
7
|
+
* operation's `input` is a Standard Schema (https://standardschema.dev,
|
|
8
|
+
* implemented by Zod, Valibot, ArkType, …); otherwise it is passed
|
|
9
|
+
* through as-is and the handler must validate it itself.
|
|
7
10
|
*/
|
|
8
11
|
export type APIHandler<TInput = unknown, TOutput = unknown> = (input: TInput, context: APIContext) => Promise<TOutput>;
|
|
9
12
|
//# sourceMappingURL=handler.type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.type.d.ts","sourceRoot":"","sources":["../../../src/api/handler/handler.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"handler.type.d.ts","sourceRoot":"","sources":["../../../src/api/handler/handler.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,CAC5D,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -8,6 +8,11 @@ export interface APIExecutionContext<TInput = unknown, TOutput = unknown> {
|
|
|
8
8
|
readonly operation: APIOperation<TInput, TOutput>;
|
|
9
9
|
readonly input: TInput;
|
|
10
10
|
readonly context: APIContext;
|
|
11
|
+
/**
|
|
12
|
+
* The operation result. Populated by the executor once the handler has
|
|
13
|
+
* run, so interceptor code after `await next()` can read it here as
|
|
14
|
+
* well as from `next()`'s return value.
|
|
15
|
+
*/
|
|
11
16
|
readonly result?: APIResult<TOutput>;
|
|
12
17
|
}
|
|
13
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.type.d.ts","sourceRoot":"","sources":["../../../src/api/interceptors/interceptor.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACtE,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAE7B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC3C,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GACtC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,CAMtD"}
|
|
1
|
+
{"version":3,"file":"interceptor.type.d.ts","sourceRoot":"","sources":["../../../src/api/interceptors/interceptor.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACtE,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAE7B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC3C,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GACtC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,CAMtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.type.js","sourceRoot":"","sources":["../../../src/api/interceptors/interceptor.type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interceptor.type.js","sourceRoot":"","sources":["../../../src/api/interceptors/interceptor.type.ts"],"names":[],"mappings":"AAoCA;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI;YAC5B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -18,6 +18,11 @@ export interface APIOperationMetadata {
|
|
|
18
18
|
*/
|
|
19
19
|
export interface APIOperation<TInput = unknown, TOutput = unknown> {
|
|
20
20
|
readonly name: string;
|
|
21
|
+
/**
|
|
22
|
+
* Input schema. When this is a Standard Schema
|
|
23
|
+
* (https://standardschema.dev), the executor validates input against it
|
|
24
|
+
* before invoking the handler; other values are documentation-only.
|
|
25
|
+
*/
|
|
21
26
|
readonly input?: unknown;
|
|
22
27
|
readonly output?: unknown;
|
|
23
28
|
readonly handler: APIHandler<TInput, TOutput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.type.d.ts","sourceRoot":"","sources":["../../../src/api/operation/operation.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACjE,OAAO,EAAE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ/B"}
|
|
1
|
+
{"version":3,"file":"operation.type.d.ts","sourceRoot":"","sources":["../../../src/api/operation/operation.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACjE,OAAO,EAAE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.type.js","sourceRoot":"","sources":["../../../src/api/operation/operation.type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.type.js","sourceRoot":"","sources":["../../../src/api/operation/operation.type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AA6D5D;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgD;IAEhD,MAAM,SAAS,GAAkC;QAC/C,GAAG,OAAO;QACV,OAAO,EACL,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,yBAAyB;KAC5E,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zudojs/api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Application-facing API layer for Zudojs — operation definitions, execution context, interceptors, policies, and transport-agnostic contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|