@prb/effect-solana 1.0.0-beta.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 (210) hide show
  1. package/README.md +406 -0
  2. package/dist/balance/index.d.ts +2 -0
  3. package/dist/balance/index.d.ts.map +1 -0
  4. package/dist/balance/index.js +2 -0
  5. package/dist/balance/index.js.map +1 -0
  6. package/dist/balance/service.d.ts +21 -0
  7. package/dist/balance/service.d.ts.map +1 -0
  8. package/dist/balance/service.js +62 -0
  9. package/dist/balance/service.js.map +1 -0
  10. package/dist/constants/index.d.ts +11 -0
  11. package/dist/constants/index.d.ts.map +1 -0
  12. package/dist/constants/index.js +14 -0
  13. package/dist/constants/index.js.map +1 -0
  14. package/dist/core/errors/account.d.ts +21 -0
  15. package/dist/core/errors/account.d.ts.map +1 -0
  16. package/dist/core/errors/account.js +14 -0
  17. package/dist/core/errors/account.js.map +1 -0
  18. package/dist/core/errors/index.d.ts +6 -0
  19. package/dist/core/errors/index.d.ts.map +1 -0
  20. package/dist/core/errors/index.js +6 -0
  21. package/dist/core/errors/index.js.map +1 -0
  22. package/dist/core/errors/predicates.d.ts +21 -0
  23. package/dist/core/errors/predicates.d.ts.map +1 -0
  24. package/dist/core/errors/predicates.js +8 -0
  25. package/dist/core/errors/predicates.js.map +1 -0
  26. package/dist/core/errors/rpc.d.ts +20 -0
  27. package/dist/core/errors/rpc.d.ts.map +1 -0
  28. package/dist/core/errors/rpc.js +13 -0
  29. package/dist/core/errors/rpc.js.map +1 -0
  30. package/dist/core/errors/transaction.d.ts +46 -0
  31. package/dist/core/errors/transaction.d.ts.map +1 -0
  32. package/dist/core/errors/transaction.js +30 -0
  33. package/dist/core/errors/transaction.js.map +1 -0
  34. package/dist/core/errors/wallet.d.ts +25 -0
  35. package/dist/core/errors/wallet.d.ts.map +1 -0
  36. package/dist/core/errors/wallet.js +15 -0
  37. package/dist/core/errors/wallet.js.map +1 -0
  38. package/dist/core/index.d.ts +2 -0
  39. package/dist/core/index.d.ts.map +1 -0
  40. package/dist/core/index.js +2 -0
  41. package/dist/core/index.js.map +1 -0
  42. package/dist/index.d.ts +13 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +13 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/internal/index.d.ts +2 -0
  47. package/dist/internal/index.d.ts.map +1 -0
  48. package/dist/internal/index.js +2 -0
  49. package/dist/internal/index.js.map +1 -0
  50. package/dist/internal/kit-effect.d.ts +11 -0
  51. package/dist/internal/kit-effect.d.ts.map +1 -0
  52. package/dist/internal/kit-effect.js +19 -0
  53. package/dist/internal/kit-effect.js.map +1 -0
  54. package/dist/pda/index.d.ts +2 -0
  55. package/dist/pda/index.d.ts.map +1 -0
  56. package/dist/pda/index.js +2 -0
  57. package/dist/pda/index.js.map +1 -0
  58. package/dist/pda/service.d.ts +15 -0
  59. package/dist/pda/service.d.ts.map +1 -0
  60. package/dist/pda/service.js +34 -0
  61. package/dist/pda/service.js.map +1 -0
  62. package/dist/presets/index.d.ts +2 -0
  63. package/dist/presets/index.d.ts.map +1 -0
  64. package/dist/presets/index.js +2 -0
  65. package/dist/presets/index.js.map +1 -0
  66. package/dist/presets/layers.d.ts +18 -0
  67. package/dist/presets/layers.d.ts.map +1 -0
  68. package/dist/presets/layers.js +40 -0
  69. package/dist/presets/layers.js.map +1 -0
  70. package/dist/react-hooks/index.d.ts +9 -0
  71. package/dist/react-hooks/index.d.ts.map +1 -0
  72. package/dist/react-hooks/index.js +5 -0
  73. package/dist/react-hooks/index.js.map +1 -0
  74. package/dist/react-hooks/internal/error.d.ts +5 -0
  75. package/dist/react-hooks/internal/error.d.ts.map +1 -0
  76. package/dist/react-hooks/internal/error.js +9 -0
  77. package/dist/react-hooks/internal/error.js.map +1 -0
  78. package/dist/react-hooks/internal/is-dev.d.ts +2 -0
  79. package/dist/react-hooks/internal/is-dev.d.ts.map +1 -0
  80. package/dist/react-hooks/internal/is-dev.js +5 -0
  81. package/dist/react-hooks/internal/is-dev.js.map +1 -0
  82. package/dist/react-hooks/internal/runtime.d.ts +21 -0
  83. package/dist/react-hooks/internal/runtime.d.ts.map +1 -0
  84. package/dist/react-hooks/internal/runtime.js +38 -0
  85. package/dist/react-hooks/internal/runtime.js.map +1 -0
  86. package/dist/react-hooks/internal/scoped-run.d.ts +11 -0
  87. package/dist/react-hooks/internal/scoped-run.d.ts.map +1 -0
  88. package/dist/react-hooks/internal/scoped-run.js +21 -0
  89. package/dist/react-hooks/internal/scoped-run.js.map +1 -0
  90. package/dist/react-hooks/internal/stable.d.ts +2 -0
  91. package/dist/react-hooks/internal/stable.d.ts.map +1 -0
  92. package/dist/react-hooks/internal/stable.js +3 -0
  93. package/dist/react-hooks/internal/stable.js.map +1 -0
  94. package/dist/react-hooks/primitives/use-effect-memo-factory.d.ts +11 -0
  95. package/dist/react-hooks/primitives/use-effect-memo-factory.d.ts.map +1 -0
  96. package/dist/react-hooks/primitives/use-effect-memo-factory.js +92 -0
  97. package/dist/react-hooks/primitives/use-effect-memo-factory.js.map +1 -0
  98. package/dist/react-hooks/primitives/use-effect.d.ts +23 -0
  99. package/dist/react-hooks/primitives/use-effect.d.ts.map +1 -0
  100. package/dist/react-hooks/primitives/use-effect.js +93 -0
  101. package/dist/react-hooks/primitives/use-effect.js.map +1 -0
  102. package/dist/react-hooks/primitives/use-fork-effect.d.ts +4 -0
  103. package/dist/react-hooks/primitives/use-fork-effect.d.ts.map +1 -0
  104. package/dist/react-hooks/primitives/use-fork-effect.js +20 -0
  105. package/dist/react-hooks/primitives/use-fork-effect.js.map +1 -0
  106. package/dist/react-hooks/primitives/use-stream.d.ts +26 -0
  107. package/dist/react-hooks/primitives/use-stream.d.ts.map +1 -0
  108. package/dist/react-hooks/primitives/use-stream.js +161 -0
  109. package/dist/react-hooks/primitives/use-stream.js.map +1 -0
  110. package/dist/react-hooks/primitives.d.ts +8 -0
  111. package/dist/react-hooks/primitives.d.ts.map +1 -0
  112. package/dist/react-hooks/primitives.js +6 -0
  113. package/dist/react-hooks/primitives.js.map +1 -0
  114. package/dist/react-hooks/provider.d.ts +19 -0
  115. package/dist/react-hooks/provider.d.ts.map +1 -0
  116. package/dist/react-hooks/provider.js +71 -0
  117. package/dist/react-hooks/provider.js.map +1 -0
  118. package/dist/rpc/index.d.ts +2 -0
  119. package/dist/rpc/index.d.ts.map +1 -0
  120. package/dist/rpc/index.js +2 -0
  121. package/dist/rpc/index.js.map +1 -0
  122. package/dist/rpc/service.d.ts +17 -0
  123. package/dist/rpc/service.d.ts.map +1 -0
  124. package/dist/rpc/service.js +35 -0
  125. package/dist/rpc/service.js.map +1 -0
  126. package/dist/signer/index.d.ts +2 -0
  127. package/dist/signer/index.d.ts.map +1 -0
  128. package/dist/signer/index.js +2 -0
  129. package/dist/signer/index.js.map +1 -0
  130. package/dist/signer/service.d.ts +22 -0
  131. package/dist/signer/service.d.ts.map +1 -0
  132. package/dist/signer/service.js +42 -0
  133. package/dist/signer/service.js.map +1 -0
  134. package/dist/telemetry/index.d.ts +3 -0
  135. package/dist/telemetry/index.d.ts.map +1 -0
  136. package/dist/telemetry/index.js +3 -0
  137. package/dist/telemetry/index.js.map +1 -0
  138. package/dist/telemetry/logger.d.ts +30 -0
  139. package/dist/telemetry/logger.d.ts.map +1 -0
  140. package/dist/telemetry/logger.js +8 -0
  141. package/dist/telemetry/logger.js.map +1 -0
  142. package/dist/telemetry/tracer.d.ts +47 -0
  143. package/dist/telemetry/tracer.d.ts.map +1 -0
  144. package/dist/telemetry/tracer.js +47 -0
  145. package/dist/telemetry/tracer.js.map +1 -0
  146. package/dist/testing-kit/_fixtures/addresses.d.ts +8 -0
  147. package/dist/testing-kit/_fixtures/addresses.d.ts.map +1 -0
  148. package/dist/testing-kit/_fixtures/addresses.js +7 -0
  149. package/dist/testing-kit/_fixtures/addresses.js.map +1 -0
  150. package/dist/testing-kit/helpers.d.ts +9 -0
  151. package/dist/testing-kit/helpers.d.ts.map +1 -0
  152. package/dist/testing-kit/helpers.js +32 -0
  153. package/dist/testing-kit/helpers.js.map +1 -0
  154. package/dist/testing-kit/index.d.ts +17 -0
  155. package/dist/testing-kit/index.d.ts.map +1 -0
  156. package/dist/testing-kit/index.js +10 -0
  157. package/dist/testing-kit/index.js.map +1 -0
  158. package/dist/testing-kit/mock-balance-service.d.ts +18 -0
  159. package/dist/testing-kit/mock-balance-service.d.ts.map +1 -0
  160. package/dist/testing-kit/mock-balance-service.js +10 -0
  161. package/dist/testing-kit/mock-balance-service.js.map +1 -0
  162. package/dist/testing-kit/mock-pda-service.d.ts +12 -0
  163. package/dist/testing-kit/mock-pda-service.d.ts.map +1 -0
  164. package/dist/testing-kit/mock-pda-service.js +11 -0
  165. package/dist/testing-kit/mock-pda-service.js.map +1 -0
  166. package/dist/testing-kit/mock-rpc-service.d.ts +15 -0
  167. package/dist/testing-kit/mock-rpc-service.d.ts.map +1 -0
  168. package/dist/testing-kit/mock-rpc-service.js +63 -0
  169. package/dist/testing-kit/mock-rpc-service.js.map +1 -0
  170. package/dist/testing-kit/mock-signer-service.d.ts +16 -0
  171. package/dist/testing-kit/mock-signer-service.d.ts.map +1 -0
  172. package/dist/testing-kit/mock-signer-service.js +25 -0
  173. package/dist/testing-kit/mock-signer-service.js.map +1 -0
  174. package/dist/testing-kit/mock-token-service.d.ts +28 -0
  175. package/dist/testing-kit/mock-token-service.d.ts.map +1 -0
  176. package/dist/testing-kit/mock-token-service.js +51 -0
  177. package/dist/testing-kit/mock-token-service.js.map +1 -0
  178. package/dist/testing-kit/mock-transaction-service.d.ts +22 -0
  179. package/dist/testing-kit/mock-transaction-service.d.ts.map +1 -0
  180. package/dist/testing-kit/mock-transaction-service.js +29 -0
  181. package/dist/testing-kit/mock-transaction-service.js.map +1 -0
  182. package/dist/testing-kit/test-layer.d.ts +23 -0
  183. package/dist/testing-kit/test-layer.d.ts.map +1 -0
  184. package/dist/testing-kit/test-layer.js +31 -0
  185. package/dist/testing-kit/test-layer.js.map +1 -0
  186. package/dist/token/index.d.ts +2 -0
  187. package/dist/token/index.d.ts.map +1 -0
  188. package/dist/token/index.js +2 -0
  189. package/dist/token/index.js.map +1 -0
  190. package/dist/token/service.d.ts +38 -0
  191. package/dist/token/service.d.ts.map +1 -0
  192. package/dist/token/service.js +158 -0
  193. package/dist/token/service.js.map +1 -0
  194. package/dist/tx/index.d.ts +3 -0
  195. package/dist/tx/index.d.ts.map +1 -0
  196. package/dist/tx/index.js +3 -0
  197. package/dist/tx/index.js.map +1 -0
  198. package/dist/tx/service.d.ts +27 -0
  199. package/dist/tx/service.d.ts.map +1 -0
  200. package/dist/tx/service.js +178 -0
  201. package/dist/tx/service.js.map +1 -0
  202. package/dist/tx/types.d.ts +29 -0
  203. package/dist/tx/types.d.ts.map +1 -0
  204. package/dist/tx/types.js +2 -0
  205. package/dist/tx/types.js.map +1 -0
  206. package/dist/types/index.d.ts +12 -0
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/types/index.js +2 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/package.json +81 -0
@@ -0,0 +1,3 @@
1
+ export * from "./service.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./service.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Instruction } from "@solana/instructions";
2
+ import type { Signature } from "@solana/keys";
3
+ import type { CompilableTransactionMessage } from "@solana/transaction-messages";
4
+ import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
5
+ import { Context, Effect, Layer } from "effect";
6
+ import type { WalletNotConnectedError } from "../core/errors/index.js";
7
+ import { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError } from "../core/errors/index.js";
8
+ import { RpcService } from "../rpc/index.js";
9
+ import { SignerService } from "../signer/index.js";
10
+ import type { ConfirmOpts, TransactionBatchItem, TransactionBatchOpts, TransactionBuildOpts, TransactionReceipt } from "./types.js";
11
+ export type TransactionServiceShape = {
12
+ readonly build: (instructions: readonly Instruction[], opts?: TransactionBuildOpts) => Effect.Effect<CompilableTransactionMessage, TransactionSendError | WalletNotConnectedError>;
13
+ readonly signAll: (txs: readonly CompilableTransactionMessage[]) => Effect.Effect<readonly (Transaction & TransactionWithLifetime)[], TransactionSendError | WalletNotConnectedError>;
14
+ readonly sign: <T extends CompilableTransactionMessage>(tx: T) => Effect.Effect<Transaction & TransactionWithLifetime, TransactionSendError | WalletNotConnectedError>;
15
+ readonly sendAll: (txs: readonly (Transaction & TransactionWithLifetime)[], opts?: TransactionBatchOpts) => Effect.Effect<readonly Signature[], TransactionSendError>;
16
+ readonly send: (tx: Transaction & TransactionWithLifetime) => Effect.Effect<Signature, TransactionSendError>;
17
+ readonly confirm: (signature: Signature, opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionTimeoutError | TransactionFailedError>;
18
+ readonly sendAndConfirm: (instructions: readonly Instruction[], opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
19
+ readonly sendAndConfirmBatch: (items: readonly TransactionBatchItem[], opts?: TransactionBatchOpts) => Effect.Effect<readonly TransactionReceipt[], TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
20
+ readonly simulate: <T extends CompilableTransactionMessage>(tx: T) => Effect.Effect<void, SimulationFailedError | TransactionSendError | WalletNotConnectedError>;
21
+ };
22
+ declare const TransactionService_base: Context.TagClass<TransactionService, "esolana/TransactionService", TransactionServiceShape>;
23
+ export declare class TransactionService extends TransactionService_base {
24
+ }
25
+ export declare const TransactionServiceLive: Layer.Layer<TransactionService, never, RpcService | SignerService>;
26
+ export {};
27
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { pipe } from "@solana/functional";
2
+ import { appendTransactionMessageInstructions, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/transaction-messages";
3
+ import { compileTransaction, getBase64EncodedWireTransaction, getSignatureFromTransaction, } from "@solana/transactions";
4
+ import { getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, } from "@solana-program/compute-budget";
5
+ import { Context, Duration, Effect, Layer, Schedule } from "effect";
6
+ import { SignatureError, SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, } from "../core/errors/index.js";
7
+ import { RpcService } from "../rpc/index.js";
8
+ import { SignerService } from "../signer/index.js";
9
+ import { SpanNames } from "../telemetry/index.js";
10
+ export class TransactionService extends Context.Tag("esolana/TransactionService")() {
11
+ }
12
+ const hasReachedConfirmation = (status, commitment) => {
13
+ if (commitment === "processed") {
14
+ return true;
15
+ }
16
+ if (commitment === "confirmed") {
17
+ return status.confirmationStatus === "confirmed" || status.confirmationStatus === "finalized";
18
+ }
19
+ return status.confirmationStatus === "finalized";
20
+ };
21
+ const checkSignatureStatus = (rpc, signature, commitment) => Effect.gen(function* () {
22
+ const response = yield* Effect.promise(() => rpc.getSignatureStatuses([signature]).send());
23
+ const status = response?.value?.[0];
24
+ if (!status) {
25
+ return null;
26
+ }
27
+ if (status.err) {
28
+ return yield* Effect.fail(new TransactionFailedError({
29
+ logs: [],
30
+ message: "Transaction failed on-chain",
31
+ signature,
32
+ }));
33
+ }
34
+ if (hasReachedConfirmation(status, commitment)) {
35
+ return {
36
+ confirmations: status.confirmations !== null ? BigInt(status.confirmations) : null,
37
+ signature,
38
+ slot: BigInt(status.slot),
39
+ };
40
+ }
41
+ return null;
42
+ });
43
+ const buildComputeBudgetInstructions = (config) => {
44
+ if (!config) {
45
+ return [];
46
+ }
47
+ const instructions = [];
48
+ if (config.unitLimit !== undefined) {
49
+ instructions.push(getSetComputeUnitLimitInstruction({ units: config.unitLimit }));
50
+ }
51
+ if (config.microLamports !== undefined) {
52
+ instructions.push(getSetComputeUnitPriceInstruction({ microLamports: config.microLamports }));
53
+ }
54
+ return instructions;
55
+ };
56
+ export const TransactionServiceLive = Layer.effect(TransactionService, Effect.gen(function* () {
57
+ const rpcService = yield* RpcService;
58
+ const signerService = yield* SignerService;
59
+ const service = {
60
+ build: (instructions, opts) => Effect.gen(function* () {
61
+ const rpc = yield* rpcService.getRpc();
62
+ const address = yield* signerService.getAddress();
63
+ const computeBudgetInstructions = buildComputeBudgetInstructions(opts?.computeBudget);
64
+ const { value: latestBlockhash } = yield* Effect.tryPromise({
65
+ catch: (cause) => new TransactionSendError({
66
+ cause,
67
+ message: "Failed to get latest blockhash",
68
+ }),
69
+ try: () => rpc.getLatestBlockhash().send(),
70
+ });
71
+ const message = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayer(address, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), (m) => appendTransactionMessageInstructions([...computeBudgetInstructions, ...instructions], m));
72
+ return message;
73
+ }).pipe(Effect.withSpan(SpanNames.TX_BUILD)),
74
+ confirm: (signature, opts) => Effect.gen(function* () {
75
+ const rpc = yield* rpcService.getRpc();
76
+ const commitment = opts?.commitment ?? "confirmed";
77
+ const timeout = opts?.timeout ?? 60_000;
78
+ const pollEffect = checkSignatureStatus(rpc, signature, commitment).pipe(Effect.flatMap((receipt) => receipt ? Effect.succeed(receipt) : Effect.fail("not-confirmed")));
79
+ const retrySchedule = Schedule.spaced("2 seconds");
80
+ return yield* pollEffect.pipe(Effect.retry(retrySchedule), Effect.timeout(`${timeout} millis`), Effect.catchTag("TimeoutException", () => Effect.fail(new TransactionTimeoutError({
81
+ message: `Transaction confirmation timed out after ${timeout}ms`,
82
+ signature,
83
+ }))), Effect.catchAll((error) => {
84
+ if (error instanceof TransactionFailedError) {
85
+ return Effect.fail(error);
86
+ }
87
+ return Effect.fail(new TransactionTimeoutError({
88
+ message: `Transaction confirmation timed out after ${timeout}ms`,
89
+ signature,
90
+ }));
91
+ }));
92
+ }).pipe(Effect.withSpan(SpanNames.TX_CONFIRM)),
93
+ send: (tx) => Effect.gen(function* () {
94
+ const rpc = yield* rpcService.getRpc();
95
+ const signature = getSignatureFromTransaction(tx);
96
+ const wireTransaction = getBase64EncodedWireTransaction(tx);
97
+ yield* Effect.tryPromise({
98
+ catch: (cause) => new TransactionSendError({
99
+ cause,
100
+ message: "Failed to send transaction",
101
+ signature,
102
+ }),
103
+ try: () => rpc
104
+ .sendTransaction(wireTransaction, { encoding: "base64", skipPreflight: false })
105
+ .send(),
106
+ });
107
+ return signature;
108
+ }).pipe(Effect.withSpan(SpanNames.TX_SEND)),
109
+ sendAll: (txs, opts) => Effect.gen(function* () {
110
+ const retries = opts?.sendRetries ?? 0;
111
+ const retryDelay = opts?.sendRetryDelay ?? 500;
112
+ const sendWithRetry = (tx) => {
113
+ const sendEffect = service.send(tx);
114
+ if (retries <= 0) {
115
+ return sendEffect;
116
+ }
117
+ const retrySchedule = pipe(Schedule.recurs(retries), Schedule.addDelay(() => Duration.millis(retryDelay)));
118
+ return sendEffect.pipe(Effect.retry(retrySchedule));
119
+ };
120
+ return yield* Effect.forEach(txs, (tx) => sendWithRetry(tx), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
121
+ }).pipe(Effect.withSpan(SpanNames.TX_SEND)),
122
+ sendAndConfirm: (instructions, opts) => Effect.gen(function* () {
123
+ const tx = yield* service.build(instructions);
124
+ const signed = yield* service.sign(tx);
125
+ const signature = yield* service.send(signed);
126
+ return yield* service.confirm(signature, opts);
127
+ }).pipe(Effect.withSpan(SpanNames.TX_SEND_AND_CONFIRM)),
128
+ sendAndConfirmBatch: (items, opts) => Effect.gen(function* () {
129
+ const built = yield* Effect.forEach(items, (item) => service.build(item.instructions, { computeBudget: item.computeBudget }), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
130
+ const signed = yield* service.signAll(built);
131
+ const signatures = yield* service.sendAll(signed, opts);
132
+ return yield* Effect.forEach(signatures, (signature) => service.confirm(signature, opts?.confirm), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
133
+ }).pipe(Effect.withSpan(SpanNames.TX_SEND_AND_CONFIRM)),
134
+ sign: (tx) => Effect.gen(function* () {
135
+ const compiled = compileTransaction(tx);
136
+ const typed = compiled;
137
+ return yield* signerService
138
+ .signTransaction(typed)
139
+ .pipe(Effect.mapError((error) => error instanceof SignatureError
140
+ ? new TransactionSendError({ cause: error, message: error.message })
141
+ : error));
142
+ }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),
143
+ signAll: (txs) => Effect.gen(function* () {
144
+ const compiled = txs.map((tx) => compileTransaction(tx));
145
+ return (yield* signerService
146
+ .signAllTransactions(compiled)
147
+ .pipe(Effect.mapError((error) => error instanceof SignatureError
148
+ ? new TransactionSendError({ cause: error, message: error.message })
149
+ : error)));
150
+ }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),
151
+ simulate: (tx) => Effect.gen(function* () {
152
+ const rpc = yield* rpcService.getRpc();
153
+ const compiled = compileTransaction(tx);
154
+ const typed = compiled;
155
+ const signed = yield* signerService
156
+ .signTransaction(typed)
157
+ .pipe(Effect.mapError((error) => error instanceof SignatureError
158
+ ? new TransactionSendError({ cause: error, message: error.message })
159
+ : error));
160
+ const wireTransaction = getBase64EncodedWireTransaction(signed);
161
+ const result = yield* Effect.tryPromise({
162
+ catch: (cause) => new SimulationFailedError({
163
+ cause,
164
+ message: "Simulation failed",
165
+ }),
166
+ try: () => rpc.simulateTransaction(wireTransaction, { encoding: "base64" }).send(),
167
+ });
168
+ if (result.value.err) {
169
+ return yield* Effect.fail(new SimulationFailedError({
170
+ logs: result.value.logs ?? [],
171
+ message: "Simulation failed with error",
172
+ }));
173
+ }
174
+ }).pipe(Effect.withSpan(SpanNames.TX_SIMULATE)),
175
+ };
176
+ return TransactionService.of(service);
177
+ }));
178
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Instruction } from "@solana/instructions";
2
+ import type { Signature } from "@solana/keys";
3
+ export type ConfirmOpts = {
4
+ readonly commitment?: "processed" | "confirmed" | "finalized";
5
+ readonly timeout?: number;
6
+ };
7
+ export type ComputeBudgetConfig = {
8
+ readonly unitLimit?: number;
9
+ readonly microLamports?: number | bigint;
10
+ };
11
+ export type TransactionBuildOpts = {
12
+ readonly computeBudget?: ComputeBudgetConfig;
13
+ };
14
+ export type TransactionBatchItem = {
15
+ readonly instructions: readonly Instruction[];
16
+ readonly computeBudget?: ComputeBudgetConfig;
17
+ };
18
+ export type TransactionBatchOpts = {
19
+ readonly concurrency?: number;
20
+ readonly sendRetries?: number;
21
+ readonly sendRetryDelay?: number;
22
+ readonly confirm?: ConfirmOpts;
23
+ };
24
+ export type TransactionReceipt = {
25
+ readonly signature: Signature;
26
+ readonly slot: bigint;
27
+ readonly confirmations: bigint | null;
28
+ };
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,MAAM,WAAW,GAAG;IAKxB,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAM9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAOF,MAAM,MAAM,mBAAmB,GAAG;IAIhC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAK5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAIjC,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAIjC,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAK9C,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAKjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAKjC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC,CAAC;AAOF,MAAM,MAAM,kBAAkB,GAAG;IAI/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAK9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export type { Address, Commitment, Lamports, Signature, TransactionError, } from "@solana/kit";
2
+ export type { TransactionSigner } from "@solana/signers";
3
+ export type Cluster = "mainnet-beta" | "devnet" | "testnet" | "localnet";
4
+ export type ClusterConfig = {
5
+ readonly cluster: Cluster;
6
+ readonly rpcUrl: string;
7
+ readonly wsUrl?: string;
8
+ };
9
+ export type Microlamports = bigint & {
10
+ readonly _brand: "Microlamports";
11
+ };
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAYA,YAAY,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AASzD,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAKzE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAUF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@prb/effect-solana",
3
+ "description": "Effect-TS integration for Solana",
4
+ "version": "1.0.0-beta.0",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "author": {
9
+ "name": "Paul Razvan Berg",
10
+ "url": "https://github.com/PaulRBerg"
11
+ },
12
+ "license": "MIT",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/PaulRBerg/prb-effect.git",
16
+ "directory": "solana"
17
+ },
18
+ "bugs": {
19
+ "url": "https://github.com/PaulRBerg/prb-effect/issues"
20
+ },
21
+ "homepage": "https://github.com/PaulRBerg/prb-effect/tree/main/solana#readme",
22
+ "devDependencies": {
23
+ "@biomejs/biome": "catalog:dev",
24
+ "@effect/platform": "catalog:effect",
25
+ "@effect/vitest": "catalog:dev",
26
+ "@sablier/devkit": "catalog:dev",
27
+ "@solana-program/compute-budget": "^0.8.0",
28
+ "@solana-program/system": "^0.8.0",
29
+ "@solana-program/token": "^0.8.0",
30
+ "@solana/kit": "^2.2.7",
31
+ "@types/node": "^25.0.3",
32
+ "@types/react": "catalog:dev",
33
+ "@types/react-dom": "catalog:dev",
34
+ "@typescript/native-preview": "catalog:dev",
35
+ "@vitest/ui": "catalog:dev",
36
+ "effect": "catalog:effect",
37
+ "react": "catalog:",
38
+ "react-dom": "catalog:",
39
+ "tsc-alias": "catalog:dev",
40
+ "typescript": "catalog:dev",
41
+ "vitest": "catalog:dev"
42
+ },
43
+ "exports": {
44
+ ".": {
45
+ "types": "./dist/index.d.ts",
46
+ "import": "./dist/index.js"
47
+ },
48
+ "./internal/*": null,
49
+ "./*": {
50
+ "types": "./dist/*/index.d.ts",
51
+ "import": "./dist/*/index.js"
52
+ }
53
+ },
54
+ "files": [
55
+ "dist/**",
56
+ "README.md",
57
+ "DOCS.md",
58
+ "CONTRIBUTING.md"
59
+ ],
60
+ "peerDependencies": {
61
+ "@effect/platform": "catalog:peers",
62
+ "effect": "catalog:peers",
63
+ "@solana/kit": "^2.2.0",
64
+ "@solana-program/system": "^0.8.0",
65
+ "@solana-program/token": "^0.8.0",
66
+ "@solana-program/compute-budget": "^0.8.0",
67
+ "react": "catalog:peers",
68
+ "react-dom": "catalog:peers"
69
+ },
70
+ "peerDependenciesMeta": {
71
+ "react": {
72
+ "optional": true
73
+ },
74
+ "react-dom": {
75
+ "optional": true
76
+ }
77
+ },
78
+ "publishConfig": {
79
+ "access": "public"
80
+ }
81
+ }