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 +145 -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,414 @@
1
+ import { bcs } from "@mysten/sui/bcs";
2
+ import { Transaction } from "@mysten/sui/transactions";
3
+ import { normalizeSuiAddress, SUI_CLOCK_OBJECT_ID } from "@mysten/sui/utils";
4
+ import { Config, Context, DateTime, Effect, Layer, Option, RcMap, Result, Schema, Semaphore, Stream } from "effect";
5
+ import { bcs as bcsCodec, decodeContent, typeMatches } from "../domain/bcs.js";
6
+ import { BuildError, DecodeError, ExecutionFailed, NetworkMismatch, ObjectDeleted, ObjectNotFound, ObjectUnavailable, SimulationFailed, TransactionNotFound, TransportError } from "../domain/errors.js";
7
+ import { EXECUTE_INCLUDE, Executed, fromTransactionResult } from "../domain/executed.js";
8
+ import { Balance, CoinType, Digest, DynamicField, DynamicFieldEntry, DynamicFieldName, executionReasonOf, KNOWN_CHAIN_IDS, makeSuiObject, ObjectEnvelope, ObjectId, Simulation, StructTag, SuiAddress } from "../domain/schemas.js";
9
+ import { SuiCore } from "./SuiCore.js";
10
+ /** The include set every object read asks for. */
11
+ export const OBJECT_INCLUDE = { content: true };
12
+ /** The include set every simulation asks for. */
13
+ export const SIMULATE_INCLUDE = { ...EXECUTE_INCLUDE, commandResults: true };
14
+ const CLOCK_TYPE = "0x2::clock::Clock";
15
+ /** The Clock object's Move layout, read through the same bridge user code uses. */
16
+ const clockCodec = bcsCodec(bcs.struct("Clock", { id: bcs.Address, timestamp_ms: bcs.U64 }), CLOCK_TYPE);
17
+ const decodeEnvelope = Schema.decodeUnknownEffect(ObjectEnvelope);
18
+ const decodeBalance = Schema.decodeUnknownEffect(Balance);
19
+ const decodeDynamicField = Schema.decodeUnknownEffect(DynamicField);
20
+ const decodeDynamicFieldEntry = Schema.decodeUnknownEffect(DynamicFieldEntry);
21
+ const decodeSimulation = Schema.decodeUnknownEffect(Simulation);
22
+ const boundaryError = (method) => (issue) => new TransportError({
23
+ method,
24
+ retryable: false,
25
+ cause: `the node returned a response this version cannot read: ${issue.message}`
26
+ });
27
+ /** How long an unused sender lock is kept before it is released. */
28
+ const SENDER_LOCK_TTL = "1 minute";
29
+ const CHUNK = 50;
30
+ /**
31
+ * A `@mysten/bcs` layout rather than a `Schema.Codec`.
32
+ *
33
+ * Structural rather than `instanceof`: a consumer whose `@mysten/bcs` is a
34
+ * second copy in the tree would fail the identity test while holding a
35
+ * perfectly good layout. A `Schema.Codec` has neither a `read` function nor a
36
+ * `serialize` method, so the two cannot be confused.
37
+ */
38
+ const isBcsType = (value) => typeof value.read === "function" &&
39
+ typeof value.serialize === "function";
40
+ const keyOf = (id) => {
41
+ try {
42
+ return normalizeSuiAddress(id);
43
+ }
44
+ catch {
45
+ return id;
46
+ }
47
+ };
48
+ const makeSui = (core, chainId, locks) => {
49
+ const envelopeOf = (object) => decodeEnvelope(object).pipe(Effect.mapError(boundaryError("getObject")));
50
+ const decodeObject = Effect.fn("Sui.decodeObject")(function* (object, opts) {
51
+ const envelope = yield* envelopeOf(object);
52
+ const schema = opts?.schema;
53
+ if (schema === undefined) {
54
+ // An explicit `expectedType` is a question about the object, not about
55
+ // the codec: `getObject(id, { expectedType })` with no schema is how a
56
+ // caller says "this had better be a `Coin<SUI>`" while keeping the raw
57
+ // bytes. Returning early without checking it answered a different
58
+ // question than the one that was asked.
59
+ const expected = opts?.expectedType;
60
+ if (expected !== undefined && !typeMatches(expected, envelope.type)) {
61
+ return yield* new DecodeError({
62
+ objectId: envelope.objectId,
63
+ expectedType: expected,
64
+ issue: `object ${envelope.objectId} has type ${envelope.type}`
65
+ });
66
+ }
67
+ return makeSuiObject(envelope, object.content);
68
+ }
69
+ // One rule for every Move type check in the library: `typeMatches` inside
70
+ // `decodeContent`, which accepts a bare tag as every instantiation of it
71
+ // and compares a parameterized one in full.
72
+ const content = yield* decodeContent(schema, object.content, {
73
+ objectId: envelope.objectId,
74
+ ...(opts?.expectedType === undefined ? {} : { expectedType: opts.expectedType }),
75
+ actualType: envelope.type
76
+ });
77
+ return makeSuiObject(envelope, content);
78
+ });
79
+ const getObject = Effect.fn("Sui.getObject")(function* (id, opts) {
80
+ const { object } = yield* core.getObject({ objectId: id, include: OBJECT_INCLUDE });
81
+ return yield* decodeObject(object, opts);
82
+ });
83
+ const getObjectOption = Effect.fn("Sui.getObjectOption")(function* (id, opts) {
84
+ return yield* getObject(id, opts).pipe(Effect.map(Option.some), Effect.catchTag(["ObjectNotFound", "ObjectDeleted"], () => Effect.succeed(Option.none())));
85
+ });
86
+ const chunk = (items) => {
87
+ const chunks = [];
88
+ for (let index = 0; index < items.length; index += CHUNK) {
89
+ chunks.push(items.slice(index, index + CHUNK));
90
+ }
91
+ return chunks;
92
+ };
93
+ const getObjects = Effect.fn("Sui.getObjects")(function* (ids, opts) {
94
+ const unique = [];
95
+ const requested = new Set();
96
+ for (const id of ids) {
97
+ const key = keyOf(id);
98
+ if (requested.has(key))
99
+ continue;
100
+ requested.add(key);
101
+ unique.push(id);
102
+ }
103
+ const answers = new Map();
104
+ for (const page of chunk(unique)) {
105
+ const response = yield* core.getObjects({
106
+ objectIds: [...page],
107
+ include: OBJECT_INCLUDE
108
+ });
109
+ if (response.objects.length !== page.length) {
110
+ return yield* new TransportError({
111
+ method: "getObjects",
112
+ retryable: false,
113
+ cause: `asked for ${page.length} objects and the node answered for ${response.objects.length}`
114
+ });
115
+ }
116
+ for (let index = 0; index < page.length; index += 1) {
117
+ const id = page[index];
118
+ const item = response.objects[index];
119
+ if (item === undefined) {
120
+ return yield* new TransportError({
121
+ method: "getObjects",
122
+ retryable: false,
123
+ cause: `the node returned no entry for ${id}`
124
+ });
125
+ }
126
+ if (item instanceof Error) {
127
+ answers.set(keyOf(id), Result.fail(mapObjectItemError(id, item)));
128
+ continue;
129
+ }
130
+ if (keyOf(item.objectId) !== keyOf(id)) {
131
+ return yield* new TransportError({
132
+ method: "getObjects",
133
+ retryable: false,
134
+ cause: `asked for ${id} and the node answered for ${item.objectId}`
135
+ });
136
+ }
137
+ const decoded = yield* Effect.result(decodeObject(item, opts));
138
+ if (Result.isFailure(decoded)) {
139
+ if (decoded.failure._tag === "TransportError")
140
+ return yield* decoded.failure;
141
+ answers.set(keyOf(id), Result.fail(decoded.failure));
142
+ continue;
143
+ }
144
+ answers.set(keyOf(id), Result.succeed(decoded.success));
145
+ }
146
+ }
147
+ const results = [];
148
+ for (const id of ids) {
149
+ const answer = answers.get(keyOf(id));
150
+ if (answer === undefined) {
151
+ return yield* new TransportError({
152
+ method: "getObjects",
153
+ retryable: false,
154
+ cause: `the node returned no entry for ${id}`
155
+ });
156
+ }
157
+ results.push(answer);
158
+ }
159
+ return results;
160
+ });
161
+ const getObjectsOrFail = Effect.fn("Sui.getObjectsOrFail")(function* (ids, opts) {
162
+ const results = yield* getObjects(ids, opts);
163
+ const objects = [];
164
+ for (const result of results) {
165
+ if (Result.isFailure(result))
166
+ return yield* result.failure;
167
+ objects.push(result.success);
168
+ }
169
+ return objects;
170
+ });
171
+ const getBalance = Effect.fn("Sui.getBalance")(function* (owner, coinType) {
172
+ const { balance } = yield* core.getBalance({
173
+ owner,
174
+ ...(coinType === undefined ? {} : { coinType })
175
+ });
176
+ return yield* decodeBalance(balance).pipe(Effect.mapError(boundaryError("getBalance")));
177
+ });
178
+ const getDynamicFieldOption = Effect.fn("Sui.getDynamicFieldOption")(function* (parent, name) {
179
+ return yield* core.getDynamicField({ parentId: parent, name }).pipe(Effect.flatMap(({ dynamicField }) => decodeDynamicField(dynamicField).pipe(Effect.mapError(boundaryError("getDynamicField")), Effect.map(Option.some))), Effect.catchTag(["ObjectNotFound", "ObjectDeleted"], () => Effect.succeed(Option.none())), Effect.catchTag("ObjectUnavailable", (error) => Effect.fail(new TransportError({ method: "getDynamicField", retryable: false, cause: error }))));
180
+ });
181
+ const getTransaction = Effect.fn("Sui.getTransaction")(function* (digest) {
182
+ return yield* core.getTransaction({ digest, include: EXECUTE_INCLUDE }).pipe(Effect.flatMap(fromTransactionResult), Effect.catchTag("DecodeError", (error) => Effect.fail(new TransportError({ method: "getTransaction", retryable: false, cause: error }))));
183
+ });
184
+ const toTransaction = (input, sender) => {
185
+ if (input instanceof Uint8Array)
186
+ return Effect.succeed(input);
187
+ return Effect.try({
188
+ try: () => {
189
+ const tx = typeof input === "function" ? new Transaction() : input;
190
+ if (typeof input === "function")
191
+ input(tx);
192
+ // `setSenderIfNotSet`, so a recipe that set its own sender wins. With
193
+ // no sender at all the SDK simulates as the zero address.
194
+ if (sender !== undefined)
195
+ tx.setSenderIfNotSet(sender);
196
+ return tx;
197
+ },
198
+ catch: (cause) => new BuildError({ message: "the recipe threw", cause })
199
+ });
200
+ };
201
+ const simulateRaw = Effect.fn("Sui.simulateRaw")(function* (input, checksEnabled, sender) {
202
+ const transaction = yield* toTransaction(input, sender);
203
+ return yield* core.simulateTransaction({
204
+ transaction,
205
+ include: SIMULATE_INCLUDE,
206
+ checksEnabled
207
+ });
208
+ });
209
+ const toSimulation = Effect.fn("Sui.toSimulation")(function* (result) {
210
+ if (result.$kind === "FailedTransaction") {
211
+ const status = result.FailedTransaction.status;
212
+ if (status.success) {
213
+ return yield* new TransportError({
214
+ method: "simulateTransaction",
215
+ retryable: false,
216
+ cause: "the node reported a failed transaction whose status says it succeeded"
217
+ });
218
+ }
219
+ return yield* new SimulationFailed({
220
+ reason: executionReasonOf(status.error),
221
+ message: status.error.message
222
+ });
223
+ }
224
+ const transaction = result.Transaction;
225
+ return yield* decodeSimulation({
226
+ digest: transaction.digest,
227
+ effects: transaction.effects,
228
+ events: transaction.events,
229
+ balanceChanges: transaction.balanceChanges,
230
+ objectTypes: transaction.objectTypes,
231
+ commandResults: result.commandResults
232
+ }).pipe(Effect.mapError(boundaryError("simulateTransaction")));
233
+ });
234
+ const simulate = Effect.fn("Sui.simulate")(function* (input, opts) {
235
+ return yield* toSimulation(yield* simulateRaw(input, true, opts?.sender));
236
+ });
237
+ const view = Effect.fn("Sui.view")(function* (recipe, schema, opts) {
238
+ // A `BcsType` is a class from `@mysten/bcs` with a `read` function and a
239
+ // `serialize` method; a `Schema.Codec` has neither. The cast on the bridge
240
+ // call is the `T extends Input` constraint `bcs` carries for encoding,
241
+ // which a view never uses: it only ever decodes.
242
+ const codec = isBcsType(schema)
243
+ ? bcsCodec(schema)
244
+ : schema;
245
+ const simulation = yield* toSimulation(yield* simulateRaw(recipe, false, opts?.sender));
246
+ const index = opts?.command ?? simulation.commandResults.length - 1;
247
+ const command = simulation.commandResults[index];
248
+ if (command === undefined) {
249
+ return yield* new DecodeError({ issue: `the simulation has no command ${index}` });
250
+ }
251
+ const position = opts?.result ?? 0;
252
+ const value = command.returnValues[position];
253
+ if (value === undefined) {
254
+ return yield* new DecodeError({
255
+ issue: `command ${index} has no return value ${position}`
256
+ });
257
+ }
258
+ return yield* decodeContent(codec, value.bcs);
259
+ });
260
+ const streamOwnedObjects = (owner, opts) => Stream.paginate(null, (cursor) => core
261
+ .listOwnedObjects({
262
+ owner,
263
+ include: OBJECT_INCLUDE,
264
+ ...(opts?.type === undefined ? {} : { type: opts.type }),
265
+ ...(cursor === null ? {} : { cursor })
266
+ })
267
+ .pipe(Effect.flatMap((response) => Effect.forEach(response.objects, (object) => decodeObject(object)).pipe(Effect.map((objects) => [
268
+ objects,
269
+ response.hasNextPage && response.cursor !== null
270
+ ? Option.some(response.cursor)
271
+ : Option.none()
272
+ ]))), Effect.catchTag("DecodeError", (error) => Effect.fail(new TransportError({ method: "listOwnedObjects", retryable: false, cause: error }))))).pipe(Stream.withSpan("Sui.streamOwnedObjects"));
273
+ const streamDynamicFields = (parent) => Stream.paginate(null, (cursor) => core
274
+ .listDynamicFields({
275
+ parentId: parent,
276
+ ...(cursor === null ? {} : { cursor })
277
+ })
278
+ .pipe(Effect.flatMap((response) => Effect.forEach(response.dynamicFields, (field) => decodeDynamicFieldEntry(field).pipe(Effect.mapError(boundaryError("listDynamicFields")))).pipe(Effect.map((fields) => [
279
+ fields,
280
+ response.hasNextPage && response.cursor !== null
281
+ ? Option.some(response.cursor)
282
+ : Option.none()
283
+ ]))))).pipe(Stream.withSpan("Sui.streamDynamicFields"));
284
+ const withSenderLock = (address) => Effect.fn("Sui.withSenderLock")(function* (effect) {
285
+ // The semaphore is reference counted: whoever is inside the lock holds a
286
+ // reference, so a sender's semaphore cannot be dropped while it is in
287
+ // use, and an idle one is released a minute after the last holder leaves
288
+ // rather than sitting in the map for the life of the process. A service
289
+ // that sponsors thousands of addresses therefore holds entries for the
290
+ // senders it is actually working for, not for every sender it has ever
291
+ // seen.
292
+ return yield* Effect.scoped(Effect.flatMap(RcMap.get(locks, address), (semaphore) => Semaphore.withPermits(semaphore, 1)(effect)));
293
+ });
294
+ const chainTime = core
295
+ .getObject({ objectId: SUI_CLOCK_OBJECT_ID, include: OBJECT_INCLUDE })
296
+ .pipe(Effect.flatMap(({ object }) => decodeContent(clockCodec, object.content)), Effect.flatMap((clock) => Effect.fromOption(DateTime.make(Number(clock.timestamp_ms))).pipe(Effect.mapError(() => new DecodeError({
297
+ expectedType: CLOCK_TYPE,
298
+ issue: `the clock reported ${clock.timestamp_ms}, which is not a time`
299
+ })))), Effect.catchTag(["ObjectNotFound", "ObjectDeleted", "ObjectUnavailable", "DecodeError"], (error) => Effect.fail(new TransportError({
300
+ method: "chainTime",
301
+ retryable: false,
302
+ cause: error
303
+ }))), Effect.withSpan("Sui.chainTime"));
304
+ return {
305
+ network: core.network,
306
+ core,
307
+ chainId,
308
+ chainTime,
309
+ getObject: getObject,
310
+ getObjectOption: getObjectOption,
311
+ getObjects: getObjects,
312
+ getObjectsOrFail: getObjectsOrFail,
313
+ getBalance,
314
+ getDynamicFieldOption,
315
+ getTransaction,
316
+ simulate,
317
+ view,
318
+ streamOwnedObjects,
319
+ streamDynamicFields,
320
+ withSenderLock
321
+ };
322
+ };
323
+ const mapObjectItemError = (id, error) => {
324
+ const reason = error.reason;
325
+ if (reason === "deleted")
326
+ return new ObjectDeleted({ objectId: id });
327
+ if (reason === "notFound")
328
+ return new ObjectNotFound({ objectId: id });
329
+ return new ObjectUnavailable({ objectId: id });
330
+ };
331
+ /**
332
+ * The opinionated tier.
333
+ *
334
+ * @example
335
+ * ```ts
336
+ * import { Effect } from "effect"
337
+ * import { Sui } from "sui-effect"
338
+ *
339
+ * const time = Effect.gen(function*() {
340
+ * const sui = yield* Sui
341
+ * return yield* sui.chainTime
342
+ * })
343
+ * ```
344
+ */
345
+ export class Sui extends Context.Service()("sui-effect/Sui") {
346
+ /**
347
+ * Like {@link layerNoDeps}, but refuses to build when the node reports a
348
+ * different chain identifier than `options.chainId`, whatever the network.
349
+ *
350
+ * Fails with: `NetworkMismatch`, `TransportError`.
351
+ */
352
+ static layerNoDepsWith = (options) => Layer.effect(Sui, Effect.gen(function* () {
353
+ const core = yield* SuiCore;
354
+ const { chainIdentifier } = yield* core.getChainIdentifier();
355
+ const expected = options.chainId ?? KNOWN_CHAIN_IDS[core.network];
356
+ if (expected !== undefined && expected !== chainIdentifier) {
357
+ return yield* new NetworkMismatch({ expected, actual: chainIdentifier });
358
+ }
359
+ const locks = yield* RcMap.make({
360
+ lookup: (_address) => Effect.succeed(Semaphore.makeUnsafe(1)),
361
+ idleTimeToLive: SENDER_LOCK_TTL
362
+ });
363
+ return makeSui(core, chainIdentifier, locks);
364
+ }));
365
+ /**
366
+ * `Sui` over whatever `SuiCore` is provided, **without reading the chain
367
+ * identifier**: the one given is taken as the chain's.
368
+ *
369
+ * This exists for one caller: `SuiExtension.fromService` with `warm`, which
370
+ * builds its runtime synchronously inside `register` and therefore cannot
371
+ * await a `getChainIdentifier` round trip. Nothing is asserted, because
372
+ * nothing is asked — a node on another chain is not detected here. What still
373
+ * protects a warm registration is the chain itself: `Tx.build` stamps this id
374
+ * on the transaction's `ValidDuring` expiration, and a validator refuses
375
+ * bytes signed for another chain.
376
+ *
377
+ * Prefer {@link layerNoDeps}, which asks. Never fails.
378
+ */
379
+ static layerNoDepsPinned = (chainId) => Layer.effect(Sui, Effect.gen(function* () {
380
+ const core = yield* SuiCore;
381
+ const locks = yield* RcMap.make({
382
+ lookup: (_address) => Effect.succeed(Semaphore.makeUnsafe(1)),
383
+ idleTimeToLive: SENDER_LOCK_TTL
384
+ });
385
+ return makeSui(core, chainId, locks);
386
+ }));
387
+ /**
388
+ * Builds `Sui` over whatever `SuiCore` is provided, reading the chain
389
+ * identifier once.
390
+ *
391
+ * When the client's network is one of the entries in {@link KNOWN_CHAIN_IDS}
392
+ * (`mainnet`, `testnet`) the identifier the node reports must match it, so a
393
+ * program pointed at the wrong node fails at layer build rather than reading
394
+ * the wrong chain. `devnet`, `localnet` and custom networks have no fixed
395
+ * identifier: the observed one is recorded on `Sui.chainId` and nothing is
396
+ * asserted unless {@link layerNoDepsWith} is given a `chainId`.
397
+ *
398
+ * Fails with: `NetworkMismatch`, `TransportError`.
399
+ */
400
+ static layerNoDeps = Sui.layerNoDepsWith({});
401
+ /**
402
+ * `layerNoDeps` over a gRPC `SuiCore`.
403
+ *
404
+ * Fails with: `NetworkMismatch`, `TransportError`.
405
+ */
406
+ static layer = (options) => Sui.layerNoDepsWith(options).pipe(Layer.provide(SuiCore.layerGrpc(options)));
407
+ /**
408
+ * `layerNoDeps` over `SuiCore.layerConfig`.
409
+ *
410
+ * Fails with: `ConfigError`, `NetworkMismatch`, `TransportError`.
411
+ */
412
+ static layerConfig = Sui.layerNoDeps.pipe(Layer.provide(SuiCore.layerConfig));
413
+ }
414
+ //# sourceMappingURL=Sui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sui.js","sourceRoot":"","sources":["../../src/services/Sui.ts"],"names":[],"mappings":"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"}