@meshconnect/web-link-sdk 3.0.12 → 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.
- package/Link.js +169 -203
- package/package.json +5 -5
- package/utils/connectors/evm/chainConfigs.d.ts +2 -0
- package/utils/connectors/evm/chainConfigs.js +115 -0
- package/utils/connectors/evm/chainSwitching.d.ts +15 -0
- package/utils/connectors/evm/chainSwitching.js +242 -0
- package/utils/connectors/evm/index.d.ts +8 -0
- package/utils/connectors/evm/index.js +8 -0
- package/utils/connectors/evm/provider.d.ts +6 -0
- package/utils/connectors/evm/provider.js +13 -0
- package/utils/connectors/evm/signing.d.ts +1 -0
- package/utils/connectors/evm/signing.js +78 -0
- package/utils/connectors/evm/transactions.d.ts +9 -0
- package/utils/connectors/evm/transactions.js +201 -0
- package/utils/connectors/evm/types.d.ts +58 -0
- package/utils/connectors/evm/types.js +1 -0
- package/utils/connectors/evm/walletConnection.d.ts +20 -0
- package/utils/connectors/evm/walletConnection.js +161 -0
- package/utils/connectors/evm/walletDiscovery.d.ts +10 -0
- package/utils/connectors/evm/walletDiscovery.js +55 -0
- package/utils/connectors/solana/connection.d.ts +3 -0
- package/utils/connectors/solana/connection.js +94 -0
- package/utils/connectors/solana/index.d.ts +5 -0
- package/utils/connectors/solana/index.js +5 -0
- package/utils/connectors/solana/providerDiscovery.d.ts +3 -0
- package/utils/connectors/solana/providerDiscovery.js +75 -0
- package/utils/connectors/solana/signing.d.ts +1 -0
- package/utils/connectors/solana/signing.js +59 -0
- package/utils/connectors/solana/transaction.d.ts +2 -0
- package/utils/connectors/solana/transaction.js +158 -0
- package/utils/connectors/solana/types.d.ts +68 -0
- package/utils/connectors/solana/types.js +8 -0
- package/utils/event-types.d.ts +10 -2
- package/utils/event-types.js +2 -1
- package/utils/types.d.ts +38 -29
- package/utils/version.d.ts +1 -1
- package/utils/version.js +1 -1
- package/utils/wallet/EVMWalletStrategy.d.ts +23 -0
- package/utils/wallet/EVMWalletStrategy.js +205 -0
- package/utils/wallet/SolanaWalletStrategy.d.ts +29 -0
- package/utils/wallet/SolanaWalletStrategy.js +194 -0
- package/utils/wallet/WalletStrategy.d.ts +45 -0
- package/utils/wallet/WalletStrategy.js +25 -0
- package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
- package/utils/wallet/WalletStrategyFactory.js +31 -0
- package/utils/wallet/index.d.ts +4 -0
- package/utils/wallet/index.js +4 -0
- package/utils/wallet-browser-event-types.d.ts +16 -2
- package/utils/wagmiCoreConnectorsUtils.d.ts +0 -11
- 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 = {}));
|
package/utils/event-types.d.ts
CHANGED
@@ -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 {};
|
package/utils/event-types.js
CHANGED
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
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
package/utils/version.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export declare const sdkVersion = "3.0.
|
1
|
+
export declare const sdkVersion = "3.1.0-rc.0";
|
package/utils/version.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export var sdkVersion = '3.0.
|
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
|
+
}
|
@@ -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 };
|