@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 +16 -16
- package/dist/index.d.ts +4 -2
- package/dist/index.js +25 -13
- package/dist/index.mjs +22 -11
- package/package.json +5 -4
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
|
-
- **`
|
|
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
|
-
###
|
|
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 {
|
|
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
|
|
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
|
|
90
|
+
const result2 = await parseTransactionToBase64Url(rawBytes, NetworkId.SOLANA_MAINNET);
|
|
91
91
|
|
|
92
92
|
// Hex string
|
|
93
|
-
const result3 = await
|
|
93
|
+
const result3 = await parseTransactionToBase64Url("0x01020304", NetworkId.SOLANA_MAINNET);
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
### Ethereum/EVM
|
|
97
97
|
|
|
98
98
|
```typescript
|
|
99
|
-
import {
|
|
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
|
|
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
|
|
117
|
+
const result2 = await parseTransactionToBase64Url(rawTx, NetworkId.ETHEREUM_MAINNET);
|
|
118
118
|
|
|
119
119
|
// Hex-encoded transaction
|
|
120
|
-
const result3 = await
|
|
120
|
+
const result3 = await parseTransactionToBase64Url("0xf86c...", NetworkId.ETHEREUM_MAINNET);
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
### Bitcoin
|
|
124
124
|
|
|
125
125
|
```typescript
|
|
126
|
-
import {
|
|
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
|
|
133
|
+
const result = await parseTransactionToBase64Url(bitcoinTx, NetworkId.BITCOIN_MAINNET);
|
|
134
134
|
|
|
135
135
|
// Hex-encoded transaction
|
|
136
|
-
const result2 = await
|
|
136
|
+
const result2 = await parseTransactionToBase64Url("0x0100000001...", NetworkId.BITCOIN_MAINNET);
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
### Sui
|
|
140
140
|
|
|
141
141
|
```typescript
|
|
142
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
|
151
|
+
async function parseTransactionToBase64Url(transaction, networkId) {
|
|
150
152
|
const networkPrefix = networkId.split(":")[0].toLowerCase();
|
|
151
153
|
switch (networkPrefix) {
|
|
152
154
|
case "solana":
|
|
153
|
-
return
|
|
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
|
|
162
|
+
return parseEVMTransactionToBase64Url(transaction);
|
|
161
163
|
case "sui":
|
|
162
|
-
return await
|
|
164
|
+
return await parseSuiTransactionToBase64Url(transaction);
|
|
163
165
|
case "bitcoin":
|
|
164
|
-
return
|
|
166
|
+
return parseBitcoinTransactionToBase64Url(transaction);
|
|
165
167
|
default:
|
|
166
168
|
throw new Error(`Unsupported network: ${networkPrefix}`);
|
|
167
169
|
}
|
|
168
170
|
}
|
|
169
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
113
|
+
async function parseTransactionToBase64Url(transaction, networkId) {
|
|
113
114
|
const networkPrefix = networkId.split(":")[0].toLowerCase();
|
|
114
115
|
switch (networkPrefix) {
|
|
115
116
|
case "solana":
|
|
116
|
-
return
|
|
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
|
|
124
|
+
return parseEVMTransactionToBase64Url(transaction);
|
|
124
125
|
case "sui":
|
|
125
|
-
return await
|
|
126
|
+
return await parseSuiTransactionToBase64Url(transaction);
|
|
126
127
|
case "bitcoin":
|
|
127
|
-
return
|
|
128
|
+
return parseBitcoinTransactionToBase64Url(transaction);
|
|
128
129
|
default:
|
|
129
130
|
throw new Error(`Unsupported network: ${networkPrefix}`);
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
33
|
-
"@phantom/constants": "^0.0.
|
|
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",
|