@phantom/parsers 0.0.7 → 1.0.0-beta.1

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 CHANGED
@@ -15,7 +15,7 @@ yarn add @phantom/parsers
15
15
  The parsers package provides two main functions:
16
16
 
17
17
  - **`parseMessage`** - Converts various message formats to base64url
18
- - **`parseTransaction`** - Converts various transaction formats to base64url for different blockchain networks
18
+ - **`parseTransactionToBase64Url`** - Converts various transaction formats to base64url for different blockchain networks
19
19
 
20
20
  ## Supported Networks
21
21
 
@@ -57,7 +57,7 @@ console.log(result2.base64url); // "SGVsbG8sIFBoYW50b20h"
57
57
  console.log(result2.originalFormat); // "bytes"
58
58
  ```
59
59
 
60
- ### parseTransaction(transaction, networkId)
60
+ ### parseTransactionToBase64Url(transaction, networkId)
61
61
 
62
62
  Converts various transaction formats to base64url encoding based on the target network.
63
63
 
@@ -78,25 +78,25 @@ Converts various transaction formats to base64url encoding based on the target n
78
78
 
79
79
  ```typescript
80
80
  import { Transaction } from "@solana/web3.js";
81
- import { parseTransaction } from "@phantom/parsers";
81
+ import { parseTransactionToBase64Url } from "@phantom/parsers";
82
82
  import { NetworkId } from "@phantom/client";
83
83
 
84
84
  // Solana Web3.js Transaction
85
85
  const transaction = new Transaction().add(/* instructions */);
86
- const result = await parseTransaction(transaction, NetworkId.SOLANA_MAINNET);
86
+ const result = await parseTransactionToBase64Url(transaction, NetworkId.SOLANA_MAINNET);
87
87
 
88
88
  // Raw bytes
89
89
  const rawBytes = new Uint8Array([1, 2, 3, 4]);
90
- const result2 = await parseTransaction(rawBytes, NetworkId.SOLANA_MAINNET);
90
+ const result2 = await parseTransactionToBase64Url(rawBytes, NetworkId.SOLANA_MAINNET);
91
91
 
92
92
  // Hex string
93
- const result3 = await parseTransaction("0x01020304", NetworkId.SOLANA_MAINNET);
93
+ const result3 = await parseTransactionToBase64Url("0x01020304", NetworkId.SOLANA_MAINNET);
94
94
  ```
95
95
 
96
96
  ### Ethereum/EVM
97
97
 
98
98
  ```typescript
99
- import { parseTransaction } from "@phantom/parsers";
99
+ import { parseTransactionToBase64Url } from "@phantom/parsers";
100
100
  import { NetworkId } from "@phantom/client";
101
101
 
102
102
  // Viem/Ethers transaction object
@@ -108,45 +108,45 @@ const evmTransaction = {
108
108
  gasPrice: 20000000000n, // 20 gwei
109
109
  };
110
110
 
111
- const result = await parseTransaction(evmTransaction, NetworkId.ETHEREUM_MAINNET);
111
+ const result = await parseTransactionToBase64Url(evmTransaction, NetworkId.ETHEREUM_MAINNET);
112
112
 
113
113
  // Raw transaction bytes
114
114
  const rawTx = new Uint8Array([
115
115
  /* transaction bytes */
116
116
  ]);
117
- const result2 = await parseTransaction(rawTx, NetworkId.ETHEREUM_MAINNET);
117
+ const result2 = await parseTransactionToBase64Url(rawTx, NetworkId.ETHEREUM_MAINNET);
118
118
 
119
119
  // Hex-encoded transaction
120
- const result3 = await parseTransaction("0xf86c...", NetworkId.ETHEREUM_MAINNET);
120
+ const result3 = await parseTransactionToBase64Url("0xf86c...", NetworkId.ETHEREUM_MAINNET);
121
121
  ```
122
122
 
123
123
  ### Bitcoin
124
124
 
125
125
  ```typescript
126
- import { parseTransaction } from "@phantom/parsers";
126
+ import { parseTransactionToBase64Url } from "@phantom/parsers";
127
127
  import { NetworkId } from "@phantom/client";
128
128
 
129
129
  // Raw transaction bytes
130
130
  const bitcoinTx = new Uint8Array([
131
131
  /* bitcoin transaction bytes */
132
132
  ]);
133
- const result = await parseTransaction(bitcoinTx, NetworkId.BITCOIN_MAINNET);
133
+ const result = await parseTransactionToBase64Url(bitcoinTx, NetworkId.BITCOIN_MAINNET);
134
134
 
135
135
  // Hex-encoded transaction
136
- const result2 = await parseTransaction("0x0100000001...", NetworkId.BITCOIN_MAINNET);
136
+ const result2 = await parseTransactionToBase64Url("0x0100000001...", NetworkId.BITCOIN_MAINNET);
137
137
  ```
138
138
 
139
139
  ### Sui
140
140
 
141
141
  ```typescript
142
- import { parseTransaction } from "@phantom/parsers";
142
+ import { parseTransactionToBase64Url } from "@phantom/parsers";
143
143
  import { NetworkId } from "@phantom/client";
144
144
 
145
145
  // Sui transaction bytes
146
146
  const suiTx = new Uint8Array([
147
147
  /* sui transaction bytes */
148
148
  ]);
149
- const result = await parseTransaction(suiTx, NetworkId.SUI_MAINNET);
149
+ const result = await parseTransactionToBase64Url(suiTx, NetworkId.SUI_MAINNET);
150
150
  ```
151
151
 
152
152
  ## Format Detection
@@ -184,7 +184,7 @@ The parsers will throw descriptive errors for:
184
184
 
185
185
  ```typescript
186
186
  try {
187
- const result = await parseTransaction(invalidData, "unsupported:network");
187
+ const result = await parseTransactionToBase64Url(invalidData, "unsupported:network");
188
188
  } catch (error) {
189
189
  console.error("Parsing failed:", error.message);
190
190
  // "Unsupported network: unsupported"
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { NetworkId } from '@phantom/constants';
2
+ import { Transaction } from '@solana/transactions';
2
3
 
3
4
  /**
4
5
  * Chain-specific transaction and message response parsing
@@ -39,6 +40,7 @@ declare function parseMessage(message: string): ParsedMessage;
39
40
  /**
40
41
  * Parse a transaction to base64url format based on network type
41
42
  */
42
- declare function parseTransaction(transaction: any, networkId: NetworkId): Promise<ParsedTransaction>;
43
+ declare function parseTransactionToBase64Url(transaction: any, networkId: NetworkId): Promise<ParsedTransaction>;
44
+ declare function parseSolanaKitTransactionToSolanaWeb3js(transaction: Transaction): any;
43
45
 
44
- export { ParsedMessage, ParsedSignatureResult, ParsedTransaction, ParsedTransactionResult, parseMessage, parseSignMessageResponse, parseTransaction, parseTransactionResponse };
46
+ export { ParsedMessage, ParsedSignatureResult, ParsedTransaction, ParsedTransactionResult, parseMessage, parseSignMessageResponse, parseSolanaKitTransactionToSolanaWeb3js, parseTransactionResponse, parseTransactionToBase64Url };
package/dist/index.js CHANGED
@@ -32,11 +32,13 @@ var src_exports = {};
32
32
  __export(src_exports, {
33
33
  parseMessage: () => parseMessage,
34
34
  parseSignMessageResponse: () => parseSignMessageResponse,
35
- parseTransaction: () => parseTransaction,
36
- parseTransactionResponse: () => parseTransactionResponse
35
+ parseSolanaKitTransactionToSolanaWeb3js: () => parseSolanaKitTransactionToSolanaWeb3js,
36
+ parseTransactionResponse: () => parseTransactionResponse,
37
+ parseTransactionToBase64Url: () => parseTransactionToBase64Url
37
38
  });
38
39
  module.exports = __toCommonJS(src_exports);
39
40
  var import_base64url2 = require("@phantom/base64url");
41
+ var import_transactions = require("@solana/transactions");
40
42
  var import_buffer2 = require("buffer");
41
43
 
42
44
  // src/response-parsers.ts
@@ -146,27 +148,27 @@ function parseMessage(message) {
146
148
  base64url: (0, import_base64url2.stringToBase64url)(message)
147
149
  };
148
150
  }
149
- async function parseTransaction(transaction, networkId) {
151
+ async function parseTransactionToBase64Url(transaction, networkId) {
150
152
  const networkPrefix = networkId.split(":")[0].toLowerCase();
151
153
  switch (networkPrefix) {
152
154
  case "solana":
153
- return parseSolanaTransaction(transaction);
155
+ return parseSolanaTransactionToBase64Url(transaction);
154
156
  case "ethereum":
155
157
  case "eip155":
156
158
  case "polygon":
157
159
  case "optimism":
158
160
  case "arbitrum":
159
161
  case "base":
160
- return parseEVMTransaction(transaction);
162
+ return parseEVMTransactionToBase64Url(transaction);
161
163
  case "sui":
162
- return await parseSuiTransaction(transaction);
164
+ return await parseSuiTransactionToBase64Url(transaction);
163
165
  case "bitcoin":
164
- return parseBitcoinTransaction(transaction);
166
+ return parseBitcoinTransactionToBase64Url(transaction);
165
167
  default:
166
168
  throw new Error(`Unsupported network: ${networkPrefix}`);
167
169
  }
168
170
  }
169
- function parseSolanaTransaction(transaction) {
171
+ function parseSolanaTransactionToBase64Url(transaction) {
170
172
  if (transaction?.messageBytes != null) {
171
173
  return {
172
174
  base64url: (0, import_base64url2.base64urlEncode)(transaction.messageBytes),
@@ -202,7 +204,7 @@ function parseSolanaTransaction(transaction) {
202
204
  }
203
205
  throw new Error("Unsupported Solana transaction format");
204
206
  }
205
- function parseEVMTransaction(transaction) {
207
+ function parseEVMTransactionToBase64Url(transaction) {
206
208
  if (transaction && typeof transaction === "object" && (transaction.to || transaction.data)) {
207
209
  const bytes = new TextEncoder().encode(
208
210
  JSON.stringify(transaction, (_key, value) => typeof value === "bigint" ? value.toString() : value)
@@ -235,7 +237,7 @@ function parseEVMTransaction(transaction) {
235
237
  }
236
238
  throw new Error("Unsupported EVM transaction format");
237
239
  }
238
- async function parseSuiTransaction(transaction) {
240
+ async function parseSuiTransactionToBase64Url(transaction) {
239
241
  if (transaction?.serialize && typeof transaction.serialize === "function") {
240
242
  const serialized = transaction.serialize();
241
243
  return {
@@ -261,7 +263,7 @@ async function parseSuiTransaction(transaction) {
261
263
  }
262
264
  throw new Error("Unsupported Sui transaction format");
263
265
  }
264
- function parseBitcoinTransaction(transaction) {
266
+ function parseBitcoinTransactionToBase64Url(transaction) {
265
267
  if (transaction?.toBuffer && typeof transaction.toBuffer === "function") {
266
268
  const buffer = transaction.toBuffer();
267
269
  return {
@@ -284,10 +286,20 @@ function parseBitcoinTransaction(transaction) {
284
286
  }
285
287
  throw new Error("Unsupported Bitcoin transaction format");
286
288
  }
289
+ function parseSolanaKitTransactionToSolanaWeb3js(transaction) {
290
+ const serialized = (0, import_transactions.getTransactionEncoder)().encode(transaction);
291
+ const fakeVersioned = {
292
+ serialize() {
293
+ return new Uint8Array(serialized);
294
+ }
295
+ };
296
+ return fakeVersioned;
297
+ }
287
298
  // Annotate the CommonJS export names for ESM import in node:
288
299
  0 && (module.exports = {
289
300
  parseMessage,
290
301
  parseSignMessageResponse,
291
- parseTransaction,
292
- parseTransactionResponse
302
+ parseSolanaKitTransactionToSolanaWeb3js,
303
+ parseTransactionResponse,
304
+ parseTransactionToBase64Url
293
305
  });
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/index.ts
2
2
  import { base64urlEncode, stringToBase64url } from "@phantom/base64url";
3
+ import { getTransactionEncoder } from "@solana/transactions";
3
4
  import { Buffer as Buffer2 } from "buffer";
4
5
 
5
6
  // src/response-parsers.ts
@@ -109,27 +110,27 @@ function parseMessage(message) {
109
110
  base64url: stringToBase64url(message)
110
111
  };
111
112
  }
112
- async function parseTransaction(transaction, networkId) {
113
+ async function parseTransactionToBase64Url(transaction, networkId) {
113
114
  const networkPrefix = networkId.split(":")[0].toLowerCase();
114
115
  switch (networkPrefix) {
115
116
  case "solana":
116
- return parseSolanaTransaction(transaction);
117
+ return parseSolanaTransactionToBase64Url(transaction);
117
118
  case "ethereum":
118
119
  case "eip155":
119
120
  case "polygon":
120
121
  case "optimism":
121
122
  case "arbitrum":
122
123
  case "base":
123
- return parseEVMTransaction(transaction);
124
+ return parseEVMTransactionToBase64Url(transaction);
124
125
  case "sui":
125
- return await parseSuiTransaction(transaction);
126
+ return await parseSuiTransactionToBase64Url(transaction);
126
127
  case "bitcoin":
127
- return parseBitcoinTransaction(transaction);
128
+ return parseBitcoinTransactionToBase64Url(transaction);
128
129
  default:
129
130
  throw new Error(`Unsupported network: ${networkPrefix}`);
130
131
  }
131
132
  }
132
- function parseSolanaTransaction(transaction) {
133
+ function parseSolanaTransactionToBase64Url(transaction) {
133
134
  if (transaction?.messageBytes != null) {
134
135
  return {
135
136
  base64url: base64urlEncode(transaction.messageBytes),
@@ -165,7 +166,7 @@ function parseSolanaTransaction(transaction) {
165
166
  }
166
167
  throw new Error("Unsupported Solana transaction format");
167
168
  }
168
- function parseEVMTransaction(transaction) {
169
+ function parseEVMTransactionToBase64Url(transaction) {
169
170
  if (transaction && typeof transaction === "object" && (transaction.to || transaction.data)) {
170
171
  const bytes = new TextEncoder().encode(
171
172
  JSON.stringify(transaction, (_key, value) => typeof value === "bigint" ? value.toString() : value)
@@ -198,7 +199,7 @@ function parseEVMTransaction(transaction) {
198
199
  }
199
200
  throw new Error("Unsupported EVM transaction format");
200
201
  }
201
- async function parseSuiTransaction(transaction) {
202
+ async function parseSuiTransactionToBase64Url(transaction) {
202
203
  if (transaction?.serialize && typeof transaction.serialize === "function") {
203
204
  const serialized = transaction.serialize();
204
205
  return {
@@ -224,7 +225,7 @@ async function parseSuiTransaction(transaction) {
224
225
  }
225
226
  throw new Error("Unsupported Sui transaction format");
226
227
  }
227
- function parseBitcoinTransaction(transaction) {
228
+ function parseBitcoinTransactionToBase64Url(transaction) {
228
229
  if (transaction?.toBuffer && typeof transaction.toBuffer === "function") {
229
230
  const buffer = transaction.toBuffer();
230
231
  return {
@@ -247,9 +248,19 @@ function parseBitcoinTransaction(transaction) {
247
248
  }
248
249
  throw new Error("Unsupported Bitcoin transaction format");
249
250
  }
251
+ function parseSolanaKitTransactionToSolanaWeb3js(transaction) {
252
+ const serialized = getTransactionEncoder().encode(transaction);
253
+ const fakeVersioned = {
254
+ serialize() {
255
+ return new Uint8Array(serialized);
256
+ }
257
+ };
258
+ return fakeVersioned;
259
+ }
250
260
  export {
251
261
  parseMessage,
252
262
  parseSignMessageResponse,
253
- parseTransaction,
254
- parseTransactionResponse
263
+ parseSolanaKitTransactionToSolanaWeb3js,
264
+ parseTransactionResponse,
265
+ parseTransactionToBase64Url
255
266
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phantom/parsers",
3
- "version": "0.0.7",
3
+ "version": "1.0.0-beta.1",
4
4
  "description": "Transaction and message parsers for Phantom Wallet SDK",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -29,14 +29,15 @@
29
29
  "prettier": "prettier --write \"src/**/*.{ts}\""
30
30
  },
31
31
  "dependencies": {
32
- "@phantom/base64url": "^0.1.0",
33
- "@phantom/constants": "^0.0.3",
32
+ "@phantom/base64url": "^1.0.0-beta.1",
33
+ "@phantom/constants": "^1.0.0-beta.1",
34
+ "@solana/kit": "^2.1.1",
35
+ "@solana/transactions": "^2.0.0",
34
36
  "bs58": "^6.0.0",
35
37
  "buffer": "^6.0.3"
36
38
  },
37
39
  "optionalDependencies": {
38
40
  "@mysten/sui.js": "^0.50.0",
39
- "@solana/kit": "^2.1.1",
40
41
  "@solana/web3.js": "^1.95.0",
41
42
  "bitcoinjs-lib": "^6.1.0",
42
43
  "ethers": "^6.0.0",