@meshconnect/web-link-sdk 3.2.9 → 3.2.11

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 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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
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*/, 49];
421
- case 49: return [2 /*return*/];
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/web-link-sdk",
3
- "version": "3.2.9",
3
+ "version": "3.2.11",
4
4
  "description": "A client-side JS library for integrating with Mesh Connect",
5
5
  "exports": "./index.js",
6
6
  "license": "MIT",
@@ -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 fromPubkey, toPubkey, instructions, connection, token2022Accounts, tokenProgram, tokenMintPubkey, fromTokenAccount, toTokenAccount, messageV0;
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) {
@@ -129,7 +148,7 @@ export function createTransferTransaction(config) {
129
148
  toPubkey: toPubkey,
130
149
  lamports: Number(config.amount)
131
150
  }));
132
- return [3 /*break*/, 6];
151
+ return [3 /*break*/, 7];
133
152
  case 1:
134
153
  connection = void 0;
135
154
  // special use case for PYUSD on solana devnet. TODO: make it generic
@@ -142,43 +161,40 @@ export function createTransferTransaction(config) {
142
161
  return [4 /*yield*/, connection.getTokenAccountsByOwner(fromPubkey, { programId: TOKEN_2022_PROGRAM_ID })];
143
162
  case 2:
144
163
  token2022Accounts = _b.sent();
145
- tokenProgram = (token2022Accounts === null || token2022Accounts === void 0 ? void 0 : token2022Accounts.value.length)
146
- ? TOKEN_2022_PROGRAM_ID
147
- : TOKEN_PROGRAM_ID;
148
- config.tokenProgram = tokenProgram.toBase58();
149
164
  tokenMintPubkey = new PublicKey(config.tokenMint);
150
- return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, config.tokenProgram)];
165
+ return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, TOKEN_2022_PROGRAM_ID.toBase58())];
151
166
  case 3:
167
+ fromTokenAccount2022_1 = _b.sent();
168
+ tokenProgram = (token2022Accounts === null || token2022Accounts === void 0 ? void 0 : token2022Accounts.value.filter(function (x) { return x.pubkey.toBase58() === fromTokenAccount2022_1.toBase58(); }).length)
169
+ ? TOKEN_2022_PROGRAM_ID
170
+ : TOKEN_PROGRAM_ID;
171
+ return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, tokenProgram.toBase58())];
172
+ case 4:
152
173
  fromTokenAccount = _b.sent();
174
+ config.tokenProgram = tokenProgram.toBase58();
153
175
  return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, toPubkey, config.tokenProgram)];
154
- case 4:
155
- toTokenAccount = _b.sent();
176
+ case 5:
177
+ toTokenAccount_1 = _b.sent();
156
178
  return [4 /*yield*/, connection.getTokenAccountsByOwner(toPubkey, {
157
179
  programId: tokenProgram
158
180
  })];
159
- case 5:
160
- if (!((_a = (_b.sent())) === null || _a === void 0 ? void 0 : _a.value.length)) {
161
- instructions.push(createTokenAccountInstruction(fromPubkey, toTokenAccount, toPubkey, tokenMintPubkey, tokenProgram));
181
+ case 6:
182
+ if (!((_a = (_b.sent())) === null || _a === void 0 ? void 0 : _a.value.filter(function (x) { return x.pubkey.toBase58() === toTokenAccount_1.toBase58(); }).length)) {
183
+ instructions.push(createTokenAccountInstruction(fromPubkey, toTokenAccount_1, toPubkey, tokenMintPubkey, tokenProgram));
162
184
  }
163
185
  if (config.tokenProgram === TOKEN_2022_PROGRAM_ID.toBase58()) {
164
- instructions.push(createTransferCheckedInstruction(fromTokenAccount, toTokenAccount, fromPubkey, BigInt(config.amount), config.tokenDecimals, tokenMintPubkey));
186
+ instructions.push(createTransferCheckedInstruction(fromTokenAccount, toTokenAccount_1, fromPubkey, BigInt(config.amount), config.tokenDecimals, tokenMintPubkey));
165
187
  }
166
188
  else {
167
189
  instructions.push(createSPLTransferInstruction({
168
190
  fromTokenAccount: fromTokenAccount,
169
- toTokenAccount: toTokenAccount,
191
+ toTokenAccount: toTokenAccount_1,
170
192
  owner: fromPubkey,
171
193
  amount: BigInt(config.amount)
172
194
  }));
173
195
  }
174
- _b.label = 6;
175
- case 6:
176
- messageV0 = new TransactionMessage({
177
- payerKey: fromPubkey,
178
- recentBlockhash: config.blockhash,
179
- instructions: instructions
180
- }).compileToV0Message();
181
- return [2 /*return*/, new VersionedTransaction(messageV0)];
196
+ _b.label = 7;
197
+ case 7: return [2 /*return*/, instructions];
182
198
  }
183
199
  });
184
200
  });
@@ -219,6 +235,38 @@ export function handleManualSignAndSend(transaction, provider) {
219
235
  });
220
236
  });
221
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
+ }
222
270
  export var sendSOLTransaction = function (config) { return __awaiter(void 0, void 0, void 0, function () {
223
271
  var provider, transaction, isManualWallet, signature, error_2, error_3;
224
272
  return __generator(this, function (_a) {
@@ -266,3 +314,70 @@ export var sendSOLTransaction = function (config) { return __awaiter(void 0, voi
266
314
  }
267
315
  });
268
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
@@ -1 +1 @@
1
- export declare const sdkVersion = "3.2.9";
1
+ export declare const sdkVersion = "3.2.11";
package/utils/version.js CHANGED
@@ -1 +1 @@
1
- export var sdkVersion = '3.2.9';
1
+ export var sdkVersion = '3.2.11';
@@ -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] || 6 // USDC has 6 decimals
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
- throw new Error('Method not implemented.');
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
- export type WalletBrowserEventType = WalletBrowserInjectedWalletSelected | WalletBrowserSignRequest | WalletBrowserChainSwitchRequest | WalletBrowserTransferBalanceRequest | WalletBrowserNativeTransferRequest | WalletBrowserNonNativeTransferRequest | WalletBrowserNativeSmartDeposit | WalletBrowserNonNativeSmartDeposit | WalletBrowserDisconnect | WalletBrowserTransactionBatch | WalletBrowserWalletCapabilities;
2
- declare const WALLET_BROWSER_EVENT_TYPE_KEYS: readonly ["walletBrowserInjectedWalletSelected", "walletBrowserSignRequest", "walletBrowserChainSwitchRequest", "walletBrowserTransferBalanceRequest", "walletBrowserNativeTransferRequest", "walletBrowserNonNativeTransferRequest", "walletBrowserNativeSmartDeposit", "walletBrowserNonNativeSmartDeposit", "walletBrowserDisconnect", "walletBrowserTransactionBatchRequest", "walletBrowserWalletCapabilities"];
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);