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

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.
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # @magicblock-labs/ephemeral-rollups-sdk
2
+
3
+ TypeScript helpers for preparing and routing transactions to Ephemeral Rollups on Solana.
4
+
5
+ Quickstart and integration guide:
6
+ https://docs.magicblock.gg/pages/get-started/how-integrate-your-program/quickstart
7
+
8
+ ## Install
9
+
10
+ npm install @magicblock-labs/ephemeral-rollups-sdk
11
+ # or
12
+ yarn add @magicblock-labs/ephemeral-rollups-sdk
13
+
14
+ ## Usage (basic)
15
+
16
+ import { MagicRouter } from "@magicblock-labs/ephemeral-rollups-sdk";
17
+
18
+ // See full examples and docs in the Quickstart link above.
@@ -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.8",
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"