takos-common 1.0.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/dist/abort.d.ts +14 -0
- package/dist/abort.d.ts.map +1 -0
- package/dist/abort.js +26 -0
- package/dist/abort.js.map +1 -0
- package/dist/env-parse.d.ts +74 -0
- package/dist/env-parse.d.ts.map +1 -0
- package/dist/env-parse.js +124 -0
- package/dist/env-parse.js.map +1 -0
- package/dist/errors.d.ts +181 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +271 -0
- package/dist/errors.js.map +1 -0
- package/dist/id.d.ts +23 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +32 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.d.ts +54 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +149 -0
- package/dist/jwt.js.map +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +99 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/hono.d.ts +151 -0
- package/dist/middleware/hono.d.ts.map +1 -0
- package/dist/middleware/hono.js +189 -0
- package/dist/middleware/hono.js.map +1 -0
- package/dist/validation.d.ts +21 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +102 -0
- package/dist/validation.js.map +1 -0
- package/package.json +55 -0
- package/src/__tests__/jwt.test.ts +208 -0
- package/src/__tests__/validation.test.ts +42 -0
- package/src/abort.ts +30 -0
- package/src/env-parse.ts +153 -0
- package/src/errors.ts +341 -0
- package/src/id.ts +33 -0
- package/src/index.ts +81 -0
- package/src/jwt.ts +218 -0
- package/src/logger.ts +136 -0
- package/src/middleware/hono.ts +310 -0
- package/src/validation.ts +105 -0
- package/tsconfig.json +18 -0
- package/tsconfig.tsbuildinfo +1 -0
package/dist/abort.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abort Signal Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for working with AbortSignal across Takos services.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Throws an `AppError` if the given signal has been aborted.
|
|
8
|
+
*
|
|
9
|
+
* @param signal - The abort signal to check (no-op if `undefined`).
|
|
10
|
+
* @param context - A short label describing the call-site, appended to the
|
|
11
|
+
* error message for easier debugging (e.g. `'langgraph-start'`).
|
|
12
|
+
*/
|
|
13
|
+
export declare function throwIfAborted(signal: AbortSignal | undefined, context?: string): void;
|
|
14
|
+
//# sourceMappingURL=abort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../src/abort.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CActF"}
|
package/dist/abort.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abort Signal Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for working with AbortSignal across Takos services.
|
|
5
|
+
*/
|
|
6
|
+
import { AppError } from './errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* Throws an `AppError` if the given signal has been aborted.
|
|
9
|
+
*
|
|
10
|
+
* @param signal - The abort signal to check (no-op if `undefined`).
|
|
11
|
+
* @param context - A short label describing the call-site, appended to the
|
|
12
|
+
* error message for easier debugging (e.g. `'langgraph-start'`).
|
|
13
|
+
*/
|
|
14
|
+
export function throwIfAborted(signal, context) {
|
|
15
|
+
if (!signal?.aborted) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const reason = signal.reason;
|
|
19
|
+
const message = reason instanceof Error
|
|
20
|
+
? reason.message
|
|
21
|
+
: typeof reason === 'string'
|
|
22
|
+
? reason
|
|
23
|
+
: 'Run aborted';
|
|
24
|
+
throw new AppError(context ? `${message} (${context})` : message);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../src/abort.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B,EAAE,OAAgB;IAC9E,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,OAAO,GACX,MAAM,YAAY,KAAK;QACrB,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,aAAa,CAAC;IAEtB,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable parsing helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides a consistent pattern across all services:
|
|
5
|
+
* - **Required** vars (`parseIntEnvRequired`): throw if missing or invalid.
|
|
6
|
+
* - **Optional** vars (`parseIntEnv`, `parseFloatEnv`): log a warning when the
|
|
7
|
+
* raw value is present but invalid, then fall back to the default.
|
|
8
|
+
*
|
|
9
|
+
* The helpers intentionally avoid importing a specific logger so they stay
|
|
10
|
+
* dependency-free. A `warnFn` callback is accepted for warning output;
|
|
11
|
+
* callers can wire it to their own logger or leave it as `console.warn`.
|
|
12
|
+
*/
|
|
13
|
+
type WarnFn = (message: string) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Parse an optional integer environment variable.
|
|
16
|
+
*
|
|
17
|
+
* - Missing / empty value -> returns `defaultValue`.
|
|
18
|
+
* - Present but not a valid integer -> logs a warning, returns `defaultValue`.
|
|
19
|
+
* - `min` / `max` constraints are enforced when provided.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseIntEnv(name: string, defaultValue: number, options?: {
|
|
22
|
+
min?: number;
|
|
23
|
+
max?: number;
|
|
24
|
+
warn?: WarnFn;
|
|
25
|
+
}): number;
|
|
26
|
+
/**
|
|
27
|
+
* Parse a required integer environment variable.
|
|
28
|
+
*
|
|
29
|
+
* - Missing / empty -> throws.
|
|
30
|
+
* - Present but not a valid integer -> throws.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseIntEnvRequired(name: string, options?: {
|
|
33
|
+
min?: number;
|
|
34
|
+
max?: number;
|
|
35
|
+
}): number;
|
|
36
|
+
/**
|
|
37
|
+
* Parse an integer from a raw string value (not directly from process.env).
|
|
38
|
+
*
|
|
39
|
+
* Useful when the env value has already been read (e.g. from a Cloudflare
|
|
40
|
+
* Workers `Env` binding) rather than from `process.env`.
|
|
41
|
+
*
|
|
42
|
+
* - `undefined` / empty -> returns `defaultValue`.
|
|
43
|
+
* - Present but not a valid integer -> logs a warning, returns `defaultValue`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseIntValue(name: string, raw: string | undefined, defaultValue: number, options?: {
|
|
46
|
+
min?: number;
|
|
47
|
+
max?: number;
|
|
48
|
+
warn?: WarnFn;
|
|
49
|
+
}): number;
|
|
50
|
+
/**
|
|
51
|
+
* Parse an optional float environment variable.
|
|
52
|
+
*
|
|
53
|
+
* - Missing / empty value -> returns `defaultValue`.
|
|
54
|
+
* - Present but not a valid number -> logs a warning, returns `defaultValue`.
|
|
55
|
+
* - `min` / `max` constraints are enforced when provided.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseFloatEnv(name: string, defaultValue: number, options?: {
|
|
58
|
+
min?: number;
|
|
59
|
+
max?: number;
|
|
60
|
+
warn?: WarnFn;
|
|
61
|
+
}): number;
|
|
62
|
+
/**
|
|
63
|
+
* Parse a float from a raw string value (not directly from process.env).
|
|
64
|
+
*
|
|
65
|
+
* - `undefined` / empty -> returns `defaultValue`.
|
|
66
|
+
* - Present but not a valid number -> logs a warning, returns `defaultValue`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseFloatValue(name: string, raw: string | undefined, defaultValue: number, options?: {
|
|
69
|
+
min?: number;
|
|
70
|
+
max?: number;
|
|
71
|
+
warn?: WarnFn;
|
|
72
|
+
}): number;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=env-parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-parse.d.ts","sourceRoot":"","sources":["../src/env-parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAOxC;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,MAAM,CAgBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAoBR;AAMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAoBR"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable parsing helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides a consistent pattern across all services:
|
|
5
|
+
* - **Required** vars (`parseIntEnvRequired`): throw if missing or invalid.
|
|
6
|
+
* - **Optional** vars (`parseIntEnv`, `parseFloatEnv`): log a warning when the
|
|
7
|
+
* raw value is present but invalid, then fall back to the default.
|
|
8
|
+
*
|
|
9
|
+
* The helpers intentionally avoid importing a specific logger so they stay
|
|
10
|
+
* dependency-free. A `warnFn` callback is accepted for warning output;
|
|
11
|
+
* callers can wire it to their own logger or leave it as `console.warn`.
|
|
12
|
+
*/
|
|
13
|
+
const defaultWarn = (msg) => console.warn(msg);
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Integer helpers
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Parse an optional integer environment variable.
|
|
19
|
+
*
|
|
20
|
+
* - Missing / empty value -> returns `defaultValue`.
|
|
21
|
+
* - Present but not a valid integer -> logs a warning, returns `defaultValue`.
|
|
22
|
+
* - `min` / `max` constraints are enforced when provided.
|
|
23
|
+
*/
|
|
24
|
+
export function parseIntEnv(name, defaultValue, options) {
|
|
25
|
+
const raw = (typeof globalThis.process !== 'undefined' ? process.env[name] : undefined)?.trim();
|
|
26
|
+
if (!raw)
|
|
27
|
+
return defaultValue;
|
|
28
|
+
return parseIntValue(name, raw, defaultValue, options);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse a required integer environment variable.
|
|
32
|
+
*
|
|
33
|
+
* - Missing / empty -> throws.
|
|
34
|
+
* - Present but not a valid integer -> throws.
|
|
35
|
+
*/
|
|
36
|
+
export function parseIntEnvRequired(name, options) {
|
|
37
|
+
const raw = (typeof globalThis.process !== 'undefined' ? process.env[name] : undefined)?.trim();
|
|
38
|
+
if (!raw) {
|
|
39
|
+
throw new Error(`Required environment variable ${name} is not set`);
|
|
40
|
+
}
|
|
41
|
+
const parsed = Number.parseInt(raw, 10);
|
|
42
|
+
if (!Number.isFinite(parsed)) {
|
|
43
|
+
throw new Error(`Invalid integer for environment variable ${name}: ${raw}`);
|
|
44
|
+
}
|
|
45
|
+
if (options?.min != null && parsed < options.min) {
|
|
46
|
+
throw new Error(`Environment variable ${name} value ${parsed} is below minimum ${options.min}`);
|
|
47
|
+
}
|
|
48
|
+
if (options?.max != null && parsed > options.max) {
|
|
49
|
+
throw new Error(`Environment variable ${name} value ${parsed} exceeds maximum ${options.max}`);
|
|
50
|
+
}
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse an integer from a raw string value (not directly from process.env).
|
|
55
|
+
*
|
|
56
|
+
* Useful when the env value has already been read (e.g. from a Cloudflare
|
|
57
|
+
* Workers `Env` binding) rather than from `process.env`.
|
|
58
|
+
*
|
|
59
|
+
* - `undefined` / empty -> returns `defaultValue`.
|
|
60
|
+
* - Present but not a valid integer -> logs a warning, returns `defaultValue`.
|
|
61
|
+
*/
|
|
62
|
+
export function parseIntValue(name, raw, defaultValue, options) {
|
|
63
|
+
const warn = options?.warn ?? defaultWarn;
|
|
64
|
+
if (!raw || raw.trim() === '')
|
|
65
|
+
return defaultValue;
|
|
66
|
+
const trimmed = raw.trim();
|
|
67
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
68
|
+
if (!Number.isFinite(parsed)) {
|
|
69
|
+
warn(`Invalid integer for ${name}: "${trimmed}", using default ${defaultValue}`);
|
|
70
|
+
return defaultValue;
|
|
71
|
+
}
|
|
72
|
+
if (options?.min != null && parsed < options.min) {
|
|
73
|
+
warn(`Value for ${name} (${parsed}) is below minimum ${options.min}, using default ${defaultValue}`);
|
|
74
|
+
return defaultValue;
|
|
75
|
+
}
|
|
76
|
+
if (options?.max != null && parsed > options.max) {
|
|
77
|
+
warn(`Value for ${name} (${parsed}) exceeds maximum ${options.max}, using default ${defaultValue}`);
|
|
78
|
+
return defaultValue;
|
|
79
|
+
}
|
|
80
|
+
return parsed;
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Float helpers
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/**
|
|
86
|
+
* Parse an optional float environment variable.
|
|
87
|
+
*
|
|
88
|
+
* - Missing / empty value -> returns `defaultValue`.
|
|
89
|
+
* - Present but not a valid number -> logs a warning, returns `defaultValue`.
|
|
90
|
+
* - `min` / `max` constraints are enforced when provided.
|
|
91
|
+
*/
|
|
92
|
+
export function parseFloatEnv(name, defaultValue, options) {
|
|
93
|
+
const raw = (typeof globalThis.process !== 'undefined' ? process.env[name] : undefined)?.trim();
|
|
94
|
+
if (!raw)
|
|
95
|
+
return defaultValue;
|
|
96
|
+
return parseFloatValue(name, raw, defaultValue, options);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse a float from a raw string value (not directly from process.env).
|
|
100
|
+
*
|
|
101
|
+
* - `undefined` / empty -> returns `defaultValue`.
|
|
102
|
+
* - Present but not a valid number -> logs a warning, returns `defaultValue`.
|
|
103
|
+
*/
|
|
104
|
+
export function parseFloatValue(name, raw, defaultValue, options) {
|
|
105
|
+
const warn = options?.warn ?? defaultWarn;
|
|
106
|
+
if (!raw || raw.trim() === '')
|
|
107
|
+
return defaultValue;
|
|
108
|
+
const trimmed = raw.trim();
|
|
109
|
+
const parsed = Number.parseFloat(trimmed);
|
|
110
|
+
if (!Number.isFinite(parsed)) {
|
|
111
|
+
warn(`Invalid number for ${name}: "${trimmed}", using default ${defaultValue}`);
|
|
112
|
+
return defaultValue;
|
|
113
|
+
}
|
|
114
|
+
if (options?.min != null && parsed < options.min) {
|
|
115
|
+
warn(`Value for ${name} (${parsed}) is below minimum ${options.min}, using default ${defaultValue}`);
|
|
116
|
+
return defaultValue;
|
|
117
|
+
}
|
|
118
|
+
if (options?.max != null && parsed > options.max) {
|
|
119
|
+
warn(`Value for ${name} (${parsed}) exceeds maximum ${options.max}, using default ${defaultValue}`);
|
|
120
|
+
return defaultValue;
|
|
121
|
+
}
|
|
122
|
+
return parsed;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=env-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-parse.js","sourceRoot":"","sources":["../src/env-parse.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized Error Handling for Takos Platform
|
|
3
|
+
*
|
|
4
|
+
* This module provides a consistent error handling pattern across all takos packages.
|
|
5
|
+
* All errors extend from AppError and include:
|
|
6
|
+
* - code: A unique error code for client-side handling
|
|
7
|
+
* - message: A user-safe message (no internal details)
|
|
8
|
+
* - statusCode: The HTTP status code to return
|
|
9
|
+
* - details: Optional field-level or additional details
|
|
10
|
+
*/
|
|
11
|
+
import type { Logger } from './logger.js';
|
|
12
|
+
/**
|
|
13
|
+
* Standard error codes for consistent client handling
|
|
14
|
+
*/
|
|
15
|
+
export declare const ErrorCodes: {
|
|
16
|
+
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
17
|
+
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
18
|
+
readonly PAYMENT_REQUIRED: "PAYMENT_REQUIRED";
|
|
19
|
+
readonly FORBIDDEN: "FORBIDDEN";
|
|
20
|
+
readonly NOT_FOUND: "NOT_FOUND";
|
|
21
|
+
readonly CONFLICT: "CONFLICT";
|
|
22
|
+
readonly GONE: "GONE";
|
|
23
|
+
readonly VALIDATION_ERROR: "VALIDATION_ERROR";
|
|
24
|
+
readonly RATE_LIMITED: "RATE_LIMITED";
|
|
25
|
+
readonly PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE";
|
|
26
|
+
readonly INTERNAL_ERROR: "INTERNAL_ERROR";
|
|
27
|
+
readonly NOT_IMPLEMENTED: "NOT_IMPLEMENTED";
|
|
28
|
+
readonly SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE";
|
|
29
|
+
readonly BAD_GATEWAY: "BAD_GATEWAY";
|
|
30
|
+
readonly GATEWAY_TIMEOUT: "GATEWAY_TIMEOUT";
|
|
31
|
+
};
|
|
32
|
+
export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
|
|
33
|
+
/**
|
|
34
|
+
* Standard error response format for API responses
|
|
35
|
+
*/
|
|
36
|
+
export interface ErrorResponse {
|
|
37
|
+
error: {
|
|
38
|
+
code: string;
|
|
39
|
+
message: string;
|
|
40
|
+
details?: unknown;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Field-level validation error details
|
|
45
|
+
*/
|
|
46
|
+
export interface ValidationErrorDetail {
|
|
47
|
+
field: string;
|
|
48
|
+
message: string;
|
|
49
|
+
value?: unknown;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Base application error class
|
|
53
|
+
* All custom errors should extend from this class
|
|
54
|
+
*/
|
|
55
|
+
export declare class AppError extends Error {
|
|
56
|
+
readonly code: ErrorCode;
|
|
57
|
+
readonly statusCode: number;
|
|
58
|
+
readonly details?: unknown;
|
|
59
|
+
constructor(message: string, code?: ErrorCode, statusCode?: number, details?: unknown);
|
|
60
|
+
/**
|
|
61
|
+
* Convert error to API response format
|
|
62
|
+
* This ensures no internal details leak to clients
|
|
63
|
+
*/
|
|
64
|
+
toResponse(): ErrorResponse;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 400 Bad Request - Invalid request syntax or parameters
|
|
68
|
+
*/
|
|
69
|
+
export declare class BadRequestError extends AppError {
|
|
70
|
+
constructor(message?: string, details?: unknown);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 401 Unauthorized - Authentication required or invalid
|
|
74
|
+
*/
|
|
75
|
+
export declare class AuthenticationError extends AppError {
|
|
76
|
+
constructor(message?: string, details?: unknown);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 402 Payment Required - Payment is required to access the resource
|
|
80
|
+
*/
|
|
81
|
+
export declare class PaymentRequiredError extends AppError {
|
|
82
|
+
constructor(message?: string, details?: unknown);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 403 Forbidden - Authenticated but not authorized
|
|
86
|
+
*/
|
|
87
|
+
export declare class AuthorizationError extends AppError {
|
|
88
|
+
constructor(message?: string, details?: unknown);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 404 Not Found - Resource does not exist
|
|
92
|
+
*/
|
|
93
|
+
export declare class NotFoundError extends AppError {
|
|
94
|
+
constructor(resource?: string, details?: unknown);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 409 Conflict - Resource conflict (e.g., duplicate)
|
|
98
|
+
*/
|
|
99
|
+
export declare class ConflictError extends AppError {
|
|
100
|
+
constructor(message?: string, details?: unknown);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 410 Gone - Resource no longer available
|
|
104
|
+
*/
|
|
105
|
+
export declare class GoneError extends AppError {
|
|
106
|
+
constructor(message?: string, details?: unknown);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 413 Payload Too Large - Request payload exceeds limit
|
|
110
|
+
*/
|
|
111
|
+
export declare class PayloadTooLargeError extends AppError {
|
|
112
|
+
constructor(message?: string, details?: unknown);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 422 Unprocessable Entity - Validation failed
|
|
116
|
+
*/
|
|
117
|
+
export declare class ValidationError extends AppError {
|
|
118
|
+
readonly fieldErrors: ValidationErrorDetail[];
|
|
119
|
+
constructor(message?: string, fieldErrors?: ValidationErrorDetail[]);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 429 Too Many Requests - Rate limit exceeded
|
|
123
|
+
*/
|
|
124
|
+
export declare class RateLimitError extends AppError {
|
|
125
|
+
readonly retryAfter?: number;
|
|
126
|
+
constructor(message?: string, retryAfter?: number);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 500 Internal Server Error - Unexpected server error
|
|
130
|
+
*/
|
|
131
|
+
export declare class InternalError extends AppError {
|
|
132
|
+
constructor(message?: string, details?: unknown);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 501 Not Implemented - Functionality not implemented
|
|
136
|
+
*/
|
|
137
|
+
export declare class NotImplementedError extends AppError {
|
|
138
|
+
constructor(message?: string, details?: unknown);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 502 Bad Gateway - Invalid response from upstream service
|
|
142
|
+
*/
|
|
143
|
+
export declare class BadGatewayError extends AppError {
|
|
144
|
+
constructor(message?: string, details?: unknown);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 503 Service Unavailable - Service temporarily unavailable
|
|
148
|
+
*/
|
|
149
|
+
export declare class ServiceUnavailableError extends AppError {
|
|
150
|
+
constructor(message?: string, details?: unknown);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 504 Gateway Timeout - Upstream service timeout
|
|
154
|
+
*/
|
|
155
|
+
export declare class GatewayTimeoutError extends AppError {
|
|
156
|
+
constructor(message?: string, details?: unknown);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Type guard to check if an error is an AppError
|
|
160
|
+
*/
|
|
161
|
+
export declare function isAppError(error: unknown): error is AppError;
|
|
162
|
+
/**
|
|
163
|
+
* Convert unknown error to AppError
|
|
164
|
+
* Use this to normalize errors before sending responses
|
|
165
|
+
*/
|
|
166
|
+
export declare function normalizeError(error: unknown, logger?: Logger): AppError;
|
|
167
|
+
/**
|
|
168
|
+
* Extract a human-readable message from an unknown thrown value.
|
|
169
|
+
*
|
|
170
|
+
* When called with a single argument the behaviour matches the former
|
|
171
|
+
* `runtime-service/utils/error-message` helper (`String(err)` for
|
|
172
|
+
* non-Error values). When a `fallback` string is supplied the
|
|
173
|
+
* behaviour matches the former `control/web/lib/errors` helper
|
|
174
|
+
* (returns the fallback when no meaningful message can be extracted).
|
|
175
|
+
*/
|
|
176
|
+
export declare function getErrorMessage(error: unknown, fallback?: string): string;
|
|
177
|
+
/**
|
|
178
|
+
* Log error with full details for server-side debugging
|
|
179
|
+
*/
|
|
180
|
+
export declare function logError(error: unknown, context?: Record<string, unknown>, logger?: Logger): void;
|
|
181
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|