@dynamic-labs/multi-wallet 0.5.19
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/LICENSE +201 -0
- package/package.json +25 -0
- package/src/data/wallet-connect-wallets.json +6265 -0
- package/src/data/wallet-links.json +2134 -0
- package/src/index.d.ts +15 -0
- package/src/index.js +48 -0
- package/src/index.js.map +1 -0
- package/src/multi-wallet.d.ts +10 -0
- package/src/multi-wallet.js +126 -0
- package/src/multi-wallet.js.map +1 -0
- package/src/polyfills.d.ts +1 -0
- package/src/polyfills.js +16 -0
- package/src/polyfills.js.map +1 -0
- package/src/services/name-service-lookup.d.ts +6 -0
- package/src/services/name-service-lookup.js +25 -0
- package/src/services/name-service-lookup.js.map +1 -0
- package/src/types.d.ts +44 -0
- package/src/types.js +3 -0
- package/src/types.js.map +1 -0
- package/src/utils/console.d.ts +4 -0
- package/src/utils/console.js +18 -0
- package/src/utils/console.js.map +1 -0
- package/src/utils/convertors.d.ts +1 -0
- package/src/utils/convertors.js +11 -0
- package/src/utils/convertors.js.map +1 -0
- package/src/utils/isMobile.d.ts +4 -0
- package/src/utils/isMobile.js +13 -0
- package/src/utils/isMobile.js.map +1 -0
- package/src/utils/message.d.ts +10 -0
- package/src/utils/message.js +44 -0
- package/src/utils/message.js.map +1 -0
- package/src/utils/normalizeWalletName.d.ts +1 -0
- package/src/utils/normalizeWalletName.js +6 -0
- package/src/utils/normalizeWalletName.js.map +1 -0
- package/src/utils/platform.d.ts +3 -0
- package/src/utils/platform.js +11 -0
- package/src/utils/platform.js.map +1 -0
- package/src/utils/walletConnect.d.ts +5 -0
- package/src/utils/walletConnect.js +21 -0
- package/src/utils/walletConnect.js.map +1 -0
- package/src/utils/walletLinks.d.ts +15 -0
- package/src/utils/walletLinks.js +13 -0
- package/src/utils/walletLinks.js.map +1 -0
- package/src/wallets/clients/coinbase/coinbase.d.ts +6 -0
- package/src/wallets/clients/coinbase/coinbase.js +73 -0
- package/src/wallets/clients/coinbase/coinbase.js.map +1 -0
- package/src/wallets/clients/coinbase/index.d.ts +2 -0
- package/src/wallets/clients/coinbase/index.js +19 -0
- package/src/wallets/clients/coinbase/index.js.map +1 -0
- package/src/wallets/clients/coinbase/types.d.ts +12 -0
- package/src/wallets/clients/coinbase/types.js +3 -0
- package/src/wallets/clients/coinbase/types.js.map +1 -0
- package/src/wallets/ethereum/coinbase.d.ts +19 -0
- package/src/wallets/ethereum/coinbase.js +56 -0
- package/src/wallets/ethereum/coinbase.js.map +1 -0
- package/src/wallets/ethereum/eth-provider.d.ts +27 -0
- package/src/wallets/ethereum/eth-provider.js +131 -0
- package/src/wallets/ethereum/eth-provider.js.map +1 -0
- package/src/wallets/ethereum/meta-mask.d.ts +17 -0
- package/src/wallets/ethereum/meta-mask.js +78 -0
- package/src/wallets/ethereum/meta-mask.js.map +1 -0
- package/src/wallets/ethereum/tallyho.d.ts +13 -0
- package/src/wallets/ethereum/tallyho.js +40 -0
- package/src/wallets/ethereum/tallyho.js.map +1 -0
- package/src/wallets/solana/glow.d.ts +11 -0
- package/src/wallets/solana/glow.js +35 -0
- package/src/wallets/solana/glow.js.map +1 -0
- package/src/wallets/solana/phantom.d.ts +11 -0
- package/src/wallets/solana/phantom.js +42 -0
- package/src/wallets/solana/phantom.js.map +1 -0
- package/src/wallets/solana/slope.d.ts +22 -0
- package/src/wallets/solana/slope.js +58 -0
- package/src/wallets/solana/slope.js.map +1 -0
- package/src/wallets/solana/sol-providers.d.ts +27 -0
- package/src/wallets/solana/sol-providers.js +100 -0
- package/src/wallets/solana/sol-providers.js.map +1 -0
- package/src/wallets/solana/solflare.d.ts +11 -0
- package/src/wallets/solana/solflare.js +57 -0
- package/src/wallets/solana/solflare.js.map +1 -0
- package/src/wallets/wallet-connect-client.d.ts +50 -0
- package/src/wallets/wallet-connect-client.js +155 -0
- package/src/wallets/wallet-connect-client.js.map +1 -0
- package/src/wallets/wallet-connect.d.ts +17 -0
- package/src/wallets/wallet-connect.js +82 -0
- package/src/wallets/wallet-connect.js.map +1 -0
- package/src/wallets/wallet-connector.d.ts +23 -0
- package/src/wallets/wallet-connector.js +3 -0
- package/src/wallets/wallet-connector.js.map +1 -0
- package/src/wallets/window.d.ts +46 -0
- package/src/wallets/window.js +3 -0
- package/src/wallets/window.js.map +1 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const sol_providers_1 = require("./sol-providers");
|
|
13
|
+
class Phantom extends sol_providers_1.SolProvider {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.name = 'phantom';
|
|
17
|
+
this.supportedChains = ['SOL'];
|
|
18
|
+
this.connectedChain = 'SOL';
|
|
19
|
+
}
|
|
20
|
+
isInstalledOnBrowser() {
|
|
21
|
+
var _a;
|
|
22
|
+
/**
|
|
23
|
+
* When Glow wallet is installed and Phantom isn't, isPhantom will
|
|
24
|
+
* still be true. This added check is to return false in that scenario.
|
|
25
|
+
* It relies on the fact that if both Glow and Phantom are enabled,
|
|
26
|
+
* solana.isGlow will return false.
|
|
27
|
+
*/
|
|
28
|
+
return this.isInstalledHelper(this.name) && !((_a = window.solana) === null || _a === void 0 ? void 0 : _a.isGlow);
|
|
29
|
+
}
|
|
30
|
+
fetchPublicAddress() {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
return this.fetchPublicAddressWithName(this.name);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
signMessage(messageToSign) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
return this.signMessageWithName(messageToSign, this.name);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.default = Phantom;
|
|
42
|
+
//# sourceMappingURL=phantom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/phantom.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,mDAA8C;AAI9C,MAAM,OAAQ,SAAQ,2BAAW;IAAjC;;QACE,SAAI,GAAG,SAAS,CAAC;QAEjB,oBAAe,GAAY,CAAC,KAAK,CAAC,CAAC;QAEnC,mBAAc,GAAU,KAAK,CAAC;IAmBhC,CAAC;IAjBC,oBAAoB;;QAClB;;;;;WAKG;QACH,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,MAAM,CAAA,CAAC;IACrE,CAAC;IAEK,kBAAkB;;YACtB,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;KAAA;IAEK,WAAW,CAAC,aAAqB;;YACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;KAAA;CACF;AAED,kBAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Chain, WalletConnector } from '../wallet-connector';
|
|
2
|
+
interface ConnectData {
|
|
3
|
+
data: {
|
|
4
|
+
publicKey: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
interface SignatureData {
|
|
8
|
+
data: {
|
|
9
|
+
signature: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
declare class Slope implements WalletConnector {
|
|
13
|
+
name: string;
|
|
14
|
+
supportedChains: Chain[];
|
|
15
|
+
connectedChain: Chain;
|
|
16
|
+
isInstalledOnBrowser(): boolean;
|
|
17
|
+
isConnectData: (value: unknown) => value is ConnectData;
|
|
18
|
+
isSignatureData: (value: unknown) => value is SignatureData;
|
|
19
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
20
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
21
|
+
}
|
|
22
|
+
export default Slope;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const console_1 = __importDefault(require("../../utils/console"));
|
|
16
|
+
class Slope {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.name = 'slope';
|
|
19
|
+
this.supportedChains = ['SOL'];
|
|
20
|
+
this.connectedChain = 'SOL';
|
|
21
|
+
this.isConnectData = (value) => { var _a; return ((_a = value.data) === null || _a === void 0 ? void 0 : _a.publicKey) !== undefined; };
|
|
22
|
+
this.isSignatureData = (value) => { var _a; return ((_a = value.data) === null || _a === void 0 ? void 0 : _a.signature) !== undefined; };
|
|
23
|
+
}
|
|
24
|
+
isInstalledOnBrowser() {
|
|
25
|
+
return typeof window.Slope === 'function';
|
|
26
|
+
}
|
|
27
|
+
fetchPublicAddress() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const wallet = new window.Slope();
|
|
30
|
+
try {
|
|
31
|
+
const response = yield wallet.connect();
|
|
32
|
+
return this.isConnectData(response) ? response.data.publicKey : undefined;
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
console_1.default.log(e);
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
signMessage(messageToSign) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const wallet = new window.Slope();
|
|
43
|
+
const encodedMessage = new TextEncoder().encode(messageToSign);
|
|
44
|
+
try {
|
|
45
|
+
const response = yield wallet.signMessage(encodedMessage);
|
|
46
|
+
return this.isSignatureData(response)
|
|
47
|
+
? response.data.signature
|
|
48
|
+
: undefined;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console_1.default.log(e);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.default = Slope;
|
|
58
|
+
//# sourceMappingURL=slope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slope.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/slope.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kEAA0C;AAc1C,MAAM,KAAK;IAAX;QACE,SAAI,GAAG,OAAO,CAAC;QAEf,oBAAe,GAAY,CAAC,KAAK,CAAC,CAAC;QAEnC,mBAAc,GAAU,KAAK,CAAC;QAM9B,kBAAa,GAAG,CAAC,KAAc,EAAwB,EAAE,WACvD,OAAA,CAAA,MAAC,KAAqB,CAAC,IAAI,0CAAE,SAAS,MAAK,SAAS,CAAA,EAAA,CAAC;QAEvD,oBAAe,GAAG,CAAC,KAAc,EAA0B,EAAE,WAC3D,OAAA,CAAA,MAAC,KAAuB,CAAC,IAAI,0CAAE,SAAS,MAAK,SAAS,CAAA,EAAA,CAAC;IA4B3D,CAAC;IApCC,oBAAoB;QAClB,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC;IAC5C,CAAC;IAQK,kBAAkB;;YACtB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAElC,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;aAC3E;YAAC,OAAO,CAAC,EAAE;gBACV,iBAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,OAAO,SAAS,CAAC;aAClB;QACH,CAAC;KAAA;IAEK,WAAW,CAAC,aAAqB;;YACrC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE/D,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;oBACnC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;oBACzB,CAAC,CAAC,SAAS,CAAC;aACf;YAAC,OAAO,CAAC,EAAE;gBACV,iBAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,OAAO,SAAS,CAAC;aAClB;QACH,CAAC;KAAA;CACF;AAED,kBAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ISolana } from '../window';
|
|
2
|
+
export interface SignedMessage {
|
|
3
|
+
signature: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
export declare enum ProviderFlag {
|
|
6
|
+
isGlow = "isGlow",
|
|
7
|
+
isPhantom = "isPhantom",
|
|
8
|
+
isSolflare = "isSolflare"
|
|
9
|
+
}
|
|
10
|
+
declare type Provider = () => ISolana | undefined;
|
|
11
|
+
export declare class SolProvider {
|
|
12
|
+
GlowProvider: Provider;
|
|
13
|
+
PhantomProvider: Provider;
|
|
14
|
+
SolflareProvider: Provider;
|
|
15
|
+
providers: {
|
|
16
|
+
[wallet: string]: Provider;
|
|
17
|
+
};
|
|
18
|
+
installedProviderLookup(providerFlag: ProviderFlag): ISolana | undefined;
|
|
19
|
+
allInstalledProviders(): ISolana[];
|
|
20
|
+
findSolanaProviders(solana?: ISolana): ISolana[];
|
|
21
|
+
isInstalledHelper(walletName: string): boolean;
|
|
22
|
+
findProvider(walletName: string): ISolana | undefined;
|
|
23
|
+
fetchPublicAddressWithName(name: string): Promise<string | undefined>;
|
|
24
|
+
connectWithName(name: string): Promise<void>;
|
|
25
|
+
signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SolProvider = exports.ProviderFlag = void 0;
|
|
13
|
+
const convertors_1 = require("../../utils/convertors");
|
|
14
|
+
var ProviderFlag;
|
|
15
|
+
(function (ProviderFlag) {
|
|
16
|
+
ProviderFlag["isGlow"] = "isGlow";
|
|
17
|
+
ProviderFlag["isPhantom"] = "isPhantom";
|
|
18
|
+
ProviderFlag["isSolflare"] = "isSolflare";
|
|
19
|
+
})(ProviderFlag = exports.ProviderFlag || (exports.ProviderFlag = {}));
|
|
20
|
+
class SolProvider {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.GlowProvider = () => this.installedProviderLookup(ProviderFlag.isGlow);
|
|
23
|
+
this.PhantomProvider = () => this.installedProviderLookup(ProviderFlag.isPhantom);
|
|
24
|
+
this.SolflareProvider = () => this.installedProviderLookup(ProviderFlag.isSolflare);
|
|
25
|
+
this.providers = {
|
|
26
|
+
glow: this.GlowProvider,
|
|
27
|
+
phantom: this.PhantomProvider,
|
|
28
|
+
solflare: this.SolflareProvider,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
installedProviderLookup(providerFlag) {
|
|
32
|
+
return this.allInstalledProviders().find((provider) => provider === null || provider === void 0 ? void 0 : provider[providerFlag]);
|
|
33
|
+
}
|
|
34
|
+
allInstalledProviders() {
|
|
35
|
+
return this.findSolanaProviders(window.solana).concat(this.findSolanaProviders(window.solflare), this.findSolanaProviders(window.glowSolana));
|
|
36
|
+
}
|
|
37
|
+
findSolanaProviders(solana) {
|
|
38
|
+
const solanaProviders = [];
|
|
39
|
+
if (solana && !solana.providers) {
|
|
40
|
+
solanaProviders.push(solana);
|
|
41
|
+
}
|
|
42
|
+
else if (solana && solana.providers) {
|
|
43
|
+
solana.providers.forEach((provider) => {
|
|
44
|
+
solanaProviders.push(provider);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return solanaProviders;
|
|
48
|
+
}
|
|
49
|
+
isInstalledHelper(walletName) {
|
|
50
|
+
return this.findProvider(walletName) !== undefined;
|
|
51
|
+
}
|
|
52
|
+
findProvider(walletName) {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
return (_b = (_a = this.providers)[walletName]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
55
|
+
}
|
|
56
|
+
fetchPublicAddressWithName(name) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const provider = this.findProvider(name);
|
|
59
|
+
if (!provider) {
|
|
60
|
+
return Promise.resolve(undefined);
|
|
61
|
+
}
|
|
62
|
+
yield provider.connect();
|
|
63
|
+
const { publicKey } = provider;
|
|
64
|
+
return publicKey ? publicKey.toString() : Promise.resolve(undefined);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
connectWithName(name) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const provider = this.findProvider(name);
|
|
70
|
+
if (!provider) {
|
|
71
|
+
return Promise.resolve(undefined);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
yield provider.connect();
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
signMessageWithName(messageToSign, name) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
const walletAddress = yield this.fetchPublicAddressWithName(name);
|
|
84
|
+
if (!walletAddress) {
|
|
85
|
+
return Promise.resolve(undefined);
|
|
86
|
+
}
|
|
87
|
+
const provider = this.findProvider(name);
|
|
88
|
+
if (!provider) {
|
|
89
|
+
return Promise.resolve(undefined);
|
|
90
|
+
}
|
|
91
|
+
const encodedMessage = new TextEncoder().encode(messageToSign);
|
|
92
|
+
return provider.connect().then(() => __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const { signature } = (yield provider.signMessage(encodedMessage, 'utf8'));
|
|
94
|
+
return (0, convertors_1.bufferToBase64)(signature);
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.SolProvider = SolProvider;
|
|
100
|
+
//# sourceMappingURL=sol-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sol-providers.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/sol-providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Chain, WalletConnector } from '../wallet-connector';
|
|
2
|
+
import { SolProvider } from './sol-providers';
|
|
3
|
+
declare class Solflare extends SolProvider implements WalletConnector {
|
|
4
|
+
name: string;
|
|
5
|
+
supportedChains: Chain[];
|
|
6
|
+
connectedChain: Chain;
|
|
7
|
+
isInstalledOnBrowser(): boolean;
|
|
8
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
9
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
10
|
+
}
|
|
11
|
+
export default Solflare;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const convertors_1 = require("../../utils/convertors");
|
|
13
|
+
const sol_providers_1 = require("./sol-providers");
|
|
14
|
+
class Solflare extends sol_providers_1.SolProvider {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.name = 'solflare';
|
|
18
|
+
this.supportedChains = ['SOL'];
|
|
19
|
+
this.connectedChain = 'SOL';
|
|
20
|
+
}
|
|
21
|
+
isInstalledOnBrowser() {
|
|
22
|
+
return this.isInstalledHelper(this.name);
|
|
23
|
+
}
|
|
24
|
+
fetchPublicAddress() {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
return this.fetchPublicAddressWithName(this.name);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
signMessage(messageToSign) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const walletAddress = yield this.fetchPublicAddress();
|
|
32
|
+
if (!walletAddress) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const provider = this.findProvider(this.name);
|
|
36
|
+
if (!provider) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const encodedMessage = new TextEncoder().encode(messageToSign);
|
|
40
|
+
const isSignedMessage = (value) => value.signature !== undefined;
|
|
41
|
+
yield provider.connect();
|
|
42
|
+
/**
|
|
43
|
+
* TODO: Remove the sleep once problem is fixed on Solflare's extension.
|
|
44
|
+
* Tracked in DYN-442
|
|
45
|
+
*/
|
|
46
|
+
yield new Promise((resolve) => {
|
|
47
|
+
setTimeout(resolve, 100);
|
|
48
|
+
});
|
|
49
|
+
const rawMessage = yield provider.signMessage(encodedMessage, 'utf8');
|
|
50
|
+
return isSignedMessage(rawMessage)
|
|
51
|
+
? (0, convertors_1.bufferToBase64)(rawMessage.signature)
|
|
52
|
+
: undefined;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.default = Solflare;
|
|
57
|
+
//# sourceMappingURL=solflare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solflare.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/solflare.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uDAAwD;AAGxD,mDAA6D;AAE7D,MAAM,QAAS,SAAQ,2BAAW;IAAlC;;QACE,SAAI,GAAG,UAAU,CAAC;QAElB,oBAAe,GAAY,CAAC,KAAK,CAAC,CAAC;QAEnC,mBAAc,GAAU,KAAK,CAAC;IAwChC,CAAC;IAtCC,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEK,kBAAkB;;YACtB,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;KAAA;IAEK,WAAW,CAAC,aAAqB;;YACrC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEtD,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO,SAAS,CAAC;aAClB;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,SAAS,CAAC;aAClB;YAED,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,CAAC,KAAc,EAA0B,EAAE,CAChE,KAAuB,CAAC,SAAS,KAAK,SAAS,CAAC;YAEnD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzB;;;eAGG;YACH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,eAAe,CAAC,UAAU,CAAC;gBAChC,CAAC,CAAC,IAAA,2BAAc,EAAC,UAAU,CAAC,SAAS,CAAC;gBACtC,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;KAAA;CACF;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Client from '@walletconnect/client';
|
|
2
|
+
import { WalletConnectWalletMetadata } from '../types';
|
|
3
|
+
import { FetchPublicAddressOpts } from './wallet-connector';
|
|
4
|
+
export declare type InitializeWalletConnectClientOpts = {
|
|
5
|
+
bridge?: Client['bridge'];
|
|
6
|
+
};
|
|
7
|
+
export declare type InitializeWalletConnectClient = (opts?: InitializeWalletConnectClientOpts) => Client;
|
|
8
|
+
/**
|
|
9
|
+
* Initialize a new WalletConnectClient. If a WalletConnect session exists in
|
|
10
|
+
* local storage, the new WalletConnectClient will be initialized with that
|
|
11
|
+
* session. Otherwise, it will be initialized with the supplied bridge.
|
|
12
|
+
*
|
|
13
|
+
* @param opts.bridge - The bridge to initialize the client on.
|
|
14
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client#initiate-connection
|
|
15
|
+
*
|
|
16
|
+
* @returns client - The initialized WalletConnect client.
|
|
17
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client
|
|
18
|
+
*/
|
|
19
|
+
export declare const initializeWalletConnectClient: InitializeWalletConnectClient;
|
|
20
|
+
export declare type InitializeWalletConnectClientFromSession = () => Client | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize a new WalletConnectClient from an existing session.
|
|
23
|
+
*
|
|
24
|
+
* @param opts.bridge - The bridge to initialize the client on.
|
|
25
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client#initiate-connection
|
|
26
|
+
*
|
|
27
|
+
* @returns The initialized WalletConnect client if a session exists, otherwise undefined.
|
|
28
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client
|
|
29
|
+
*/
|
|
30
|
+
export declare const initializeWalletConnectClientFromSession: InitializeWalletConnectClientFromSession;
|
|
31
|
+
export declare type SetupWalletConnectEventListenersOpts = {
|
|
32
|
+
onDisconnect: () => void;
|
|
33
|
+
};
|
|
34
|
+
export declare type SetupWalletConnectEventListeners = (opts: SetupWalletConnectEventListenersOpts, client?: Client) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Attach event handlers to WalletConnect events.
|
|
37
|
+
*
|
|
38
|
+
* @param opts.onDisconnect - Handle disconnect events.
|
|
39
|
+
* @param client - The WalletConnect client instance to setup events on.
|
|
40
|
+
*/
|
|
41
|
+
export declare const setupWalletConnectEventListeners: SetupWalletConnectEventListeners;
|
|
42
|
+
/**
|
|
43
|
+
* Initialize a client from a stored session and terminate the connection.
|
|
44
|
+
*/
|
|
45
|
+
export declare const killWalletConnectSession: () => Promise<void>;
|
|
46
|
+
declare class WalletConnectClient {
|
|
47
|
+
fetchPublicAddress(metadata: WalletConnectWalletMetadata, opts?: FetchPublicAddressOpts): Promise<string | undefined>;
|
|
48
|
+
signPersonalMessage(messageToSign: string, metadata: WalletConnectWalletMetadata): Promise<string | undefined>;
|
|
49
|
+
}
|
|
50
|
+
export default WalletConnectClient;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.killWalletConnectSession = exports.setupWalletConnectEventListeners = exports.initializeWalletConnectClientFromSession = exports.initializeWalletConnectClient = void 0;
|
|
16
|
+
const client_1 = __importDefault(require("@walletconnect/client"));
|
|
17
|
+
const console_1 = __importDefault(require("../utils/console"));
|
|
18
|
+
const isMobile_1 = require("../utils/isMobile");
|
|
19
|
+
/**
|
|
20
|
+
* Singleton instance to reuse across a single execution context
|
|
21
|
+
*/
|
|
22
|
+
let client;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize a new WalletConnectClient. If a WalletConnect session exists in
|
|
25
|
+
* local storage, the new WalletConnectClient will be initialized with that
|
|
26
|
+
* session. Otherwise, it will be initialized with the supplied bridge.
|
|
27
|
+
*
|
|
28
|
+
* @param opts.bridge - The bridge to initialize the client on.
|
|
29
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client#initiate-connection
|
|
30
|
+
*
|
|
31
|
+
* @returns client - The initialized WalletConnect client.
|
|
32
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client
|
|
33
|
+
*/
|
|
34
|
+
const initializeWalletConnectClient = (opts = {}) => {
|
|
35
|
+
var _a;
|
|
36
|
+
if (client) {
|
|
37
|
+
return client;
|
|
38
|
+
}
|
|
39
|
+
const { bridge = 'https://bridge.walletconnect.org' } = opts;
|
|
40
|
+
client = (_a = (0, exports.initializeWalletConnectClientFromSession)()) !== null && _a !== void 0 ? _a : new client_1.default({ bridge });
|
|
41
|
+
return client;
|
|
42
|
+
};
|
|
43
|
+
exports.initializeWalletConnectClient = initializeWalletConnectClient;
|
|
44
|
+
/**
|
|
45
|
+
* Initialize a new WalletConnectClient from an existing session.
|
|
46
|
+
*
|
|
47
|
+
* @param opts.bridge - The bridge to initialize the client on.
|
|
48
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client#initiate-connection
|
|
49
|
+
*
|
|
50
|
+
* @returns The initialized WalletConnect client if a session exists, otherwise undefined.
|
|
51
|
+
* See https://docs.walletconnect.com/quick-start/dapps/client
|
|
52
|
+
*/
|
|
53
|
+
const initializeWalletConnectClientFromSession = () => {
|
|
54
|
+
if (client) {
|
|
55
|
+
return client;
|
|
56
|
+
}
|
|
57
|
+
// WalletConnect stores this in local storage
|
|
58
|
+
const rawSession = localStorage.getItem('walletconnect');
|
|
59
|
+
if (!rawSession) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const session = JSON.parse(rawSession);
|
|
63
|
+
client = new client_1.default({ session });
|
|
64
|
+
return client;
|
|
65
|
+
};
|
|
66
|
+
exports.initializeWalletConnectClientFromSession = initializeWalletConnectClientFromSession;
|
|
67
|
+
/**
|
|
68
|
+
* Attach event handlers to WalletConnect events.
|
|
69
|
+
*
|
|
70
|
+
* @param opts.onDisconnect - Handle disconnect events.
|
|
71
|
+
* @param client - The WalletConnect client instance to setup events on.
|
|
72
|
+
*/
|
|
73
|
+
const setupWalletConnectEventListeners = (opts, client = (0, exports.initializeWalletConnectClientFromSession)()) => {
|
|
74
|
+
client === null || client === void 0 ? void 0 : client.on('disconnect', () => {
|
|
75
|
+
opts.onDisconnect();
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
exports.setupWalletConnectEventListeners = setupWalletConnectEventListeners;
|
|
79
|
+
/**
|
|
80
|
+
* Initialize a client from a stored session and terminate the connection.
|
|
81
|
+
*/
|
|
82
|
+
const killWalletConnectSession = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
var _a;
|
|
84
|
+
try {
|
|
85
|
+
yield ((_a = (0, exports.initializeWalletConnectClientFromSession)()) === null || _a === void 0 ? void 0 : _a.killSession());
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
console_1.default.log(e);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
exports.killWalletConnectSession = killWalletConnectSession;
|
|
92
|
+
// todo(DYN-495): move the rest of these methods out and delete WalletConnectClient
|
|
93
|
+
class WalletConnectClient {
|
|
94
|
+
fetchPublicAddress(metadata, opts) {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
const client = (0, exports.initializeWalletConnectClient)();
|
|
98
|
+
if (client.connected) {
|
|
99
|
+
const [accountPublicAddress] = client.accounts;
|
|
100
|
+
return accountPublicAddress;
|
|
101
|
+
}
|
|
102
|
+
// createSession will trigger the QR code...
|
|
103
|
+
yield client.createSession();
|
|
104
|
+
if ((0, isMobile_1.isMobile)()) {
|
|
105
|
+
const deepLink = `${metadata.mobile.universal}/wc?uri=${encodeURIComponent((_a = client.uri) !== null && _a !== void 0 ? _a : '')}`;
|
|
106
|
+
window.location.href = deepLink;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
(_b = opts === null || opts === void 0 ? void 0 : opts.onDisplayUri) === null || _b === void 0 ? void 0 : _b.call(opts, client.uri);
|
|
110
|
+
}
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
// ...then once the QR is scanned, this callback will run
|
|
113
|
+
client.on('connect', (error, payload) => {
|
|
114
|
+
var _a;
|
|
115
|
+
if (error) {
|
|
116
|
+
reject(error);
|
|
117
|
+
}
|
|
118
|
+
(_a = opts === null || opts === void 0 ? void 0 : opts.onConnect) === null || _a === void 0 ? void 0 : _a.call(opts, payload);
|
|
119
|
+
const [accountPublicAddress] = payload.params[0].accounts;
|
|
120
|
+
resolve(accountPublicAddress);
|
|
121
|
+
});
|
|
122
|
+
client.on('disconnect', (error, payload) => {
|
|
123
|
+
reject(error || payload.params[0].message);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
signPersonalMessage(messageToSign, metadata) {
|
|
129
|
+
var _a;
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const client = (0, exports.initializeWalletConnectClientFromSession)();
|
|
132
|
+
if (!client || !client.connected) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const [accountPublicAddress] = client.accounts;
|
|
136
|
+
if ((0, isMobile_1.isMobile)()) {
|
|
137
|
+
const deepLink = `${metadata.mobile.universal}/wc?uri=${encodeURIComponent((_a = client.uri) !== null && _a !== void 0 ? _a : '')}`;
|
|
138
|
+
window.location.href = deepLink;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
return yield client.signPersonalMessage([
|
|
142
|
+
messageToSign,
|
|
143
|
+
accountPublicAddress,
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
console_1.default.log(e);
|
|
148
|
+
client.killSession();
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.default = WalletConnectClient;
|
|
155
|
+
//# sourceMappingURL=wallet-connect-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-connect-client.js","sourceRoot":"","sources":["../../../../../packages/multi-wallet/src/wallets/wallet-connect-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LookupData } from '../services/name-service-lookup';
|
|
2
|
+
import { Chain, FetchPublicAddressOpts, WalletConnector } from './wallet-connector';
|
|
3
|
+
declare class WalletConnect implements WalletConnector {
|
|
4
|
+
supportedChains: Chain[];
|
|
5
|
+
connectedChain?: Chain;
|
|
6
|
+
name: string;
|
|
7
|
+
private walletConnectClient;
|
|
8
|
+
constructor({ walletName }: {
|
|
9
|
+
walletName: string;
|
|
10
|
+
});
|
|
11
|
+
isInstalledOnBrowser(): boolean;
|
|
12
|
+
fetchPublicAddress(opts?: FetchPublicAddressOpts): Promise<string | undefined>;
|
|
13
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
14
|
+
endSession(): Promise<void>;
|
|
15
|
+
nameServiceLookup(address: string): Promise<LookupData | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export default WalletConnect;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
const ethers_1 = require("ethers");
|
|
36
|
+
const name_service_lookup_1 = require("../services/name-service-lookup");
|
|
37
|
+
const walletConnect_1 = require("../utils/walletConnect");
|
|
38
|
+
const wallet_connect_client_1 = __importStar(require("./wallet-connect-client"));
|
|
39
|
+
const chainMap = {
|
|
40
|
+
1: 'ETH',
|
|
41
|
+
245022934: 'SOL',
|
|
42
|
+
};
|
|
43
|
+
class WalletConnect {
|
|
44
|
+
constructor({ walletName }) {
|
|
45
|
+
this.supportedChains = ['ETH', 'SOL'];
|
|
46
|
+
this.name = walletName;
|
|
47
|
+
this.walletConnectClient = new wallet_connect_client_1.default();
|
|
48
|
+
}
|
|
49
|
+
isInstalledOnBrowser() {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
fetchPublicAddress(opts) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
return this.walletConnectClient.fetchPublicAddress((0, walletConnect_1.getWalletConnectMetadata)(this.name), Object.assign(Object.assign({}, opts), { onConnect: (payload) => {
|
|
55
|
+
var _a;
|
|
56
|
+
(_a = opts === null || opts === void 0 ? void 0 : opts.onConnect) === null || _a === void 0 ? void 0 : _a.call(opts, payload);
|
|
57
|
+
this.connectedChain = chainMap[payload.params[0].chainId];
|
|
58
|
+
} }));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
signMessage(messageToSign) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
return this.walletConnectClient.signPersonalMessage(messageToSign, (0, walletConnect_1.getWalletConnectMetadata)(this.name));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
endSession() {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
(0, wallet_connect_client_1.killWalletConnectSession)();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
nameServiceLookup(address) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
if (this.connectedChain !== 'ETH') {
|
|
74
|
+
return Promise.resolve(undefined);
|
|
75
|
+
}
|
|
76
|
+
const provider = ethers_1.ethers.getDefaultProvider();
|
|
77
|
+
return (0, name_service_lookup_1.nameServiceLookup)(provider, address);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.default = WalletConnect;
|
|
82
|
+
//# sourceMappingURL=wallet-connect.js.map
|