@meshconnect/web-link-sdk 3.2.10 → 3.2.12
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/Link.js +36 -12
- package/package.json +1 -1
- package/utils/connectors/solana/transaction.d.ts +4 -0
- package/utils/connectors/solana/transaction.js +123 -11
- package/utils/types.d.ts +30 -0
- package/utils/version.d.ts +1 -1
- package/utils/version.js +1 -1
- package/utils/wallet/EVMWalletStrategy.d.ts +1 -0
- package/utils/wallet/EVMWalletStrategy.js +3 -0
- package/utils/wallet/SolanaWalletStrategy.d.ts +2 -1
- package/utils/wallet/SolanaWalletStrategy.js +63 -4
- package/utils/wallet/WalletStrategy.d.ts +3 -1
- package/utils/wallet-browser-event-types.d.ts +17 -2
- package/utils/wallet-browser-event-types.js +2 -1
package/Link.js
CHANGED
@@ -159,7 +159,7 @@ function handleLinkEvent(event) {
|
|
159
159
|
}
|
160
160
|
function handleWalletBrowserEvent(event) {
|
161
161
|
return __awaiter(this, void 0, void 0, function () {
|
162
|
-
var walletFactory, _a, payload, networkType, strategy, result, error_1, payload, networkType, strategy, result, error_2, payload, networkType, strategy, result, error_3, payload, networkType, strategy, result, error_4, payload, getResponseType, networkType, strategy, result, responseType, error_5, errorType, payload, getResponseType, networkType, strategy, result, responseType, error_6, errorType, payload, responseType, networkType, strategy, result, error_7, payload, responseType, networkType, strategy, result, error_8, payload, networkType, strategy, error_9;
|
162
|
+
var walletFactory, _a, payload, networkType, strategy, result, error_1, payload, networkType, strategy, result, error_2, payload, networkType, strategy, result, error_3, payload, networkType, strategy, result, error_4, payload, getResponseType, networkType, strategy, result, responseType, error_5, errorType, payload, getResponseType, networkType, strategy, result, responseType, error_6, errorType, payload, responseType, networkType, strategy, result, error_7, payload, responseType, networkType, strategy, result, error_8, payload, networkType, strategy, error_9, payload, networkType, strategy, result, error_10;
|
163
163
|
var _b;
|
164
164
|
return __generator(this, function (_c) {
|
165
165
|
switch (_c.label) {
|
@@ -177,8 +177,9 @@ function handleWalletBrowserEvent(event) {
|
|
177
177
|
case 'walletBrowserTransactionBatchRequest': return [3 /*break*/, 31];
|
178
178
|
case 'walletBrowserWalletCapabilities': return [3 /*break*/, 36];
|
179
179
|
case 'walletBrowserDisconnect': return [3 /*break*/, 41];
|
180
|
+
case 'walletBrowserSolanaTransferWithInstructionsRequest': return [3 /*break*/, 49];
|
180
181
|
}
|
181
|
-
return [3 /*break*/,
|
182
|
+
return [3 /*break*/, 54];
|
182
183
|
case 1:
|
183
184
|
payload = event.data.payload;
|
184
185
|
_c.label = 2;
|
@@ -203,7 +204,7 @@ function handleWalletBrowserEvent(event) {
|
|
203
204
|
console.error('Connection error:', error_1);
|
204
205
|
handleErrorAndSendMessage(error_1, 'SDKinjectedConnectionCompleted');
|
205
206
|
return [3 /*break*/, 5];
|
206
|
-
case 5: return [3 /*break*/,
|
207
|
+
case 5: return [3 /*break*/, 54];
|
207
208
|
case 6:
|
208
209
|
payload = event.data.payload;
|
209
210
|
_c.label = 7;
|
@@ -223,7 +224,7 @@ function handleWalletBrowserEvent(event) {
|
|
223
224
|
error_2 = _c.sent();
|
224
225
|
handleErrorAndSendMessage(error_2, 'SDKsignRequestCompleted');
|
225
226
|
return [3 /*break*/, 10];
|
226
|
-
case 10: return [3 /*break*/,
|
227
|
+
case 10: return [3 /*break*/, 54];
|
227
228
|
case 11:
|
228
229
|
payload = event.data.payload;
|
229
230
|
_c.label = 12;
|
@@ -248,7 +249,7 @@ function handleWalletBrowserEvent(event) {
|
|
248
249
|
console.error('Chain switch failed:', error_3);
|
249
250
|
handleErrorAndSendMessage(error_3, 'SDKswitchChainCompleted');
|
250
251
|
return [3 /*break*/, 15];
|
251
|
-
case 15: return [3 /*break*/,
|
252
|
+
case 15: return [3 /*break*/, 54];
|
252
253
|
case 16:
|
253
254
|
payload = event.data.payload;
|
254
255
|
_c.label = 17;
|
@@ -268,7 +269,7 @@ function handleWalletBrowserEvent(event) {
|
|
268
269
|
error_4 = _c.sent();
|
269
270
|
handleErrorAndSendMessage(error_4, 'SDKnativeTransferCompleted');
|
270
271
|
return [3 /*break*/, 20];
|
271
|
-
case 20: return [3 /*break*/,
|
272
|
+
case 20: return [3 /*break*/, 54];
|
272
273
|
case 21:
|
273
274
|
payload = event.data.payload;
|
274
275
|
getResponseType = function (type) {
|
@@ -304,7 +305,7 @@ function handleWalletBrowserEvent(event) {
|
|
304
305
|
errorType = getResponseType(event.data.type);
|
305
306
|
handleErrorAndSendMessage(error_5, errorType);
|
306
307
|
return [3 /*break*/, 25];
|
307
|
-
case 25: return [3 /*break*/,
|
308
|
+
case 25: return [3 /*break*/, 54];
|
308
309
|
case 26:
|
309
310
|
payload = event.data.payload;
|
310
311
|
getResponseType = function (type) {
|
@@ -340,7 +341,7 @@ function handleWalletBrowserEvent(event) {
|
|
340
341
|
errorType = getResponseType(event.data.type);
|
341
342
|
handleErrorAndSendMessage(error_6, errorType);
|
342
343
|
return [3 /*break*/, 30];
|
343
|
-
case 30: return [3 /*break*/,
|
344
|
+
case 30: return [3 /*break*/, 54];
|
344
345
|
case 31:
|
345
346
|
payload = event.data.payload;
|
346
347
|
responseType = 'SDKtransactionBatchCompleted';
|
@@ -363,7 +364,7 @@ function handleWalletBrowserEvent(event) {
|
|
363
364
|
error_7 = _c.sent();
|
364
365
|
handleErrorAndSendMessage(error_7, responseType);
|
365
366
|
return [3 /*break*/, 35];
|
366
|
-
case 35: return [3 /*break*/,
|
367
|
+
case 35: return [3 /*break*/, 54];
|
367
368
|
case 36:
|
368
369
|
payload = event.data.payload;
|
369
370
|
responseType = 'SDKwalletCapabilitiesCompleted';
|
@@ -384,7 +385,7 @@ function handleWalletBrowserEvent(event) {
|
|
384
385
|
error_8 = _c.sent();
|
385
386
|
handleErrorAndSendMessage(error_8, responseType);
|
386
387
|
return [3 /*break*/, 40];
|
387
|
-
case 40: return [3 /*break*/,
|
388
|
+
case 40: return [3 /*break*/, 54];
|
388
389
|
case 41:
|
389
390
|
payload = event.data.payload;
|
390
391
|
_c.label = 42;
|
@@ -417,8 +418,31 @@ function handleWalletBrowserEvent(event) {
|
|
417
418
|
console.error('Error during disconnect:', error_9);
|
418
419
|
handleErrorAndSendMessage(error_9, 'SDKdisconnectSuccess');
|
419
420
|
return [3 /*break*/, 48];
|
420
|
-
case 48: return [3 /*break*/,
|
421
|
-
case 49:
|
421
|
+
case 48: return [3 /*break*/, 54];
|
422
|
+
case 49:
|
423
|
+
payload = event.data
|
424
|
+
.payload;
|
425
|
+
_c.label = 50;
|
426
|
+
case 50:
|
427
|
+
_c.trys.push([50, 52, , 53]);
|
428
|
+
networkType = 'solana';
|
429
|
+
strategy = walletFactory.getStrategy(networkType);
|
430
|
+
return [4 /*yield*/, strategy.sendTransactionWithInstructions(payload)];
|
431
|
+
case 51:
|
432
|
+
result = _c.sent();
|
433
|
+
sendMessageToIframe({
|
434
|
+
type: 'SDKnonNativeTransferCompleted',
|
435
|
+
payload: {
|
436
|
+
txHash: result
|
437
|
+
}
|
438
|
+
});
|
439
|
+
return [3 /*break*/, 53];
|
440
|
+
case 52:
|
441
|
+
error_10 = _c.sent();
|
442
|
+
handleErrorAndSendMessage(error_10, 'SDKdisconnectSuccess');
|
443
|
+
return [3 /*break*/, 53];
|
444
|
+
case 53: return [3 /*break*/, 54];
|
445
|
+
case 54: return [2 /*return*/];
|
422
446
|
}
|
423
447
|
});
|
424
448
|
});
|
package/package.json
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { PublicKey, VersionedTransaction, TransactionInstruction } from '@meshconnect/solana-web3.js';
|
2
2
|
import { TransactionConfig, SolanaProvider } from './types';
|
3
|
+
import { SolanaTransferWithInstructionsPayload, TransactionInstructionDto } from '../../../utils/types';
|
3
4
|
export declare function getAssociatedTokenAddress(mint: PublicKey, owner: PublicKey, programId?: string): Promise<PublicKey>;
|
4
5
|
export declare function createTransferCheckedInstruction(fromTokenAccount: PublicKey, toTokenAccount: PublicKey, owner: PublicKey, amount: bigint, decimals: number | undefined, tokenMint: PublicKey): TransactionInstruction;
|
5
6
|
export declare function createSPLTransferInstruction({ fromTokenAccount, toTokenAccount, owner, amount }: {
|
@@ -10,4 +11,7 @@ export declare function createSPLTransferInstruction({ fromTokenAccount, toToken
|
|
10
11
|
}): TransactionInstruction;
|
11
12
|
export declare function createTransferTransaction(config: TransactionConfig): Promise<VersionedTransaction>;
|
12
13
|
export declare function handleManualSignAndSend(transaction: VersionedTransaction, provider: SolanaProvider): Promise<string>;
|
14
|
+
export declare function getTransferInstructions(instructions: TransactionInstructionDto[]): Promise<TransactionInstruction[]>;
|
13
15
|
export declare const sendSOLTransaction: (config: TransactionConfig) => Promise<string>;
|
16
|
+
export declare const sendSOLTransactionWithInstructions: (payload: SolanaTransferWithInstructionsPayload, transferConfig: TransactionConfig) => Promise<string>;
|
17
|
+
export declare const sendSolanaTransfer: (walletName: string, transaction: VersionedTransaction) => Promise<string>;
|
@@ -115,7 +115,26 @@ export function createSPLTransferInstruction(_a) {
|
|
115
115
|
}
|
116
116
|
export function createTransferTransaction(config) {
|
117
117
|
return __awaiter(this, void 0, void 0, function () {
|
118
|
-
var
|
118
|
+
var instructions, fromPubkey, messageV0;
|
119
|
+
return __generator(this, function (_a) {
|
120
|
+
switch (_a.label) {
|
121
|
+
case 0: return [4 /*yield*/, createTransferInstructions(config)];
|
122
|
+
case 1:
|
123
|
+
instructions = _a.sent();
|
124
|
+
fromPubkey = new PublicKey(config.fromAddress);
|
125
|
+
messageV0 = new TransactionMessage({
|
126
|
+
payerKey: fromPubkey,
|
127
|
+
recentBlockhash: config.blockhash,
|
128
|
+
instructions: instructions
|
129
|
+
}).compileToV0Message();
|
130
|
+
return [2 /*return*/, new VersionedTransaction(messageV0)];
|
131
|
+
}
|
132
|
+
});
|
133
|
+
});
|
134
|
+
}
|
135
|
+
function createTransferInstructions(config) {
|
136
|
+
return __awaiter(this, void 0, void 0, function () {
|
137
|
+
var fromPubkey, toPubkey, instructions, connection, token2022Accounts, tokenMintPubkey, fromTokenAccount2022_1, tokenProgram, fromTokenAccount, toTokenAccount_1;
|
119
138
|
var _a;
|
120
139
|
return __generator(this, function (_b) {
|
121
140
|
switch (_b.label) {
|
@@ -137,7 +156,7 @@ export function createTransferTransaction(config) {
|
|
137
156
|
connection = new Connection('https://api.devnet.solana.com', 'confirmed');
|
138
157
|
}
|
139
158
|
else {
|
140
|
-
connection = new Connection('https://
|
159
|
+
connection = new Connection('https://alien-newest-vineyard.solana-mainnet.quiknode.pro/ebe5e35661d7edb7a5e48ab84bd9d477e472a40b', 'confirmed');
|
141
160
|
}
|
142
161
|
return [4 /*yield*/, connection.getTokenAccountsByOwner(fromPubkey, { programId: TOKEN_2022_PROGRAM_ID })];
|
143
162
|
case 2:
|
@@ -149,10 +168,10 @@ export function createTransferTransaction(config) {
|
|
149
168
|
tokenProgram = (token2022Accounts === null || token2022Accounts === void 0 ? void 0 : token2022Accounts.value.filter(function (x) { return x.pubkey.toBase58() === fromTokenAccount2022_1.toBase58(); }).length)
|
150
169
|
? TOKEN_2022_PROGRAM_ID
|
151
170
|
: TOKEN_PROGRAM_ID;
|
152
|
-
|
153
|
-
return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, config.tokenProgram)];
|
171
|
+
return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, tokenProgram.toBase58())];
|
154
172
|
case 4:
|
155
173
|
fromTokenAccount = _b.sent();
|
174
|
+
config.tokenProgram = tokenProgram.toBase58();
|
156
175
|
return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, toPubkey, config.tokenProgram)];
|
157
176
|
case 5:
|
158
177
|
toTokenAccount_1 = _b.sent();
|
@@ -175,13 +194,7 @@ export function createTransferTransaction(config) {
|
|
175
194
|
}));
|
176
195
|
}
|
177
196
|
_b.label = 7;
|
178
|
-
case 7:
|
179
|
-
messageV0 = new TransactionMessage({
|
180
|
-
payerKey: fromPubkey,
|
181
|
-
recentBlockhash: config.blockhash,
|
182
|
-
instructions: instructions
|
183
|
-
}).compileToV0Message();
|
184
|
-
return [2 /*return*/, new VersionedTransaction(messageV0)];
|
197
|
+
case 7: return [2 /*return*/, instructions];
|
185
198
|
}
|
186
199
|
});
|
187
200
|
});
|
@@ -222,6 +235,38 @@ export function handleManualSignAndSend(transaction, provider) {
|
|
222
235
|
});
|
223
236
|
});
|
224
237
|
}
|
238
|
+
export function getTransferInstructions(instructions) {
|
239
|
+
return __awaiter(this, void 0, void 0, function () {
|
240
|
+
var result, _loop_1, instrIndex;
|
241
|
+
return __generator(this, function (_a) {
|
242
|
+
result = [];
|
243
|
+
_loop_1 = function (instrIndex) {
|
244
|
+
var ix = instructions[instrIndex];
|
245
|
+
var programId = new PublicKey(ix.programId);
|
246
|
+
var keys = ix.accounts.map(function (meta, accountIndex) {
|
247
|
+
if (!meta.pubKey) {
|
248
|
+
throw new Error("Account at instruction ".concat(instrIndex, ", index ").concat(accountIndex, " has no pubKey and is not fillable"));
|
249
|
+
}
|
250
|
+
var resolvedPubkey = new PublicKey(meta.pubKey);
|
251
|
+
return {
|
252
|
+
pubkey: resolvedPubkey,
|
253
|
+
isSigner: meta.isSigner,
|
254
|
+
isWritable: meta.isWritable
|
255
|
+
};
|
256
|
+
});
|
257
|
+
result.push(new TransactionInstruction({
|
258
|
+
keys: keys,
|
259
|
+
programId: programId,
|
260
|
+
data: Buffer.from(ix.data, 'base64')
|
261
|
+
}));
|
262
|
+
};
|
263
|
+
for (instrIndex = 0; instrIndex < instructions.length; instrIndex++) {
|
264
|
+
_loop_1(instrIndex);
|
265
|
+
}
|
266
|
+
return [2 /*return*/, result];
|
267
|
+
});
|
268
|
+
});
|
269
|
+
}
|
225
270
|
export var sendSOLTransaction = function (config) { return __awaiter(void 0, void 0, void 0, function () {
|
226
271
|
var provider, transaction, isManualWallet, signature, error_2, error_3;
|
227
272
|
return __generator(this, function (_a) {
|
@@ -269,3 +314,70 @@ export var sendSOLTransaction = function (config) { return __awaiter(void 0, voi
|
|
269
314
|
}
|
270
315
|
});
|
271
316
|
}); };
|
317
|
+
export var sendSOLTransactionWithInstructions = function (payload, transferConfig) { return __awaiter(void 0, void 0, void 0, function () {
|
318
|
+
var walletName, instructions, fromPubkey, transferInstructions, transaction, error_4;
|
319
|
+
return __generator(this, function (_a) {
|
320
|
+
switch (_a.label) {
|
321
|
+
case 0:
|
322
|
+
walletName = payload.transactionInstructions.walletName || 'Phantom';
|
323
|
+
_a.label = 1;
|
324
|
+
case 1:
|
325
|
+
_a.trys.push([1, 5, , 6]);
|
326
|
+
return [4 /*yield*/, getTransferInstructions(payload.transactionInstructions.instructions)];
|
327
|
+
case 2:
|
328
|
+
instructions = _a.sent();
|
329
|
+
fromPubkey = new PublicKey(transferConfig.fromAddress);
|
330
|
+
return [4 /*yield*/, createTransferInstructions(transferConfig)];
|
331
|
+
case 3:
|
332
|
+
transferInstructions = _a.sent();
|
333
|
+
instructions.push.apply(instructions, transferInstructions);
|
334
|
+
transaction = new VersionedTransaction(new TransactionMessage({
|
335
|
+
payerKey: fromPubkey,
|
336
|
+
recentBlockhash: payload.transactionInstructions.blockhash,
|
337
|
+
instructions: instructions
|
338
|
+
}).compileToV0Message());
|
339
|
+
return [4 /*yield*/, sendSolanaTransfer(walletName, transaction)];
|
340
|
+
case 4: return [2 /*return*/, _a.sent()];
|
341
|
+
case 5:
|
342
|
+
error_4 = _a.sent();
|
343
|
+
if (isUserRejection(error_4)) {
|
344
|
+
throw new Error('Transaction was rejected by user');
|
345
|
+
}
|
346
|
+
throw error_4 instanceof Error
|
347
|
+
? error_4
|
348
|
+
: new Error("Failed to send SOL transaction with ".concat(walletName, " wallet"));
|
349
|
+
case 6: return [2 /*return*/];
|
350
|
+
}
|
351
|
+
});
|
352
|
+
}); };
|
353
|
+
export var sendSolanaTransfer = function (walletName, transaction) { return __awaiter(void 0, void 0, void 0, function () {
|
354
|
+
var provider, isManualWallet, signature, error_5;
|
355
|
+
return __generator(this, function (_a) {
|
356
|
+
switch (_a.label) {
|
357
|
+
case 0:
|
358
|
+
provider = getSolanaProvider(walletName);
|
359
|
+
isManualWallet = provider.isTrust ||
|
360
|
+
provider.isTrustWallet ||
|
361
|
+
walletName.includes('trust');
|
362
|
+
if (!isManualWallet) return [3 /*break*/, 2];
|
363
|
+
return [4 /*yield*/, handleManualSignAndSend(transaction, provider)];
|
364
|
+
case 1: return [2 /*return*/, _a.sent()];
|
365
|
+
case 2:
|
366
|
+
if (!provider.signAndSendTransaction) return [3 /*break*/, 6];
|
367
|
+
_a.label = 3;
|
368
|
+
case 3:
|
369
|
+
_a.trys.push([3, 5, , 6]);
|
370
|
+
return [4 /*yield*/, provider.signAndSendTransaction(transaction)];
|
371
|
+
case 4:
|
372
|
+
signature = (_a.sent()).signature;
|
373
|
+
return [2 /*return*/, signature];
|
374
|
+
case 5:
|
375
|
+
error_5 = _a.sent();
|
376
|
+
if (isUserRejection(error_5)) {
|
377
|
+
throw new Error('Transaction was rejected by user');
|
378
|
+
}
|
379
|
+
return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
|
380
|
+
case 6: return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
|
381
|
+
}
|
382
|
+
});
|
383
|
+
}); };
|
package/utils/types.d.ts
CHANGED
@@ -157,6 +157,36 @@ export interface DisconnectPayload {
|
|
157
157
|
networkType?: string;
|
158
158
|
walletName?: string;
|
159
159
|
}
|
160
|
+
export interface AddressLookupTableStateDto {
|
161
|
+
deactivationSlot: bigint;
|
162
|
+
lastExtendedSlot: number;
|
163
|
+
lastExtendedStartIndex: number;
|
164
|
+
key: string;
|
165
|
+
authority?: string;
|
166
|
+
addresses: string[];
|
167
|
+
}
|
168
|
+
export interface SolanaTransferWithInstructionsPayload {
|
169
|
+
transactionInstructions: {
|
170
|
+
states: AddressLookupTableStateDto[];
|
171
|
+
instructions: TransactionInstructionDto[];
|
172
|
+
account: string;
|
173
|
+
blockhash: string;
|
174
|
+
walletName?: string;
|
175
|
+
network?: string;
|
176
|
+
};
|
177
|
+
transferConfig: SmartContractPayload;
|
178
|
+
}
|
179
|
+
export interface SolanaAccountMeta {
|
180
|
+
shouldFillPubkey: boolean;
|
181
|
+
pubKey: string | null;
|
182
|
+
isWritable: boolean;
|
183
|
+
isSigner: boolean;
|
184
|
+
}
|
185
|
+
export interface TransactionInstructionDto {
|
186
|
+
programId: string;
|
187
|
+
accounts: SolanaAccountMeta[];
|
188
|
+
data: string;
|
189
|
+
}
|
160
190
|
export interface LinkOptions {
|
161
191
|
/**
|
162
192
|
* Client ID that can be obtained at https://dashboard.meshconnect.com/company/keys
|
package/utils/version.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export declare const sdkVersion = "3.2.
|
1
|
+
export declare const sdkVersion = "3.2.12";
|
package/utils/version.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export var sdkVersion = '3.2.
|
1
|
+
export var sdkVersion = '3.2.12';
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { BaseWalletStrategy } from './WalletStrategy';
|
2
2
|
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, TransactionBatchPayload, WalletCapabilitiesPayload } from '../types';
|
3
3
|
export declare class EVMWalletStrategy extends BaseWalletStrategy {
|
4
|
+
sendTransactionWithInstructions(): Promise<string>;
|
4
5
|
connect(payload: WalletBrowserPayload): Promise<{
|
5
6
|
accounts: string[];
|
6
7
|
chainId: number;
|
@@ -56,6 +56,9 @@ var EVMWalletStrategy = /** @class */ (function (_super) {
|
|
56
56
|
function EVMWalletStrategy() {
|
57
57
|
return _super !== null && _super.apply(this, arguments) || this;
|
58
58
|
}
|
59
|
+
EVMWalletStrategy.prototype.sendTransactionWithInstructions = function () {
|
60
|
+
throw new Error('Method not implemented.');
|
61
|
+
};
|
59
62
|
EVMWalletStrategy.prototype.connect = function (payload) {
|
60
63
|
return __awaiter(this, void 0, void 0, function () {
|
61
64
|
var result, error_1;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { BaseWalletStrategy } from './WalletStrategy';
|
2
|
-
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload } from '../types';
|
2
|
+
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, SolanaTransferWithInstructionsPayload } from '../types';
|
3
3
|
export declare class SolanaWalletStrategy extends BaseWalletStrategy {
|
4
4
|
connect(payload: WalletBrowserPayload): Promise<{
|
5
5
|
accounts: string[];
|
@@ -18,6 +18,7 @@ export declare class SolanaWalletStrategy extends BaseWalletStrategy {
|
|
18
18
|
}>;
|
19
19
|
sendNativeTransfer(payload: TransferPayload): Promise<string>;
|
20
20
|
sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
|
21
|
+
sendTransactionWithInstructions(payload: SolanaTransferWithInstructionsPayload): Promise<string>;
|
21
22
|
sendNativeSmartContractInteraction(): Promise<string>;
|
22
23
|
sendTransactionBatch(): Promise<string>;
|
23
24
|
getWalletCapabilities(): Promise<{
|
@@ -50,7 +50,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
50
50
|
}
|
51
51
|
};
|
52
52
|
import { BaseWalletStrategy } from './WalletStrategy';
|
53
|
-
import { connectToSolanaWallet, disconnectFromSolanaWallet, signSolanaMessage, sendSOLTransaction, findAvailableSolanaProviders, getSolanaProvider } from '../connectors/solana';
|
53
|
+
import { connectToSolanaWallet, disconnectFromSolanaWallet, signSolanaMessage, sendSOLTransaction, findAvailableSolanaProviders, getSolanaProvider, sendSOLTransactionWithInstructions } from '../connectors/solana';
|
54
54
|
var SolanaWalletStrategy = /** @class */ (function (_super) {
|
55
55
|
__extends(SolanaWalletStrategy, _super);
|
56
56
|
function SolanaWalletStrategy() {
|
@@ -188,8 +188,7 @@ var SolanaWalletStrategy = /** @class */ (function (_super) {
|
|
188
188
|
if (!senderAddress) {
|
189
189
|
throw new Error('Sender account address is required');
|
190
190
|
}
|
191
|
-
decimals = payload.args[2] ||
|
192
|
-
;
|
191
|
+
decimals = payload.args[2] || 9;
|
193
192
|
rawAmount = payload.args[1];
|
194
193
|
scaledAmount = rawAmount;
|
195
194
|
if (!payload.blockhash) {
|
@@ -209,6 +208,58 @@ var SolanaWalletStrategy = /** @class */ (function (_super) {
|
|
209
208
|
});
|
210
209
|
});
|
211
210
|
};
|
211
|
+
SolanaWalletStrategy.prototype.sendTransactionWithInstructions = function (payload) {
|
212
|
+
return __awaiter(this, void 0, void 0, function () {
|
213
|
+
var provider, senderAddress, _a, decimals, rawAmount, scaledAmount, result, error_5;
|
214
|
+
var _b;
|
215
|
+
return __generator(this, function (_c) {
|
216
|
+
switch (_c.label) {
|
217
|
+
case 0:
|
218
|
+
provider = getSolanaProvider(payload.transactionInstructions.walletName || '');
|
219
|
+
_a = payload.transferConfig.account;
|
220
|
+
if (_a) return [3 /*break*/, 2];
|
221
|
+
return [4 /*yield*/, ((_b = provider.publicKey) === null || _b === void 0 ? void 0 : _b.toString())];
|
222
|
+
case 1:
|
223
|
+
_a = (_c.sent());
|
224
|
+
_c.label = 2;
|
225
|
+
case 2:
|
226
|
+
senderAddress = _a;
|
227
|
+
if (!senderAddress) {
|
228
|
+
throw new Error('Sender account address is required');
|
229
|
+
}
|
230
|
+
decimals = payload.transferConfig.args[2] || 6 // USDC has 6 decimals
|
231
|
+
;
|
232
|
+
rawAmount = payload.transferConfig.args[1];
|
233
|
+
scaledAmount = rawAmount;
|
234
|
+
if (!payload.transactionInstructions.blockhash) {
|
235
|
+
throw new Error('Blockhash is required for Solana transactions');
|
236
|
+
}
|
237
|
+
_c.label = 3;
|
238
|
+
case 3:
|
239
|
+
_c.trys.push([3, 5, , 6]);
|
240
|
+
return [4 /*yield*/, sendSOLTransactionWithInstructions(payload, {
|
241
|
+
toAddress: payload.transferConfig.args[0],
|
242
|
+
amount: scaledAmount,
|
243
|
+
fromAddress: senderAddress,
|
244
|
+
blockhash: payload.transactionInstructions.blockhash,
|
245
|
+
walletName: payload.transactionInstructions.walletName || '',
|
246
|
+
tokenMint: payload.transferConfig.address,
|
247
|
+
tokenDecimals: decimals
|
248
|
+
})];
|
249
|
+
case 4:
|
250
|
+
result = _c.sent();
|
251
|
+
if (typeof result === 'string') {
|
252
|
+
return [2 /*return*/, result];
|
253
|
+
}
|
254
|
+
throw result;
|
255
|
+
case 5:
|
256
|
+
error_5 = _c.sent();
|
257
|
+
throw this.handleError(error_5, 'send Solana native transfer');
|
258
|
+
case 6: return [2 /*return*/];
|
259
|
+
}
|
260
|
+
});
|
261
|
+
});
|
262
|
+
};
|
212
263
|
SolanaWalletStrategy.prototype.sendNativeSmartContractInteraction = function () {
|
213
264
|
throw new Error('Method not implemented.');
|
214
265
|
};
|
@@ -216,7 +267,15 @@ var SolanaWalletStrategy = /** @class */ (function (_super) {
|
|
216
267
|
throw new Error('Method not implemented.');
|
217
268
|
};
|
218
269
|
SolanaWalletStrategy.prototype.getWalletCapabilities = function () {
|
219
|
-
|
270
|
+
return __awaiter(this, void 0, void 0, function () {
|
271
|
+
return __generator(this, function (_a) {
|
272
|
+
return [2 /*return*/, {
|
273
|
+
atomic: {
|
274
|
+
status: 'ready'
|
275
|
+
}
|
276
|
+
}];
|
277
|
+
});
|
278
|
+
});
|
220
279
|
};
|
221
280
|
SolanaWalletStrategy.prototype.getProviders = function () {
|
222
281
|
var solanaProviderMap = findAvailableSolanaProviders();
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, TransactionBatchPayload, WalletCapabilitiesPayload } from '../types';
|
1
|
+
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, TransactionBatchPayload, WalletCapabilitiesPayload, SolanaTransferWithInstructionsPayload } from '../types';
|
2
2
|
export interface WalletStrategy {
|
3
3
|
connect(payload: WalletBrowserPayload): Promise<{
|
4
4
|
accounts: string[];
|
@@ -20,6 +20,7 @@ export interface WalletStrategy {
|
|
20
20
|
status: string;
|
21
21
|
};
|
22
22
|
}>;
|
23
|
+
sendTransactionWithInstructions(payload: SolanaTransferWithInstructionsPayload): Promise<string>;
|
23
24
|
getProviders(): {
|
24
25
|
id: string;
|
25
26
|
type: string;
|
@@ -54,6 +55,7 @@ export declare abstract class BaseWalletStrategy implements WalletStrategy {
|
|
54
55
|
name?: string;
|
55
56
|
icon?: string;
|
56
57
|
}[];
|
58
|
+
abstract sendTransactionWithInstructions(payload: SolanaTransferWithInstructionsPayload): Promise<string>;
|
57
59
|
protected handleError(error: unknown, operation: string): Error;
|
58
60
|
protected isUserRejection(error: any): boolean;
|
59
61
|
}
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import { AddressLookupTableStateDto, TransactionInstructionDto } from './types';
|
2
|
+
export type WalletBrowserEventType = WalletBrowserInjectedWalletSelected | WalletBrowserSignRequest | WalletBrowserChainSwitchRequest | WalletBrowserTransferBalanceRequest | WalletBrowserNativeTransferRequest | WalletBrowserNonNativeTransferRequest | WalletBrowserNativeSmartDeposit | WalletBrowserNonNativeSmartDeposit | WalletBrowserDisconnect | WalletBrowserTransactionBatch | WalletBrowserWalletCapabilities | WalletBrowserSolanaTransferWithInstructionsRequest;
|
3
|
+
declare const WALLET_BROWSER_EVENT_TYPE_KEYS: readonly ["walletBrowserInjectedWalletSelected", "walletBrowserSignRequest", "walletBrowserChainSwitchRequest", "walletBrowserTransferBalanceRequest", "walletBrowserNativeTransferRequest", "walletBrowserNonNativeTransferRequest", "walletBrowserNativeSmartDeposit", "walletBrowserNonNativeSmartDeposit", "walletBrowserDisconnect", "walletBrowserTransactionBatchRequest", "walletBrowserWalletCapabilities", "walletBrowserSolanaTransferWithInstructionsRequest"];
|
3
4
|
export type NetworkType = 'unknown' | 'evm' | 'solana' | 'bitcoin' | 'cardano' | 'tron' | 'avalancheX' | 'tezos' | 'dogecoin' | 'ripple' | 'stellar' | 'litecoin' | 'sui' | 'aptos' | 'tvm';
|
4
5
|
export type WalletBrowserEventTypeKeys = (typeof WALLET_BROWSER_EVENT_TYPE_KEYS)[number];
|
5
6
|
export declare function isWalletBrowserEventTypeKey(key: string): key is WalletBrowserEventTypeKeys;
|
@@ -98,4 +99,18 @@ export interface WalletBrowserWalletCapabilities extends WalletBrowserEventBase
|
|
98
99
|
chainId: string;
|
99
100
|
};
|
100
101
|
}
|
102
|
+
export interface WalletBrowserSolanaTransferWithInstructionsRequest extends WalletBrowserEventBase {
|
103
|
+
type: 'walletBrowserSolanaTransferWithInstructionsRequest';
|
104
|
+
payload: {
|
105
|
+
transactionInstructions: {
|
106
|
+
instructions: TransactionInstructionDto[];
|
107
|
+
states: AddressLookupTableStateDto[];
|
108
|
+
account: string;
|
109
|
+
blockhash: string;
|
110
|
+
walletName?: string;
|
111
|
+
network?: string;
|
112
|
+
};
|
113
|
+
transferConfig: SmartContractPayload;
|
114
|
+
};
|
115
|
+
}
|
101
116
|
export {};
|
@@ -9,7 +9,8 @@ var WALLET_BROWSER_EVENT_TYPE_KEYS = [
|
|
9
9
|
'walletBrowserNonNativeSmartDeposit',
|
10
10
|
'walletBrowserDisconnect',
|
11
11
|
'walletBrowserTransactionBatchRequest',
|
12
|
-
'walletBrowserWalletCapabilities'
|
12
|
+
'walletBrowserWalletCapabilities',
|
13
|
+
'walletBrowserSolanaTransferWithInstructionsRequest'
|
13
14
|
];
|
14
15
|
export function isWalletBrowserEventTypeKey(key) {
|
15
16
|
return WALLET_BROWSER_EVENT_TYPE_KEYS.includes(key);
|