@meshconnect/web-link-sdk 3.0.12 → 3.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/Link.js +169 -203
  2. package/package.json +5 -5
  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/types.d.ts +38 -29
  36. package/utils/version.d.ts +1 -1
  37. package/utils/version.js +1 -1
  38. package/utils/wallet/EVMWalletStrategy.d.ts +23 -0
  39. package/utils/wallet/EVMWalletStrategy.js +205 -0
  40. package/utils/wallet/SolanaWalletStrategy.d.ts +29 -0
  41. package/utils/wallet/SolanaWalletStrategy.js +194 -0
  42. package/utils/wallet/WalletStrategy.d.ts +45 -0
  43. package/utils/wallet/WalletStrategy.js +25 -0
  44. package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
  45. package/utils/wallet/WalletStrategyFactory.js +31 -0
  46. package/utils/wallet/index.d.ts +4 -0
  47. package/utils/wallet/index.js +4 -0
  48. package/utils/wallet-browser-event-types.d.ts +16 -2
  49. package/utils/wagmiCoreConnectorsUtils.d.ts +0 -11
  50. package/utils/wagmiCoreConnectorsUtils.js +0 -396
@@ -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);
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.12";
1
+ export declare const sdkVersion = "3.1.0-rc.1";
package/utils/version.js CHANGED
@@ -1 +1 @@
1
- export var sdkVersion = '3.0.12';
1
+ export var sdkVersion = '3.1.0-rc.1';
@@ -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
+ }
@@ -0,0 +1,194 @@
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 { connectToSolanaWallet, disconnectFromSolanaWallet, signSolanaMessage, sendSOLTransaction, findAvailableSolanaProviders } from '../connectors/solana';
54
+ var SolanaWalletStrategy = /** @class */ (function (_super) {
55
+ __extends(SolanaWalletStrategy, _super);
56
+ function SolanaWalletStrategy() {
57
+ return _super !== null && _super.apply(this, arguments) || this;
58
+ }
59
+ SolanaWalletStrategy.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*/, connectToSolanaWallet(payload.integrationName)];
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 Solana wallet');
80
+ case 3: return [2 /*return*/];
81
+ }
82
+ });
83
+ });
84
+ };
85
+ SolanaWalletStrategy.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*/, disconnectFromSolanaWallet(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 Solana wallet');
102
+ case 3: return [2 /*return*/];
103
+ }
104
+ });
105
+ });
106
+ };
107
+ SolanaWalletStrategy.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*/, signSolanaMessage(payload.walletName || 'Unknown Wallet', 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 Solana message');
124
+ case 3: return [2 /*return*/];
125
+ }
126
+ });
127
+ });
128
+ };
129
+ /**
130
+ * @note Solana doesn't support chain switching as it's a single-chain network
131
+ * This method is implemented to satisfy the interface but will always return mainnet (101)
132
+ */
133
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
134
+ SolanaWalletStrategy.prototype.switchChain = function (_payload) {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ return __generator(this, function (_a) {
137
+ return [2 /*return*/, {
138
+ chainId: '101',
139
+ accounts: []
140
+ }];
141
+ });
142
+ });
143
+ };
144
+ SolanaWalletStrategy.prototype.sendNativeTransfer = function (payload) {
145
+ return __awaiter(this, void 0, void 0, function () {
146
+ var result, error_4;
147
+ return __generator(this, function (_a) {
148
+ switch (_a.label) {
149
+ case 0:
150
+ _a.trys.push([0, 2, , 3]);
151
+ return [4 /*yield*/, sendSOLTransaction({
152
+ toAddress: payload.toAddress,
153
+ amount: BigInt(payload.amount * Math.pow(10, payload.decimalPlaces)),
154
+ fromAddress: payload.account,
155
+ blockhash: payload.blockhash || '',
156
+ walletName: payload.walletName || ''
157
+ })];
158
+ case 1:
159
+ result = _a.sent();
160
+ if (typeof result === 'string') {
161
+ return [2 /*return*/, result];
162
+ }
163
+ throw result;
164
+ case 2:
165
+ error_4 = _a.sent();
166
+ throw this.handleError(error_4, 'send Solana native transfer');
167
+ case 3: return [2 /*return*/];
168
+ }
169
+ });
170
+ });
171
+ };
172
+ /**
173
+ * @note This feature is not yet implemented for Solana
174
+ * @throws {Error} Always throws with a "not implemented" message
175
+ */
176
+ SolanaWalletStrategy.prototype.sendSmartContractInteraction = function (
177
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
178
+ _payload) {
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ return __generator(this, function (_a) {
181
+ throw new Error('NOT_IMPLEMENTED: Solana smart contract interactions are not yet supported');
182
+ });
183
+ });
184
+ };
185
+ SolanaWalletStrategy.prototype.getProviders = function () {
186
+ var solanaProviderMap = findAvailableSolanaProviders();
187
+ return Object.keys(solanaProviderMap).map(function (id) { return ({
188
+ id: id,
189
+ type: 'solana'
190
+ }); });
191
+ };
192
+ return SolanaWalletStrategy;
193
+ }(BaseWalletStrategy));
194
+ export { SolanaWalletStrategy };