@outfitter/contracts 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/dist/actions.d.ts +8 -3
- package/dist/actions.js +25 -6
- package/dist/assert/index.d.ts +7 -3
- package/dist/assert/index.js +59 -6
- package/dist/capabilities.js +57 -8
- package/dist/context.d.ts +8 -3
- package/dist/context.js +1 -1
- package/dist/envelope.d.ts +6 -2
- package/dist/envelope.js +49 -7
- package/dist/errors.d.ts +6 -2
- package/dist/errors.js +7 -1
- package/dist/from-fetch.d.ts +7 -0
- package/dist/from-fetch.js +110 -0
- package/dist/handler.d.ts +7 -2
- package/dist/hints.d.ts +2 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.js +17 -153
- package/dist/internal/error-base.d.ts +2 -0
- package/dist/internal/error-base.js +31 -0
- package/dist/internal/error-operational.d.ts +3 -0
- package/dist/internal/error-operational.js +125 -0
- package/dist/internal/error-serialization.d.ts +7 -0
- package/dist/{shared/@outfitter/contracts-3wj7xghe.js → internal/error-serialization.js} +28 -67
- package/dist/internal/error-taxonomy.d.ts +2 -0
- package/dist/internal/error-taxonomy.js +21 -0
- package/dist/internal/error-validation.d.ts +3 -0
- package/dist/internal/error-validation.js +121 -0
- package/dist/internal/safe-json.d.ts +7 -0
- package/dist/internal/safe-json.js +66 -0
- package/dist/internal/schema-converters.d.ts +26 -0
- package/dist/internal/schema-converters.js +12 -0
- package/dist/internal/schema-primitives.d.ts +10 -0
- package/dist/internal/schema-primitives.js +9 -0
- package/dist/internal/schema-types.d.ts +2 -0
- package/dist/internal/schema-types.js +9 -0
- package/dist/logging.js +11 -3
- package/dist/recovery.d.ts +6 -2
- package/dist/recovery.js +49 -6
- package/dist/resilience.d.ts +6 -2
- package/dist/resilience.js +80 -4
- package/dist/result/index.js +1 -16
- package/dist/result/utilities.js +29 -7
- package/dist/schema.d.ts +2 -1
- package/dist/schema.js +165 -2
- package/dist/serialization.d.ts +8 -2
- package/dist/serialization.js +1 -3
- package/dist/shared/@outfitter/{contracts-k71jqd1m.d.ts → contracts-10p5q75w.d.ts} +1 -1
- package/dist/shared/@outfitter/contracts-1zzcpfyg.d.ts +40 -0
- package/dist/shared/@outfitter/contracts-3f5k5tg5.d.ts +28 -0
- package/dist/shared/@outfitter/contracts-3qmyq81n.d.ts +78 -0
- package/dist/shared/@outfitter/contracts-3re9d4bp.js +114 -0
- package/dist/shared/@outfitter/contracts-735ecmbq.d.ts +107 -0
- package/dist/shared/@outfitter/contracts-7a0xmwbg.d.ts +11 -0
- package/dist/shared/@outfitter/contracts-8cmkh2db.d.ts +31 -0
- package/dist/shared/@outfitter/{contracts-agmt8915.js → contracts-c3qfce25.js} +3 -0
- package/dist/shared/@outfitter/{contracts-1waabxbk.d.ts → contracts-drwd9ywk.d.ts} +4 -1
- package/dist/shared/@outfitter/{contracts-0snpmkdt.js → contracts-hgh47193.js} +10 -4
- package/dist/shared/@outfitter/contracts-hrepwwne.js +62 -0
- package/dist/shared/@outfitter/contracts-jtn6b927.js +18 -0
- package/dist/shared/@outfitter/contracts-jtt6dnmg.js +2 -0
- package/dist/shared/@outfitter/contracts-jyhqr766.js +25 -0
- package/dist/shared/@outfitter/contracts-mehpmvwp.d.ts +164 -0
- package/dist/shared/@outfitter/contracts-msxdg52h.d.ts +125 -0
- package/dist/shared/@outfitter/{contracts-95cc3y06.d.ts → contracts-mt027fqj.d.ts} +2 -1
- package/dist/shared/@outfitter/contracts-njb2art4.d.ts +174 -0
- package/dist/shared/@outfitter/contracts-p77yjs4g.d.ts +46 -0
- package/dist/shared/@outfitter/contracts-qpbv29bg.d.ts +59 -0
- package/dist/shared/@outfitter/contracts-sawwfgb5.js +111 -0
- package/dist/shared/@outfitter/{contracts-e4m948m7.d.ts → contracts-t4txv24h.d.ts} +2 -1
- package/dist/shared/@outfitter/contracts-vbgt9rfn.d.ts +74 -0
- package/dist/shared/@outfitter/{contracts-56pcsavx.d.ts → contracts-vhajx4gg.d.ts} +8 -2
- package/dist/shared/@outfitter/contracts-vhr2ep6b.js +3 -0
- package/dist/shared/@outfitter/contracts-w7nvcwrp.d.ts +44 -0
- package/dist/shared/@outfitter/contracts-x0ppyt7e.d.ts +76 -0
- package/dist/shared/@outfitter/{contracts-0akf2sm6.d.ts → contracts-zma4mscd.d.ts} +16 -1
- package/dist/shared/@outfitter/contracts-zsgxsa91.d.ts +84 -0
- package/dist/stream.d.ts +2 -0
- package/dist/stream.js +1 -0
- package/dist/validation.d.ts +7 -3
- package/dist/validation.js +6 -2
- package/dist/wrap-error.d.ts +7 -0
- package/dist/wrap-error.js +71 -0
- package/package.json +44 -20
- package/dist/shared/@outfitter/contracts-31penhwa.d.ts +0 -81
- package/dist/shared/@outfitter/contracts-3gswmhb1.d.ts +0 -446
- package/dist/shared/@outfitter/contracts-4zaj7ejb.js +0 -52
- package/dist/shared/@outfitter/contracts-85nd53s9.js +0 -53
- package/dist/shared/@outfitter/contracts-9wtm5nsw.d.ts +0 -42
- package/dist/shared/@outfitter/contracts-cp5c6dws.js +0 -32
- package/dist/shared/@outfitter/contracts-d0tq2adf.js +0 -60
- package/dist/shared/@outfitter/contracts-mmg0npfk.d.ts +0 -30
- package/dist/shared/@outfitter/contracts-phjhz5q3.js +0 -293
- package/dist/shared/@outfitter/contracts-q0v44kef.js +0 -28
- package/dist/shared/@outfitter/contracts-r21yet6j.js +0 -80
- package/dist/shared/@outfitter/contracts-sm6vak1a.js +0 -14
- package/dist/shared/@outfitter/contracts-t79engf9.d.ts +0 -60
- package/dist/shared/@outfitter/contracts-wfht4q2b.js +0 -341
- package/dist/shared/@outfitter/contracts-zx72gyh1.js +0 -32
- /package/dist/{shared/@outfitter/contracts-37gpc56f.js → hints.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,153 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from "./
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from "./
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
capabilityAll,
|
|
19
|
-
getActionsForSurface
|
|
20
|
-
} from "./shared/@outfitter/contracts-d0tq2adf.js";
|
|
21
|
-
import {
|
|
22
|
-
getBackoffDelay,
|
|
23
|
-
isRecoverable,
|
|
24
|
-
isRetryable,
|
|
25
|
-
shouldRetry
|
|
26
|
-
} from "./shared/@outfitter/contracts-4zaj7ejb.js";
|
|
27
|
-
import {
|
|
28
|
-
zodToJsonSchema
|
|
29
|
-
} from "./shared/@outfitter/contracts-wfht4q2b.js";
|
|
30
|
-
import {
|
|
31
|
-
ACTION_SURFACES,
|
|
32
|
-
DEFAULT_REGISTRY_SURFACES,
|
|
33
|
-
createActionRegistry,
|
|
34
|
-
defineAction
|
|
35
|
-
} from "./shared/@outfitter/contracts-q0v44kef.js";
|
|
36
|
-
import {
|
|
37
|
-
retry,
|
|
38
|
-
withTimeout
|
|
39
|
-
} from "./shared/@outfitter/contracts-r21yet6j.js";
|
|
40
|
-
import {
|
|
41
|
-
combine2,
|
|
42
|
-
combine3,
|
|
43
|
-
expect,
|
|
44
|
-
orElse,
|
|
45
|
-
unwrapOrElse
|
|
46
|
-
} from "./shared/@outfitter/contracts-zx72gyh1.js";
|
|
47
|
-
import {
|
|
48
|
-
toEnvelope,
|
|
49
|
-
toHttpResponse
|
|
50
|
-
} from "./shared/@outfitter/contracts-85nd53s9.js";
|
|
51
|
-
import {
|
|
52
|
-
deserializeError,
|
|
53
|
-
safeParse,
|
|
54
|
-
safeStringify,
|
|
55
|
-
serializeError
|
|
56
|
-
} from "./shared/@outfitter/contracts-3wj7xghe.js";
|
|
57
|
-
import {
|
|
58
|
-
DEFAULT_PATTERNS,
|
|
59
|
-
DEFAULT_SENSITIVE_KEYS,
|
|
60
|
-
createRedactor
|
|
61
|
-
} from "./shared/@outfitter/contracts-s15x2rs4.js";
|
|
62
|
-
import {
|
|
63
|
-
AlreadyExistsError,
|
|
64
|
-
AmbiguousError,
|
|
65
|
-
AssertionError,
|
|
66
|
-
AuthError,
|
|
67
|
-
CancelledError,
|
|
68
|
-
ConflictError,
|
|
69
|
-
ERROR_CODES,
|
|
70
|
-
InternalError,
|
|
71
|
-
NetworkError,
|
|
72
|
-
NotFoundError,
|
|
73
|
-
PermissionError,
|
|
74
|
-
RateLimitError,
|
|
75
|
-
TimeoutError,
|
|
76
|
-
ValidationError,
|
|
77
|
-
exitCodeMap,
|
|
78
|
-
getExitCode,
|
|
79
|
-
getStatusCode,
|
|
80
|
-
statusCodeMap
|
|
81
|
-
} from "./shared/@outfitter/contracts-phjhz5q3.js";
|
|
82
|
-
import {
|
|
83
|
-
createContext,
|
|
84
|
-
generateRequestId
|
|
85
|
-
} from "./shared/@outfitter/contracts-agmt8915.js";
|
|
86
|
-
import {
|
|
87
|
-
createLoggerFactory
|
|
88
|
-
} from "./shared/@outfitter/contracts-sm6vak1a.js";
|
|
89
|
-
|
|
90
|
-
// packages/contracts/src/index.ts
|
|
91
|
-
import { Result, TaggedError } from "better-result";
|
|
92
|
-
export {
|
|
93
|
-
zodToJsonSchema,
|
|
94
|
-
withTimeout,
|
|
95
|
-
validateInput,
|
|
96
|
-
unwrapOrElse,
|
|
97
|
-
toHttpResponse,
|
|
98
|
-
toEnvelope,
|
|
99
|
-
statusCodeMap,
|
|
100
|
-
shouldRetry,
|
|
101
|
-
serializeError,
|
|
102
|
-
safeStringify,
|
|
103
|
-
safeParse,
|
|
104
|
-
retry,
|
|
105
|
-
orElse,
|
|
106
|
-
isRetryable,
|
|
107
|
-
isRecoverable,
|
|
108
|
-
isNonEmptyArray,
|
|
109
|
-
getStatusCode,
|
|
110
|
-
getExitCode,
|
|
111
|
-
getBackoffDelay,
|
|
112
|
-
getActionsForSurface,
|
|
113
|
-
generateRequestId,
|
|
114
|
-
expect,
|
|
115
|
-
exitCodeMap,
|
|
116
|
-
deserializeError,
|
|
117
|
-
defineAction,
|
|
118
|
-
createValidator,
|
|
119
|
-
createRedactor,
|
|
120
|
-
createLoggerFactory,
|
|
121
|
-
createContext,
|
|
122
|
-
createActionRegistry,
|
|
123
|
-
combine3,
|
|
124
|
-
combine2,
|
|
125
|
-
capabilityAll,
|
|
126
|
-
capability,
|
|
127
|
-
assertNonEmpty,
|
|
128
|
-
assertMatches,
|
|
129
|
-
assertDefined,
|
|
130
|
-
ValidationError,
|
|
131
|
-
TimeoutError,
|
|
132
|
-
TaggedError,
|
|
133
|
-
Result,
|
|
134
|
-
RateLimitError,
|
|
135
|
-
PermissionError,
|
|
136
|
-
NotFoundError,
|
|
137
|
-
NetworkError,
|
|
138
|
-
InternalError,
|
|
139
|
-
ERROR_CODES,
|
|
140
|
-
DEFAULT_SENSITIVE_KEYS,
|
|
141
|
-
DEFAULT_REGISTRY_SURFACES,
|
|
142
|
-
DEFAULT_PATTERNS,
|
|
143
|
-
DEFAULT_ACTION_SURFACES,
|
|
144
|
-
ConflictError,
|
|
145
|
-
CancelledError,
|
|
146
|
-
CAPABILITY_SURFACES,
|
|
147
|
-
AuthError,
|
|
148
|
-
AssertionError,
|
|
149
|
-
AmbiguousError,
|
|
150
|
-
AlreadyExistsError,
|
|
151
|
-
ACTION_SURFACES,
|
|
152
|
-
ACTION_CAPABILITIES
|
|
153
|
-
};
|
|
1
|
+
export { Result, TaggedError } from "better-result";
|
|
2
|
+
export { ACTION_SURFACES, createActionRegistry, DEFAULT_REGISTRY_SURFACES, defineAction } from "./actions.js";
|
|
3
|
+
export { assertDefined, assertMatches, assertNonEmpty, expectErr, expectOk, isNonEmptyArray } from "./assert/index.js";
|
|
4
|
+
export { ACTION_CAPABILITIES, CAPABILITY_SURFACES, capability, capabilityAll, DEFAULT_ACTION_SURFACES, getActionsForSurface } from "./capabilities.js";
|
|
5
|
+
export { createContext, generateRequestId } from "./context.js";
|
|
6
|
+
export { toEnvelope, toHttpResponse } from "./envelope.js";
|
|
7
|
+
export { fromFetch } from "./from-fetch.js";
|
|
8
|
+
export { AlreadyExistsError, AmbiguousError, AssertionError, AuthError, CancelledError, ConflictError, ERROR_CODES, errorCategoryMeta, exitCodeMap, getExitCode, getStatusCode, InternalError, jsonRpcCodeMap, NetworkError, NotFoundError, PermissionError, RateLimitError, retryableMap, statusCodeMap, TimeoutError, ValidationError } from "./errors.js";
|
|
9
|
+
export { createLoggerFactory } from "./logging.js";
|
|
10
|
+
export { getBackoffDelay, isRecoverable, isRetryable, shouldRetry } from "./recovery.js";
|
|
11
|
+
export { createRedactor, DEFAULT_PATTERNS, DEFAULT_SENSITIVE_KEYS } from "./redactor.js";
|
|
12
|
+
export { retry, withTimeout } from "./resilience.js";
|
|
13
|
+
export { combine2, combine3, expect, orElse, unwrapOrElse } from "./result/index.js";
|
|
14
|
+
export { zodToJsonSchema } from "./schema.js";
|
|
15
|
+
export { deserializeError, safeParse, safeStringify, serializeError } from "./serialization.js";
|
|
16
|
+
export { createValidator, formatZodIssues, parseInput, validateInput } from "./validation.js";
|
|
17
|
+
export { composeMappers, extractMessage, isOutfitterError, wrapError } from "./wrap-error.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { AlreadyExistsErrorBase, AmbiguousErrorBase, AssertionErrorBase, AuthErrorBase, CancelledErrorBase, ConflictErrorBase, InternalErrorBase, NetworkErrorBase, NotFoundErrorBase, PermissionErrorBase, RateLimitErrorBase, TimeoutErrorBase, ValidationErrorBase } from "../shared/@outfitter/contracts-qpbv29bg.js";
|
|
2
|
+
export { ValidationErrorBase, TimeoutErrorBase, RateLimitErrorBase, PermissionErrorBase, NotFoundErrorBase, NetworkErrorBase, InternalErrorBase, ConflictErrorBase, CancelledErrorBase, AuthErrorBase, AssertionErrorBase, AmbiguousErrorBase, AlreadyExistsErrorBase };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
AlreadyExistsErrorBase,
|
|
4
|
+
AmbiguousErrorBase,
|
|
5
|
+
AssertionErrorBase,
|
|
6
|
+
AuthErrorBase,
|
|
7
|
+
CancelledErrorBase,
|
|
8
|
+
ConflictErrorBase,
|
|
9
|
+
InternalErrorBase,
|
|
10
|
+
NetworkErrorBase,
|
|
11
|
+
NotFoundErrorBase,
|
|
12
|
+
PermissionErrorBase,
|
|
13
|
+
RateLimitErrorBase,
|
|
14
|
+
TimeoutErrorBase,
|
|
15
|
+
ValidationErrorBase
|
|
16
|
+
} from "../shared/@outfitter/contracts-jtn6b927.js";
|
|
17
|
+
export {
|
|
18
|
+
ValidationErrorBase,
|
|
19
|
+
TimeoutErrorBase,
|
|
20
|
+
RateLimitErrorBase,
|
|
21
|
+
PermissionErrorBase,
|
|
22
|
+
NotFoundErrorBase,
|
|
23
|
+
NetworkErrorBase,
|
|
24
|
+
InternalErrorBase,
|
|
25
|
+
ConflictErrorBase,
|
|
26
|
+
CancelledErrorBase,
|
|
27
|
+
AuthErrorBase,
|
|
28
|
+
AssertionErrorBase,
|
|
29
|
+
AmbiguousErrorBase,
|
|
30
|
+
AlreadyExistsErrorBase
|
|
31
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AuthError, CancelledError, InternalError, NetworkError, PermissionError, RateLimitError, TimeoutError } from "../shared/@outfitter/contracts-735ecmbq.js";
|
|
2
|
+
import "../shared/@outfitter/contracts-qpbv29bg.js";
|
|
3
|
+
export { TimeoutError, RateLimitError, PermissionError, NetworkError, InternalError, CancelledError, AuthError };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
AuthErrorBase,
|
|
4
|
+
CancelledErrorBase,
|
|
5
|
+
InternalErrorBase,
|
|
6
|
+
NetworkErrorBase,
|
|
7
|
+
PermissionErrorBase,
|
|
8
|
+
RateLimitErrorBase,
|
|
9
|
+
TimeoutErrorBase
|
|
10
|
+
} from "../shared/@outfitter/contracts-jtn6b927.js";
|
|
11
|
+
import {
|
|
12
|
+
getExitCode,
|
|
13
|
+
getStatusCode
|
|
14
|
+
} from "../shared/@outfitter/contracts-sawwfgb5.js";
|
|
15
|
+
|
|
16
|
+
// packages/contracts/src/internal/error-operational.ts
|
|
17
|
+
class PermissionError extends PermissionErrorBase {
|
|
18
|
+
category = "permission";
|
|
19
|
+
static create(message, context) {
|
|
20
|
+
return new PermissionError({
|
|
21
|
+
message,
|
|
22
|
+
...context != null && { context }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
exitCode() {
|
|
26
|
+
return getExitCode(this.category);
|
|
27
|
+
}
|
|
28
|
+
statusCode() {
|
|
29
|
+
return getStatusCode(this.category);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class TimeoutError extends TimeoutErrorBase {
|
|
34
|
+
category = "timeout";
|
|
35
|
+
static create(operation, timeoutMs) {
|
|
36
|
+
return new TimeoutError({
|
|
37
|
+
message: `${operation} timed out after ${timeoutMs}ms`,
|
|
38
|
+
operation,
|
|
39
|
+
timeoutMs
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
exitCode() {
|
|
43
|
+
return getExitCode(this.category);
|
|
44
|
+
}
|
|
45
|
+
statusCode() {
|
|
46
|
+
return getStatusCode(this.category);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
class RateLimitError extends RateLimitErrorBase {
|
|
51
|
+
category = "rate_limit";
|
|
52
|
+
static create(message, retryAfterSeconds) {
|
|
53
|
+
return new RateLimitError({
|
|
54
|
+
message,
|
|
55
|
+
...retryAfterSeconds != null && { retryAfterSeconds }
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
exitCode() {
|
|
59
|
+
return getExitCode(this.category);
|
|
60
|
+
}
|
|
61
|
+
statusCode() {
|
|
62
|
+
return getStatusCode(this.category);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class NetworkError extends NetworkErrorBase {
|
|
67
|
+
category = "network";
|
|
68
|
+
static create(message, context) {
|
|
69
|
+
return new NetworkError({ message, ...context != null && { context } });
|
|
70
|
+
}
|
|
71
|
+
exitCode() {
|
|
72
|
+
return getExitCode(this.category);
|
|
73
|
+
}
|
|
74
|
+
statusCode() {
|
|
75
|
+
return getStatusCode(this.category);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
class InternalError extends InternalErrorBase {
|
|
80
|
+
category = "internal";
|
|
81
|
+
static create(message, context) {
|
|
82
|
+
return new InternalError({ message, ...context != null && { context } });
|
|
83
|
+
}
|
|
84
|
+
exitCode() {
|
|
85
|
+
return getExitCode(this.category);
|
|
86
|
+
}
|
|
87
|
+
statusCode() {
|
|
88
|
+
return getStatusCode(this.category);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
class AuthError extends AuthErrorBase {
|
|
93
|
+
category = "auth";
|
|
94
|
+
static create(message, reason) {
|
|
95
|
+
return new AuthError({ message, ...reason != null && { reason } });
|
|
96
|
+
}
|
|
97
|
+
exitCode() {
|
|
98
|
+
return getExitCode(this.category);
|
|
99
|
+
}
|
|
100
|
+
statusCode() {
|
|
101
|
+
return getStatusCode(this.category);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
class CancelledError extends CancelledErrorBase {
|
|
106
|
+
category = "cancelled";
|
|
107
|
+
static create(message) {
|
|
108
|
+
return new CancelledError({ message });
|
|
109
|
+
}
|
|
110
|
+
exitCode() {
|
|
111
|
+
return getExitCode(this.category);
|
|
112
|
+
}
|
|
113
|
+
statusCode() {
|
|
114
|
+
return getStatusCode(this.category);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
TimeoutError,
|
|
119
|
+
RateLimitError,
|
|
120
|
+
PermissionError,
|
|
121
|
+
NetworkError,
|
|
122
|
+
InternalError,
|
|
123
|
+
CancelledError,
|
|
124
|
+
AuthError
|
|
125
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SerializeErrorOptions, deserializeError, serializeError } from "../shared/@outfitter/contracts-p77yjs4g.js";
|
|
2
|
+
import "../shared/@outfitter/contracts-7a0xmwbg.js";
|
|
3
|
+
import "../shared/@outfitter/contracts-735ecmbq.js";
|
|
4
|
+
import "../shared/@outfitter/contracts-mehpmvwp.js";
|
|
5
|
+
import "../shared/@outfitter/contracts-qpbv29bg.js";
|
|
6
|
+
import "../shared/@outfitter/contracts-njb2art4.js";
|
|
7
|
+
export { serializeError, deserializeError, SerializeErrorOptions };
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import {
|
|
3
|
-
DEFAULT_PATTERNS,
|
|
4
|
-
DEFAULT_SENSITIVE_KEYS,
|
|
5
|
-
createRedactor
|
|
6
|
-
} from "./contracts-s15x2rs4.js";
|
|
7
2
|
import {
|
|
8
3
|
AlreadyExistsError,
|
|
9
4
|
AmbiguousError,
|
|
@@ -18,10 +13,9 @@ import {
|
|
|
18
13
|
RateLimitError,
|
|
19
14
|
TimeoutError,
|
|
20
15
|
ValidationError
|
|
21
|
-
} from "
|
|
16
|
+
} from "../shared/@outfitter/contracts-vhr2ep6b.js";
|
|
22
17
|
|
|
23
|
-
// packages/contracts/src/serialization.ts
|
|
24
|
-
import { Result } from "better-result";
|
|
18
|
+
// packages/contracts/src/internal/error-serialization.ts
|
|
25
19
|
var errorRegistry = {
|
|
26
20
|
ValidationError,
|
|
27
21
|
AmbiguousError,
|
|
@@ -45,6 +39,9 @@ function extractContext(error) {
|
|
|
45
39
|
switch (error._tag) {
|
|
46
40
|
case "ValidationError": {
|
|
47
41
|
const ve = error;
|
|
42
|
+
if (ve.context !== undefined) {
|
|
43
|
+
Object.assign(context, ve.context);
|
|
44
|
+
}
|
|
48
45
|
if (ve.field !== undefined) {
|
|
49
46
|
context["field"] = ve.field;
|
|
50
47
|
}
|
|
@@ -90,6 +87,9 @@ function extractContext(error) {
|
|
|
90
87
|
}
|
|
91
88
|
case "AmbiguousError": {
|
|
92
89
|
const amb = error;
|
|
90
|
+
if (amb.context !== undefined) {
|
|
91
|
+
Object.assign(context, amb.context);
|
|
92
|
+
}
|
|
93
93
|
context["candidates"] = amb.candidates;
|
|
94
94
|
break;
|
|
95
95
|
}
|
|
@@ -110,9 +110,9 @@ function extractContext(error) {
|
|
|
110
110
|
}
|
|
111
111
|
return Object.keys(context).length > 0 ? context : undefined;
|
|
112
112
|
}
|
|
113
|
-
function serializeError(error, options) {
|
|
114
|
-
const
|
|
115
|
-
const includeStack = options?.includeStack ?? !
|
|
113
|
+
function serializeError(error, options, isProduction) {
|
|
114
|
+
const production = isProduction ?? process.env["NODE_ENV"] === "production";
|
|
115
|
+
const includeStack = options?.includeStack ?? !production;
|
|
116
116
|
const context = extractContext(error);
|
|
117
117
|
const serialized = {
|
|
118
118
|
_tag: error._tag,
|
|
@@ -151,6 +151,10 @@ function deserializeError(data) {
|
|
|
151
151
|
if (field !== undefined) {
|
|
152
152
|
props.field = field;
|
|
153
153
|
}
|
|
154
|
+
const contextWithoutField = Object.fromEntries(Object.entries(context).filter(([key]) => key !== "field"));
|
|
155
|
+
if (Object.keys(contextWithoutField).length > 0) {
|
|
156
|
+
props.context = contextWithoutField;
|
|
157
|
+
}
|
|
154
158
|
return new ValidationError(props);
|
|
155
159
|
}
|
|
156
160
|
case "NotFoundError": {
|
|
@@ -239,11 +243,17 @@ function deserializeError(data) {
|
|
|
239
243
|
}
|
|
240
244
|
return new AuthError(props);
|
|
241
245
|
}
|
|
242
|
-
case "AmbiguousError":
|
|
243
|
-
|
|
246
|
+
case "AmbiguousError": {
|
|
247
|
+
const props = {
|
|
244
248
|
message: data.message,
|
|
245
249
|
candidates: context["candidates"] ?? []
|
|
246
|
-
}
|
|
250
|
+
};
|
|
251
|
+
const contextWithoutCandidates = Object.fromEntries(Object.entries(context).filter(([key]) => key !== "candidates"));
|
|
252
|
+
if (Object.keys(contextWithoutCandidates).length > 0) {
|
|
253
|
+
props.context = contextWithoutCandidates;
|
|
254
|
+
}
|
|
255
|
+
return new AmbiguousError(props);
|
|
256
|
+
}
|
|
247
257
|
case "AssertionError":
|
|
248
258
|
return new AssertionError({
|
|
249
259
|
message: data.message
|
|
@@ -263,56 +273,7 @@ function deserializeError(data) {
|
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
275
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
keys: [...DEFAULT_SENSITIVE_KEYS]
|
|
271
|
-
});
|
|
272
|
-
const replacer = (key, val) => {
|
|
273
|
-
if (typeof val === "bigint") {
|
|
274
|
-
return val.toString();
|
|
275
|
-
}
|
|
276
|
-
if (typeof val === "object" && val !== null) {
|
|
277
|
-
if (seen.has(val)) {
|
|
278
|
-
return "[Circular]";
|
|
279
|
-
}
|
|
280
|
-
seen.add(val);
|
|
281
|
-
}
|
|
282
|
-
if (key !== "" && redactor.isSensitiveKey(key) && val !== null && val !== undefined) {
|
|
283
|
-
return "[REDACTED]";
|
|
284
|
-
}
|
|
285
|
-
if (typeof val === "string") {
|
|
286
|
-
return redactor.redactString(val);
|
|
287
|
-
}
|
|
288
|
-
return val;
|
|
289
|
-
};
|
|
290
|
-
return JSON.stringify(value, replacer, space);
|
|
291
|
-
}
|
|
292
|
-
function safeParse(json, schema) {
|
|
293
|
-
let parsed;
|
|
294
|
-
try {
|
|
295
|
-
parsed = JSON.parse(json);
|
|
296
|
-
} catch (err) {
|
|
297
|
-
const errorMessage = err instanceof Error ? err.message : "Unknown parse error";
|
|
298
|
-
return Result.err(new ValidationError({
|
|
299
|
-
message: `JSON parse error: ${errorMessage}`
|
|
300
|
-
}));
|
|
301
|
-
}
|
|
302
|
-
if (schema === undefined) {
|
|
303
|
-
return Result.ok(parsed);
|
|
304
|
-
}
|
|
305
|
-
const parseResult = schema.safeParse(parsed);
|
|
306
|
-
if (parseResult.success) {
|
|
307
|
-
return Result.ok(parseResult.data);
|
|
308
|
-
}
|
|
309
|
-
const issues = parseResult.error.issues.map((issue) => {
|
|
310
|
-
const path = issue.path.length > 0 ? issue.path.join(".") : "(root)";
|
|
311
|
-
return `${path}: ${issue.message}`;
|
|
312
|
-
}).join("; ");
|
|
313
|
-
return Result.err(new ValidationError({
|
|
314
|
-
message: `Schema validation failed: ${issues}`
|
|
315
|
-
}));
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
export { serializeError, deserializeError, safeStringify, safeParse };
|
|
276
|
+
export {
|
|
277
|
+
serializeError,
|
|
278
|
+
deserializeError
|
|
279
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { ERROR_CODES, ErrorCategory, ErrorCategoryMeta, ErrorCode, KitErrorProps, SerializedError, errorCategoryMeta, exitCodeMap, getExitCode, getStatusCode, jsonRpcCodeMap, retryableMap, statusCodeMap } from "../shared/@outfitter/contracts-njb2art4.js";
|
|
2
|
+
export { statusCodeMap, retryableMap, jsonRpcCodeMap, getStatusCode, getExitCode, exitCodeMap, errorCategoryMeta, SerializedError, KitErrorProps, ErrorCode, ErrorCategoryMeta, ErrorCategory, ERROR_CODES };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
ERROR_CODES,
|
|
4
|
+
errorCategoryMeta,
|
|
5
|
+
exitCodeMap,
|
|
6
|
+
getExitCode,
|
|
7
|
+
getStatusCode,
|
|
8
|
+
jsonRpcCodeMap,
|
|
9
|
+
retryableMap,
|
|
10
|
+
statusCodeMap
|
|
11
|
+
} from "../shared/@outfitter/contracts-sawwfgb5.js";
|
|
12
|
+
export {
|
|
13
|
+
statusCodeMap,
|
|
14
|
+
retryableMap,
|
|
15
|
+
jsonRpcCodeMap,
|
|
16
|
+
getStatusCode,
|
|
17
|
+
getExitCode,
|
|
18
|
+
exitCodeMap,
|
|
19
|
+
errorCategoryMeta,
|
|
20
|
+
ERROR_CODES
|
|
21
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AlreadyExistsError, AmbiguousError, AssertionError, ConflictError, NotFoundError, ValidationError } from "../shared/@outfitter/contracts-mehpmvwp.js";
|
|
2
|
+
import "../shared/@outfitter/contracts-qpbv29bg.js";
|
|
3
|
+
export { ValidationError, NotFoundError, ConflictError, AssertionError, AmbiguousError, AlreadyExistsError };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
AlreadyExistsErrorBase,
|
|
4
|
+
AmbiguousErrorBase,
|
|
5
|
+
AssertionErrorBase,
|
|
6
|
+
ConflictErrorBase,
|
|
7
|
+
NotFoundErrorBase,
|
|
8
|
+
ValidationErrorBase
|
|
9
|
+
} from "../shared/@outfitter/contracts-jtn6b927.js";
|
|
10
|
+
import {
|
|
11
|
+
getExitCode,
|
|
12
|
+
getStatusCode
|
|
13
|
+
} from "../shared/@outfitter/contracts-sawwfgb5.js";
|
|
14
|
+
|
|
15
|
+
// packages/contracts/src/internal/error-validation.ts
|
|
16
|
+
class ValidationError extends ValidationErrorBase {
|
|
17
|
+
category = "validation";
|
|
18
|
+
static create(field, reason, context) {
|
|
19
|
+
return new ValidationError({
|
|
20
|
+
message: `${field}: ${reason}`,
|
|
21
|
+
field,
|
|
22
|
+
...context != null && { context }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static fromMessage(message, context) {
|
|
26
|
+
return new ValidationError({
|
|
27
|
+
message,
|
|
28
|
+
...context != null && { context }
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
exitCode() {
|
|
32
|
+
return getExitCode(this.category);
|
|
33
|
+
}
|
|
34
|
+
statusCode() {
|
|
35
|
+
return getStatusCode(this.category);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class AmbiguousError extends AmbiguousErrorBase {
|
|
40
|
+
category = "validation";
|
|
41
|
+
static create(what, candidates, context) {
|
|
42
|
+
return new AmbiguousError({
|
|
43
|
+
message: `Ambiguous ${what}: ${candidates.length} matches found`,
|
|
44
|
+
candidates,
|
|
45
|
+
...context != null && { context }
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
exitCode() {
|
|
49
|
+
return getExitCode(this.category);
|
|
50
|
+
}
|
|
51
|
+
statusCode() {
|
|
52
|
+
return getStatusCode(this.category);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
class AssertionError extends AssertionErrorBase {
|
|
57
|
+
category = "internal";
|
|
58
|
+
exitCode() {
|
|
59
|
+
return getExitCode(this.category);
|
|
60
|
+
}
|
|
61
|
+
statusCode() {
|
|
62
|
+
return getStatusCode(this.category);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class NotFoundError extends NotFoundErrorBase {
|
|
67
|
+
category = "not_found";
|
|
68
|
+
static create(resourceType, resourceId, context) {
|
|
69
|
+
return new NotFoundError({
|
|
70
|
+
message: `${resourceType} not found: ${resourceId}`,
|
|
71
|
+
resourceType,
|
|
72
|
+
resourceId,
|
|
73
|
+
...context != null && { context }
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
exitCode() {
|
|
77
|
+
return getExitCode(this.category);
|
|
78
|
+
}
|
|
79
|
+
statusCode() {
|
|
80
|
+
return getStatusCode(this.category);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
class AlreadyExistsError extends AlreadyExistsErrorBase {
|
|
85
|
+
category = "conflict";
|
|
86
|
+
static create(resourceType, resourceId, context) {
|
|
87
|
+
return new AlreadyExistsError({
|
|
88
|
+
message: `${resourceType} already exists: ${resourceId}`,
|
|
89
|
+
resourceType,
|
|
90
|
+
resourceId,
|
|
91
|
+
...context != null && { context }
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
exitCode() {
|
|
95
|
+
return getExitCode(this.category);
|
|
96
|
+
}
|
|
97
|
+
statusCode() {
|
|
98
|
+
return getStatusCode(this.category);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
class ConflictError extends ConflictErrorBase {
|
|
103
|
+
category = "conflict";
|
|
104
|
+
static create(message, context) {
|
|
105
|
+
return new ConflictError({ message, ...context != null && { context } });
|
|
106
|
+
}
|
|
107
|
+
exitCode() {
|
|
108
|
+
return getExitCode(this.category);
|
|
109
|
+
}
|
|
110
|
+
statusCode() {
|
|
111
|
+
return getStatusCode(this.category);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
ValidationError,
|
|
116
|
+
NotFoundError,
|
|
117
|
+
ConflictError,
|
|
118
|
+
AssertionError,
|
|
119
|
+
AmbiguousError,
|
|
120
|
+
AlreadyExistsError
|
|
121
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { safeParse, safeStringify } from "../shared/@outfitter/contracts-1zzcpfyg.js";
|
|
2
|
+
import "../shared/@outfitter/contracts-7a0xmwbg.js";
|
|
3
|
+
import "../shared/@outfitter/contracts-735ecmbq.js";
|
|
4
|
+
import "../shared/@outfitter/contracts-mehpmvwp.js";
|
|
5
|
+
import "../shared/@outfitter/contracts-qpbv29bg.js";
|
|
6
|
+
import "../shared/@outfitter/contracts-njb2art4.js";
|
|
7
|
+
export { safeStringify, safeParse };
|