@prb/effect-solana 1.0.0-beta.0 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +154 -174
  2. package/dist/core/errors/predicates.d.ts +0 -11
  3. package/dist/core/errors/predicates.d.ts.map +1 -1
  4. package/dist/core/errors/predicates.js +0 -5
  5. package/dist/core/errors/predicates.js.map +1 -1
  6. package/dist/core/errors/transaction.d.ts +20 -1
  7. package/dist/core/errors/transaction.d.ts.map +1 -1
  8. package/dist/core/errors/transaction.js +60 -1
  9. package/dist/core/errors/transaction.js.map +1 -1
  10. package/dist/core/errors/wallet.d.ts +0 -7
  11. package/dist/core/errors/wallet.d.ts.map +1 -1
  12. package/dist/core/errors/wallet.js +0 -4
  13. package/dist/core/errors/wallet.js.map +1 -1
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/pda/index.d.ts +1 -0
  19. package/dist/pda/index.d.ts.map +1 -1
  20. package/dist/pda/index.js +1 -0
  21. package/dist/pda/index.js.map +1 -1
  22. package/dist/pda/service.d.ts +4 -3
  23. package/dist/pda/service.d.ts.map +1 -1
  24. package/dist/pda/service.js +12 -4
  25. package/dist/pda/service.js.map +1 -1
  26. package/dist/pda/types.d.ts +12 -0
  27. package/dist/pda/types.d.ts.map +1 -0
  28. package/dist/pda/types.js +8 -0
  29. package/dist/pda/types.js.map +1 -0
  30. package/dist/presets/layers.d.ts +3 -2
  31. package/dist/presets/layers.d.ts.map +1 -1
  32. package/dist/presets/layers.js +2 -1
  33. package/dist/presets/layers.js.map +1 -1
  34. package/dist/program/index.d.ts +3 -0
  35. package/dist/program/index.d.ts.map +1 -0
  36. package/dist/program/index.js +3 -0
  37. package/dist/program/index.js.map +1 -0
  38. package/dist/program/service.d.ts +19 -0
  39. package/dist/program/service.d.ts.map +1 -0
  40. package/dist/program/service.js +94 -0
  41. package/dist/program/service.js.map +1 -0
  42. package/dist/program/types.d.ts +34 -0
  43. package/dist/program/types.d.ts.map +1 -0
  44. package/dist/program/types.js +32 -0
  45. package/dist/program/types.js.map +1 -0
  46. package/dist/rpc/service.d.ts.map +1 -1
  47. package/dist/rpc/service.js +6 -11
  48. package/dist/rpc/service.js.map +1 -1
  49. package/dist/telemetry/tracer.d.ts +3 -0
  50. package/dist/telemetry/tracer.d.ts.map +1 -1
  51. package/dist/telemetry/tracer.js +3 -0
  52. package/dist/telemetry/tracer.js.map +1 -1
  53. package/dist/token/service.d.ts +2 -2
  54. package/dist/token/service.d.ts.map +1 -1
  55. package/dist/token/service.js +30 -17
  56. package/dist/token/service.js.map +1 -1
  57. package/dist/tx/service.d.ts +4 -2
  58. package/dist/tx/service.d.ts.map +1 -1
  59. package/dist/tx/service.js +12 -2
  60. package/dist/tx/service.js.map +1 -1
  61. package/dist/web3.js/_fixtures.d.ts +4 -0
  62. package/dist/web3.js/_fixtures.d.ts.map +1 -0
  63. package/dist/web3.js/_fixtures.js +30 -0
  64. package/dist/web3.js/_fixtures.js.map +1 -0
  65. package/dist/web3.js/index.d.ts +5 -0
  66. package/dist/web3.js/index.d.ts.map +1 -0
  67. package/dist/web3.js/index.js +5 -0
  68. package/dist/web3.js/index.js.map +1 -0
  69. package/dist/web3.js/layers.d.ts +12 -0
  70. package/dist/web3.js/layers.d.ts.map +1 -0
  71. package/dist/web3.js/layers.js +10 -0
  72. package/dist/web3.js/layers.js.map +1 -0
  73. package/dist/web3.js/legacy-signer.d.ts +5 -0
  74. package/dist/web3.js/legacy-signer.d.ts.map +1 -0
  75. package/dist/web3.js/legacy-signer.js +71 -0
  76. package/dist/web3.js/legacy-signer.js.map +1 -0
  77. package/dist/web3.js/transaction-bridge.d.ts +9 -0
  78. package/dist/web3.js/transaction-bridge.d.ts.map +1 -0
  79. package/dist/web3.js/transaction-bridge.js +47 -0
  80. package/dist/web3.js/transaction-bridge.js.map +1 -0
  81. package/dist/web3.js/types.d.ts +12 -0
  82. package/dist/web3.js/types.d.ts.map +1 -0
  83. package/dist/web3.js/types.js +14 -0
  84. package/dist/web3.js/types.js.map +1 -0
  85. package/package.json +15 -1
package/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # @prb/effect-solana
2
2
 
3
- Effect-TS integration for the Solana blockchain ecosystem.
3
+ [![npm version](https://img.shields.io/npm/v/@prb/effect-solana.svg)](https://www.npmjs.com/package/@prb/effect-solana)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
5
 
5
- ## Installation
6
+ Effect-TS integration for the Solana blockchain ecosystem. Type-safe, composable abstractions built on
7
+ [@solana/kit](https://github.com/solana-labs/solana-web3.js) v2.
8
+
9
+ ## 📦 Installation
6
10
 
7
11
  ```bash
8
12
  npm install @prb/effect-solana effect @solana/kit
@@ -12,34 +16,46 @@ pnpm add @prb/effect-solana effect @solana/kit
12
16
  bun add @prb/effect-solana effect @solana/kit
13
17
  ```
14
18
 
15
- ## Quick Start
19
+ ### Peer Dependencies
20
+
21
+ Required:
22
+
23
+ - `effect` ^3.x
24
+ - `@solana/kit` ^2.2.0
25
+ - `@solana-program/system` ^0.8.0
26
+ - `@solana-program/token` ^0.8.0
27
+ - `@solana-program/compute-budget` ^0.8.0
28
+
29
+ Optional:
30
+
31
+ - `@coral-xyz/anchor` ^0.31.1 (for Anchor IDL support)
32
+ - `@solana/web3.js` ^1.95.0 (for legacy interop)
33
+ - `react`, `react-dom` (for React hooks)
34
+
35
+ ## 🚀 Quick Start
16
36
 
17
37
  ```typescript
18
38
  import { Effect, Layer } from "effect";
19
- import { BalanceService, BalanceServiceLive, RpcService, RpcServiceLive } from "@prb/effect-solana";
39
+ import { BalanceService, makeSolanaLayer } from "@prb/effect-solana";
20
40
  import type { Address } from "@solana/kit";
21
41
 
22
- // Create a custom RPC layer
23
- const MyRpcLayer = Layer.succeed(RpcService, {
24
- getRpc: () => Effect.succeed(/* your RPC client */),
25
- getRpcUrl: () => Effect.succeed("https://api.devnet.solana.com"),
26
- });
27
-
28
- // Compose with BalanceService
29
- const MainLayer = BalanceServiceLive.pipe(Layer.provide(MyRpcLayer));
42
+ // Create a complete Solana layer
43
+ const SolanaLayer = makeSolanaLayer(
44
+ { cluster: "devnet" },
45
+ () => walletAdapter, // your wallet adapter
46
+ );
30
47
 
31
48
  // Read SOL balance
32
49
  const program = Effect.gen(function* () {
33
50
  const balance = yield* BalanceService;
34
51
  const address = "YOUR_ADDRESS" as Address;
35
- const sol = yield* balance.getSolBalance(address);
36
- console.log(`Balance: ${sol} lamports`);
52
+ return yield* balance.getSolBalance(address);
37
53
  });
38
54
 
39
- Effect.runPromise(Effect.provide(program, MainLayer));
55
+ Effect.runPromise(Effect.provide(program, SolanaLayer));
40
56
  ```
41
57
 
42
- ## Services
58
+ ## 🔧 Services
43
59
 
44
60
  ### RpcService
45
61
 
@@ -98,10 +114,10 @@ const program = Effect.gen(function* () {
98
114
 
99
115
  ### TokenService
100
116
 
101
- SPL token operations.
117
+ SPL token operations (supports both Token and Token-2022 programs).
102
118
 
103
119
  ```typescript
104
- import { TokenService } from "@prb/effect-solana";
120
+ import { TokenService, TOKEN_2022_PROGRAM_ADDRESS } from "@prb/effect-solana";
105
121
 
106
122
  const program = Effect.gen(function* () {
107
123
  const token = yield* TokenService;
@@ -109,7 +125,7 @@ const program = Effect.gen(function* () {
109
125
  // Get associated token address
110
126
  const ata = yield* token.getAssociatedTokenAddress({ owner, mint });
111
127
 
112
- // Token-2022: pass tokenProgram to work with Token-2022 mints
128
+ // Token-2022 support
113
129
  const ata2022 = yield* token.getAssociatedTokenAddress({
114
130
  owner,
115
131
  mint,
@@ -117,17 +133,15 @@ const program = Effect.gen(function* () {
117
133
  });
118
134
 
119
135
  // Get or create ATA
120
- const { address, instruction } = yield* token.getOrCreateATA({ owner, mint, payer });
136
+ const { address, instruction } = yield* token.getOrCreateATA({
137
+ owner,
138
+ mint,
139
+ payer,
140
+ });
121
141
 
122
142
  // Get token balance
123
143
  const balance = yield* token.getTokenBalance(ata);
124
144
 
125
- // Get mint account
126
- const mint = yield* token.getMint(params.mint);
127
-
128
- // Get token account
129
- const account = yield* token.getTokenAccount(ata);
130
-
131
145
  // Build transfer instruction
132
146
  const transfer = yield* token.getTransferInstruction({
133
147
  source: ata,
@@ -135,17 +149,6 @@ const program = Effect.gen(function* () {
135
149
  authority: owner,
136
150
  amount: 1_000_000n,
137
151
  });
138
-
139
- const transfer2022 = yield* token.getTransferInstruction({
140
- source: ata2022,
141
- destination: recipientAta2022,
142
- authority: owner,
143
- amount: 1_000_000n,
144
- tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
145
- });
146
-
147
- // Check if token account exists
148
- const exists = yield* token.tokenAccountExists(ata);
149
152
  });
150
153
  ```
151
154
 
@@ -159,36 +162,52 @@ import { TransactionService } from "@prb/effect-solana";
159
162
  const program = Effect.gen(function* () {
160
163
  const tx = yield* TransactionService;
161
164
 
162
- // Build transaction
165
+ // Build transaction with compute budget
163
166
  const message = yield* tx.build(instructions, {
164
167
  computeBudget: { unitLimit: 600_000, microLamports: 10_000 },
165
168
  });
166
169
 
167
- // Sign transaction
170
+ // Sign, send, and confirm
168
171
  const signed = yield* tx.sign(message);
169
-
170
- // Send transaction
171
172
  const signature = yield* tx.send(signed);
172
-
173
- // Confirm transaction
174
173
  const receipt = yield* tx.confirm(signature, {
175
174
  commitment: "confirmed",
176
175
  timeout: 60_000,
177
176
  });
178
177
 
179
- // Or do all at once
178
+ // Or all at once
180
179
  const receipt2 = yield* tx.sendAndConfirm(instructions, {
181
180
  commitment: "confirmed",
182
181
  });
183
182
 
184
- // Batch send and confirm
185
- const receipts = yield* tx.sendAndConfirmBatch(
186
- [{ instructions }, { instructions: [instruction2], computeBudget: { unitLimit: 300_000 } }],
187
- { concurrency: 2, confirm: { commitment: "confirmed" } },
188
- );
183
+ // Batch transactions
184
+ const receipts = yield* tx.sendAndConfirmBatch([{ instructions }, { instructions: [instruction2] }], {
185
+ concurrency: 2,
186
+ confirm: { commitment: "confirmed" },
187
+ });
188
+ });
189
+ ```
190
+
191
+ ### ProgramWriter
189
192
 
190
- // Simulate before sending
191
- yield* tx.simulate(message);
193
+ Build instructions from Anchor IDLs.
194
+
195
+ ```typescript
196
+ import { ProgramWriter } from "@prb/effect-solana";
197
+ import type { Idl } from "@prb/effect-solana";
198
+
199
+ const program = Effect.gen(function* () {
200
+ const writer = yield* ProgramWriter;
201
+
202
+ const instruction = yield* writer.build(
203
+ idl,
204
+ {
205
+ method: "withdraw",
206
+ args: [amount],
207
+ accounts: { signer, streamRecipient /* ... */ },
208
+ },
209
+ programId,
210
+ );
192
211
  });
193
212
  ```
194
213
 
@@ -205,18 +224,32 @@ const program = Effect.gen(function* () {
205
224
  });
206
225
  ```
207
226
 
208
- ## Layer Composition
227
+ ## 🧩 Layer Composition
209
228
 
210
- Compose services to build your application layer:
229
+ ### Using Presets
230
+
231
+ ```typescript
232
+ import { makeSolanaLayer, makeRpcLayer, makeSignerLayer } from "@prb/effect-solana";
233
+
234
+ // Complete layer with all services
235
+ const AppLayer = makeSolanaLayer({ cluster: "devnet" }, () => walletAdapter);
236
+
237
+ // Or compose manually
238
+ const rpcLayer = makeRpcLayer({ cluster: "devnet", rpcUrl: "https://my-rpc.com" });
239
+ const signerLayer = makeSignerLayer(() => walletAdapter);
240
+ ```
241
+
242
+ ### Manual Composition
211
243
 
212
244
  ```typescript
213
245
  import { Layer } from "effect";
214
246
  import {
215
247
  BalanceServiceLive,
216
- RpcServiceLive,
217
- SignerServiceLive,
248
+ RpcService,
249
+ SignerService,
218
250
  TokenServiceLive,
219
251
  TransactionServiceLive,
252
+ ProgramWriterLive,
220
253
  } from "@prb/effect-solana";
221
254
 
222
255
  // Create custom implementations
@@ -231,107 +264,20 @@ const MySignerLayer = Layer.succeed(SignerService, {
231
264
  });
232
265
 
233
266
  // Compose layers
234
- const AppLayer = Layer.mergeAll(BalanceServiceLive, TokenServiceLive, TransactionServiceLive).pipe(
267
+ const AppLayer = Layer.mergeAll(BalanceServiceLive, TokenServiceLive, TransactionServiceLive, ProgramWriterLive).pipe(
235
268
  Layer.provide(Layer.merge(MyRpcLayer, MySignerLayer)),
236
269
  );
237
270
  ```
238
271
 
239
- ## Constants
240
-
241
- The library exports common Solana constants:
242
-
243
- ```typescript
244
- import {
245
- LAMPORTS_PER_SOL,
246
- ClusterEndpoints,
247
- SYSTEM_PROGRAM_ADDRESS,
248
- TOKEN_PROGRAM_ADDRESS,
249
- TOKEN_2022_PROGRAM_ADDRESS,
250
- ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
251
- COMPUTE_BUDGET_PROGRAM_ADDRESS,
252
- MEMO_PROGRAM_ADDRESS,
253
- } from "@prb/effect-solana";
254
-
255
- // Use cluster endpoints
256
- const devnetUrl = ClusterEndpoints.devnet;
257
- const mainnetUrl = ClusterEndpoints["mainnet-beta"];
258
- ```
259
-
260
- ## Types
261
-
262
- Re-exported Solana types and custom definitions:
263
-
264
- ```typescript
265
- import type {
266
- Address,
267
- Commitment,
268
- Lamports,
269
- Signature,
270
- TransactionError,
271
- Cluster,
272
- ClusterConfig,
273
- Microlamports,
274
- } from "@prb/effect-solana";
275
- ```
276
-
277
- ## Error Handling
278
-
279
- All errors are tagged for discriminated union handling:
280
-
281
- ```typescript
282
- import { Effect } from "effect";
283
- import { WalletNotConnectedError, TransactionFailedError, TransactionTimeoutError, RpcError } from "@prb/effect-solana";
284
-
285
- const handled = program.pipe(
286
- Effect.catchTag("WalletNotConnectedError", (e) => Effect.succeed("Please connect wallet")),
287
- Effect.catchTag("TransactionFailedError", (e) => Effect.succeed(`TX failed: ${e.message}`)),
288
- Effect.catchTag("TransactionTimeoutError", (e) => Effect.succeed(`TX timed out: ${e.signature}`)),
289
- Effect.catchTag("RpcError", (e) => Effect.succeed(`RPC error at ${e.url}: ${e.message}`)),
290
- );
291
- ```
292
-
293
- ## Telemetry
294
-
295
- The library includes built-in OpenTelemetry spans for observability:
296
-
297
- ```typescript
298
- import { SpanNames } from "@prb/effect-solana";
299
-
300
- // Balance operations
301
- SpanNames.BALANCE_GET_SOL;
302
- SpanNames.BALANCE_WATCH_SOL;
303
-
304
- // Transaction operations
305
- SpanNames.TX_BUILD;
306
- SpanNames.TX_SIGN;
307
- SpanNames.TX_SEND;
308
- SpanNames.TX_CONFIRM;
309
- SpanNames.TX_SEND_AND_CONFIRM;
310
- SpanNames.TX_SIMULATE;
311
-
312
- // Token operations
313
- SpanNames.TOKEN_GET_ATA;
314
- SpanNames.TOKEN_CREATE_ATA;
315
- SpanNames.TOKEN_GET_ACCOUNT;
316
-
317
- // PDA operations
318
- SpanNames.PDA_DERIVE;
319
-
320
- // And more...
321
- ```
322
-
323
- ## React Integration
324
-
325
- The library provides React hooks for integrating Solana operations into React applications:
272
+ ## ⚛️ React Integration
326
273
 
327
274
  ```typescript
328
275
  import { EffectSolanaProvider, useEffectMemo } from "@prb/effect-solana";
329
276
  import { BalanceService } from "@prb/effect-solana";
330
- import type { Address } from "@solana/kit";
331
277
 
332
278
  function App() {
333
279
  return (
334
- <EffectSolanaProvider layer={MainLayer}>
280
+ <EffectSolanaProvider layer={AppLayer}>
335
281
  <Balance address={yourAddress} />
336
282
  </EffectSolanaProvider>
337
283
  );
@@ -344,7 +290,7 @@ function Balance({ address }: { address: Address }) {
344
290
  const balance = yield* BalanceService;
345
291
  return yield* balance.getSolBalance(address);
346
292
  }),
347
- [address],
293
+ [address]
348
294
  );
349
295
 
350
296
  if (result.status === "loading") return <div>Loading...</div>;
@@ -353,54 +299,88 @@ function Balance({ address }: { address: Address }) {
353
299
  }
354
300
  ```
355
301
 
356
- Available React hooks:
302
+ ### Available Hooks
357
303
 
358
304
  - `useEffectMemo` - Run an Effect with memoization
359
305
  - `useEffectOnce` - Run an Effect once on mount
360
306
  - `useStream` - Subscribe to an Effect Stream
361
307
  - `useForkEffect` - Fork an Effect as a background fiber
362
- - `EffectSolanaProvider` - Context provider for Effect runtime
363
308
  - `useEffectSolanaRuntime` - Access the Effect runtime
364
309
 
365
- ## Examples
310
+ ## 🚨 Error Handling
366
311
 
367
- ### Send SOL Transfer
312
+ All errors are tagged for discriminated union handling:
368
313
 
369
314
  ```typescript
370
315
  import { Effect } from "effect";
371
- import { TransactionService } from "@prb/effect-solana";
372
- import { getTransferSolInstruction } from "@solana-program/system";
316
+ import {
317
+ WalletNotConnectedError,
318
+ TransactionFailedError,
319
+ TransactionTimeoutError,
320
+ RpcError,
321
+ catchUserRejection,
322
+ } from "@prb/effect-solana";
373
323
 
374
- const sendSol = (params: { from: Address; to: Address; amount: Lamports }) =>
375
- Effect.gen(function* () {
376
- const tx = yield* TransactionService;
324
+ const handled = program.pipe(
325
+ Effect.catchTag("WalletNotConnectedError", () => Effect.succeed("Please connect wallet")),
326
+ Effect.catchTag("TransactionFailedError", (e) => Effect.succeed(`TX failed: ${e.message}`)),
327
+ Effect.catchTag("TransactionTimeoutError", (e) => Effect.succeed(`TX timed out: ${e.signature}`)),
328
+ Effect.catchTag("RpcError", (e) => Effect.succeed(`RPC error: ${e.message}`)),
329
+ );
377
330
 
378
- const instruction = getTransferSolInstruction({
379
- source: params.from,
380
- destination: params.to,
381
- amount: params.amount,
382
- });
331
+ // Convenience operator for user rejections
332
+ const result = sendTransaction(tx).pipe(catchUserRejection(null));
333
+ ```
383
334
 
384
- const receipt = yield* tx.sendAndConfirm([instruction]);
385
- return receipt.signature;
386
- });
335
+ ### Error Types
336
+
337
+ | Error | Description |
338
+ | -------------------------- | ---------------------------------- |
339
+ | `RpcError` | RPC communication failure |
340
+ | `WalletNotConnectedError` | Wallet not connected |
341
+ | `SignatureError` | Transaction signing failed |
342
+ | `UserRejectedError` | User rejected the transaction |
343
+ | `TransactionSendError` | Failed to send transaction |
344
+ | `TransactionFailedError` | Transaction execution failed |
345
+ | `TransactionTimeoutError` | Transaction confirmation timed out |
346
+ | `BlockhashExpiredError` | Blockhash expired before confirm |
347
+ | `SimulationFailedError` | Transaction simulation failed |
348
+ | `AccountNotFoundError` | Account does not exist |
349
+ | `InsufficientBalanceError` | Insufficient SOL balance |
350
+
351
+ ## 📊 Telemetry
352
+
353
+ Built-in OpenTelemetry spans for observability:
354
+
355
+ ```typescript
356
+ import { SpanNames } from "@prb/effect-solana";
357
+
358
+ // Examples: SpanNames.TX_SEND, SpanNames.BALANCE_GET_SOL, SpanNames.TOKEN_GET_ATA
387
359
  ```
388
360
 
389
- ### Watch Balance Changes
361
+ ## 📚 Constants
390
362
 
391
363
  ```typescript
392
- import { Effect, Stream } from "effect";
393
- import { BalanceService } from "@prb/effect-solana";
364
+ import {
365
+ LAMPORTS_PER_SOL,
366
+ ClusterEndpoints,
367
+ SYSTEM_PROGRAM_ADDRESS,
368
+ TOKEN_PROGRAM_ADDRESS,
369
+ TOKEN_2022_PROGRAM_ADDRESS,
370
+ ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
371
+ COMPUTE_BUDGET_PROGRAM_ADDRESS,
372
+ MEMO_PROGRAM_ADDRESS,
373
+ } from "@prb/effect-solana";
374
+ ```
394
375
 
395
- const watchBalance = (address: Address) =>
396
- Effect.gen(function* () {
397
- const balance = yield* BalanceService;
398
- const stream = yield* balance.watchBalance({ address });
376
+ ## 🔗 Legacy Interop
399
377
 
400
- yield* Stream.runForEach(stream, (lamports) => Effect.sync(() => console.log(`Balance: ${lamports}`)));
401
- });
378
+ Bridge utilities for `@solana/web3.js` v1 compatibility:
379
+
380
+ ```typescript
381
+ import { LegacySigner, transactionBridge } from "@prb/effect-solana/web3.js";
402
382
  ```
403
383
 
404
- ## License
384
+ ## 📄 License
405
385
 
406
- MIT
386
+ This project is licensed under the MIT License - see the [LICENSE](../LICENSE) file for details.
@@ -1,5 +1,3 @@
1
- import { Effect } from "effect";
2
- import type { UserRejectedError } from "./wallet.js";
3
1
  export type TaggedErrorShape = {
4
2
  readonly _tag: string;
5
3
  readonly message: string;
@@ -9,13 +7,4 @@ export declare const hasTaggedErrorShape: (error: unknown) => error is TaggedErr
9
7
  export declare const isTaggedError: <T extends {
10
8
  readonly _tag: string;
11
9
  }>(tag: T["_tag"]) => (error: unknown) => error is T;
12
- export declare const isUserRejectedError: (error: unknown) => error is UserRejectedError;
13
- export declare const catchUserRejection: {
14
- <A2>(fallback: A2): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, Exclude<E, UserRejectedError>, R>;
15
- <A, E, R, A2>(effect: Effect.Effect<A, E, R>, fallback: A2): Effect.Effect<A | A2, Exclude<E, UserRejectedError>, R>;
16
- };
17
- export declare const catchUserRejectionWith: {
18
- <A2, E2, R2>(fallback: Effect.Effect<A2, E2, R2>): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, Exclude<E, UserRejectedError> | E2, R | R2>;
19
- <A, E, R, A2, E2, R2>(effect: Effect.Effect<A, E, R>, fallback: Effect.Effect<A2, E2, R2>): Effect.Effect<A | A2, Exclude<E, UserRejectedError> | E2, R | R2>;
20
- };
21
10
  //# sourceMappingURL=predicates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../../src/core/errors/predicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,gBACoC,CAAC;AAMnG,eAAO,MAAM,aAAa,GACvB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MACnD,OAAO,OAAO,KAAG,KAAK,IAAI,CACuB,CAAC;AAMrD,eAAO,MAAM,mBAAmB,UAPtB,OAAO,KAAG,KAAK,qBAO+D,CAAC;AAgBzF,eAAO,MAAM,kBAAkB,EAAE;IAC/B,CAAC,EAAE,EACD,QAAQ,EAAE,EAAE,GACX,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,EAAE,GACX,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CAY5D,CAAC;AAcF,eAAO,MAAM,sBAAsB,EAAE;IACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAYtE,CAAC"}
1
+ {"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../../src/core/errors/predicates.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,gBACoC,CAAC;AAMnG,eAAO,MAAM,aAAa,GACvB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MACnD,OAAO,OAAO,KAAG,KAAK,IAAI,CACuB,CAAC"}
@@ -1,8 +1,3 @@
1
- import { Effect } from "effect";
2
- import { dual } from "effect/Function";
3
1
  export const hasTaggedErrorShape = (error) => error !== null && typeof error === "object" && "_tag" in error && typeof error._tag === "string";
4
2
  export const isTaggedError = (tag) => (error) => hasTaggedErrorShape(error) && error._tag === tag;
5
- export const isUserRejectedError = isTaggedError("UserRejectedError");
6
- export const catchUserRejection = dual(2, (effect, fallback) => Effect.catchIf(effect, isUserRejectedError, () => Effect.succeed(fallback)));
7
- export const catchUserRejectionWith = dual(2, (effect, fallback) => Effect.catchIf(effect, isUserRejectedError, () => fallback));
8
3
  //# sourceMappingURL=predicates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../../src/core/errors/predicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAevC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC/E,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAMnG,MAAM,CAAC,MAAM,aAAa,GACxB,CAAsC,GAAc,EAAE,EAAE,CACxD,CAAC,KAAc,EAAc,EAAE,CAC7B,mBAAmB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;AAMrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAoB,mBAAmB,CAAC,CAAC;AAgBzF,MAAM,CAAC,MAAM,kBAAkB,GAU3B,IAAI,CACN,CAAC,EACD,CACE,MAA8B,EAC9B,QAAY,EAC6C,EAAE,CAC3D,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAIzE,CACJ,CAAC;AAcF,MAAM,CAAC,MAAM,sBAAsB,GAU/B,IAAI,CACN,CAAC,EACD,CACE,MAA8B,EAC9B,QAAmC,EACgC,EAAE,CACrE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAIzD,CACJ,CAAC"}
1
+ {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../../src/core/errors/predicates.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC/E,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAMnG,MAAM,CAAC,MAAM,aAAa,GACxB,CAAsC,GAAc,EAAE,EAAE,CACxD,CAAC,KAAc,EAAc,EAAE,CAC7B,mBAAmB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC"}
@@ -1,4 +1,11 @@
1
- import { Schema } from "effect";
1
+ import { Effect, Schema } from "effect";
2
+ declare const UserRejectedError_base: Schema.TaggedErrorClass<UserRejectedError, "UserRejectedError", {
3
+ readonly _tag: Schema.tag<"UserRejectedError">;
4
+ } & {
5
+ message: typeof Schema.String;
6
+ }>;
7
+ export declare class UserRejectedError extends UserRejectedError_base {
8
+ }
2
9
  declare const TransactionSendError_base: Schema.TaggedErrorClass<TransactionSendError, "TransactionSendError", {
3
10
  readonly _tag: Schema.tag<"TransactionSendError">;
4
11
  } & {
@@ -11,6 +18,7 @@ export declare class TransactionSendError extends TransactionSendError_base {
11
18
  declare const TransactionFailedError_base: Schema.TaggedErrorClass<TransactionFailedError, "TransactionFailedError", {
12
19
  readonly _tag: Schema.tag<"TransactionFailedError">;
13
20
  } & {
21
+ cause: Schema.optional<typeof Schema.Unknown>;
14
22
  logs: Schema.optional<Schema.Array$<typeof Schema.String>>;
15
23
  message: typeof Schema.String;
16
24
  signature: typeof Schema.String;
@@ -42,5 +50,16 @@ declare const SimulationFailedError_base: Schema.TaggedErrorClass<SimulationFail
42
50
  }>;
43
51
  export declare class SimulationFailedError extends SimulationFailedError_base {
44
52
  }
53
+ export declare const isTaggedUserRejectedError: (error: unknown) => error is UserRejectedError;
54
+ export declare const isUserRejectedError: (error: unknown) => error is UserRejectedError;
55
+ export declare function isLikelyUserRejectedError(error: unknown): boolean;
56
+ export declare const catchUserRejection: {
57
+ <A2>(fallback: A2): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, Exclude<E, UserRejectedError>, R>;
58
+ <A, E, R, A2>(effect: Effect.Effect<A, E, R>, fallback: A2): Effect.Effect<A | A2, Exclude<E, UserRejectedError>, R>;
59
+ };
60
+ export declare const catchUserRejectionWith: {
61
+ <A2, E2, R2>(fallback: Effect.Effect<A2, E2, R2>): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, Exclude<E, UserRejectedError> | E2, R | R2>;
62
+ <A, E, R, A2, E2, R2>(effect: Effect.Effect<A, E, R>, fallback: Effect.Effect<A2, E2, R2>): Effect.Effect<A | A2, Exclude<E, UserRejectedError> | E2, R | R2>;
63
+ };
45
64
  export {};
46
65
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;;AAEhC,qBAAa,oBAAqB,SAAQ,yBAOzC;CAAG;;;;;;;;AAEJ,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;;;;;;;AAEJ,qBAAa,uBAAwB,SAAQ,4BAM5C;CAAG;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAM1C;CAAG;;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAO1C;CAAG"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AASxC,qBAAa,iBAAkB,SAAQ,sBAKtC;CAAG;;;;;;;;AAEJ,qBAAa,oBAAqB,SAAQ,yBAOzC;CAAG;;;;;;;;;AAEJ,qBAAa,sBAAuB,SAAQ,2BAQ3C;CAAG;;;;;;;AAEJ,qBAAa,uBAAwB,SAAQ,4BAM5C;CAAG;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAM1C;CAAG;;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAO1C;CAAG;AASJ,eAAO,MAAM,yBAAyB,gDAAwD,CAAC;AAM/F,eAAO,MAAM,mBAAmB,gDAA4B,CAAC;AAiE7D,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAqBjE;AAoBD,eAAO,MAAM,kBAAkB,EAAE;IAC/B,CAAC,EAAE,EACD,QAAQ,EAAE,EAAE,GACX,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,EAAE,GACX,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CAY5D,CAAC;AAcF,eAAO,MAAM,sBAAsB,EAAE;IACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAYtE,CAAC"}
@@ -1,4 +1,10 @@
1
- import { Schema } from "effect";
1
+ import { Effect, Schema } from "effect";
2
+ import { dual } from "effect/Function";
3
+ import { hasTaggedErrorShape, isTaggedError } from "./predicates.js";
4
+ export class UserRejectedError extends Schema.TaggedError()("UserRejectedError", {
5
+ message: Schema.String,
6
+ }) {
7
+ }
2
8
  export class TransactionSendError extends Schema.TaggedError()("TransactionSendError", {
3
9
  cause: Schema.optional(Schema.Unknown),
4
10
  message: Schema.String,
@@ -6,6 +12,7 @@ export class TransactionSendError extends Schema.TaggedError()("TransactionSendE
6
12
  }) {
7
13
  }
8
14
  export class TransactionFailedError extends Schema.TaggedError()("TransactionFailedError", {
15
+ cause: Schema.optional(Schema.Unknown),
9
16
  logs: Schema.optional(Schema.Array(Schema.String)),
10
17
  message: Schema.String,
11
18
  signature: Schema.String,
@@ -27,4 +34,56 @@ export class SimulationFailedError extends Schema.TaggedError()("SimulationFaile
27
34
  message: Schema.String,
28
35
  }) {
29
36
  }
37
+ export const isTaggedUserRejectedError = isTaggedError("UserRejectedError");
38
+ export const isUserRejectedError = isTaggedUserRejectedError;
39
+ const USER_REJECTION_CODE = 4001;
40
+ const USER_REJECTION_MESSAGES = ["user rejected", "rejected the request"];
41
+ function isRejectionCode(code) {
42
+ return code === USER_REJECTION_CODE || code === `${USER_REJECTION_CODE}`;
43
+ }
44
+ function hasRejectionMessage(message) {
45
+ const lower = message.toLowerCase();
46
+ return USER_REJECTION_MESSAGES.some((m) => lower.includes(m));
47
+ }
48
+ function checkCause(cause, depth) {
49
+ if (!cause || depth > 3) {
50
+ return false;
51
+ }
52
+ if (typeof cause === "object" && "code" in cause && isRejectionCode(cause.code)) {
53
+ return true;
54
+ }
55
+ if (typeof cause === "string") {
56
+ return hasRejectionMessage(cause);
57
+ }
58
+ if (cause instanceof Error) {
59
+ if (isRejectionCode(cause.code)) {
60
+ return true;
61
+ }
62
+ if (hasRejectionMessage(cause.message)) {
63
+ return true;
64
+ }
65
+ return checkCause(cause.cause, depth + 1);
66
+ }
67
+ if (typeof cause === "object" && "message" in cause && typeof cause.message === "string") {
68
+ return hasRejectionMessage(cause.message);
69
+ }
70
+ return false;
71
+ }
72
+ export function isLikelyUserRejectedError(error) {
73
+ if (!error || typeof error !== "object") {
74
+ return false;
75
+ }
76
+ if (isUserRejectedError(error)) {
77
+ return true;
78
+ }
79
+ if (hasTaggedErrorShape(error) && error._tag === "WalletNotConnectedError") {
80
+ return true;
81
+ }
82
+ if (hasTaggedErrorShape(error) && error._tag === "SignatureError") {
83
+ return checkCause(error.cause, 0);
84
+ }
85
+ return false;
86
+ }
87
+ export const catchUserRejection = dual(2, (effect, fallback) => Effect.catchIf(effect, isUserRejectedError, () => Effect.succeed(fallback)));
88
+ export const catchUserRejectionWith = dual(2, (effect, fallback) => Effect.catchIf(effect, isUserRejectedError, () => fallback));
30
89
  //# sourceMappingURL=transaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,EAAwB,CAClF,sBAAsB,EACtB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CAC1C,CACF;CAAG;AAEJ,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,uBAAwB,SAAQ,MAAM,CAAC,WAAW,EAA2B,CACxF,yBAAyB,EACzB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG;AAEJ,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,5 @@ declare const SignatureError_base: Schema.TaggedErrorClass<SignatureError, "Sign
14
14
  }>;
15
15
  export declare class SignatureError extends SignatureError_base {
16
16
  }
17
- declare const UserRejectedError_base: Schema.TaggedErrorClass<UserRejectedError, "UserRejectedError", {
18
- readonly _tag: Schema.tag<"UserRejectedError">;
19
- } & {
20
- message: typeof Schema.String;
21
- }>;
22
- export declare class UserRejectedError extends UserRejectedError_base {
23
- }
24
17
  export {};
25
18
  //# sourceMappingURL=wallet.d.ts.map