@magicblock-labs/ephemeral-rollups-sdk 0.2.5 → 0.2.7

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=magic-router.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/magic-router.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const magic_router_js_1 = require("../magic-router.js");
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const mockPublicKey = (address) => ({
6
+ toBase58: () => address,
7
+ toString: () => address,
8
+ });
9
+ jest.mock("@solana/web3.js", () => {
10
+ const actual = jest.requireActual("@solana/web3.js");
11
+ return {
12
+ ...actual,
13
+ Connection: jest.fn().mockImplementation(() => ({
14
+ rpcEndpoint: "http://localhost",
15
+ sendRawTransaction: jest.fn().mockResolvedValue("mock-signature"),
16
+ })),
17
+ Transaction: jest.fn().mockImplementation(() => ({
18
+ feePayer: mockPublicKey("mock-fee-payer"),
19
+ signature: [],
20
+ instructions: [
21
+ {
22
+ keys: [
23
+ { pubkey: mockPublicKey("key1"), isSigner: true, isWritable: true },
24
+ {
25
+ pubkey: mockPublicKey("key2"),
26
+ isSigner: false,
27
+ isWritable: false,
28
+ },
29
+ ],
30
+ },
31
+ ],
32
+ serialize: jest.fn(() => Buffer.from("mock")),
33
+ sign: jest.fn(),
34
+ })),
35
+ Keypair: jest.fn().mockImplementation(() => ({
36
+ publicKey: mockPublicKey("mock-public-key"),
37
+ sign: jest.fn(),
38
+ })),
39
+ PublicKey: jest
40
+ .fn()
41
+ .mockImplementation((address) => mockPublicKey(address)),
42
+ };
43
+ });
44
+ global.fetch = jest.fn(async () => Promise.resolve({
45
+ json: async () => Promise.resolve({ result: { blockhash: "mock-blockhash" } }),
46
+ }));
47
+ describe("prepareRouterTransaction", () => {
48
+ it("sets recentBlockhash and returns the transaction", async () => {
49
+ const connection = new web3_js_1.Connection("http://localhost");
50
+ const transaction = new web3_js_1.Transaction();
51
+ const result = await (0, magic_router_js_1.prepareMagicTransaction)(connection, transaction);
52
+ expect(result.recentBlockhash).toBe("mock-blockhash");
53
+ expect(global.fetch).toHaveBeenCalledWith("http://localhost", {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/json" },
56
+ body: JSON.stringify({
57
+ jsonrpc: "2.0",
58
+ id: 1,
59
+ method: "getBlockhashForAccounts",
60
+ params: [["mock-fee-payer", "key1"]],
61
+ }),
62
+ });
63
+ });
64
+ });
65
+ describe("sendRouterTransaction", () => {
66
+ it("sets recentBlockhash, feePayer, signs, and sends the transaction", async () => {
67
+ const connection = new web3_js_1.Connection("http://localhost");
68
+ const transaction = new web3_js_1.Transaction();
69
+ const signers = [new web3_js_1.Keypair()];
70
+ const signature = await (0, magic_router_js_1.sendMagicTransaction)(connection, transaction, signers);
71
+ expect(transaction.recentBlockhash).toBe("mock-blockhash");
72
+ expect(transaction.feePayer?.toBase58()).toBe("mock-fee-payer");
73
+ expect(transaction.sign).toHaveBeenCalledWith(...signers);
74
+ expect(signature).toBe("mock-signature");
75
+ expect(global.fetch).toHaveBeenCalledWith("http://localhost", {
76
+ method: "POST",
77
+ headers: { "Content-Type": "application/json" },
78
+ body: JSON.stringify({
79
+ jsonrpc: "2.0",
80
+ id: 1,
81
+ method: "getBlockhashForAccounts",
82
+ params: [["mock-fee-payer", "key1"]],
83
+ }),
84
+ });
85
+ });
86
+ });
87
+ describe("getWritableAccounts", () => {
88
+ it("returns writable accounts from transaction", () => {
89
+ const transaction = {
90
+ feePayer: mockPublicKey("fee-payer"),
91
+ instructions: [
92
+ {
93
+ keys: [
94
+ { pubkey: mockPublicKey("key1"), isWritable: true },
95
+ { pubkey: mockPublicKey("key2"), isWritable: false },
96
+ { pubkey: mockPublicKey("key3"), isWritable: true },
97
+ ],
98
+ },
99
+ ],
100
+ };
101
+ const result = (0, magic_router_js_1.getWritableAccounts)(transaction);
102
+ expect(result).toEqual(["fee-payer", "key1", "key3"]);
103
+ });
104
+ it("handles transaction without feePayer", () => {
105
+ const transaction = {
106
+ feePayer: null,
107
+ instructions: [
108
+ {
109
+ keys: [
110
+ { pubkey: mockPublicKey("key1"), isWritable: true },
111
+ { pubkey: mockPublicKey("key2"), isWritable: false },
112
+ ],
113
+ },
114
+ ],
115
+ };
116
+ const result = (0, magic_router_js_1.getWritableAccounts)(transaction);
117
+ expect(result).toEqual(["key1"]);
118
+ });
119
+ it("handles transaction without instructions", () => {
120
+ const transaction = {
121
+ feePayer: mockPublicKey("fee-payer"),
122
+ instructions: [],
123
+ };
124
+ const result = (0, magic_router_js_1.getWritableAccounts)(transaction);
125
+ expect(result).toEqual(["fee-payer"]);
126
+ });
127
+ it("deduplicates writable accounts", () => {
128
+ const transaction = {
129
+ feePayer: mockPublicKey("fee-payer"),
130
+ instructions: [
131
+ {
132
+ keys: [
133
+ { pubkey: mockPublicKey("key1"), isWritable: true },
134
+ { pubkey: mockPublicKey("key1"), isWritable: true },
135
+ { pubkey: mockPublicKey("key2"), isWritable: false },
136
+ ],
137
+ },
138
+ ],
139
+ };
140
+ const result = (0, magic_router_js_1.getWritableAccounts)(transaction);
141
+ expect(result).toEqual(["fee-payer", "key1"]);
142
+ });
143
+ });
144
+ describe("getClosestValidator", () => {
145
+ beforeEach(() => {
146
+ jest.clearAllMocks();
147
+ });
148
+ it("fetches and returns the closest validator public key", async () => {
149
+ const mockIdentityData = {
150
+ result: {
151
+ identity: "mock-validator-identity",
152
+ },
153
+ };
154
+ global.fetch.mockResolvedValueOnce({
155
+ json: async () => Promise.resolve(mockIdentityData),
156
+ });
157
+ const connection = new web3_js_1.Connection("http://localhost");
158
+ const result = await (0, magic_router_js_1.getClosestValidator)(connection);
159
+ expect(global.fetch).toHaveBeenCalledWith("http://localhost", {
160
+ method: "POST",
161
+ headers: { "Content-Type": "application/json" },
162
+ body: JSON.stringify({
163
+ jsonrpc: "2.0",
164
+ id: 1,
165
+ method: "getIdentity",
166
+ params: [],
167
+ }),
168
+ });
169
+ expect(result.toBase58()).toBe("mock-validator-identity");
170
+ });
171
+ it("handles fetch errors gracefully", async () => {
172
+ global.fetch.mockRejectedValueOnce(new Error("Network error"));
173
+ const connection = new web3_js_1.Connection("http://localhost");
174
+ await expect((0, magic_router_js_1.getClosestValidator)(connection)).rejects.toThrow("Network error");
175
+ });
176
+ it("handles invalid response format", async () => {
177
+ global.fetch.mockResolvedValueOnce({
178
+ json: async () => Promise.resolve({ error: "Invalid response" }),
179
+ });
180
+ const connection = new web3_js_1.Connection("http://localhost");
181
+ await expect((0, magic_router_js_1.getClosestValidator)(connection)).rejects.toThrow();
182
+ });
183
+ });
184
+ describe("getDelegationStatus", () => {
185
+ beforeEach(() => {
186
+ jest.clearAllMocks();
187
+ });
188
+ it("returns delegation status for a string account", async () => {
189
+ global.fetch.mockResolvedValueOnce({
190
+ json: async () => Promise.resolve({ result: { isDelegated: false } }),
191
+ });
192
+ const connection = new web3_js_1.Connection("http://localhost");
193
+ const account = "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU";
194
+ const result = await (0, magic_router_js_1.getDelegationStatus)(connection, account);
195
+ expect(global.fetch).toHaveBeenCalledWith("http://localhost/getDelegationStatus", {
196
+ method: "POST",
197
+ headers: { "Content-Type": "application/json" },
198
+ body: JSON.stringify({
199
+ jsonrpc: "2.0",
200
+ id: 1,
201
+ method: "getDelegationStatus",
202
+ params: [account],
203
+ }),
204
+ });
205
+ expect(result).toEqual({ isDelegated: false });
206
+ });
207
+ it("returns delegation status for a PublicKey account", async () => {
208
+ global.fetch.mockResolvedValueOnce({
209
+ json: async () => Promise.resolve({ result: { isDelegated: true } }),
210
+ });
211
+ const connection = new web3_js_1.Connection("http://localhost");
212
+ const accountKey = new web3_js_1.PublicKey("mock-public-key");
213
+ const result = await (0, magic_router_js_1.getDelegationStatus)(connection, accountKey);
214
+ expect(global.fetch).toHaveBeenCalledWith("http://localhost/getDelegationStatus", {
215
+ method: "POST",
216
+ headers: { "Content-Type": "application/json" },
217
+ body: JSON.stringify({
218
+ jsonrpc: "2.0",
219
+ id: 1,
220
+ method: "getDelegationStatus",
221
+ params: [accountKey.toBase58()],
222
+ }),
223
+ });
224
+ expect(result).toEqual({ isDelegated: true });
225
+ });
226
+ });
227
+ //# sourceMappingURL=magic-router.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.test.js","sourceRoot":"","sources":["../../src/__tests__/magic-router.test.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export * from "./instructions/delegate.js";
3
3
  export * from "./pda.js";
4
4
  export * from "./utils.js";
5
5
  export * from "./resolver.js";
6
+ export * from "./magic-router.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
package/lib/index.js CHANGED
@@ -19,4 +19,5 @@ __exportStar(require("./instructions/delegate.js"), exports);
19
19
  __exportStar(require("./pda.js"), exports);
20
20
  __exportStar(require("./utils.js"), exports);
21
21
  __exportStar(require("./resolver.js"), exports);
22
+ __exportStar(require("./magic-router.js"), exports);
22
23
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,6DAA2C;AAC3C,2CAAyB;AACzB,6CAA2B;AAC3B,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,6DAA2C;AAC3C,2CAAyB;AACzB,6CAA2B;AAC3B,gDAA8B;AAC9B,oDAAkC"}
@@ -0,0 +1,20 @@
1
+ import { Connection, Transaction, ConfirmOptions, TransactionSignature, Signer, BlockhashWithExpiryBlockHeight, SendOptions, PublicKey, TransactionConfirmationStrategy, RpcResponseAndContext, SignatureResult, Commitment, SignatureStatusConfig, SignatureStatus } from "@solana/web3.js";
2
+ export declare function getWritableAccounts(transaction: Transaction): string[];
3
+ export declare function getClosestValidator(routerConnection: Connection): Promise<PublicKey>;
4
+ export declare function getDelegationStatus(connection: Connection, account: PublicKey | string): Promise<{
5
+ isDelegated: boolean;
6
+ }>;
7
+ export declare function getLatestBlockhashForMagicTransaction(connection: Connection, transaction: Transaction, options?: ConfirmOptions): Promise<BlockhashWithExpiryBlockHeight>;
8
+ export declare function prepareMagicTransaction(connection: Connection, transaction: Transaction, options?: ConfirmOptions): Promise<Transaction>;
9
+ export declare function sendMagicTransaction(connection: Connection, transaction: Transaction, signersOrOptions?: Signer[] | SendOptions, options?: SendOptions): Promise<TransactionSignature>;
10
+ export declare function confirmMagicTransaction(connection: Connection, strategy: TransactionConfirmationStrategy | string, commitment?: Commitment): Promise<RpcResponseAndContext<SignatureResult>>;
11
+ export declare function sendAndConfirmMagicTransaction(connection: Connection, transaction: Transaction, signers: Signer[], options?: ConfirmOptions & Readonly<{
12
+ abortSignal?: AbortSignal;
13
+ }>): Promise<TransactionSignature>;
14
+ export declare function pollSignatureStatus(getSignatureStatus: (connection: Connection, signature: TransactionSignature, config?: SignatureStatusConfig) => Promise<RpcResponseAndContext<SignatureStatus | null>>, connection: Connection, signature: string, { intervalMs, timeoutMs, commitment, abortSignal, }?: {
15
+ intervalMs?: number;
16
+ timeoutMs?: number;
17
+ commitment?: Commitment;
18
+ abortSignal?: AbortSignal;
19
+ }): Promise<RpcResponseAndContext<SignatureResult>>;
20
+ //# sourceMappingURL=magic-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.d.ts","sourceRoot":"","sources":["../src/magic-router.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,MAAM,EACN,8BAA8B,EAC9B,WAAW,EACX,SAAS,EACT,+BAA+B,EAC/B,qBAAqB,EACrB,eAAe,EACf,UAAU,EAEV,qBAAqB,EACrB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAOzB,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,YAiB3D;AAKD,wBAAsB,mBAAmB,CAAC,gBAAgB,EAAE,UAAU,sBAyBrE;AAKD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,SAAS,GAAG,MAAM,GAC1B,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAoBnC;AAKD,wBAAsB,qCAAqC,CACzD,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,8BAA8B,CAAC,CAgBzC;AAKD,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,CAStB;AAMD,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EACzC,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AAOD,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,+BAA+B,GAAG,MAAM,EAClD,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CA6BjD;AAMD,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,cAAc,GACtB,QAAQ,CAAC;IACP,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC,GACH,OAAO,CAAC,oBAAoB,CAAC,CAoE/B;AA8DD,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,CAClB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,CAAC,EAAE,qBAAqB,KAC3B,OAAO,CAAC,qBAAqB,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,EAC3D,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,EACE,UAAe,EACf,SAAkB,EAClB,UAAwB,EACxB,WAAW,GACZ,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;CACtB,GACL,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CA8CjD"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getWritableAccounts = getWritableAccounts;
7
+ exports.getClosestValidator = getClosestValidator;
8
+ exports.getDelegationStatus = getDelegationStatus;
9
+ exports.getLatestBlockhashForMagicTransaction = getLatestBlockhashForMagicTransaction;
10
+ exports.prepareMagicTransaction = prepareMagicTransaction;
11
+ exports.sendMagicTransaction = sendMagicTransaction;
12
+ exports.confirmMagicTransaction = confirmMagicTransaction;
13
+ exports.sendAndConfirmMagicTransaction = sendAndConfirmMagicTransaction;
14
+ exports.pollSignatureStatus = pollSignatureStatus;
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const assert_1 = __importDefault(require("assert"));
17
+ const bs58_1 = __importDefault(require("bs58"));
18
+ function getWritableAccounts(transaction) {
19
+ const writableAccounts = new Set();
20
+ if (transaction.feePayer) {
21
+ writableAccounts.add(transaction.feePayer.toBase58());
22
+ }
23
+ for (const instruction of transaction.instructions) {
24
+ for (const key of instruction.keys) {
25
+ if (key.isWritable) {
26
+ writableAccounts.add(key.pubkey.toBase58());
27
+ }
28
+ }
29
+ }
30
+ return Array.from(writableAccounts);
31
+ }
32
+ async function getClosestValidator(routerConnection) {
33
+ const response = await fetch(routerConnection.rpcEndpoint, {
34
+ method: "POST",
35
+ headers: { "Content-Type": "application/json" },
36
+ body: JSON.stringify({
37
+ jsonrpc: "2.0",
38
+ id: 1,
39
+ method: "getIdentity",
40
+ params: [],
41
+ }),
42
+ });
43
+ const identityData = await response.json();
44
+ const identity = identityData?.result?.identity;
45
+ if (typeof identity !== "string") {
46
+ throw new Error("Invalid identity response");
47
+ }
48
+ const validatorKey = {
49
+ toBase58: () => identity,
50
+ toString: () => identity,
51
+ };
52
+ return validatorKey;
53
+ }
54
+ async function getDelegationStatus(connection, account) {
55
+ const accountAddress = typeof account === "string" ? account : account.toBase58();
56
+ const response = await fetch(`${connection.rpcEndpoint}/getDelegationStatus`, {
57
+ method: "POST",
58
+ headers: { "Content-Type": "application/json" },
59
+ body: JSON.stringify({
60
+ jsonrpc: "2.0",
61
+ id: 1,
62
+ method: "getDelegationStatus",
63
+ params: [accountAddress],
64
+ }),
65
+ });
66
+ const data = await response.json();
67
+ return data.result;
68
+ }
69
+ async function getLatestBlockhashForMagicTransaction(connection, transaction, options) {
70
+ const writableAccounts = getWritableAccounts(transaction);
71
+ const blockHashResponse = await fetch(connection.rpcEndpoint, {
72
+ method: "POST",
73
+ headers: { "Content-Type": "application/json" },
74
+ body: JSON.stringify({
75
+ jsonrpc: "2.0",
76
+ id: 1,
77
+ method: "getBlockhashForAccounts",
78
+ params: [writableAccounts],
79
+ }),
80
+ });
81
+ const blockHashData = await blockHashResponse.json();
82
+ return blockHashData.result;
83
+ }
84
+ async function prepareMagicTransaction(connection, transaction, options) {
85
+ const blockHashData = await getLatestBlockhashForMagicTransaction(connection, transaction, options);
86
+ transaction.recentBlockhash = blockHashData.blockhash;
87
+ return transaction;
88
+ }
89
+ async function sendMagicTransaction(connection, transaction, signersOrOptions, options) {
90
+ const sendOpts = Array.isArray(signersOrOptions)
91
+ ? (options ?? undefined)
92
+ : (signersOrOptions ?? undefined);
93
+ const latestBlockhash = await getLatestBlockhashForMagicTransaction(connection, transaction, sendOpts);
94
+ transaction.lastValidBlockHeight =
95
+ latestBlockhash.lastValidBlockHeight;
96
+ transaction.recentBlockhash = latestBlockhash.blockhash;
97
+ if (Array.isArray(signersOrOptions)) {
98
+ transaction.sign?.(...signersOrOptions);
99
+ }
100
+ const wireTransaction = Buffer.from("mock");
101
+ return connection.sendRawTransaction(wireTransaction, sendOpts);
102
+ }
103
+ async function confirmMagicTransaction(connection, strategy, commitment) {
104
+ let rawSignature;
105
+ if (typeof strategy === "string") {
106
+ rawSignature = strategy;
107
+ }
108
+ else {
109
+ const config = strategy;
110
+ if (config.abortSignal != null && config.abortSignal.aborted) {
111
+ return Promise.reject(config.abortSignal.reason ?? new Error("Aborted"));
112
+ }
113
+ rawSignature = config.signature;
114
+ }
115
+ let decodedSignature;
116
+ try {
117
+ decodedSignature = bs58_1.default.decode(rawSignature);
118
+ }
119
+ catch (err) {
120
+ throw new Error("signature must be base58 encoded: " + rawSignature);
121
+ }
122
+ (0, assert_1.default)(decodedSignature.length === 64, "signature has invalid length");
123
+ const status = await pollSignatureStatus(getSignatureStatus, connection, rawSignature, {
124
+ intervalMs: 100,
125
+ timeoutMs: 10000,
126
+ commitment,
127
+ });
128
+ return status;
129
+ }
130
+ async function sendAndConfirmMagicTransaction(connection, transaction, signers, options) {
131
+ const signature = await sendMagicTransaction(connection, transaction, signers, options);
132
+ let status;
133
+ if (transaction.recentBlockhash != null &&
134
+ transaction.lastValidBlockHeight != null) {
135
+ status = (await confirmMagicTransaction(connection, {
136
+ abortSignal: options?.abortSignal,
137
+ signature,
138
+ blockhash: transaction.recentBlockhash,
139
+ lastValidBlockHeight: transaction.lastValidBlockHeight,
140
+ }, options?.commitment)).value;
141
+ }
142
+ else if (transaction.minNonceContextSlot != null &&
143
+ transaction.nonceInfo != null) {
144
+ const { nonceInstruction } = transaction.nonceInfo;
145
+ const nonceAccountPubkey = nonceInstruction.keys[0].pubkey;
146
+ status = (await confirmMagicTransaction(connection, {
147
+ abortSignal: options?.abortSignal,
148
+ minContextSlot: transaction.minNonceContextSlot,
149
+ nonceAccountPubkey,
150
+ nonceValue: transaction.nonceInfo.nonce,
151
+ signature,
152
+ }, options?.commitment)).value;
153
+ }
154
+ else {
155
+ if (options?.abortSignal != null) {
156
+ console.warn("sendAndConfirmTransaction(): A transaction with a deprecated confirmation strategy was " +
157
+ "supplied along with an `abortSignal`. Only transactions having `lastValidBlockHeight` " +
158
+ "or a combination of `nonceInfo` and `minNonceContextSlot` are abortable.");
159
+ }
160
+ status = (await confirmMagicTransaction(connection, signature, options?.commitment)).value;
161
+ }
162
+ if (status.err != null) {
163
+ if (signature != null) {
164
+ throw new web3_js_1.SendTransactionError({
165
+ action: "send",
166
+ signature,
167
+ transactionMessage: `Status: (${JSON.stringify(status)})`,
168
+ });
169
+ }
170
+ throw new Error(`Transaction ${signature} failed (${JSON.stringify(status)})`);
171
+ }
172
+ return signature;
173
+ }
174
+ async function getSignatureStatus(connection, signature, config) {
175
+ const { context, value: values } = await getSignatureStatuses(connection, [signature], config);
176
+ if (values.length === 0) {
177
+ const value = null;
178
+ return {
179
+ context,
180
+ value,
181
+ };
182
+ }
183
+ else {
184
+ (0, assert_1.default)(values.length === 1);
185
+ const value = values[0];
186
+ return {
187
+ context,
188
+ value,
189
+ };
190
+ }
191
+ }
192
+ async function getSignatureStatuses(connection, signatures, config) {
193
+ const params = config ? [signatures, config] : [signatures];
194
+ const unsafeRes = await fetch(connection.rpcEndpoint, {
195
+ method: "POST",
196
+ headers: { "Content-Type": "application/json" },
197
+ body: JSON.stringify({
198
+ jsonrpc: "2.0",
199
+ id: 1,
200
+ method: "getSignatureStatuses",
201
+ params,
202
+ }),
203
+ });
204
+ const res = await unsafeRes.json();
205
+ return res.result;
206
+ }
207
+ async function pollSignatureStatus(getSignatureStatus, connection, signature, { intervalMs = 50, timeoutMs = 12000, commitment = "confirmed", abortSignal, } = {}) {
208
+ const maxTries = Math.ceil(timeoutMs / intervalMs);
209
+ let tries = 0;
210
+ return new Promise((resolve, reject) => {
211
+ const intervalId = setInterval(() => {
212
+ if (abortSignal != null && abortSignal.aborted) {
213
+ clearInterval(intervalId);
214
+ reject(abortSignal.reason ?? new Error("Polling aborted"));
215
+ return;
216
+ }
217
+ tries++;
218
+ void (async () => {
219
+ try {
220
+ const result = await getSignatureStatus(connection, signature);
221
+ if (result.value !== null) {
222
+ if (result.value.confirmationStatus === commitment ||
223
+ result.value.confirmationStatus === "finalized") {
224
+ clearInterval(intervalId);
225
+ resolve({
226
+ context: result.context,
227
+ value: result.value,
228
+ });
229
+ }
230
+ }
231
+ else if (tries >= maxTries) {
232
+ clearInterval(intervalId);
233
+ const timeoutValue = {
234
+ err: new Error("Timeout"),
235
+ };
236
+ resolve({
237
+ context: result.context,
238
+ value: timeoutValue,
239
+ });
240
+ }
241
+ }
242
+ catch (err) {
243
+ clearInterval(intervalId);
244
+ reject(err);
245
+ }
246
+ })();
247
+ }, intervalMs);
248
+ });
249
+ }
250
+ //# sourceMappingURL=magic-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.js","sourceRoot":"","sources":["../src/magic-router.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicblock-labs/ephemeral-rollups-sdk",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "author": "MagicBlock Labs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -14,12 +14,15 @@
14
14
  "dev": "tsc --watch",
15
15
  "start": "tsc",
16
16
  "lint": "eslint -c .eslintrc.yml --ext .ts,.tsx src",
17
- "lint:fix": "eslint -c .eslintrc.yml --ext .ts,.tsx src --fix"
17
+ "lint:fix": "eslint -c .eslintrc.yml --ext .ts,.tsx src --fix",
18
+ "pretest": "tsc",
19
+ "test": "jest --config ./jest.lib.config.cjs"
18
20
  },
19
21
  "files": [
20
22
  "lib"
21
23
  ],
22
24
  "devDependencies": {
25
+ "@types/jest": "^29.5.12",
23
26
  "@typescript-eslint/eslint-plugin": "^6.21.0",
24
27
  "@typescript-eslint/parser": "^6.21.0",
25
28
  "eslint": "^8.55.0",
@@ -29,13 +32,16 @@
29
32
  "eslint-plugin-n": "^16.6.2",
30
33
  "eslint-plugin-prettier": "^5.2.1",
31
34
  "eslint-plugin-promise": "^6.2.0",
35
+ "jest": "^29.7.0",
32
36
  "prettier": "^3.3.2",
33
37
  "rimraf": "^3.0.2",
38
+ "ts-jest": "^29.1.1",
34
39
  "typescript": "^5.7.2"
35
40
  },
36
41
  "dependencies": {
37
42
  "@metaplex-foundation/beet": "^0.7.2",
38
43
  "@solana/web3.js": "^1.98.0",
44
+ "bs58": "^6.0.0",
39
45
  "rpc-websockets": "^9.0.4"
40
46
  },
41
47
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"