@meshconnect/web-link-sdk 3.2.15 → 3.2.16

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.
Files changed (101) hide show
  1. package/Link.d.ts +2 -0
  2. package/Link.js +530 -0
  3. package/index.d.ts +3 -0
  4. package/index.js +3 -0
  5. package/package.json +8 -20
  6. package/utils/connectors/evm/chainConfigs.d.ts +2 -0
  7. package/utils/connectors/evm/chainConfigs.js +115 -0
  8. package/utils/connectors/evm/chainSwitching.d.ts +15 -0
  9. package/utils/connectors/evm/chainSwitching.js +242 -0
  10. package/utils/connectors/evm/index.d.ts +8 -0
  11. package/utils/connectors/evm/index.js +8 -0
  12. package/utils/connectors/evm/provider.d.ts +6 -0
  13. package/utils/connectors/evm/provider.js +13 -0
  14. package/utils/connectors/evm/signing.d.ts +1 -0
  15. package/utils/connectors/evm/signing.js +78 -0
  16. package/utils/connectors/evm/transactions.d.ts +28 -0
  17. package/utils/connectors/evm/transactions.js +381 -0
  18. package/utils/connectors/evm/types.d.ts +57 -0
  19. package/utils/connectors/evm/types.js +1 -0
  20. package/utils/connectors/evm/walletConnection.d.ts +20 -0
  21. package/utils/connectors/evm/walletConnection.js +160 -0
  22. package/utils/connectors/evm/walletDiscovery.d.ts +10 -0
  23. package/utils/connectors/evm/walletDiscovery.js +55 -0
  24. package/utils/connectors/solana/connection.d.ts +4 -0
  25. package/utils/connectors/solana/connection.js +108 -0
  26. package/utils/connectors/solana/index.d.ts +5 -0
  27. package/utils/connectors/solana/index.js +5 -0
  28. package/utils/connectors/solana/providerDiscovery.d.ts +3 -0
  29. package/utils/connectors/solana/providerDiscovery.js +127 -0
  30. package/utils/connectors/solana/signing.d.ts +1 -0
  31. package/utils/connectors/solana/signing.js +59 -0
  32. package/utils/connectors/solana/transaction.d.ts +17 -0
  33. package/utils/connectors/solana/transaction.js +362 -0
  34. package/utils/connectors/solana/types.d.ts +71 -0
  35. package/utils/connectors/solana/types.js +8 -0
  36. package/utils/event-types.d.ts +233 -0
  37. package/{src/utils/event-types.test.ts → utils/event-types.js} +5 -15
  38. package/utils/popup.d.ts +3 -0
  39. package/utils/popup.js +36 -0
  40. package/utils/sdk-specs.d.ts +5 -0
  41. package/utils/sdk-specs.js +6 -0
  42. package/utils/style.d.ts +3 -0
  43. package/utils/style.js +13 -0
  44. package/utils/types.d.ts +234 -0
  45. package/utils/types.js +1 -0
  46. package/utils/version.d.ts +1 -0
  47. package/utils/version.js +1 -0
  48. package/utils/wallet/EVMWalletStrategy.d.ts +31 -0
  49. package/utils/wallet/EVMWalletStrategy.js +265 -0
  50. package/utils/wallet/SolanaWalletStrategy.d.ts +33 -0
  51. package/utils/wallet/SolanaWalletStrategy.js +300 -0
  52. package/utils/wallet/WalletStrategy.d.ts +61 -0
  53. package/utils/wallet/WalletStrategy.js +25 -0
  54. package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
  55. package/utils/wallet/WalletStrategyFactory.js +31 -0
  56. package/utils/wallet/index.d.ts +4 -0
  57. package/utils/wallet/index.js +4 -0
  58. package/utils/wallet-browser-event-types.d.ts +116 -0
  59. package/utils/wallet-browser-event-types.js +17 -0
  60. package/jest.setup.ts +0 -4
  61. package/src/Link.test.ts +0 -434
  62. package/src/Link.ts +0 -491
  63. package/src/index.ts +0 -3
  64. package/src/utils/__snapshots__/popup.test.ts.snap +0 -89
  65. package/src/utils/connectors/evm/chainConfigs.ts +0 -120
  66. package/src/utils/connectors/evm/chainSwitching.ts +0 -165
  67. package/src/utils/connectors/evm/index.ts +0 -8
  68. package/src/utils/connectors/evm/provider.ts +0 -22
  69. package/src/utils/connectors/evm/signing.ts +0 -39
  70. package/src/utils/connectors/evm/transactions.ts +0 -356
  71. package/src/utils/connectors/evm/types.ts +0 -63
  72. package/src/utils/connectors/evm/walletConnection.ts +0 -140
  73. package/src/utils/connectors/evm/walletDiscovery.ts +0 -67
  74. package/src/utils/connectors/solana/connection.ts +0 -69
  75. package/src/utils/connectors/solana/index.ts +0 -5
  76. package/src/utils/connectors/solana/providerDiscovery.ts +0 -153
  77. package/src/utils/connectors/solana/signing.ts +0 -18
  78. package/src/utils/connectors/solana/transaction.ts +0 -382
  79. package/src/utils/connectors/solana/types.ts +0 -66
  80. package/src/utils/event-types.ts +0 -350
  81. package/src/utils/popup.test.ts +0 -50
  82. package/src/utils/popup.ts +0 -123
  83. package/src/utils/sdk-specs.test.ts +0 -18
  84. package/src/utils/sdk-specs.ts +0 -7
  85. package/src/utils/style.test.ts +0 -33
  86. package/src/utils/style.ts +0 -15
  87. package/src/utils/types.ts +0 -270
  88. package/src/utils/version.ts +0 -1
  89. package/src/utils/wallet/EVMWalletStrategy.ts +0 -176
  90. package/src/utils/wallet/SolanaWalletStrategy.ts +0 -207
  91. package/src/utils/wallet/WalletStrategy.ts +0 -99
  92. package/src/utils/wallet/WalletStrategyFactory.ts +0 -46
  93. package/src/utils/wallet/__tests__/EVMWalletStrategy.test.ts +0 -233
  94. package/src/utils/wallet/__tests__/SolanaWalletStrategy.test.ts +0 -253
  95. package/src/utils/wallet/__tests__/WalletStrategy.test.ts +0 -77
  96. package/src/utils/wallet/__tests__/WalletStrategyFactory.test.ts +0 -65
  97. package/src/utils/wallet/index.ts +0 -4
  98. package/src/utils/wallet-browser-event-types.ts +0 -190
  99. package/tools/copy.js +0 -26
  100. package/tools/update-version.js +0 -10
  101. package/tsconfig.json +0 -14
@@ -0,0 +1,362 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { PublicKey, SystemProgram, TransactionMessage, VersionedTransaction, TransactionInstruction } from '@meshconnect/solana-web3.js';
38
+ import { getSolanaProvider } from './providerDiscovery';
39
+ var TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
40
+ var TOKEN_2022_PROGRAM_ID = new PublicKey('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb');
41
+ var ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
42
+ var isUserRejection = function (error) {
43
+ if (!error || typeof error !== 'object')
44
+ return false;
45
+ var err = error;
46
+ var message = (err.message || '').toLowerCase();
47
+ return (message.includes('user rejected') ||
48
+ message.includes('declined') ||
49
+ message.includes('cancelled') ||
50
+ message.includes('denied') ||
51
+ err.code === 4001);
52
+ };
53
+ export function getAssociatedTokenAddress(mint_1, owner_1) {
54
+ return __awaiter(this, arguments, void 0, function (mint, owner, programId) {
55
+ var address;
56
+ if (programId === void 0) { programId = TOKEN_PROGRAM_ID.toBase58(); }
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
59
+ case 0: return [4 /*yield*/, PublicKey.findProgramAddress([owner.toBuffer(), new PublicKey(programId).toBuffer(), mint.toBuffer()], ASSOCIATED_TOKEN_PROGRAM_ID)];
60
+ case 1:
61
+ address = (_a.sent())[0];
62
+ return [2 /*return*/, address];
63
+ }
64
+ });
65
+ });
66
+ }
67
+ function createTokenAccountInstruction(payer, associatedToken, owner, mint, programId) {
68
+ if (programId === void 0) { programId = TOKEN_PROGRAM_ID; }
69
+ var keys = [
70
+ { pubkey: payer, isSigner: true, isWritable: true },
71
+ { pubkey: associatedToken, isSigner: false, isWritable: true },
72
+ { pubkey: owner, isSigner: false, isWritable: false },
73
+ { pubkey: mint, isSigner: false, isWritable: false },
74
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
75
+ { pubkey: programId, isSigner: false, isWritable: false }
76
+ ];
77
+ return new TransactionInstruction({
78
+ keys: keys,
79
+ programId: ASSOCIATED_TOKEN_PROGRAM_ID,
80
+ data: Buffer.alloc(0)
81
+ });
82
+ }
83
+ export function createTransferCheckedInstruction(fromTokenAccount, toTokenAccount, owner, amount, decimals, tokenMint) {
84
+ if (decimals === void 0) { decimals = 9; }
85
+ var data = Buffer.alloc(10);
86
+ data[0] = 12; // TransferChecked instruction enum
87
+ data.writeBigUInt64LE(amount, 1); // 8-byte amount
88
+ data[9] = decimals; // single-byte decimal
89
+ var programId = TOKEN_2022_PROGRAM_ID;
90
+ return new TransactionInstruction({
91
+ keys: [
92
+ { pubkey: fromTokenAccount, isSigner: false, isWritable: true },
93
+ { pubkey: tokenMint, isSigner: false, isWritable: false },
94
+ { pubkey: toTokenAccount, isSigner: false, isWritable: true },
95
+ { pubkey: owner, isSigner: true, isWritable: false }
96
+ ],
97
+ programId: programId,
98
+ data: data
99
+ });
100
+ }
101
+ export function createSPLTransferInstruction(_a) {
102
+ var fromTokenAccount = _a.fromTokenAccount, toTokenAccount = _a.toTokenAccount, owner = _a.owner, amount = _a.amount;
103
+ var data = Buffer.alloc(9);
104
+ data[0] = 3; // Transfer instruction
105
+ data.writeBigUInt64LE(amount, 1);
106
+ return new TransactionInstruction({
107
+ keys: [
108
+ { pubkey: fromTokenAccount, isSigner: false, isWritable: true },
109
+ { pubkey: toTokenAccount, isSigner: false, isWritable: true },
110
+ { pubkey: owner, isSigner: true, isWritable: false }
111
+ ],
112
+ programId: TOKEN_PROGRAM_ID,
113
+ data: data
114
+ });
115
+ }
116
+ export function createTransferTransaction(config) {
117
+ return __awaiter(this, void 0, void 0, function () {
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, tokenMintPubkey, fromTokenAccount, toTokenAccount;
138
+ return __generator(this, function (_a) {
139
+ switch (_a.label) {
140
+ case 0:
141
+ fromPubkey = new PublicKey(config.fromAddress);
142
+ toPubkey = new PublicKey(config.toAddress);
143
+ instructions = [];
144
+ if (!!config.tokenMint) return [3 /*break*/, 1];
145
+ instructions.push(SystemProgram.transfer({
146
+ fromPubkey: fromPubkey,
147
+ toPubkey: toPubkey,
148
+ lamports: Number(config.amount)
149
+ }));
150
+ return [3 /*break*/, 4];
151
+ case 1:
152
+ tokenMintPubkey = new PublicKey(config.tokenMint);
153
+ return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, fromPubkey, config.tokenProgram)];
154
+ case 2:
155
+ fromTokenAccount = _a.sent();
156
+ return [4 /*yield*/, getAssociatedTokenAddress(tokenMintPubkey, toPubkey, config.tokenProgram)];
157
+ case 3:
158
+ toTokenAccount = _a.sent();
159
+ if (config.createATA) {
160
+ instructions.push(createTokenAccountInstruction(fromPubkey, toTokenAccount, toPubkey, tokenMintPubkey, config.tokenProgram
161
+ ? new PublicKey(config.tokenProgram)
162
+ : TOKEN_PROGRAM_ID));
163
+ }
164
+ if (config.tokenProgram === TOKEN_2022_PROGRAM_ID.toBase58()) {
165
+ instructions.push(createTransferCheckedInstruction(fromTokenAccount, toTokenAccount, fromPubkey, BigInt(config.amount), config.tokenDecimals, tokenMintPubkey));
166
+ }
167
+ else {
168
+ instructions.push(createSPLTransferInstruction({
169
+ fromTokenAccount: fromTokenAccount,
170
+ toTokenAccount: toTokenAccount,
171
+ owner: fromPubkey,
172
+ amount: BigInt(config.amount)
173
+ }));
174
+ }
175
+ _a.label = 4;
176
+ case 4: return [2 /*return*/, instructions];
177
+ }
178
+ });
179
+ });
180
+ }
181
+ export function handleManualSignAndSend(transaction, provider) {
182
+ return __awaiter(this, void 0, void 0, function () {
183
+ var signature, signedTransaction, signature, error_1;
184
+ var _a;
185
+ return __generator(this, function (_b) {
186
+ switch (_b.label) {
187
+ case 0:
188
+ _b.trys.push([0, 6, , 7]);
189
+ if (!provider.signAndSendTransaction) return [3 /*break*/, 2];
190
+ return [4 /*yield*/, provider.signAndSendTransaction(transaction)];
191
+ case 1:
192
+ signature = (_b.sent()).signature;
193
+ return [2 /*return*/, signature];
194
+ case 2: return [4 /*yield*/, provider.signTransaction(transaction)];
195
+ case 3:
196
+ signedTransaction = _b.sent();
197
+ if (!provider.sendTransaction) {
198
+ throw new Error('Provider does not support sendTransaction');
199
+ }
200
+ return [4 /*yield*/, provider.sendTransaction(signedTransaction)];
201
+ case 4:
202
+ signature = _b.sent();
203
+ return [2 /*return*/, signature];
204
+ case 5: return [3 /*break*/, 7];
205
+ case 6:
206
+ error_1 = _b.sent();
207
+ console.error('Error in handleManualSignAndSend:', error_1);
208
+ if (error_1 instanceof Error && ((_a = error_1.message) === null || _a === void 0 ? void 0 : _a.includes('User rejected'))) {
209
+ throw new Error('Transaction was rejected by user');
210
+ }
211
+ throw error_1;
212
+ case 7: return [2 /*return*/];
213
+ }
214
+ });
215
+ });
216
+ }
217
+ export function getTransferInstructions(instructions) {
218
+ return __awaiter(this, void 0, void 0, function () {
219
+ var result, _loop_1, instrIndex;
220
+ return __generator(this, function (_a) {
221
+ result = [];
222
+ _loop_1 = function (instrIndex) {
223
+ var ix = instructions[instrIndex];
224
+ var programId = new PublicKey(ix.programId);
225
+ var keys = ix.accounts.map(function (meta, accountIndex) {
226
+ if (!meta.pubKey) {
227
+ throw new Error("Account at instruction ".concat(instrIndex, ", index ").concat(accountIndex, " has no pubKey and is not fillable"));
228
+ }
229
+ var resolvedPubkey = new PublicKey(meta.pubKey);
230
+ return {
231
+ pubkey: resolvedPubkey,
232
+ isSigner: meta.isSigner,
233
+ isWritable: meta.isWritable
234
+ };
235
+ });
236
+ result.push(new TransactionInstruction({
237
+ keys: keys,
238
+ programId: programId,
239
+ data: Buffer.from(ix.data, 'base64')
240
+ }));
241
+ };
242
+ for (instrIndex = 0; instrIndex < instructions.length; instrIndex++) {
243
+ _loop_1(instrIndex);
244
+ }
245
+ return [2 /*return*/, result];
246
+ });
247
+ });
248
+ }
249
+ export var sendSOLTransaction = function (config) { return __awaiter(void 0, void 0, void 0, function () {
250
+ var provider, transaction, isManualWallet, signature, error_2, error_3;
251
+ return __generator(this, function (_a) {
252
+ switch (_a.label) {
253
+ case 0:
254
+ _a.trys.push([0, 8, , 9]);
255
+ provider = getSolanaProvider(config.walletName);
256
+ return [4 /*yield*/, createTransferTransaction(config)];
257
+ case 1:
258
+ transaction = _a.sent();
259
+ isManualWallet = provider.isTrust ||
260
+ provider.isTrustWallet ||
261
+ config.walletName.toLowerCase().includes('trust');
262
+ if (!isManualWallet) return [3 /*break*/, 3];
263
+ return [4 /*yield*/, handleManualSignAndSend(transaction, provider)];
264
+ case 2: return [2 /*return*/, _a.sent()];
265
+ case 3:
266
+ if (!provider.signAndSendTransaction) return [3 /*break*/, 7];
267
+ _a.label = 4;
268
+ case 4:
269
+ _a.trys.push([4, 6, , 7]);
270
+ return [4 /*yield*/, provider.signAndSendTransaction(transaction)
271
+ // @TODO: validate that signature was a successful tx
272
+ ];
273
+ case 5:
274
+ signature = (_a.sent()).signature;
275
+ // @TODO: validate that signature was a successful tx
276
+ return [2 /*return*/, signature];
277
+ case 6:
278
+ error_2 = _a.sent();
279
+ if (isUserRejection(error_2)) {
280
+ throw new Error('Transaction was rejected by user');
281
+ }
282
+ return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
283
+ case 7: return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
284
+ case 8:
285
+ error_3 = _a.sent();
286
+ if (isUserRejection(error_3)) {
287
+ throw new Error('Transaction was rejected by user');
288
+ }
289
+ throw error_3 instanceof Error
290
+ ? error_3
291
+ : new Error("Failed to send SOL transaction with ".concat(config.walletName, " wallet"));
292
+ case 9: return [2 /*return*/];
293
+ }
294
+ });
295
+ }); };
296
+ export var sendSOLTransactionWithInstructions = function (payload, transferConfig) { return __awaiter(void 0, void 0, void 0, function () {
297
+ var walletName, instructions, fromPubkey, transferInstructions, transaction, error_4;
298
+ return __generator(this, function (_a) {
299
+ switch (_a.label) {
300
+ case 0:
301
+ walletName = payload.transactionInstructions.walletName || 'Phantom';
302
+ _a.label = 1;
303
+ case 1:
304
+ _a.trys.push([1, 5, , 6]);
305
+ return [4 /*yield*/, getTransferInstructions(payload.transactionInstructions.instructions)];
306
+ case 2:
307
+ instructions = _a.sent();
308
+ fromPubkey = new PublicKey(transferConfig.fromAddress);
309
+ return [4 /*yield*/, createTransferInstructions(transferConfig)];
310
+ case 3:
311
+ transferInstructions = _a.sent();
312
+ instructions.push.apply(instructions, transferInstructions);
313
+ transaction = new VersionedTransaction(new TransactionMessage({
314
+ payerKey: fromPubkey,
315
+ recentBlockhash: payload.transactionInstructions.blockhash,
316
+ instructions: instructions
317
+ }).compileToV0Message());
318
+ return [4 /*yield*/, sendSolanaTransfer(walletName, transaction)];
319
+ case 4: return [2 /*return*/, _a.sent()];
320
+ case 5:
321
+ error_4 = _a.sent();
322
+ if (isUserRejection(error_4)) {
323
+ throw new Error('Transaction was rejected by user');
324
+ }
325
+ throw error_4 instanceof Error
326
+ ? error_4
327
+ : new Error("Failed to send SOL transaction with ".concat(walletName, " wallet"));
328
+ case 6: return [2 /*return*/];
329
+ }
330
+ });
331
+ }); };
332
+ export var sendSolanaTransfer = function (walletName, transaction) { return __awaiter(void 0, void 0, void 0, function () {
333
+ var provider, isManualWallet, signature, error_5;
334
+ return __generator(this, function (_a) {
335
+ switch (_a.label) {
336
+ case 0:
337
+ provider = getSolanaProvider(walletName);
338
+ isManualWallet = provider.isTrust ||
339
+ provider.isTrustWallet ||
340
+ walletName.includes('trust');
341
+ if (!isManualWallet) return [3 /*break*/, 2];
342
+ return [4 /*yield*/, handleManualSignAndSend(transaction, provider)];
343
+ case 1: return [2 /*return*/, _a.sent()];
344
+ case 2:
345
+ if (!provider.signAndSendTransaction) return [3 /*break*/, 6];
346
+ _a.label = 3;
347
+ case 3:
348
+ _a.trys.push([3, 5, , 6]);
349
+ return [4 /*yield*/, provider.signAndSendTransaction(transaction)];
350
+ case 4:
351
+ signature = (_a.sent()).signature;
352
+ return [2 /*return*/, signature];
353
+ case 5:
354
+ error_5 = _a.sent();
355
+ if (isUserRejection(error_5)) {
356
+ throw new Error('Transaction was rejected by user');
357
+ }
358
+ return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
359
+ case 6: return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
360
+ }
361
+ });
362
+ }); };
@@ -0,0 +1,71 @@
1
+ import { Transaction, VersionedTransaction } from '@meshconnect/solana-web3.js';
2
+ export declare enum SolanaWalletType {
3
+ PHANTOM = "phantom",
4
+ SOLFLARE = "solflare",
5
+ TRUST = "trustwallet",
6
+ EXODUS = "exodus",
7
+ UNKNOWN = "unknown"
8
+ }
9
+ export interface SolanaConnectResult {
10
+ accounts: string[];
11
+ chainId: string;
12
+ isConnected: boolean;
13
+ }
14
+ export interface SolanaProvider {
15
+ connect(options?: {
16
+ onlyIfTrusted?: boolean;
17
+ }): Promise<{
18
+ publicKey: {
19
+ toString(): string;
20
+ toBase58(): string;
21
+ };
22
+ }>;
23
+ disconnect(): Promise<void>;
24
+ walletType?: SolanaWalletType;
25
+ isConnected?: boolean;
26
+ publicKey?: {
27
+ toString(): string;
28
+ toBase58(): string;
29
+ };
30
+ on(event: 'connect' | 'disconnect' | 'accountChanged', callback: (publicKey?: any) => void): void;
31
+ signMessage(message: Uint8Array): Promise<{
32
+ signature: Uint8Array;
33
+ }>;
34
+ signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction>;
35
+ signAndSendTransaction?(transaction: Transaction | VersionedTransaction): Promise<{
36
+ signature: string;
37
+ }>;
38
+ sendTransaction?(transaction: Transaction | VersionedTransaction): Promise<string>;
39
+ isPhantom?: boolean;
40
+ isSolflare?: boolean;
41
+ isTrust?: boolean;
42
+ isTrustWallet?: boolean;
43
+ isExodus?: boolean;
44
+ }
45
+ export interface WindowWithSolanaProviders extends Window {
46
+ solana?: SolanaProvider;
47
+ phantom?: {
48
+ solana?: SolanaProvider;
49
+ };
50
+ exodus?: {
51
+ solana?: SolanaProvider;
52
+ };
53
+ trustwallet?: {
54
+ solana?: SolanaProvider;
55
+ };
56
+ solflare?: SolanaProvider;
57
+ [key: string]: {
58
+ solana?: SolanaProvider;
59
+ } | SolanaProvider | undefined | any;
60
+ }
61
+ export interface TransactionConfig {
62
+ toAddress: string;
63
+ amount: bigint;
64
+ fromAddress: string;
65
+ blockhash: string;
66
+ walletName: string;
67
+ tokenMint?: string;
68
+ createATA?: boolean;
69
+ tokenProgram?: string;
70
+ tokenDecimals?: number;
71
+ }
@@ -0,0 +1,8 @@
1
+ export var SolanaWalletType;
2
+ (function (SolanaWalletType) {
3
+ SolanaWalletType["PHANTOM"] = "phantom";
4
+ SolanaWalletType["SOLFLARE"] = "solflare";
5
+ SolanaWalletType["TRUST"] = "trustwallet";
6
+ SolanaWalletType["EXODUS"] = "exodus";
7
+ SolanaWalletType["UNKNOWN"] = "unknown";
8
+ })(SolanaWalletType || (SolanaWalletType = {}));
@@ -0,0 +1,233 @@
1
+ import { LinkPayload, TransferFinishedPayload } from './types';
2
+ export type LinkEventType = IntegrationConnected | IntegrationConnectionError | TransferCompleted | IntegrationSelected | CredentialsEntered | TransferStarted | TransferPreviewed | TransferPreviewError | TransferExecutionError | PageLoaded | IntegrationMfaRequired | IntegrationMfaEntered | IntegrationOAuthStarted | IntegrationAccountSelectionRequired | TransferAssetSelected | TransferNetworkSelected | TransferAmountEntered | TransferMfaRequired | TransferMfaEntered | TransferKycRequired | TransferInitiated | TransferExecuted | TransferNoEligibleAssets | WalletMessageSigned | DoneEvent | CloseEvent | VerifyWalletRejected | VerifyDonePage | SDKinjectedWalletProviders | LegalTermsViewed | SeeWhatHappenedClicked | FundingOptionsUpdated | FundingOptionsViewed | GasIncreaseWarning | ExecuteFundingStep;
3
+ declare const LINK_EVENT_TYPE_KEYS: readonly ["integrationConnected", "integrationConnectionError", "integrationMfaRequired", "integrationMfaEntered", "integrationOAuthStarted", "integrationAccountSelectionRequired", "transferCompleted", "integrationSelected", "credentialsEntered", "transferStarted", "transferPreviewed", "transferPreviewError", "transferExecutionError", "pageLoaded", "transferAssetSelected", "transferNetworkSelected", "transferAmountEntered", "transferMfaRequired", "transferMfaEntered", "transferKycRequired", "transferExecuted", "transferInitiated", "transferNoEligibleAssets", "walletMessageSigned", "verifyDonePage", "verifyWalletRejected", "connectionDeclined", "transferConfigureError", "connectionUnavailable", "transferDeclined", "done", "close", "SDKinjectedWalletProviders", "legalTermsViewed", "seeWhatHappenedClicked", "executeFundingStep", "fundingOptionsUpdated", "fundingOptionsViewed", "gasIncreaseWarning"];
4
+ export type LinkEventTypeKeys = (typeof LINK_EVENT_TYPE_KEYS)[number];
5
+ export declare function isLinkEventTypeKey(key: string): key is LinkEventTypeKeys;
6
+ interface LinkEventBase {
7
+ type: LinkEventTypeKeys;
8
+ }
9
+ export interface PageLoaded {
10
+ type: 'pageLoaded';
11
+ }
12
+ export interface IntegrationConnected extends LinkEventBase {
13
+ type: 'integrationConnected';
14
+ payload: LinkPayload;
15
+ }
16
+ export interface IntegrationConnectionError extends LinkEventBase {
17
+ type: 'integrationConnectionError';
18
+ payload: {
19
+ errorMessage: string;
20
+ };
21
+ }
22
+ export interface TransferCompleted extends LinkEventBase {
23
+ type: 'transferCompleted';
24
+ payload: TransferFinishedPayload;
25
+ }
26
+ export interface IntegrationSelected extends LinkEventBase {
27
+ type: 'integrationSelected';
28
+ payload: {
29
+ integrationType: string;
30
+ integrationName: string;
31
+ };
32
+ }
33
+ export interface CredentialsEntered extends LinkEventBase {
34
+ type: 'credentialsEntered';
35
+ }
36
+ export interface TransferStarted extends LinkEventBase {
37
+ type: 'transferStarted';
38
+ }
39
+ export interface TransferInitiated extends LinkEventBase {
40
+ type: 'transferInitiated';
41
+ payload: {
42
+ integrationType?: string;
43
+ integrationName: string;
44
+ status: 'pending';
45
+ };
46
+ }
47
+ export interface TransferExecuted extends LinkEventBase {
48
+ type: 'transferExecuted';
49
+ payload: {
50
+ status: 'success' | 'pending';
51
+ txId: string;
52
+ fromAddress: string;
53
+ toAddress: string;
54
+ symbol: string;
55
+ amount: number;
56
+ networkId: string;
57
+ };
58
+ }
59
+ export interface TransferNoEligibleAssets extends LinkEventBase {
60
+ type: 'transferNoEligibleAssets';
61
+ payload: {
62
+ integrationType?: string;
63
+ integrationName: string;
64
+ noAssetsType?: string;
65
+ arrayOfTokensHeld: {
66
+ symbol: string;
67
+ amount: number;
68
+ amountInFiat?: number;
69
+ ineligibilityReason?: string;
70
+ }[];
71
+ };
72
+ }
73
+ export interface TransferPreviewed extends LinkEventBase {
74
+ type: 'transferPreviewed';
75
+ payload: {
76
+ amount: number;
77
+ symbol: string;
78
+ toAddress: string;
79
+ networkId: string;
80
+ previewId: string;
81
+ networkName?: string;
82
+ amountInFiat?: number;
83
+ estimatedNetworkGasFee?: {
84
+ fee?: number;
85
+ feeCurrency?: string;
86
+ feeInFiat?: number;
87
+ };
88
+ };
89
+ }
90
+ export interface TransferPreviewError extends LinkEventBase {
91
+ type: 'transferPreviewError';
92
+ payload: {
93
+ errorMessage: string;
94
+ };
95
+ }
96
+ export interface TransferExecutionError extends LinkEventBase {
97
+ type: 'transferExecutionError';
98
+ payload: {
99
+ errorMessage: string;
100
+ };
101
+ }
102
+ export interface IntegrationMfaRequired extends LinkEventBase {
103
+ type: 'integrationMfaRequired';
104
+ }
105
+ export interface IntegrationMfaEntered extends LinkEventBase {
106
+ type: 'integrationMfaEntered';
107
+ }
108
+ export interface IntegrationOAuthStarted extends LinkEventBase {
109
+ type: 'integrationOAuthStarted';
110
+ }
111
+ export interface IntegrationAccountSelectionRequired extends LinkEventBase {
112
+ type: 'integrationAccountSelectionRequired';
113
+ }
114
+ export interface TransferAssetSelected extends LinkEventBase {
115
+ type: 'transferAssetSelected';
116
+ payload: {
117
+ symbol: string;
118
+ };
119
+ }
120
+ export interface TransferNetworkSelected extends LinkEventBase {
121
+ type: 'transferNetworkSelected';
122
+ payload: {
123
+ id: string;
124
+ name: string;
125
+ };
126
+ }
127
+ export interface TransferAmountEntered extends LinkEventBase {
128
+ type: 'transferAmountEntered';
129
+ }
130
+ export interface TransferMfaRequired extends LinkEventBase {
131
+ type: 'transferMfaRequired';
132
+ }
133
+ export interface TransferMfaEntered extends LinkEventBase {
134
+ type: 'transferMfaEntered';
135
+ }
136
+ export interface TransferKycRequired extends LinkEventBase {
137
+ type: 'transferKycRequired';
138
+ }
139
+ export interface DoneEvent extends LinkEventBase {
140
+ type: 'done';
141
+ payload: SessionSummary;
142
+ }
143
+ export interface CloseEvent extends LinkEventBase {
144
+ type: 'close';
145
+ payload: SessionSummary;
146
+ }
147
+ export interface WalletMessageSigned extends LinkEventBase {
148
+ type: 'walletMessageSigned';
149
+ payload: {
150
+ signedMessageHash: string | undefined;
151
+ message: string | undefined;
152
+ address: string;
153
+ timeStamp: number;
154
+ isVerified: boolean;
155
+ };
156
+ }
157
+ export interface VerifyDonePage extends LinkEventBase {
158
+ type: 'verifyDonePage';
159
+ }
160
+ export interface VerifyWalletRejected extends LinkEventBase {
161
+ type: 'verifyWalletRejected';
162
+ }
163
+ export interface SessionSummary {
164
+ /**
165
+ * Current page of application. Possible values:
166
+ * `startPage`
167
+ * `integrationsCatalogPage`
168
+ * `integrationLoginPage`
169
+ * `integrationMfaPage`
170
+ * `integrationAccountSelectPage`
171
+ * `integrationConnectedPage`
172
+ * `errorPage`
173
+ * `transferKycPage`
174
+ * `transferHoldingSelectionPage`
175
+ * `transferNetworkSelectionPage`
176
+ * `transferAmountSelectionPage`
177
+ * `transferPreviewPage`
178
+ * `transferMfaPage`
179
+ * `transferFundingPage`
180
+ * `transferExecutedPage`
181
+ * `termsAndConditionPage`
182
+ *
183
+ * This list may change in future.
184
+ */
185
+ page: string;
186
+ /** Selected integration */
187
+ selectedIntegration?: {
188
+ id?: string;
189
+ name?: string;
190
+ };
191
+ /** Transfer information */
192
+ transfer?: {
193
+ previewId?: string;
194
+ symbol?: string;
195
+ amount?: number;
196
+ amountInFiat?: number;
197
+ transactionId?: string;
198
+ networkId?: string;
199
+ };
200
+ errorMessage?: string;
201
+ }
202
+ export interface SDKinjectedWalletProviders extends LinkEventBase {
203
+ type: 'SDKinjectedWalletProviders';
204
+ payload: Array<{
205
+ icon?: string;
206
+ id: string;
207
+ name: string;
208
+ }>;
209
+ }
210
+ export interface LegalTermsViewed {
211
+ type: 'legalTermsViewed';
212
+ }
213
+ export interface SeeWhatHappenedClicked {
214
+ type: 'seeWhatHappenedClicked';
215
+ }
216
+ export interface FundingOptionsUpdated {
217
+ type: 'fundingOptionsUpdated';
218
+ }
219
+ export interface FundingOptionsViewed {
220
+ type: 'fundingOptionsViewed';
221
+ }
222
+ export interface GasIncreaseWarning {
223
+ type: 'gasIncreaseWarning';
224
+ }
225
+ export interface ExecuteFundingStep {
226
+ type: 'executeFundingStep';
227
+ payload: {
228
+ cryptocurrencyFundingOptionType: string;
229
+ status: string;
230
+ errorMessage?: string;
231
+ };
232
+ }
233
+ export {};