@unconfirmed/sui-effect 0.1.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.
Files changed (115) hide show
  1. package/AGENTS.md +209 -0
  2. package/LICENSE +21 -0
  3. package/LLMS.md +6707 -0
  4. package/README.md +300 -0
  5. package/dist/domain/bcs.d.ts +101 -0
  6. package/dist/domain/bcs.d.ts.map +1 -0
  7. package/dist/domain/bcs.js +183 -0
  8. package/dist/domain/bcs.js.map +1 -0
  9. package/dist/domain/errors.d.ts +595 -0
  10. package/dist/domain/errors.d.ts.map +1 -0
  11. package/dist/domain/errors.js +476 -0
  12. package/dist/domain/errors.js.map +1 -0
  13. package/dist/domain/executed.d.ts +325 -0
  14. package/dist/domain/executed.d.ts.map +1 -0
  15. package/dist/domain/executed.js +253 -0
  16. package/dist/domain/executed.js.map +1 -0
  17. package/dist/domain/journal-entry.d.ts +468 -0
  18. package/dist/domain/journal-entry.d.ts.map +1 -0
  19. package/dist/domain/journal-entry.js +63 -0
  20. package/dist/domain/journal-entry.js.map +1 -0
  21. package/dist/domain/schemas.d.ts +950 -0
  22. package/dist/domain/schemas.d.ts.map +1 -0
  23. package/dist/domain/schemas.js +571 -0
  24. package/dist/domain/schemas.js.map +1 -0
  25. package/dist/domain/sui-schema.d.ts +12 -0
  26. package/dist/domain/sui-schema.d.ts.map +1 -0
  27. package/dist/domain/sui-schema.js +12 -0
  28. package/dist/domain/sui-schema.js.map +1 -0
  29. package/dist/extension.d.ts +7 -0
  30. package/dist/extension.d.ts.map +1 -0
  31. package/dist/extension.js +7 -0
  32. package/dist/extension.js.map +1 -0
  33. package/dist/index.d.ts +31 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +31 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/internal.d.ts +18 -0
  38. package/dist/internal.d.ts.map +1 -0
  39. package/dist/internal.js +18 -0
  40. package/dist/internal.js.map +1 -0
  41. package/dist/journal.d.ts +51 -0
  42. package/dist/journal.d.ts.map +1 -0
  43. package/dist/journal.js +18 -0
  44. package/dist/journal.js.map +1 -0
  45. package/dist/script.d.ts +7 -0
  46. package/dist/script.d.ts.map +1 -0
  47. package/dist/script.js +7 -0
  48. package/dist/script.js.map +1 -0
  49. package/dist/services/Journal.d.ts +76 -0
  50. package/dist/services/Journal.d.ts.map +1 -0
  51. package/dist/services/Journal.js +70 -0
  52. package/dist/services/Journal.js.map +1 -0
  53. package/dist/services/JournalKeyValueStore.d.ts +73 -0
  54. package/dist/services/JournalKeyValueStore.d.ts.map +1 -0
  55. package/dist/services/JournalKeyValueStore.js +155 -0
  56. package/dist/services/JournalKeyValueStore.js.map +1 -0
  57. package/dist/services/Script.d.ts +210 -0
  58. package/dist/services/Script.d.ts.map +1 -0
  59. package/dist/services/Script.js +441 -0
  60. package/dist/services/Script.js.map +1 -0
  61. package/dist/services/Signer.d.ts +132 -0
  62. package/dist/services/Signer.d.ts.map +1 -0
  63. package/dist/services/Signer.js +158 -0
  64. package/dist/services/Signer.js.map +1 -0
  65. package/dist/services/SubmitConfig.d.ts +175 -0
  66. package/dist/services/SubmitConfig.d.ts.map +1 -0
  67. package/dist/services/SubmitConfig.js +52 -0
  68. package/dist/services/SubmitConfig.js.map +1 -0
  69. package/dist/services/Sui.d.ts +295 -0
  70. package/dist/services/Sui.d.ts.map +1 -0
  71. package/dist/services/Sui.js +414 -0
  72. package/dist/services/Sui.js.map +1 -0
  73. package/dist/services/SuiCore.d.ts +227 -0
  74. package/dist/services/SuiCore.d.ts.map +1 -0
  75. package/dist/services/SuiCore.js +400 -0
  76. package/dist/services/SuiCore.js.map +1 -0
  77. package/dist/services/SuiCoreFake.d.ts +278 -0
  78. package/dist/services/SuiCoreFake.d.ts.map +1 -0
  79. package/dist/services/SuiCoreFake.js +1003 -0
  80. package/dist/services/SuiCoreFake.js.map +1 -0
  81. package/dist/services/SuiExtension.d.ts +208 -0
  82. package/dist/services/SuiExtension.d.ts.map +1 -0
  83. package/dist/services/SuiExtension.js +355 -0
  84. package/dist/services/SuiExtension.js.map +1 -0
  85. package/dist/services/SuiGraphQL.d.ts +98 -0
  86. package/dist/services/SuiGraphQL.d.ts.map +1 -0
  87. package/dist/services/SuiGraphQL.js +118 -0
  88. package/dist/services/SuiGraphQL.js.map +1 -0
  89. package/dist/services/Tx.d.ts +687 -0
  90. package/dist/services/Tx.d.ts.map +1 -0
  91. package/dist/services/Tx.js +1224 -0
  92. package/dist/services/Tx.js.map +1 -0
  93. package/dist/testing.d.ts +88 -0
  94. package/dist/testing.d.ts.map +1 -0
  95. package/dist/testing.js +163 -0
  96. package/dist/testing.js.map +1 -0
  97. package/dist/tx.d.ts +24 -0
  98. package/dist/tx.d.ts.map +1 -0
  99. package/dist/tx.js +24 -0
  100. package/dist/tx.js.map +1 -0
  101. package/docs/extensions.md +1685 -0
  102. package/examples/extension-template/README.md +170 -0
  103. package/examples/extension-template/package.json +44 -0
  104. package/examples/extension-template/scripts/check-package.ts +147 -0
  105. package/examples/extension-template/src/Escrow.ts +445 -0
  106. package/examples/extension-template/src/Platform.ts +136 -0
  107. package/examples/extension-template/src/errors.ts +61 -0
  108. package/examples/extension-template/src/extension.ts +63 -0
  109. package/examples/extension-template/src/index.ts +34 -0
  110. package/examples/extension-template/src/schema.ts +158 -0
  111. package/examples/extension-template/src/upstream.ts +66 -0
  112. package/examples/extension-template/test/escrow.test.ts +559 -0
  113. package/examples/extension-template/tsconfig.build.json +26 -0
  114. package/examples/extension-template/tsconfig.json +35 -0
  115. package/package.json +87 -0
@@ -0,0 +1,476 @@
1
+ /**
2
+ * The closed error taxonomy. Every failure sui-effect can produce is one of the
3
+ * classes in this file, every one is a `Schema.TaggedError` so it serializes,
4
+ * and the tags are flat: there is no error inheritance to match on.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+ import { Result, Schema } from "effect";
9
+ import { Digest, ExecutionReason, NotAppliedEvidence, ObjectId, SignedTransaction, TransactionEffects, Version } from "./schemas.js";
10
+ export { CleverError, ExecutionReason, MoveLocation } from "./schemas.js";
11
+ /**
12
+ * A request did not reach a usable answer. `retryable` is true for the statuses
13
+ * a read may be retried on: gRPC `UNAVAILABLE`, `DEADLINE_EXCEEDED`,
14
+ * `RESOURCE_EXHAUSTED`, `INTERNAL` and `UNKNOWN`, HTTP 5xx and 429, and
15
+ * timeouts. `INTERNAL` and `UNKNOWN` are in the set because the grpc-web
16
+ * transport reports a refused connection or a DNS failure as `INTERNAL` and an
17
+ * HTTP 500 as `UNKNOWN`, so without them a node that is merely down is never
18
+ * retried.
19
+ */
20
+ export class TransportError extends Schema.TaggedError()("TransportError", {
21
+ method: Schema.String,
22
+ retryable: Schema.Boolean,
23
+ status: Schema.optional(Schema.String),
24
+ cause: Schema.Defect()
25
+ }) {
26
+ /**
27
+ * Builds a `TransportError` out of whatever a call threw, classifying the
28
+ * status and the retryability the way `SuiCore` does for the SDK's own
29
+ * failures.
30
+ *
31
+ * This is for an extension that makes its own network calls — an operator
32
+ * HTTP API, a GraphQL endpoint, a sidecar — and wants its failures to sit on
33
+ * the same axis as the library's: `retryable` read off a gRPC status name, an
34
+ * HTTP status number (5xx and 429), or an abort or timeout, and `status`
35
+ * recorded as the node or the transport spelled it. Hand-building the three
36
+ * fields per call site is how they drift.
37
+ *
38
+ * `retryable` may be forced when the caller knows better than the shape of
39
+ * the cause — an idempotent read that is always safe to repeat, a write that
40
+ * never is. Left out, it is inferred, and inferred conservatively: an
41
+ * unrecognisable cause is **not** retryable.
42
+ *
43
+ * Never fails.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { TransportError } from "@unconfirmed/sui-effect"
48
+ * import { Effect } from "effect"
49
+ *
50
+ * const status = Effect.tryPromise({
51
+ * try: (signal) => fetch("https://operator.example/status", { signal }),
52
+ * catch: (cause) => TransportError.fromUnknown("operator.status", cause)
53
+ * })
54
+ * ```
55
+ */
56
+ static fromUnknown = (method, cause, retryable) => {
57
+ const classified = classifyTransportCause(cause);
58
+ return new TransportError({
59
+ method,
60
+ retryable: retryable ?? classified.retryable,
61
+ ...(classified.status === undefined ? {} : { status: classified.status }),
62
+ cause
63
+ });
64
+ };
65
+ }
66
+ /**
67
+ * gRPC status names a read may be retried on, plus HTTP 5xx and 429. Timeouts
68
+ * map to `DEADLINE_EXCEEDED` with `retryable: true`.
69
+ *
70
+ * `INTERNAL` and `UNKNOWN` are transport-level failures, not answers from the
71
+ * node: `@protobuf-ts/grpcweb-transport` turns a rejected `fetch` (connection
72
+ * refused, DNS failure) into an `RpcError` with code `INTERNAL`, and its
73
+ * grpc-web format maps HTTP 500 to `UNKNOWN` (503 to `UNAVAILABLE`, 504 to
74
+ * `DEADLINE_EXCEEDED`, 429 to `RESOURCE_EXHAUSTED`). Without them a read
75
+ * against a node that is merely down or restarting is never retried.
76
+ */
77
+ export const RETRYABLE_GRPC_STATUSES = new Set([
78
+ "UNAVAILABLE",
79
+ "DEADLINE_EXCEEDED",
80
+ "RESOURCE_EXHAUSTED",
81
+ "INTERNAL",
82
+ "UNKNOWN"
83
+ ]);
84
+ const isRetryableHttpStatus = (status) => status === 429 || status >= 500;
85
+ /**
86
+ * The `status` and `retryable` of a thrown value: a timeout or an abort, an
87
+ * HTTP status number, a gRPC status name, or nothing recognisable. Never fails.
88
+ */
89
+ export const classifyTransportCause = (cause) => {
90
+ if (typeof cause !== "object" || cause === null)
91
+ return { retryable: false };
92
+ const record = cause;
93
+ const tag = record["_tag"];
94
+ const name = record["name"];
95
+ if (tag === "TimeoutError" || name === "TimeoutError" || name === "AbortError") {
96
+ return { status: "DEADLINE_EXCEEDED", retryable: true };
97
+ }
98
+ const httpStatus = record["status"];
99
+ if (typeof httpStatus === "number") {
100
+ return { status: String(httpStatus), retryable: isRetryableHttpStatus(httpStatus) };
101
+ }
102
+ const code = record["code"];
103
+ if (typeof code === "string") {
104
+ return { status: code, retryable: RETRYABLE_GRPC_STATUSES.has(code) };
105
+ }
106
+ if (typeof code === "number")
107
+ return { status: String(code), retryable: false };
108
+ return { retryable: false };
109
+ };
110
+ /** The object does not exist, or has never existed. */
111
+ export class ObjectNotFound extends Schema.TaggedError()("ObjectNotFound", {
112
+ objectId: ObjectId,
113
+ version: Schema.optional(Version)
114
+ }) {
115
+ }
116
+ /** The object existed and has been deleted or wrapped. */
117
+ export class ObjectDeleted extends Schema.TaggedError()("ObjectDeleted", {
118
+ objectId: ObjectId,
119
+ version: Schema.optional(Version)
120
+ }) {
121
+ }
122
+ /** The node could not say what happened to the object (`ObjectError.reason: "unknown"`). */
123
+ export class ObjectUnavailable extends Schema.TaggedError()("ObjectUnavailable", { objectId: ObjectId, version: Schema.optional(Version) }) {
124
+ }
125
+ /** No transaction with this digest is known to the node. */
126
+ export class TransactionNotFound extends Schema.TaggedError()("TransactionNotFound", { digest: Digest }) {
127
+ }
128
+ /** The chain identifier the node reported is not the one the layer was built for. */
129
+ export class NetworkMismatch extends Schema.TaggedError()("NetworkMismatch", {
130
+ expected: Schema.String,
131
+ actual: Schema.String
132
+ }) {
133
+ }
134
+ /** BCS content or a schema boundary did not decode. */
135
+ export class DecodeError extends Schema.TaggedError()("DecodeError", {
136
+ objectId: Schema.optional(ObjectId),
137
+ expectedType: Schema.optional(Schema.String),
138
+ issue: Schema.String
139
+ }) {
140
+ }
141
+ /** Simulation reported an execution failure. No gas was charged. */
142
+ export class SimulationFailed extends Schema.TaggedError()("SimulationFailed", {
143
+ reason: ExecutionReason,
144
+ message: Schema.String
145
+ }) {
146
+ }
147
+ /** The transaction was applied on chain and failed. Gas was charged. */
148
+ export class ExecutionFailed extends Schema.TaggedError()("ExecutionFailed", {
149
+ digest: Digest,
150
+ reason: ExecutionReason,
151
+ command: Schema.optional(Schema.Number),
152
+ effects: TransactionEffects
153
+ }) {
154
+ }
155
+ /**
156
+ * Bytes may have reached the network and the outcome is unknown. Carries the
157
+ * signed transaction so an operator or a later process can reconcile it.
158
+ */
159
+ export class SubmissionUnknown extends Schema.TaggedError()("SubmissionUnknown", { digest: Digest, signed: Schema.optional(SignedTransaction), cause: Schema.Defect() }) {
160
+ }
161
+ /**
162
+ * The transaction provably cannot have been applied, and never will be.
163
+ *
164
+ * `evidence` is why. `"inputConsumed"` is only ever produced when a
165
+ * **different** transaction's own effects report that it took a pinned object
166
+ * at exactly the version these bytes pinned. An owned input that merely moved
167
+ * on, one whose consumer took a later version, and one whose last mutation the
168
+ * node will not name are all `SubmissionUnknown`, not this.
169
+ */
170
+ export class NotApplied extends Schema.TaggedError()("NotApplied", {
171
+ digest: Digest,
172
+ evidence: NotAppliedEvidence
173
+ }) {
174
+ }
175
+ /** A signer refused or failed to produce a signature. */
176
+ export class SigningError extends Schema.TaggedError()("SigningError", {
177
+ cause: Schema.Defect()
178
+ }) {
179
+ }
180
+ /** The transaction could not be built into bytes. */
181
+ export class BuildError extends Schema.TaggedError()("BuildError", {
182
+ message: Schema.String,
183
+ cause: Schema.Defect()
184
+ }) {
185
+ }
186
+ /** A preflight policy refused the transaction before it was signed. */
187
+ export class PolicyDenied extends Schema.TaggedError()("PolicyDenied", {
188
+ rule: Schema.String,
189
+ message: Schema.String
190
+ }) {
191
+ }
192
+ /** The submission journal could not be read or written. */
193
+ export class JournalError extends Schema.TaggedError()("JournalError", {
194
+ cause: Schema.Defect()
195
+ }) {
196
+ }
197
+ /**
198
+ * The effects of an applied transaction did not contain what the caller
199
+ * expected.
200
+ *
201
+ * Outcome `applied`, and exit 5: this error can only come from an `Executed`,
202
+ * which means the transaction reached the chain and gas was charged. What is
203
+ * missing is a receipt, not the transaction. Classifying it `not_applied`
204
+ * would tell the documented retry idiom to send the caller's intent a second
205
+ * time for a transaction that already ran.
206
+ */
207
+ export class UnexpectedEffects extends Schema.TaggedError()("UnexpectedEffects", { digest: Digest, expected: Schema.String, found: Schema.Array(ObjectId) }) {
208
+ }
209
+ /**
210
+ * The GraphQL endpoint an extension needs is not usable: none was configured,
211
+ * or the one that was could not be reached.
212
+ *
213
+ * sui-effect does not wrap the GraphQL API — it owns the {@link SuiGraphQL}
214
+ * *tag*, so two extensions that both read GraphQL share one client rather than
215
+ * opening two. This is the failure the tag's `layerUnavailable` produces, which
216
+ * is what an application provides when it has no endpoint: every call rejects
217
+ * with this instead of the extension discovering a missing dependency at
218
+ * construction. An extension maps it into its own union, or lets it through.
219
+ *
220
+ * Outcome `not_applied`: a read that did not happen changed nothing.
221
+ */
222
+ export class GraphQLUnavailable extends Schema.TaggedError()("GraphQLUnavailable", { method: Schema.String, reason: Schema.String }) {
223
+ }
224
+ /**
225
+ * A synchronous member of a Promise-faced extension was called before its
226
+ * runtime existed.
227
+ *
228
+ * `SuiExtension.fromService` builds its `ManagedRuntime` on first use, so until
229
+ * something has been awaited there is no service object and no synchronous
230
+ * member to read. Rather than hand back a Promise where the type says a value,
231
+ * the face throws this. Two cures, both in the extension's own hands:
232
+ * `await client.<name>.$ready()` once after registering, or register with
233
+ * `warm`, which builds the runtime inside `register` and makes every member
234
+ * real immediately.
235
+ *
236
+ * Outcome `not_applied`: nothing was sent.
237
+ */
238
+ export class ExtensionNotReady extends Schema.TaggedError()("ExtensionNotReady", { extension: Schema.String, member: Schema.String }) {
239
+ }
240
+ /** The schema of the whole taxonomy, used for serialization. */
241
+ export const SuiErrorSchema = Schema.Union([
242
+ TransportError,
243
+ ObjectNotFound,
244
+ ObjectDeleted,
245
+ ObjectUnavailable,
246
+ TransactionNotFound,
247
+ NetworkMismatch,
248
+ DecodeError,
249
+ SimulationFailed,
250
+ ExecutionFailed,
251
+ SubmissionUnknown,
252
+ NotApplied,
253
+ SigningError,
254
+ BuildError,
255
+ PolicyDenied,
256
+ JournalError,
257
+ UnexpectedEffects,
258
+ GraphQLUnavailable,
259
+ ExtensionNotReady
260
+ ]);
261
+ const OutcomeSchema = Schema.Literals(["applied", "not_applied", "unknown"]);
262
+ const isHasOutcome = Schema.is(Schema.Struct({ outcome: OutcomeSchema }));
263
+ const hasOutcome = (error) => isHasOutcome(error);
264
+ const isRetryable = (error) => error._tag === "TransportError" ? error.retryable : false;
265
+ /** Every tag the taxonomy owns, so a foreign tag can be told from one of ours. */
266
+ const TAXONOMY_TAGS = new Set([
267
+ "TransportError",
268
+ "ObjectNotFound",
269
+ "ObjectDeleted",
270
+ "ObjectUnavailable",
271
+ "TransactionNotFound",
272
+ "NetworkMismatch",
273
+ "DecodeError",
274
+ "SimulationFailed",
275
+ "ExecutionFailed",
276
+ "SubmissionUnknown",
277
+ "NotApplied",
278
+ "SigningError",
279
+ "BuildError",
280
+ "PolicyDenied",
281
+ "JournalError",
282
+ "UnexpectedEffects",
283
+ "GraphQLUnavailable",
284
+ "ExtensionNotReady"
285
+ ]);
286
+ /**
287
+ * What a failure says about the transaction it came from.
288
+ *
289
+ * An error that declares its own `outcome` is honoured first, which is how an
290
+ * extension puts its failures on the same axis. Otherwise a tag the taxonomy
291
+ * owns gets the taxonomy's answer, and **anything else is `"unknown"`**: a tag
292
+ * this library has never heard of says nothing about whether a transaction
293
+ * applied, and answering `"not_applied"` for it would tell a retry idiom to
294
+ * send again on no evidence at all. `Script.exitCode` agrees by exiting 1 for
295
+ * an unclassified error rather than 3.
296
+ */
297
+ const outcome = (error) => {
298
+ if (hasOutcome(error))
299
+ return error.outcome;
300
+ const tag = error._tag;
301
+ if (typeof tag !== "string" || !TAXONOMY_TAGS.has(tag))
302
+ return "unknown";
303
+ switch (tag) {
304
+ case "ExecutionFailed":
305
+ // An `UnexpectedEffects` is built from an `Executed`: the transaction
306
+ // applied and gas was charged, and only the receipt is missing.
307
+ case "UnexpectedEffects":
308
+ return "applied";
309
+ case "SubmissionUnknown":
310
+ return "unknown";
311
+ default:
312
+ return "not_applied";
313
+ }
314
+ };
315
+ const formatTarget = (reason) => {
316
+ if (reason.$kind !== "MoveAbort")
317
+ return "";
318
+ const location = reason.MoveAbort.location;
319
+ if (location === undefined)
320
+ return "";
321
+ const parts = [location.package, location.module, location.functionName].filter((part) => part !== undefined);
322
+ return parts.length === 0 ? "" : ` ${parts.join("::")}`;
323
+ };
324
+ const describeReason = (reason) => ExecutionReason.match(reason, {
325
+ MoveAbort: (value) => {
326
+ const clever = value.MoveAbort.cleverError?.constantName;
327
+ const suffix = clever === undefined ? "" : ` (${clever})`;
328
+ return `MoveAbort${formatTarget(value)} code ${value.MoveAbort.abortCode}${suffix}`;
329
+ },
330
+ SizeError: (value) => `SizeError ${value.SizeError.name} ${value.SizeError.size} of ${value.SizeError.maxSize}`,
331
+ CommandArgumentError: (value) => `CommandArgumentError ${value.CommandArgumentError.name} at argument ${value.CommandArgumentError.argument}`,
332
+ TypeArgumentError: (value) => `TypeArgumentError ${value.TypeArgumentError.name} at type argument ${value.TypeArgumentError.typeArgument}`,
333
+ PackageUpgradeError: (value) => `PackageUpgradeError ${value.PackageUpgradeError.name}`,
334
+ IndexError: (value) => `IndexError index ${value.IndexError.index ?? "?"}`,
335
+ CoinDenyListError: (value) => `CoinDenyListError ${value.CoinDenyListError.name} for ${value.CoinDenyListError.coinType}`,
336
+ CongestedObjects: (value) => `CongestedObjects ${value.CongestedObjects.objects.join(", ")}`,
337
+ ObjectIdError: (value) => `ObjectIdError ${value.ObjectIdError.name ?? ""} ${value.ObjectIdError.objectId}`.trim(),
338
+ Unknown: () => "Unknown"
339
+ });
340
+ /**
341
+ * The one line of a `cause` worth printing next to a tag: an `Error`'s message,
342
+ * a tagged error's own `describe` line, a string as itself. `undefined` when
343
+ * there is nothing readable, so `describe` prints nothing rather than
344
+ * `[object Object]`.
345
+ */
346
+ const causeLine = (cause) => {
347
+ if (cause === undefined || cause === null)
348
+ return undefined;
349
+ if (typeof cause === "string")
350
+ return cause.length === 0 ? undefined : cause;
351
+ if (typeof cause !== "object")
352
+ return undefined;
353
+ const message = cause.message;
354
+ if (typeof message === "string" && message.length > 0)
355
+ return message;
356
+ const tag = cause._tag;
357
+ if (typeof tag === "string")
358
+ return tag;
359
+ if (cause instanceof Error && cause.name.length > 0)
360
+ return cause.name;
361
+ return undefined;
362
+ };
363
+ const describe = (error) => {
364
+ switch (error._tag) {
365
+ case "TransportError": {
366
+ const cause = causeLine(error.cause);
367
+ return `TransportError ${error.method}${error.status === undefined ? "" : ` ${error.status}`}${error.retryable ? " (retryable)" : ""}${cause === undefined ? "" : `: ${cause}`}`;
368
+ }
369
+ case "ObjectNotFound":
370
+ case "ObjectDeleted":
371
+ case "ObjectUnavailable":
372
+ return `${error._tag} ${error.objectId}`;
373
+ case "TransactionNotFound":
374
+ return `TransactionNotFound ${error.digest}`;
375
+ case "NetworkMismatch":
376
+ return `NetworkMismatch expected ${error.expected} but the node reported ${error.actual}`;
377
+ case "DecodeError":
378
+ return `DecodeError ${error.expectedType ?? ""} ${error.objectId ?? ""} ${error.issue}`
379
+ .replace(/\s+/g, " ")
380
+ .trim();
381
+ case "SimulationFailed":
382
+ return `SimulationFailed ${describeReason(error.reason)}`;
383
+ case "ExecutionFailed":
384
+ return `ExecutionFailed ${describeReason(error.reason)}${error.command === undefined ? "" : ` in command ${error.command}`}`;
385
+ case "SubmissionUnknown": {
386
+ const cause = causeLine(error.cause);
387
+ return `SubmissionUnknown ${error.digest}${cause === undefined ? "" : `: ${cause}`}`;
388
+ }
389
+ case "NotApplied":
390
+ return `NotApplied ${error.digest} (${error.evidence})`;
391
+ case "SigningError":
392
+ return "SigningError";
393
+ case "BuildError":
394
+ return `BuildError ${error.message}`;
395
+ case "PolicyDenied":
396
+ return `PolicyDenied ${error.rule}: ${error.message}`;
397
+ case "JournalError":
398
+ return "JournalError";
399
+ case "UnexpectedEffects":
400
+ return `UnexpectedEffects ${error.digest} expected ${error.expected} but found ${error.found.length}`;
401
+ case "GraphQLUnavailable":
402
+ return `GraphQLUnavailable ${error.method}: ${error.reason}`;
403
+ case "ExtensionNotReady":
404
+ return `ExtensionNotReady ${error.extension}.${error.member} was called before the runtime existed: await client.${error.extension}.$ready() first, or register with warm`;
405
+ }
406
+ };
407
+ const encode = Schema.encodeUnknownResult(SuiErrorSchema);
408
+ /**
409
+ * One error encoded through **its own** schema.
410
+ *
411
+ * Every `Schema.TaggedError` class is itself a schema, and an instance's
412
+ * `constructor` is that class, so an error the closed taxonomy has never heard
413
+ * of — an extension's `EscrowSettlementUnknown { escrowId, outcome }` — still
414
+ * serializes with its fields instead of collapsing to a tag and a sentence.
415
+ * `undefined` when the value is not a schema-backed error, or when its own
416
+ * schema refuses it. Never fails.
417
+ */
418
+ const encodeThroughOwnSchema = (error) => {
419
+ const schema = error?.constructor;
420
+ if (!Schema.isSchema(schema))
421
+ return undefined;
422
+ const encoded = Schema.encodeUnknownResult(schema)(error);
423
+ if (!Result.isSuccess(encoded))
424
+ return undefined;
425
+ const value = encoded.success;
426
+ return typeof value === "object" && value !== null
427
+ ? value
428
+ : undefined;
429
+ };
430
+ /**
431
+ * The JSON an operator or a log line gets for a failure.
432
+ *
433
+ * A tag in the taxonomy encodes through {@link SuiErrorSchema}. **Anything
434
+ * else that is a `Schema.TaggedError` encodes through its own schema**, which
435
+ * is how an extension's errors serialize with their fields — including the
436
+ * `outcome` a wrapper script reads — rather than arriving as a bare
437
+ * `{ _tag, message }`. Only a value that is neither falls back to that.
438
+ *
439
+ * Never fails.
440
+ */
441
+ const toJson = (error) => {
442
+ const encoded = encode(error);
443
+ if (Result.isSuccess(encoded))
444
+ return encoded.success;
445
+ const own = encodeThroughOwnSchema(error);
446
+ if (own !== undefined)
447
+ return own;
448
+ const message = TAXONOMY_TAGS.has(error._tag)
449
+ ? describe(error)
450
+ : causeLine(error) ?? error._tag;
451
+ return { _tag: error._tag, message };
452
+ };
453
+ /**
454
+ * The four helpers every repo hand-rolls: is this worth retrying, did the
455
+ * transaction land, what does an operator need to read, and what goes in a log.
456
+ */
457
+ export const SuiError = {
458
+ isRetryable,
459
+ outcome,
460
+ describe,
461
+ toJson
462
+ };
463
+ /** The digest of the transaction a failure refers to, when it has one. */
464
+ export const digestOf = (error) => {
465
+ switch (error._tag) {
466
+ case "TransactionNotFound":
467
+ case "ExecutionFailed":
468
+ case "SubmissionUnknown":
469
+ case "NotApplied":
470
+ case "UnexpectedEffects":
471
+ return error.digest;
472
+ default:
473
+ return undefined;
474
+ }
475
+ };
476
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/domain/errors.ts"],"names":[],"mappings":"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"}