@meshconnect/web-link-sdk 3.0.11 → 3.1.0-rc.0

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 (52) hide show
  1. package/Link.js +173 -205
  2. package/package.json +6 -6
  3. package/utils/connectors/evm/chainConfigs.d.ts +2 -0
  4. package/utils/connectors/evm/chainConfigs.js +115 -0
  5. package/utils/connectors/evm/chainSwitching.d.ts +15 -0
  6. package/utils/connectors/evm/chainSwitching.js +242 -0
  7. package/utils/connectors/evm/index.d.ts +8 -0
  8. package/utils/connectors/evm/index.js +8 -0
  9. package/utils/connectors/evm/provider.d.ts +6 -0
  10. package/utils/connectors/evm/provider.js +13 -0
  11. package/utils/connectors/evm/signing.d.ts +1 -0
  12. package/utils/connectors/evm/signing.js +78 -0
  13. package/utils/connectors/evm/transactions.d.ts +9 -0
  14. package/utils/connectors/evm/transactions.js +201 -0
  15. package/utils/connectors/evm/types.d.ts +58 -0
  16. package/utils/connectors/evm/types.js +1 -0
  17. package/utils/connectors/evm/walletConnection.d.ts +20 -0
  18. package/utils/connectors/evm/walletConnection.js +161 -0
  19. package/utils/connectors/evm/walletDiscovery.d.ts +10 -0
  20. package/utils/connectors/evm/walletDiscovery.js +55 -0
  21. package/utils/connectors/solana/connection.d.ts +3 -0
  22. package/utils/connectors/solana/connection.js +94 -0
  23. package/utils/connectors/solana/index.d.ts +5 -0
  24. package/utils/connectors/solana/index.js +5 -0
  25. package/utils/connectors/solana/providerDiscovery.d.ts +3 -0
  26. package/utils/connectors/solana/providerDiscovery.js +75 -0
  27. package/utils/connectors/solana/signing.d.ts +1 -0
  28. package/utils/connectors/solana/signing.js +59 -0
  29. package/utils/connectors/solana/transaction.d.ts +2 -0
  30. package/utils/connectors/solana/transaction.js +158 -0
  31. package/utils/connectors/solana/types.d.ts +68 -0
  32. package/utils/connectors/solana/types.js +8 -0
  33. package/utils/event-types.d.ts +10 -2
  34. package/utils/event-types.js +2 -1
  35. package/utils/sdk-specs.d.ts +1 -0
  36. package/utils/sdk-specs.js +2 -1
  37. package/utils/types.d.ts +38 -29
  38. package/utils/version.d.ts +1 -1
  39. package/utils/version.js +1 -1
  40. package/utils/wallet/EVMWalletStrategy.d.ts +23 -0
  41. package/utils/wallet/EVMWalletStrategy.js +205 -0
  42. package/utils/wallet/SolanaWalletStrategy.d.ts +29 -0
  43. package/utils/wallet/SolanaWalletStrategy.js +194 -0
  44. package/utils/wallet/WalletStrategy.d.ts +45 -0
  45. package/utils/wallet/WalletStrategy.js +25 -0
  46. package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
  47. package/utils/wallet/WalletStrategyFactory.js +31 -0
  48. package/utils/wallet/index.d.ts +4 -0
  49. package/utils/wallet/index.js +4 -0
  50. package/utils/wallet-browser-event-types.d.ts +16 -2
  51. package/utils/wagmiCoreConnectorsUtils.d.ts +0 -11
  52. package/utils/wagmiCoreConnectorsUtils.js +0 -396
@@ -0,0 +1,158 @@
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 { Connection, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
38
+ import bs58 from 'bs58';
39
+ import { getSolanaProvider } from './providerDiscovery';
40
+ var QUICKNODE_RPC = 'https://alien-newest-vineyard.solana-mainnet.quiknode.pro/ebe5e35661d7edb7a5e48ab84bd9d477e472a40b/';
41
+ var isUserRejection = function (error) {
42
+ if (!error)
43
+ return false;
44
+ var message = ((error === null || error === void 0 ? void 0 : error.message) || '').toLowerCase();
45
+ return (message.includes('user rejected') ||
46
+ message.includes('declined') ||
47
+ message.includes('cancelled') ||
48
+ message.includes('denied') ||
49
+ (error === null || error === void 0 ? void 0 : error.code) === 4001);
50
+ };
51
+ var standardizeSignature = function (rawSignature) {
52
+ // First ensure we have a string
53
+ var signature = typeof rawSignature === 'string' ? rawSignature : bs58.encode(rawSignature);
54
+ // If signature is longer than standard 88 chars, decode and re-encode
55
+ if (signature.length > 88) {
56
+ try {
57
+ var bytes = bs58.decode(signature);
58
+ var truncatedBytes = bytes.slice(0, 64);
59
+ signature = bs58.encode(truncatedBytes);
60
+ }
61
+ catch (e) {
62
+ console.error('Failed to normalize signature:', e);
63
+ }
64
+ }
65
+ return signature;
66
+ };
67
+ var createTransferTransaction = function (config) {
68
+ var transaction = new Transaction().add(SystemProgram.transfer({
69
+ fromPubkey: new PublicKey(config.fromAddress),
70
+ toPubkey: new PublicKey(config.toAddress),
71
+ lamports: config.amount
72
+ }));
73
+ transaction.recentBlockhash = config.blockhash;
74
+ transaction.feePayer = new PublicKey(config.fromAddress);
75
+ return transaction;
76
+ };
77
+ var handleManualSignAndSend = function (transaction, provider) { return __awaiter(void 0, void 0, void 0, function () {
78
+ var signedTx, connection, rawSignature, error_1;
79
+ return __generator(this, function (_a) {
80
+ switch (_a.label) {
81
+ case 0:
82
+ _a.trys.push([0, 3, , 4]);
83
+ return [4 /*yield*/, provider.signTransaction(transaction)];
84
+ case 1:
85
+ signedTx = _a.sent();
86
+ connection = new Connection(QUICKNODE_RPC);
87
+ return [4 /*yield*/, connection.sendRawTransaction(signedTx.serialize(), {
88
+ skipPreflight: false,
89
+ maxRetries: 3,
90
+ preflightCommitment: 'confirmed'
91
+ })];
92
+ case 2:
93
+ rawSignature = _a.sent();
94
+ return [2 /*return*/, standardizeSignature(rawSignature)];
95
+ case 3:
96
+ error_1 = _a.sent();
97
+ if (isUserRejection(error_1)) {
98
+ throw new Error('Transaction was rejected by user');
99
+ }
100
+ throw error_1;
101
+ case 4: return [2 /*return*/];
102
+ }
103
+ });
104
+ }); };
105
+ export var sendSOLTransaction = function (config) { return __awaiter(void 0, void 0, void 0, function () {
106
+ var provider, transaction, isManualWallet, error_2, signature, error_3, error_4;
107
+ return __generator(this, function (_a) {
108
+ switch (_a.label) {
109
+ case 0:
110
+ _a.trys.push([0, 9, , 10]);
111
+ provider = getSolanaProvider(config.walletName);
112
+ transaction = createTransferTransaction(config);
113
+ isManualWallet = provider.isTrust ||
114
+ provider.isTrustWallet ||
115
+ config.walletName.toLowerCase().includes('trust');
116
+ if (!isManualWallet) return [3 /*break*/, 4];
117
+ _a.label = 1;
118
+ case 1:
119
+ _a.trys.push([1, 3, , 4]);
120
+ return [4 /*yield*/, handleManualSignAndSend(transaction, provider)];
121
+ case 2: return [2 /*return*/, _a.sent()];
122
+ case 3:
123
+ error_2 = _a.sent();
124
+ if (isUserRejection(error_2)) {
125
+ throw new Error('Transaction was rejected by user');
126
+ }
127
+ throw error_2;
128
+ case 4:
129
+ if (!provider.signAndSendTransaction) return [3 /*break*/, 8];
130
+ _a.label = 5;
131
+ case 5:
132
+ _a.trys.push([5, 7, , 8]);
133
+ return [4 /*yield*/, provider.signAndSendTransaction(transaction)];
134
+ case 6:
135
+ signature = (_a.sent()).signature;
136
+ return [2 /*return*/, signature];
137
+ case 7:
138
+ error_3 = _a.sent();
139
+ if (isUserRejection(error_3)) {
140
+ throw new Error('Transaction was rejected by user');
141
+ }
142
+ // For other errors, fall back to manual sign and send
143
+ return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
144
+ case 8:
145
+ // If no signAndSendTransaction available, use manual method
146
+ return [2 /*return*/, handleManualSignAndSend(transaction, provider)];
147
+ case 9:
148
+ error_4 = _a.sent();
149
+ if (isUserRejection(error_4)) {
150
+ throw new Error('Transaction was rejected by user');
151
+ }
152
+ throw error_4 instanceof Error
153
+ ? error_4
154
+ : new Error("Failed to send SOL transaction with ".concat(config.walletName, " wallet"));
155
+ case 10: return [2 /*return*/];
156
+ }
157
+ });
158
+ }); };
@@ -0,0 +1,68 @@
1
+ import { Transaction } from '@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): Promise<Transaction>;
35
+ signAndSendTransaction?(transaction: Transaction): Promise<{
36
+ signature: string;
37
+ }>;
38
+ sendTransaction?(transaction: Transaction): Promise<string>;
39
+ }
40
+ export interface WindowWithSolanaProviders extends Window {
41
+ solana?: SolanaProvider & {
42
+ isPhantom?: boolean;
43
+ isSolflare?: boolean;
44
+ isTrust?: boolean;
45
+ isTrustWallet?: boolean;
46
+ isExodus?: boolean;
47
+ };
48
+ phantom?: {
49
+ solana?: SolanaProvider;
50
+ };
51
+ exodus?: {
52
+ solana?: SolanaProvider;
53
+ };
54
+ trustwallet?: {
55
+ solana?: SolanaProvider;
56
+ };
57
+ solflare?: SolanaProvider;
58
+ [key: string]: {
59
+ solana?: SolanaProvider;
60
+ } | SolanaProvider | undefined | any;
61
+ }
62
+ export interface TransactionConfig {
63
+ toAddress: string;
64
+ amount: bigint;
65
+ fromAddress: string;
66
+ blockhash: string;
67
+ walletName: string;
68
+ }
@@ -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 = {}));
@@ -1,6 +1,6 @@
1
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;
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"];
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;
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"];
4
4
  export type LinkEventTypeKeys = (typeof LINK_EVENT_TYPE_KEYS)[number];
5
5
  export declare function isLinkEventTypeKey(key: string): key is LinkEventTypeKeys;
6
6
  interface LinkEventBase {
@@ -199,4 +199,12 @@ export interface SessionSymmary {
199
199
  };
200
200
  errorMessage?: string;
201
201
  }
202
+ export interface SDKinjectedWalletProviders extends LinkEventBase {
203
+ type: 'SDKinjectedWalletProviders';
204
+ payload: Array<{
205
+ icon?: string;
206
+ id: string;
207
+ name: string;
208
+ }>;
209
+ }
202
210
  export {};
@@ -30,7 +30,8 @@ var LINK_EVENT_TYPE_KEYS = [
30
30
  'connectionUnavailable',
31
31
  'transferDeclined',
32
32
  'done',
33
- 'close'
33
+ 'close',
34
+ 'SDKinjectedWalletProviders'
34
35
  ];
35
36
  export function isLinkEventTypeKey(key) {
36
37
  return LINK_EVENT_TYPE_KEYS.includes(key);
@@ -1,4 +1,5 @@
1
1
  export declare const sdkSpecs: {
2
2
  platform: string;
3
3
  version: string;
4
+ origin: string;
4
5
  };
@@ -1,5 +1,6 @@
1
1
  import { sdkVersion } from './version';
2
2
  export var sdkSpecs = {
3
3
  platform: 'web',
4
- version: sdkVersion
4
+ version: sdkVersion,
5
+ origin: window.location.origin
5
6
  };
package/utils/types.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { BrokerType } from '@meshconnect/node-api';
2
2
  import { SessionSymmary, LinkEventType } from './event-types';
3
- import { Hash, Chain } from 'viem';
4
3
  export type EventType = 'brokerageAccountAccessToken' | 'delayedAuthentication' | 'loaded' | 'oauthLinkOpen' | 'transferFinished';
5
4
  export interface Link {
6
5
  /**
@@ -68,34 +67,44 @@ export interface IntegrationAccessToken {
68
67
  brokerType: BrokerType;
69
68
  brokerName: string;
70
69
  }
71
- export interface WagmiInjectedConnectorData {
72
- id: string;
73
- name: string;
74
- type: string;
75
- icon?: string;
76
- uid: string;
77
- }
78
- export interface WalletConnectSignedTxHash {
79
- txSigned: Hash;
80
- }
81
- export interface IncomingConfig {
82
- chains: Chain[];
83
- transports: Record<number, string | string[]>;
84
- }
85
- export interface AbiItem {
86
- name: string;
87
- type: string;
88
- inputs: {
89
- name: string;
90
- type: string;
91
- }[];
92
- outputs?: {
93
- name: string;
94
- type: string;
95
- }[];
96
- stateMutability?: string;
97
- }
98
- export type Abi = AbiItem[];
70
+ export interface WalletBrowserPayload {
71
+ networkType?: string;
72
+ integrationName: string;
73
+ targetChainId?: string;
74
+ walletName?: string;
75
+ }
76
+ export interface SignRequestPayload {
77
+ address: string;
78
+ message: string;
79
+ walletName?: string;
80
+ }
81
+ export interface ChainSwitchPayload {
82
+ chainId: number;
83
+ networkType?: string;
84
+ walletName?: string;
85
+ }
86
+ export interface TransferPayload {
87
+ toAddress: string;
88
+ amount: number;
89
+ decimalPlaces: number;
90
+ chainId: number;
91
+ account: string;
92
+ network: string;
93
+ blockhash?: string;
94
+ walletName?: string;
95
+ }
96
+ export interface SmartContractPayload {
97
+ address: string;
98
+ abi: string;
99
+ functionName: string;
100
+ args: unknown[];
101
+ account: string;
102
+ value?: string;
103
+ }
104
+ export interface DisconnectPayload {
105
+ networkType?: string;
106
+ walletName?: string;
107
+ }
99
108
  export interface LinkOptions {
100
109
  /**
101
110
  * Client ID that can be obtained at https://dashboard.meshconnect.com/company/keys
@@ -1 +1 @@
1
- export declare const sdkVersion = "3.0.11";
1
+ export declare const sdkVersion = "3.1.0-rc.0";
package/utils/version.js CHANGED
@@ -1 +1 @@
1
- export var sdkVersion = '3.0.11';
1
+ export var sdkVersion = '3.1.0-rc.0';
@@ -0,0 +1,23 @@
1
+ import { BaseWalletStrategy } from './WalletStrategy';
2
+ import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload } from '../types';
3
+ export declare class EVMWalletStrategy extends BaseWalletStrategy {
4
+ connect(payload: WalletBrowserPayload): Promise<{
5
+ accounts: string[];
6
+ chainId: number;
7
+ isConnected: boolean;
8
+ }>;
9
+ disconnect(payload: DisconnectPayload): Promise<void>;
10
+ signMessage(payload: SignRequestPayload): Promise<string>;
11
+ switchChain(payload: ChainSwitchPayload): Promise<{
12
+ chainId: number;
13
+ accounts: string[];
14
+ }>;
15
+ sendNativeTransfer(payload: TransferPayload): Promise<string>;
16
+ sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
17
+ getProviders(): {
18
+ icon: string | undefined;
19
+ id: string;
20
+ name: string;
21
+ type: string;
22
+ }[];
23
+ }
@@ -0,0 +1,205 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ 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);
27
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
32
+ 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;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ import { BaseWalletStrategy } from './WalletStrategy';
53
+ import { connectToEVMWallet, disconnectFromEVMWallet, signEVMMessage, sendEVMTransaction, sendEVMTokenTransaction, switchEVMChain, findAvailableProviders } from '../connectors/evm';
54
+ var EVMWalletStrategy = /** @class */ (function (_super) {
55
+ __extends(EVMWalletStrategy, _super);
56
+ function EVMWalletStrategy() {
57
+ return _super !== null && _super.apply(this, arguments) || this;
58
+ }
59
+ EVMWalletStrategy.prototype.connect = function (payload) {
60
+ return __awaiter(this, void 0, void 0, function () {
61
+ var result, error_1;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ _a.trys.push([0, 2, , 3]);
66
+ return [4 /*yield*/, connectToEVMWallet(payload.integrationName, payload.targetChainId ? parseInt(payload.targetChainId, 10) : undefined)];
67
+ case 1:
68
+ result = _a.sent();
69
+ if (result instanceof Error) {
70
+ throw result;
71
+ }
72
+ return [2 /*return*/, {
73
+ accounts: result.accounts,
74
+ chainId: result.chainId,
75
+ isConnected: result.isConnected
76
+ }];
77
+ case 2:
78
+ error_1 = _a.sent();
79
+ throw this.handleError(error_1, 'connect to EVM wallet');
80
+ case 3: return [2 /*return*/];
81
+ }
82
+ });
83
+ });
84
+ };
85
+ EVMWalletStrategy.prototype.disconnect = function (payload) {
86
+ return __awaiter(this, void 0, void 0, function () {
87
+ var result, error_2;
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ _a.trys.push([0, 2, , 3]);
92
+ return [4 /*yield*/, disconnectFromEVMWallet(payload.walletName || 'Unknown Wallet')];
93
+ case 1:
94
+ result = _a.sent();
95
+ if (result instanceof Error) {
96
+ throw result;
97
+ }
98
+ return [3 /*break*/, 3];
99
+ case 2:
100
+ error_2 = _a.sent();
101
+ throw this.handleError(error_2, 'disconnect from EVM wallet');
102
+ case 3: return [2 /*return*/];
103
+ }
104
+ });
105
+ });
106
+ };
107
+ EVMWalletStrategy.prototype.signMessage = function (payload) {
108
+ return __awaiter(this, void 0, void 0, function () {
109
+ var result, error_3;
110
+ return __generator(this, function (_a) {
111
+ switch (_a.label) {
112
+ case 0:
113
+ _a.trys.push([0, 2, , 3]);
114
+ return [4 /*yield*/, signEVMMessage(payload.walletName || 'Unknown Wallet', payload.address, payload.message)];
115
+ case 1:
116
+ result = _a.sent();
117
+ if (result instanceof Error) {
118
+ throw result;
119
+ }
120
+ return [2 /*return*/, result];
121
+ case 2:
122
+ error_3 = _a.sent();
123
+ throw this.handleError(error_3, 'sign EVM message');
124
+ case 3: return [2 /*return*/];
125
+ }
126
+ });
127
+ });
128
+ };
129
+ EVMWalletStrategy.prototype.switchChain = function (payload) {
130
+ return __awaiter(this, void 0, void 0, function () {
131
+ var result, error_4;
132
+ return __generator(this, function (_a) {
133
+ switch (_a.label) {
134
+ case 0:
135
+ _a.trys.push([0, 2, , 3]);
136
+ return [4 /*yield*/, switchEVMChain(payload.chainId)];
137
+ case 1:
138
+ result = _a.sent();
139
+ if (result instanceof Error) {
140
+ throw result;
141
+ }
142
+ return [2 /*return*/, result];
143
+ case 2:
144
+ error_4 = _a.sent();
145
+ throw this.handleError(error_4, 'switch EVM chain');
146
+ case 3: return [2 /*return*/];
147
+ }
148
+ });
149
+ });
150
+ };
151
+ EVMWalletStrategy.prototype.sendNativeTransfer = function (payload) {
152
+ return __awaiter(this, void 0, void 0, function () {
153
+ var result, error_5;
154
+ return __generator(this, function (_a) {
155
+ switch (_a.label) {
156
+ case 0:
157
+ _a.trys.push([0, 2, , 3]);
158
+ return [4 /*yield*/, sendEVMTransaction(payload.toAddress, BigInt(payload.amount * Math.pow(10, payload.decimalPlaces)), payload.account)];
159
+ case 1:
160
+ result = _a.sent();
161
+ if (result instanceof Error) {
162
+ throw result;
163
+ }
164
+ return [2 /*return*/, result];
165
+ case 2:
166
+ error_5 = _a.sent();
167
+ throw this.handleError(error_5, 'send EVM native transfer');
168
+ case 3: return [2 /*return*/];
169
+ }
170
+ });
171
+ });
172
+ };
173
+ EVMWalletStrategy.prototype.sendSmartContractInteraction = function (payload) {
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ var result, error_6;
176
+ return __generator(this, function (_a) {
177
+ switch (_a.label) {
178
+ case 0:
179
+ _a.trys.push([0, 2, , 3]);
180
+ return [4 /*yield*/, sendEVMTokenTransaction(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args, payload.account, payload.value ? BigInt(payload.value) : undefined)];
181
+ case 1:
182
+ result = _a.sent();
183
+ if (result instanceof Error) {
184
+ throw result;
185
+ }
186
+ return [2 /*return*/, result];
187
+ case 2:
188
+ error_6 = _a.sent();
189
+ throw this.handleError(error_6, 'send EVM smart contract interaction');
190
+ case 3: return [2 /*return*/];
191
+ }
192
+ });
193
+ });
194
+ };
195
+ EVMWalletStrategy.prototype.getProviders = function () {
196
+ return findAvailableProviders().map(function (provider) { return ({
197
+ icon: provider.icon,
198
+ id: provider.id,
199
+ name: provider.name,
200
+ type: 'evm'
201
+ }); });
202
+ };
203
+ return EVMWalletStrategy;
204
+ }(BaseWalletStrategy));
205
+ export { EVMWalletStrategy };
@@ -0,0 +1,29 @@
1
+ import { BaseWalletStrategy } from './WalletStrategy';
2
+ import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload } from '../types';
3
+ export declare class SolanaWalletStrategy extends BaseWalletStrategy {
4
+ connect(payload: WalletBrowserPayload): Promise<{
5
+ accounts: string[];
6
+ chainId: string;
7
+ isConnected: boolean;
8
+ }>;
9
+ disconnect(payload: DisconnectPayload): Promise<void>;
10
+ signMessage(payload: SignRequestPayload): Promise<string>;
11
+ /**
12
+ * @note Solana doesn't support chain switching as it's a single-chain network
13
+ * This method is implemented to satisfy the interface but will always return mainnet (101)
14
+ */
15
+ switchChain(_payload: ChainSwitchPayload): Promise<{
16
+ chainId: string;
17
+ accounts: string[];
18
+ }>;
19
+ sendNativeTransfer(payload: TransferPayload): Promise<string>;
20
+ /**
21
+ * @note This feature is not yet implemented for Solana
22
+ * @throws {Error} Always throws with a "not implemented" message
23
+ */
24
+ sendSmartContractInteraction(_payload: SmartContractPayload): Promise<string>;
25
+ getProviders(): {
26
+ id: string;
27
+ type: string;
28
+ }[];
29
+ }