@dynamic-labs/multi-wallet 0.10.3 → 0.10.6
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/package.json +2 -2
- package/src/data/wallet-links.json +13 -0
- package/src/multi-wallet.js +10 -3
- package/src/multi-wallet.js.map +1 -1
- package/src/utils/message.d.ts +2 -1
- package/src/utils/message.js +8 -1
- package/src/utils/message.js.map +1 -1
- package/src/wallets/flow/blocto.d.ts +3 -15
- package/src/wallets/flow/blocto.js +9 -82
- package/src/wallets/flow/blocto.js.map +1 -1
- package/src/wallets/flow/dapper.d.ts +11 -0
- package/src/wallets/flow/dapper.js +38 -0
- package/src/wallets/flow/dapper.js.map +1 -0
- package/src/wallets/flow/flow-provider.d.ts +17 -0
- package/src/wallets/flow/flow-provider.js +103 -0
- package/src/wallets/flow/flow-provider.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/multi-wallet",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org"
|
|
6
6
|
},
|
|
7
7
|
"repository": "git://github.com/dynamic-labs/WalletKit.git",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"buffer": "^6.0.3",
|
|
10
|
-
"@coinbase/wallet-sdk": "^3.
|
|
10
|
+
"@coinbase/wallet-sdk": "^3.2.0",
|
|
11
11
|
"ethers": "^5.6.5",
|
|
12
12
|
"@walletconnect/ethereum-provider": "^1.7.8",
|
|
13
13
|
"@onflow/fcl": "1.0.3-alpha.0",
|
|
@@ -2143,5 +2143,18 @@
|
|
|
2143
2143
|
"android": "https://play.google.com/store/apps/details?id=com.portto.blocto",
|
|
2144
2144
|
"ios": "https://apps.apple.com/app/blocto/id1481181682"
|
|
2145
2145
|
}
|
|
2146
|
+
},
|
|
2147
|
+
"dapper": {
|
|
2148
|
+
"desktop": {
|
|
2149
|
+
"chrome": "",
|
|
2150
|
+
"firefox": "",
|
|
2151
|
+
"brave": "",
|
|
2152
|
+
"edge": "",
|
|
2153
|
+
"safari": ""
|
|
2154
|
+
},
|
|
2155
|
+
"mobile": {
|
|
2156
|
+
"android": "https://auth.meetdapper.com/",
|
|
2157
|
+
"ios": "https://auth.meetdapper.com/"
|
|
2158
|
+
}
|
|
2146
2159
|
}
|
|
2147
2160
|
}
|
package/src/multi-wallet.js
CHANGED
|
@@ -13,6 +13,7 @@ const solflare_1 = __importDefault(require("./wallets/solana/solflare"));
|
|
|
13
13
|
const glow_1 = __importDefault(require("./wallets/solana/glow"));
|
|
14
14
|
const wallet_connect_1 = __importDefault(require("./wallets/wallet-connect"));
|
|
15
15
|
const blocto_1 = __importDefault(require("./wallets/flow/blocto"));
|
|
16
|
+
const dapper_1 = __importDefault(require("./wallets/flow/dapper"));
|
|
16
17
|
const platform_1 = require("./utils/platform");
|
|
17
18
|
const isMobile_1 = require("./utils/isMobile");
|
|
18
19
|
const walletLinks_1 = require("./utils/walletLinks");
|
|
@@ -38,6 +39,7 @@ const getSupportedWallets = ({ appLogoUrl, appName } = { appLogoUrl: '', appName
|
|
|
38
39
|
new solflare_1.default(),
|
|
39
40
|
new glow_1.default(),
|
|
40
41
|
new slope_1.default(),
|
|
42
|
+
new dapper_1.default({ appLogoUrl, appName }),
|
|
41
43
|
new blocto_1.default({ appLogoUrl, appName }),
|
|
42
44
|
new wallet_connect_1.default({ walletName: 'WalletConnect' }),
|
|
43
45
|
...filtered,
|
|
@@ -62,15 +64,19 @@ const getSupportedWallets = ({ appLogoUrl, appName } = { appLogoUrl: '', appName
|
|
|
62
64
|
* implementation uses only universal. This means we need to filter for wallets that
|
|
63
65
|
* have a universal deep link available.
|
|
64
66
|
*/
|
|
65
|
-
const hasUniversalLink =
|
|
67
|
+
const hasUniversalLink = walletConnectMetadata && walletConnectMetadata.mobile.universal !== '';
|
|
66
68
|
// for now, treat ipad the same as iphone
|
|
67
69
|
// in the future, we may want to only show wallets that can connect via qrcode,
|
|
68
70
|
// or that have a safari extension
|
|
69
71
|
if ((0, platform_1.isPhone)() || (0, platform_1.isIPad)()) {
|
|
70
|
-
return
|
|
72
|
+
return walletConnectMetadata
|
|
73
|
+
? hasIOSLink && hasUniversalLink
|
|
74
|
+
: hasIOSLink;
|
|
71
75
|
}
|
|
72
76
|
if ((0, isMobile_1.isMobile)()) {
|
|
73
|
-
return
|
|
77
|
+
return walletConnectMetadata
|
|
78
|
+
? hasAndroidLink && hasUniversalLink
|
|
79
|
+
: hasAndroidLink;
|
|
74
80
|
}
|
|
75
81
|
return true;
|
|
76
82
|
});
|
|
@@ -123,6 +129,7 @@ const orderWallets = (wallets) => {
|
|
|
123
129
|
'glow',
|
|
124
130
|
'slope',
|
|
125
131
|
'tallyho',
|
|
132
|
+
'dapper',
|
|
126
133
|
'blocto',
|
|
127
134
|
];
|
|
128
135
|
const topEnabledWallets = filterWalletsByName(wallets, topNames);
|
package/src/multi-wallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-wallet.js","sourceRoot":"","sources":["../../../../packages/multi-wallet/src/multi-wallet.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA+C;AAC/C,6EAAoD;AAEpD,2EAAmD;AACnD,yEAAiD;AACjD,mEAA2C;AAC3C,yEAAiD;AACjD,iEAAyC;AACzC,8EAAqD;AACrD,mEAA2C;AAE3C,+CAAmD;AACnD,+CAA4C;AAC5C,qDAAqD;AACrD,qEAAkE;AAClE,yDAG+B;AAE/B,sEAAsE;AAEtE,IAAI,OAAO,GAAsB,EAAE,CAAC;AAC7B,MAAM,mBAAmB,GAAwB,CACtD,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EACzD,EAAE;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,OAAO,OAAO,CAAC;KAChB;IAED,MAAM,oBAAoB,GAAG,IAAA,yCAAyB,GAAE,CAAC;IAEzD,2EAA2E;IAC3E,yBAAyB;IACzB,uDAAuD;IACvD,uEAAuE;IACvE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAC1C,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,OAAO,CAC1E,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,IAAI,iBAAO,EAAE;QACb,IAAI,mBAAQ,EAAE;QACd,IAAI,kBAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACrC,IAAI,iBAAO,EAAE;QACb,IAAI,kBAAQ,EAAE;QACd,IAAI,cAAI,EAAE;QACV,IAAI,eAAK,EAAE;QACX,IAAI,gBAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACnC,IAAI,wBAAa,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;QAClD,GAAG,QAAQ;KACZ,CAAC;IAEF;;;OAGG;IACH,MAAM,0BAA0B,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAA,4BAAc,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,qBAAqB,GAAG,IAAA,wCAAwB,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpE;;;;WAIG;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;QAEnD;;;;;WAKG;QACH,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"multi-wallet.js","sourceRoot":"","sources":["../../../../packages/multi-wallet/src/multi-wallet.ts"],"names":[],"mappings":"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"}
|
package/src/utils/message.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export interface MessageParameters {
|
|
|
4
4
|
issuedAt?: string;
|
|
5
5
|
nonce: string;
|
|
6
6
|
publicKey: string;
|
|
7
|
+
requestId?: string;
|
|
7
8
|
statement?: string;
|
|
8
9
|
uri: string;
|
|
9
10
|
}
|
|
10
|
-
export declare const generateMessageToSign: ({ chain, domain, nonce, uri, publicKey, issuedAt, statement, }: MessageParameters) => string;
|
|
11
|
+
export declare const generateMessageToSign: ({ chain, domain, nonce, uri, publicKey, issuedAt, statement, requestId, }: MessageParameters) => string;
|
package/src/utils/message.js
CHANGED
|
@@ -18,7 +18,7 @@ const chainIds = {
|
|
|
18
18
|
ETH: '1',
|
|
19
19
|
SOL: undefined,
|
|
20
20
|
};
|
|
21
|
-
const generateMessageToSign = ({ chain, domain, nonce, uri, publicKey, issuedAt = new Date().toISOString(), statement, }) => {
|
|
21
|
+
const generateMessageToSign = ({ chain, domain, nonce, uri, publicKey, issuedAt = new Date().toISOString(), statement, requestId, }) => {
|
|
22
22
|
// This format follows the sign-in with ethereum (SIWE) standard,
|
|
23
23
|
// but we are using it also for non-ethereum wallets for now (eg. Solana)
|
|
24
24
|
// for more context on format and fields, please see:
|
|
@@ -35,8 +35,15 @@ const generateMessageToSign = ({ chain, domain, nonce, uri, publicKey, issuedAt
|
|
|
35
35
|
if (chainId) {
|
|
36
36
|
suffixFields.push(`Chain ID: ${chainId}`);
|
|
37
37
|
}
|
|
38
|
+
// Add 1 hour to the issuedAt date to make sure the message is valid
|
|
39
|
+
const expiryDate = new Date(issuedAt).setHours(new Date(issuedAt).getHours() + 1);
|
|
40
|
+
const expiryDateString = new Date(expiryDate).toISOString();
|
|
38
41
|
suffixFields.push(`Nonce: ${nonce}`);
|
|
39
42
|
suffixFields.push(`Issued At: ${issuedAt}`);
|
|
43
|
+
suffixFields.push(`Expiration Time: ${expiryDateString}`);
|
|
44
|
+
if (requestId) {
|
|
45
|
+
suffixFields.push(`Request ID: ${requestId}`);
|
|
46
|
+
}
|
|
40
47
|
const suffix = suffixFields.join('\n');
|
|
41
48
|
return [prefixWithStatement, suffix].join('\n');
|
|
42
49
|
};
|
package/src/utils/message.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../packages/multi-wallet/src/utils/message.ts"],"names":[],"mappings":";AAAA,iEAAiE;AACjE,oEAAoE;AACpE,QAAQ;AACR,mGAAmG;AACnG,+DAA+D;AAC/D,yDAAyD;;;AAEzD,6DAA6D;AAC7D,MAAM,YAAY,GAA8B;IAC9C,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,gEAAgE;AAChE,qEAAqE;AACrE,MAAM,QAAQ,GAA0C;IACtD,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,SAAS;CACf,CAAC;
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../packages/multi-wallet/src/utils/message.ts"],"names":[],"mappings":";AAAA,iEAAiE;AACjE,oEAAoE;AACpE,QAAQ;AACR,mGAAmG;AACnG,+DAA+D;AAC/D,yDAAyD;;;AAEzD,6DAA6D;AAC7D,MAAM,YAAY,GAA8B;IAC9C,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,gEAAgE;AAChE,qEAAqE;AACrE,MAAM,QAAQ,GAA0C;IACtD,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,SAAS;CACf,CAAC;AAaK,MAAM,qBAAqB,GAAG,CAAC,EACpC,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,EACH,SAAS,EACT,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACnC,SAAS,EACT,SAAS,GACS,EAAU,EAAE;IAC9B,iEAAiE;IACjE,yEAAyE;IACzE,qDAAqD;IACrD,oEAAoE;IACpE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,MAAM,mCAAmC,WAAW,WAAW,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAEpE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,YAAY,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACjC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEhC,mDAAmD;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;KAC3C;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAClC,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,YAAY,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC5C,YAAY,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;IAE1D,IAAI,SAAS,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;KAC/C;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AA/CW,QAAA,qBAAqB,yBA+ChC"}
|
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
import { Chain,
|
|
2
|
-
|
|
1
|
+
import { Chain, WalletConnector } from '../wallet-connector';
|
|
2
|
+
import { FlowProvider } from './flow-provider';
|
|
3
|
+
declare class Blocto extends FlowProvider implements WalletConnector {
|
|
3
4
|
name: string;
|
|
4
5
|
supportedChains: Chain[];
|
|
5
6
|
connectedChain: Chain;
|
|
6
7
|
canConnectViaQrCode: boolean;
|
|
7
8
|
canConnectViaCustodialService: boolean;
|
|
8
|
-
private appName;
|
|
9
|
-
private appLogoUrl;
|
|
10
|
-
constructor({ appName, appLogoUrl, }: {
|
|
11
|
-
appLogoUrl: string;
|
|
12
|
-
appName: string;
|
|
13
|
-
});
|
|
14
|
-
setupEventListeners(): void;
|
|
15
|
-
isInstalledOnBrowser(): boolean;
|
|
16
9
|
setupConfig(nonce?: string): Promise<void>;
|
|
17
|
-
fetchPublicAddress(_opts: FetchPublicAddressOpts, nonce?: string): Promise<string | undefined>;
|
|
18
|
-
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
19
|
-
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
20
|
-
getWeb3Provider(): undefined;
|
|
21
|
-
endSession(): Promise<void>;
|
|
22
10
|
}
|
|
23
11
|
export default Blocto;
|
|
@@ -8,102 +8,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
const fcl_1 = require("@onflow/fcl");
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const flow_provider_1 = require("./flow-provider");
|
|
14
|
+
class Blocto extends flow_provider_1.FlowProvider {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
20
17
|
this.name = 'Blocto';
|
|
21
18
|
this.supportedChains = ['FLOW'];
|
|
22
19
|
this.connectedChain = 'FLOW';
|
|
23
20
|
this.canConnectViaQrCode = false;
|
|
24
21
|
this.canConnectViaCustodialService = true;
|
|
25
|
-
this.appName = appName;
|
|
26
|
-
this.appLogoUrl = appLogoUrl;
|
|
27
|
-
}
|
|
28
|
-
setupEventListeners() {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
isInstalledOnBrowser() {
|
|
32
|
-
return false;
|
|
33
22
|
}
|
|
34
23
|
setupConfig(nonce) {
|
|
24
|
+
const _super = Object.create(null, {
|
|
25
|
+
setupConfig: { get: () => super.setupConfig }
|
|
26
|
+
});
|
|
35
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
-
|
|
37
|
-
if (nonce) {
|
|
38
|
-
resolver = () => Promise.resolve({
|
|
39
|
-
appIdentifier: this.appName,
|
|
40
|
-
nonce,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
resolver = undefined;
|
|
45
|
-
}
|
|
28
|
+
yield _super.setupConfig.call(this, nonce);
|
|
46
29
|
yield (0, fcl_1.config)()
|
|
47
30
|
.put('challenge.scope', 'email')
|
|
48
31
|
.put('discovery.wallet', 'https://flow-wallet.blocto.app/authn')
|
|
49
32
|
.put('service.OpenID.scopes', 'email!')
|
|
50
|
-
.put('discovery.wallet.method', undefined)
|
|
51
|
-
.put('app.detail.title', this.appName)
|
|
52
|
-
.put('app.detail.icon', this.appLogoUrl)
|
|
53
|
-
.put('fcl.accountProof.resolver', resolver);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
fetchPublicAddress(_opts, nonce) {
|
|
57
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
try {
|
|
59
|
-
yield this.setupConfig(nonce === null || nonce === void 0 ? void 0 : nonce.repeat(2));
|
|
60
|
-
const user = yield (0, fcl_1.currentUser)().authenticate();
|
|
61
|
-
return user.addr;
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console_1.default.error(error);
|
|
65
|
-
return undefined;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
signMessage(messageToSign) {
|
|
70
|
-
var _a;
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
try {
|
|
73
|
-
if (!(yield fcl_1.config.get('fcl.accountProof.resolver'))) {
|
|
74
|
-
(0, fcl_1.currentUser)().unauthenticate();
|
|
75
|
-
yield this.setupConfig((_a = (0, extractNonce_1.extractNonce)(messageToSign)) === null || _a === void 0 ? void 0 : _a.repeat(2));
|
|
76
|
-
}
|
|
77
|
-
const authenticateResponse = yield (0, fcl_1.currentUser)().authenticate();
|
|
78
|
-
const accountProof = authenticateResponse.services.find((service) => service.type === 'account-proof');
|
|
79
|
-
if (accountProof) {
|
|
80
|
-
const data = {
|
|
81
|
-
accountProof,
|
|
82
|
-
appName: this.appName,
|
|
83
|
-
};
|
|
84
|
-
return JSON.stringify(data);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
console_1.default.error(error);
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
proveOwnership(messageToSign) {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
return this.signMessage(messageToSign);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
getWeb3Provider() {
|
|
102
|
-
return undefined;
|
|
103
|
-
}
|
|
104
|
-
endSession() {
|
|
105
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
(0, fcl_1.currentUser)().unauthenticate();
|
|
33
|
+
.put('discovery.wallet.method', undefined);
|
|
107
34
|
});
|
|
108
35
|
}
|
|
109
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocto.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/flow/blocto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blocto.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/flow/blocto.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qCAAqC;AAIrC,mDAA+C;AAE/C,MAAM,MAAO,SAAQ,4BAAY;IAAjC;;QACE,SAAI,GAAG,QAAQ,CAAC;QAEhB,oBAAe,GAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,mBAAc,GAAU,MAAM,CAAC;QAE/B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,kCAA6B,GAAG,IAAI,CAAC;IAWvC,CAAC;IATgB,WAAW,CAAC,KAAc;;;;;YACvC,MAAM,OAAM,WAAW,YAAC,KAAK,CAAC,CAAC;YAE/B,MAAM,IAAA,YAAM,GAAE;iBACX,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;iBAC/B,GAAG,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;iBAC/D,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;iBACtC,GAAG,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;KAAA;CACF;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Chain, WalletConnector } from '../wallet-connector';
|
|
2
|
+
import { FlowProvider } from './flow-provider';
|
|
3
|
+
declare class Dapper extends FlowProvider implements WalletConnector {
|
|
4
|
+
name: string;
|
|
5
|
+
supportedChains: Chain[];
|
|
6
|
+
connectedChain: Chain;
|
|
7
|
+
canConnectViaQrCode: boolean;
|
|
8
|
+
canConnectViaCustodialService: boolean;
|
|
9
|
+
setupConfig(nonce?: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export default Dapper;
|
|
@@ -0,0 +1,38 @@
|
|
|
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 fcl_1 = require("@onflow/fcl");
|
|
13
|
+
const flow_provider_1 = require("./flow-provider");
|
|
14
|
+
class Dapper extends flow_provider_1.FlowProvider {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.name = 'Dapper';
|
|
18
|
+
this.supportedChains = ['FLOW'];
|
|
19
|
+
this.connectedChain = 'FLOW';
|
|
20
|
+
this.canConnectViaQrCode = false;
|
|
21
|
+
this.canConnectViaCustodialService = true;
|
|
22
|
+
}
|
|
23
|
+
setupConfig(nonce) {
|
|
24
|
+
const _super = Object.create(null, {
|
|
25
|
+
setupConfig: { get: () => super.setupConfig }
|
|
26
|
+
});
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
yield _super.setupConfig.call(this, nonce);
|
|
29
|
+
yield (0, fcl_1.config)()
|
|
30
|
+
.put('challenge.scope', undefined)
|
|
31
|
+
.put('discovery.wallet', 'https://graphql-api.meetdapper.com/fcl/authn')
|
|
32
|
+
.put('service.OpenID.scopes', undefined)
|
|
33
|
+
.put('discovery.wallet.method', 'HTTP/POST');
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.default = Dapper;
|
|
38
|
+
//# sourceMappingURL=dapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dapper.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/flow/dapper.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qCAAqC;AAIrC,mDAA+C;AAE/C,MAAM,MAAO,SAAQ,4BAAY;IAAjC;;QACE,SAAI,GAAG,QAAQ,CAAC;QAEhB,oBAAe,GAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,mBAAc,GAAU,MAAM,CAAC;QAE/B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,kCAA6B,GAAG,IAAI,CAAC;IAWvC,CAAC;IATgB,WAAW,CAAC,KAAc;;;;;YACvC,MAAM,OAAM,WAAW,YAAC,KAAK,CAAC,CAAC;YAE/B,MAAM,IAAA,YAAM,GAAE;iBACX,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC;iBACjC,GAAG,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;iBACvE,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC;iBACvC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;KAAA;CACF;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FetchPublicAddressOpts } from '../wallet-connector';
|
|
2
|
+
export declare class FlowProvider {
|
|
3
|
+
protected appName: string;
|
|
4
|
+
protected appLogoUrl: string;
|
|
5
|
+
constructor({ appName, appLogoUrl, }: {
|
|
6
|
+
appLogoUrl: string;
|
|
7
|
+
appName: string;
|
|
8
|
+
});
|
|
9
|
+
isInstalledOnBrowser(): boolean;
|
|
10
|
+
setupEventListeners(): void;
|
|
11
|
+
setupConfig(nonce?: string): Promise<void>;
|
|
12
|
+
fetchPublicAddress(_opts: FetchPublicAddressOpts, nonce?: string): Promise<string | undefined>;
|
|
13
|
+
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
14
|
+
signMessage(): Promise<string | undefined>;
|
|
15
|
+
getWeb3Provider(): undefined;
|
|
16
|
+
endSession(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
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.FlowProvider = void 0;
|
|
16
|
+
const fcl_1 = require("@onflow/fcl");
|
|
17
|
+
const console_1 = __importDefault(require("../../utils/console"));
|
|
18
|
+
const extractNonce_1 = require("../../utils/extractNonce");
|
|
19
|
+
class FlowProvider {
|
|
20
|
+
constructor({ appName, appLogoUrl, }) {
|
|
21
|
+
this.appName = appName;
|
|
22
|
+
this.appLogoUrl = appLogoUrl;
|
|
23
|
+
}
|
|
24
|
+
isInstalledOnBrowser() {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
setupEventListeners() {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
setupConfig(nonce) {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
let resolver;
|
|
33
|
+
if (nonce) {
|
|
34
|
+
resolver = () => Promise.resolve({
|
|
35
|
+
appIdentifier: this.appName,
|
|
36
|
+
nonce,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
resolver = undefined;
|
|
41
|
+
}
|
|
42
|
+
yield (0, fcl_1.config)()
|
|
43
|
+
.put('app.detail.title', this.appName)
|
|
44
|
+
.put('app.detail.icon', this.appLogoUrl)
|
|
45
|
+
.put('fcl.accountProof.resolver', resolver);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
fetchPublicAddress(_opts, nonce) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
try {
|
|
51
|
+
yield this.setupConfig(nonce === null || nonce === void 0 ? void 0 : nonce.repeat(2));
|
|
52
|
+
const user = yield (0, fcl_1.currentUser)().authenticate();
|
|
53
|
+
return user.addr;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console_1.default.error(error);
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
proveOwnership(messageToSign) {
|
|
62
|
+
var _a;
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
try {
|
|
65
|
+
if (!(yield fcl_1.config.get('fcl.accountProof.resolver'))) {
|
|
66
|
+
(0, fcl_1.currentUser)().unauthenticate();
|
|
67
|
+
yield this.setupConfig((_a = (0, extractNonce_1.extractNonce)(messageToSign)) === null || _a === void 0 ? void 0 : _a.repeat(2));
|
|
68
|
+
}
|
|
69
|
+
const authenticateResponse = yield (0, fcl_1.currentUser)().authenticate();
|
|
70
|
+
const accountProof = authenticateResponse.services.find((service) => service.type === 'account-proof');
|
|
71
|
+
if (accountProof) {
|
|
72
|
+
const data = {
|
|
73
|
+
accountProof,
|
|
74
|
+
appName: this.appName,
|
|
75
|
+
};
|
|
76
|
+
return JSON.stringify(data);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console_1.default.error(error);
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
signMessage() {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
throw new Error('Not supported');
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
getWeb3Provider() {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
endSession() {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
(0, fcl_1.currentUser)().unauthenticate();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.FlowProvider = FlowProvider;
|
|
103
|
+
//# sourceMappingURL=flow-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-provider.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/flow/flow-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qCAAkD;AAElD,kEAA0C;AAC1C,2DAAwD;AASxD,MAAa,YAAY;IAIvB,YAAY,EACV,OAAO,EACP,UAAU,GAIX;QACC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,oBAAoB;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;QACjB,OAAO;IACT,CAAC;IAEK,WAAW,CAAC,KAAc;;YAC9B,IAAI,QAA8C,CAAC;YAEnD,IAAI,KAAK,EAAE;gBACT,QAAQ,GAAG,GAAG,EAAE,CACd,OAAO,CAAC,OAAO,CAAC;oBACd,aAAa,EAAE,IAAI,CAAC,OAAO;oBAC3B,KAAK;iBACN,CAAC,CAAC;aACN;iBAAM;gBACL,QAAQ,GAAG,SAAS,CAAC;aACtB;YAED,MAAM,IAAA,YAAM,GAAE;iBACX,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC;iBACrC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC;iBACvC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;KAAA;IAEK,kBAAkB,CACtB,KAA6B,EAC7B,KAAc;;YAEd,IAAI;gBACF,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAsB,MAAM,IAAA,iBAAW,GAAE,CAAC,YAAY,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC,IAAI,CAAC;aAClB;YAAC,OAAO,KAAK,EAAE;gBACd,iBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,SAAS,CAAC;aAClB;QACH,CAAC;KAAA;IAEK,cAAc,CAAC,aAAqB;;;YACxC,IAAI;gBACF,IAAI,CAAC,CAAC,MAAM,YAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,EAAE;oBACpD,IAAA,iBAAW,GAAE,CAAC,cAAc,EAAE,CAAC;oBAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAA,IAAA,2BAAY,EAAC,aAAa,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;gBAED,MAAM,oBAAoB,GAEtB,MAAM,IAAA,iBAAW,GAAE,CAAC,YAAY,EAAE,CAAC;gBAEvC,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CACrD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe,CAC9C,CAAC;gBAEF,IAAI,YAAY,EAAE;oBAChB,MAAM,IAAI,GAAG;wBACX,YAAY;wBACZ,OAAO,EAAE,IAAI,CAAC,OAAO;qBACtB,CAAC;oBACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC7B;qBAAM;oBACL,OAAO,SAAS,CAAC;iBAClB;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,iBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,SAAS,CAAC;aAClB;;KACF;IAEK,WAAW;;YACf,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;KAAA;IAED,eAAe;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAEK,UAAU;;YACd,IAAA,iBAAW,GAAE,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;KAAA;CACF;AAjGD,oCAiGC"}
|