@prosopo/account 1.0.2 → 2.0.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/dist/cjs/common/dist/error.cjs +20 -16
- package/dist/cjs/common/dist/hash.cjs +1 -1
- package/dist/cjs/common/dist/i18n.cjs +3 -3
- package/dist/cjs/common/dist/locales/en.json.cjs +2 -1
- package/dist/cjs/common/dist/logger.cjs +23 -11
- package/dist/cjs/common/dist/node/UrlConverter.cjs +15 -7
- package/dist/cjs/common/dist/utils.cjs +4 -2
- package/dist/cjs/detector/src/index.cjs +4586 -0
- package/dist/cjs/extension/ExtensionWeb2.cjs +30 -30
- package/dist/cjs/extension/ExtensionWeb3.cjs +5 -3
- package/dist/cjs/util/dist/at.cjs +3 -0
- package/dist/cjs/util/dist/canvas.cjs +15 -9
- package/dist/cjs/util/dist/hex.cjs +37 -2
- package/dist/cjs/util/dist/index.cjs +1 -0
- package/dist/cjs/util/dist/ofLen.cjs +1 -1
- package/dist/cjs/util/dist/table.cjs +2 -2
- package/dist/cjs/util/dist/util.cjs +1 -1
- package/dist/extension/Extension.d.ts +1 -1
- package/dist/extension/Extension.d.ts.map +1 -1
- package/dist/extension/Extension.js.map +1 -1
- package/dist/extension/ExtensionWeb2.d.ts +4 -5
- package/dist/extension/ExtensionWeb2.d.ts.map +1 -1
- package/dist/extension/ExtensionWeb2.js +27 -36
- package/dist/extension/ExtensionWeb2.js.map +1 -1
- package/dist/extension/ExtensionWeb3.d.ts +2 -2
- package/dist/extension/ExtensionWeb3.d.ts.map +1 -1
- package/dist/extension/ExtensionWeb3.js +8 -6
- package/dist/extension/ExtensionWeb3.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +53 -58
- package/vite.cjs.config.ts +3 -3
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const Api = require("@polkadot/api/promise/Api");
|
|
4
|
-
const Extension = require("./Extension.cjs");
|
|
5
|
-
const keyring = require("@polkadot/keyring");
|
|
6
|
-
require("../common/dist/index.cjs");
|
|
7
3
|
const Signer = require("@polkadot/extension-base/page/Signer");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
4
|
+
const keyring = require("@polkadot/keyring");
|
|
5
|
+
const utilCrypto = require("@polkadot/util-crypto");
|
|
10
6
|
const bip39 = require("@polkadot/util-crypto/mnemonic/bip39");
|
|
11
|
-
const fingerprintjs = require("@fingerprintjs/fingerprintjs");
|
|
12
|
-
require("../util/dist/index.cjs");
|
|
13
7
|
const string = require("@polkadot/util/string");
|
|
14
8
|
const u8a = require("@polkadot/util/u8a");
|
|
9
|
+
require("../common/dist/index.cjs");
|
|
10
|
+
const index = require("../detector/src/index.cjs");
|
|
11
|
+
require("../util/dist/index.cjs");
|
|
12
|
+
const Extension = require("./Extension.cjs");
|
|
15
13
|
const error = require("../common/dist/error.cjs");
|
|
16
14
|
const version = require("../util/dist/version.cjs");
|
|
17
15
|
const canvas = require("../util/dist/canvas.cjs");
|
|
@@ -23,16 +21,16 @@ class ExtensionWeb2 extends Extension.Extension {
|
|
|
23
21
|
const network = config.networks[config.defaultNetwork];
|
|
24
22
|
if (!network) {
|
|
25
23
|
throw new error.ProsopoEnvError("DEVELOPER.NETWORK_NOT_FOUND", {
|
|
26
|
-
context: {
|
|
24
|
+
context: {
|
|
25
|
+
error: `No network found for environment ${config.defaultEnvironment}`
|
|
26
|
+
}
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
return network;
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
async getAccount(config) {
|
|
33
|
-
const
|
|
34
|
-
const wsProvider = new ws.WsProvider(network.endpoint);
|
|
35
|
-
const account = await this.createAccount(wsProvider);
|
|
33
|
+
const account = await this.createAccount(config);
|
|
36
34
|
const extension = await this.createExtension(account);
|
|
37
35
|
return {
|
|
38
36
|
account,
|
|
@@ -67,7 +65,8 @@ class ExtensionWeb2 extends Extension.Extension {
|
|
|
67
65
|
signer
|
|
68
66
|
};
|
|
69
67
|
}
|
|
70
|
-
async createAccount(
|
|
68
|
+
async createAccount(config) {
|
|
69
|
+
await utilCrypto.cryptoWaitReady();
|
|
71
70
|
const params = {
|
|
72
71
|
area: { width: 300, height: 300 },
|
|
73
72
|
offsetParameter: 2001000001,
|
|
@@ -77,29 +76,30 @@ class ExtensionWeb2 extends Extension.Extension {
|
|
|
77
76
|
numberOfRounds: 5,
|
|
78
77
|
seed: 42
|
|
79
78
|
};
|
|
80
|
-
const browserEntropy = await
|
|
81
|
-
const canvasEntropy = canvas.picassoCanvas(
|
|
82
|
-
|
|
79
|
+
const browserEntropy = await index.getFingerprint();
|
|
80
|
+
const canvasEntropy = canvas.picassoCanvas(
|
|
81
|
+
params.numberOfRounds,
|
|
82
|
+
params.seed,
|
|
83
|
+
params
|
|
84
|
+
);
|
|
85
|
+
const entropy = hash.hexHash(
|
|
86
|
+
[canvasEntropy, browserEntropy].join(""),
|
|
87
|
+
128
|
|
88
|
+
).slice(2);
|
|
83
89
|
const u8Entropy = string.stringToU8a(entropy);
|
|
84
90
|
const mnemonic = bip39.entropyToMnemonic(u8Entropy);
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
|
|
91
|
+
const type = "sr25519";
|
|
92
|
+
const keyring$1 = new keyring.Keyring({
|
|
93
|
+
type,
|
|
94
|
+
ss58Format: config.networks[config.defaultNetwork].ss58Format
|
|
95
|
+
});
|
|
88
96
|
const keypair = keyring$1.addFromMnemonic(mnemonic);
|
|
89
|
-
const address
|
|
97
|
+
const address = keypair.address;
|
|
90
98
|
return {
|
|
91
|
-
address
|
|
92
|
-
|
|
93
|
-
name: address$1,
|
|
99
|
+
address,
|
|
100
|
+
name: address,
|
|
94
101
|
keypair
|
|
95
102
|
};
|
|
96
103
|
}
|
|
97
|
-
async getFingerprint() {
|
|
98
|
-
const fpPromise = fingerprintjs.load();
|
|
99
|
-
const fp = await fpPromise;
|
|
100
|
-
const result = await fp.get();
|
|
101
|
-
const { screenFrame, ...componentsReduced } = result.components;
|
|
102
|
-
return fingerprintjs.hashComponents(componentsReduced);
|
|
103
|
-
}
|
|
104
104
|
}
|
|
105
105
|
exports.ExtensionWeb2 = ExtensionWeb2;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const Extension = require("./Extension.cjs");
|
|
4
|
-
require("../common/dist/index.cjs");
|
|
5
3
|
const extensionDapp = require("@polkadot/extension-dapp");
|
|
4
|
+
require("../common/dist/index.cjs");
|
|
5
|
+
const Extension = require("./Extension.cjs");
|
|
6
6
|
const error = require("../common/dist/error.cjs");
|
|
7
7
|
class ExtensionWeb3 extends Extension.Extension {
|
|
8
8
|
async getAccount(config) {
|
|
9
9
|
const { dappName, userAccountAddress: address } = config;
|
|
10
10
|
if (!address) {
|
|
11
|
-
throw new error.ProsopoError("WIDGET.NO_ACCOUNTS_FOUND", {
|
|
11
|
+
throw new error.ProsopoError("WIDGET.NO_ACCOUNTS_FOUND", {
|
|
12
|
+
context: { error: "No account address provided" }
|
|
13
|
+
});
|
|
12
14
|
}
|
|
13
15
|
const extensions = await extensionDapp.web3Enable(dappName);
|
|
14
16
|
if (extensions.length === 0) {
|
|
@@ -4,6 +4,9 @@ function at(items, index, options) {
|
|
|
4
4
|
if (items.length === 0) {
|
|
5
5
|
throw new Error("Array is empty");
|
|
6
6
|
}
|
|
7
|
+
if (!Number.isFinite(index)) {
|
|
8
|
+
throw new Error(`Index ${index} is not a finite number`);
|
|
9
|
+
}
|
|
7
10
|
if (!options?.noWrap) {
|
|
8
11
|
if (index > 0) {
|
|
9
12
|
index = index % items.length;
|
|
@@ -49,22 +49,28 @@ function x64Rotl(m, n) {
|
|
|
49
49
|
n %= 64;
|
|
50
50
|
if (n === 32) {
|
|
51
51
|
return [at.at(m, 1), at.at(m, 0)];
|
|
52
|
-
} else if (n < 32) {
|
|
53
|
-
return [at.at(m, 0) << n | at.at(m, 1) >>> 32 - n, at.at(m, 1) << n | at.at(m, 0) >>> 32 - n];
|
|
54
|
-
} else {
|
|
55
|
-
n -= 32;
|
|
56
|
-
return [at.at(m, 1) << n | at.at(m, 0) >>> 32 - n, at.at(m, 0) << n | at.at(m, 1) >>> 32 - n];
|
|
57
52
|
}
|
|
53
|
+
if (n < 32) {
|
|
54
|
+
return [
|
|
55
|
+
at.at(m, 0) << n | at.at(m, 1) >>> 32 - n,
|
|
56
|
+
at.at(m, 1) << n | at.at(m, 0) >>> 32 - n
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
n -= 32;
|
|
60
|
+
return [
|
|
61
|
+
at.at(m, 1) << n | at.at(m, 0) >>> 32 - n,
|
|
62
|
+
at.at(m, 0) << n | at.at(m, 1) >>> 32 - n
|
|
63
|
+
];
|
|
58
64
|
}
|
|
59
65
|
function x64LeftShift(m, n) {
|
|
60
66
|
n %= 64;
|
|
61
67
|
if (n === 0) {
|
|
62
68
|
return m;
|
|
63
|
-
}
|
|
69
|
+
}
|
|
70
|
+
if (n < 32) {
|
|
64
71
|
return [at.at(m, 0) << n | at.at(m, 1) >>> 32 - n, at.at(m, 1) << n];
|
|
65
|
-
} else {
|
|
66
|
-
return [at.at(m, 1) << n - 32, 0];
|
|
67
72
|
}
|
|
73
|
+
return [at.at(m, 1) << n - 32, 0];
|
|
68
74
|
}
|
|
69
75
|
function x64Xor(m, n) {
|
|
70
76
|
return [at.at(m, 0) ^ at.at(n, 0), at.at(m, 1) ^ at.at(n, 1)];
|
|
@@ -177,7 +183,7 @@ function x64hash128(key, seed) {
|
|
|
177
183
|
h2 = x64Fmix(h2);
|
|
178
184
|
h1 = x64Add(h1, h2);
|
|
179
185
|
h2 = x64Add(h2, h1);
|
|
180
|
-
return
|
|
186
|
+
return `00000000${(at.at(h1, 0) >>> 0).toString(16)}`.slice(-8) + `00000000${(at.at(h1, 1) >>> 0).toString(16)}`.slice(-8) + `00000000${(at.at(h2, 0) >>> 0).toString(16)}`.slice(-8) + `00000000${(at.at(h2, 1) >>> 0).toString(16)}`.slice(-8);
|
|
181
187
|
}
|
|
182
188
|
function picassoCanvas(roundNumber, seed, params) {
|
|
183
189
|
const { area, offsetParameter, multiplier, fontSizeFactor, maxShadowBlur } = params;
|
|
@@ -1,11 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const checks = require("./checks.cjs");
|
|
4
|
-
const
|
|
4
|
+
const U8 = new Array(256);
|
|
5
|
+
const U16 = new Array(256 * 256);
|
|
6
|
+
for (let n = 0; n < 256; n++) {
|
|
7
|
+
U8[n] = n.toString(16).padStart(2, "0");
|
|
8
|
+
}
|
|
9
|
+
for (let i = 0; i < 256; i++) {
|
|
10
|
+
const s = i << 8;
|
|
11
|
+
for (let j = 0; j < 256; j++) {
|
|
12
|
+
U16[s | j] = U8[i] + U8[j];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function hex(value, result) {
|
|
16
|
+
const mod = value.length % 2 | 0;
|
|
17
|
+
const length = value.length - mod | 0;
|
|
18
|
+
for (let i = 0; i < length; i += 2) {
|
|
19
|
+
result += U16[value[i] << 8 | value[i + 1]];
|
|
20
|
+
}
|
|
21
|
+
if (mod) {
|
|
22
|
+
result += U8[value[length] | 0];
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
function u8aToHex(value, bitLength = -1, isPrefixed = true) {
|
|
27
|
+
const empty = isPrefixed ? "0x" : "";
|
|
28
|
+
if (!value?.length) {
|
|
29
|
+
return empty;
|
|
30
|
+
}
|
|
31
|
+
if (bitLength > 0) {
|
|
32
|
+
const length = Math.ceil(bitLength / 8);
|
|
33
|
+
if (value.length > length) {
|
|
34
|
+
return `${hex(value.subarray(0, length / 2), empty)}…${hex(value.subarray(value.length - length / 2), "")}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return hex(value, empty);
|
|
38
|
+
}
|
|
5
39
|
const hashToHex = (hash) => {
|
|
6
40
|
if (checks.isArray(hash)) {
|
|
7
|
-
return
|
|
41
|
+
return u8aToHex(new Uint8Array(hash));
|
|
8
42
|
}
|
|
9
43
|
return hash.toString();
|
|
10
44
|
};
|
|
11
45
|
exports.hashToHex = hashToHex;
|
|
46
|
+
exports.u8aToHex = u8aToHex;
|
|
@@ -37,5 +37,6 @@ exports.choice = choice.choice;
|
|
|
37
37
|
exports.permutations = permutations.permutations;
|
|
38
38
|
exports.version = version.version;
|
|
39
39
|
exports.hashToHex = hex.hashToHex;
|
|
40
|
+
exports.u8aToHex = hex.u8aToHex;
|
|
40
41
|
exports.isArray = checks.isArray;
|
|
41
42
|
exports.isObject = checks.isObject;
|
|
@@ -9,10 +9,10 @@ function wrapItemToMultipleRows(item, maxCellWidth) {
|
|
|
9
9
|
}
|
|
10
10
|
const itemRow = {};
|
|
11
11
|
const remaining = {};
|
|
12
|
-
|
|
12
|
+
for (const [key, value] of Object.entries(item)) {
|
|
13
13
|
itemRow[key] = value?.slice ? value.slice(0, maxCellWidth) : value;
|
|
14
14
|
remaining[key] = value?.slice ? value.slice(maxCellWidth) : value;
|
|
15
|
-
}
|
|
15
|
+
}
|
|
16
16
|
return [itemRow, ...wrapItemToMultipleRows(remaining, maxCellWidth)];
|
|
17
17
|
}
|
|
18
18
|
function consoleTableWithWrapping(data, maxColWidth = 90) {
|
|
@@ -8,7 +8,7 @@ const flatten = (obj, prefix = "") => {
|
|
|
8
8
|
const flattenedObj = {};
|
|
9
9
|
for (const [key, value] of Object.entries(obj)) {
|
|
10
10
|
if (value instanceof Object) {
|
|
11
|
-
Object.assign(flattenedObj, flatten(value, prefix + key
|
|
11
|
+
Object.assign(flattenedObj, flatten(value, `${prefix + key}.`));
|
|
12
12
|
} else {
|
|
13
13
|
flattenedObj[prefix + key] = value;
|
|
14
14
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Account, ProcaptchaClientConfigOutput } from
|
|
1
|
+
import type { Account, ProcaptchaClientConfigOutput } from "@prosopo/types";
|
|
2
2
|
export declare abstract class Extension {
|
|
3
3
|
abstract getAccount(config: ProcaptchaClientConfigOutput): Promise<Account>;
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Extension.d.ts","sourceRoot":"","sources":["../../src/extension/Extension.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"Extension.d.ts","sourceRoot":"","sources":["../../src/extension/Extension.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAK5E,8BAAsB,SAAS;aAOd,UAAU,CACzB,MAAM,EAAE,4BAA4B,GAClC,OAAO,CAAC,OAAO,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Extension.js","sourceRoot":"","sources":["../../src/extension/Extension.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAgB,SAAS;
|
|
1
|
+
{"version":3,"file":"Extension.js","sourceRoot":"","sources":["../../src/extension/Extension.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAgB,SAAS;CAU9B"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { Account, ProcaptchaClientConfigOutput } from
|
|
2
|
-
import { Extension } from
|
|
1
|
+
import type { Account, ProcaptchaClientConfigOutput } from "@prosopo/types";
|
|
2
|
+
import { Extension } from "./Extension.js";
|
|
3
3
|
export declare class ExtensionWeb2 extends Extension {
|
|
4
4
|
getAccount(config: ProcaptchaClientConfigOutput): Promise<Account>;
|
|
5
5
|
private createExtension;
|
|
6
6
|
private createAccount;
|
|
7
|
-
private getFingerprint;
|
|
8
7
|
getNetwork: (config: ProcaptchaClientConfigOutput) => {
|
|
9
|
-
endpoint: string[];
|
|
10
8
|
contract: {
|
|
11
|
-
address: string;
|
|
12
9
|
name: string;
|
|
10
|
+
address: string;
|
|
13
11
|
};
|
|
12
|
+
endpoint: string[];
|
|
14
13
|
pairType: "ed25519" | "sr25519" | "ecdsa" | "ethereum";
|
|
15
14
|
ss58Format: number;
|
|
16
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionWeb2.d.ts","sourceRoot":"","sources":["../../src/extension/ExtensionWeb2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExtensionWeb2.d.ts","sourceRoot":"","sources":["../../src/extension/ExtensionWeb2.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO3C,qBAAa,aAAc,SAAQ,SAAS;IAC9B,UAAU,CACtB,MAAM,EAAE,4BAA4B,GAClC,OAAO,CAAC,OAAO,CAAC;YAUL,eAAe;YAmCf,aAAa;IAwC3B,UAAU,WAAY,4BAA4B;;;;;;;;MAUhD;CACF"}
|
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { u8aToHex } from '@polkadot/util/u8a';
|
|
13
|
-
import { version } from '@prosopo/util';
|
|
1
|
+
import { default as Signer } from "@polkadot/extension-base/page/Signer";
|
|
2
|
+
import { Keyring } from "@polkadot/keyring";
|
|
3
|
+
import { cryptoWaitReady } from "@polkadot/util-crypto";
|
|
4
|
+
import { entropyToMnemonic } from "@polkadot/util-crypto/mnemonic/bip39";
|
|
5
|
+
import { stringToU8a } from "@polkadot/util/string";
|
|
6
|
+
import { u8aToHex } from "@polkadot/util/u8a";
|
|
7
|
+
import { ProsopoEnvError, hexHash } from "@prosopo/common";
|
|
8
|
+
import { getFingerprint } from "@prosopo/detector";
|
|
9
|
+
import { picassoCanvas } from "@prosopo/util";
|
|
10
|
+
import { version } from "@prosopo/util";
|
|
11
|
+
import { Extension } from "./Extension.js";
|
|
14
12
|
export class ExtensionWeb2 extends Extension {
|
|
15
13
|
constructor() {
|
|
16
14
|
super(...arguments);
|
|
17
15
|
this.getNetwork = (config) => {
|
|
18
16
|
const network = config.networks[config.defaultNetwork];
|
|
19
17
|
if (!network) {
|
|
20
|
-
throw new ProsopoEnvError(
|
|
21
|
-
context: {
|
|
18
|
+
throw new ProsopoEnvError("DEVELOPER.NETWORK_NOT_FOUND", {
|
|
19
|
+
context: {
|
|
20
|
+
error: `No network found for environment ${config.defaultEnvironment}`,
|
|
21
|
+
},
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
return network;
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
async getAccount(config) {
|
|
28
|
-
const
|
|
29
|
-
const wsProvider = new WsProvider(network.endpoint);
|
|
30
|
-
const account = await this.createAccount(wsProvider);
|
|
28
|
+
const account = await this.createAccount(config);
|
|
31
29
|
const extension = await this.createExtension(account);
|
|
32
30
|
return {
|
|
33
31
|
account,
|
|
@@ -56,12 +54,13 @@ export class ExtensionWeb2 extends Extension {
|
|
|
56
54
|
};
|
|
57
55
|
},
|
|
58
56
|
},
|
|
59
|
-
name:
|
|
57
|
+
name: "procaptcha-web2",
|
|
60
58
|
version,
|
|
61
59
|
signer,
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
|
-
async createAccount(
|
|
62
|
+
async createAccount(config) {
|
|
63
|
+
await cryptoWaitReady();
|
|
65
64
|
const params = {
|
|
66
65
|
area: { width: 300, height: 300 },
|
|
67
66
|
offsetParameter: 2001000001,
|
|
@@ -71,31 +70,23 @@ export class ExtensionWeb2 extends Extension {
|
|
|
71
70
|
numberOfRounds: 5,
|
|
72
71
|
seed: 42,
|
|
73
72
|
};
|
|
74
|
-
const browserEntropy = await
|
|
73
|
+
const browserEntropy = await getFingerprint();
|
|
75
74
|
const canvasEntropy = picassoCanvas(params.numberOfRounds, params.seed, params);
|
|
76
|
-
const entropy = hexHash([canvasEntropy, browserEntropy].join(
|
|
75
|
+
const entropy = hexHash([canvasEntropy, browserEntropy].join(""), 128).slice(2);
|
|
77
76
|
const u8Entropy = stringToU8a(entropy);
|
|
78
77
|
const mnemonic = entropyToMnemonic(u8Entropy);
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
78
|
+
const type = "sr25519";
|
|
79
|
+
const keyring = new Keyring({
|
|
80
|
+
type,
|
|
81
|
+
ss58Format: config.networks[config.defaultNetwork].ss58Format,
|
|
82
|
+
});
|
|
82
83
|
const keypair = keyring.addFromMnemonic(mnemonic);
|
|
83
|
-
const address = keypair.address
|
|
84
|
-
? keypair.address
|
|
85
|
-
: encodeAddress(decodeAddress(keypair.address), api.registry.chainSS58);
|
|
84
|
+
const address = keypair.address;
|
|
86
85
|
return {
|
|
87
86
|
address,
|
|
88
|
-
type,
|
|
89
87
|
name: address,
|
|
90
88
|
keypair,
|
|
91
89
|
};
|
|
92
90
|
}
|
|
93
|
-
async getFingerprint() {
|
|
94
|
-
const fpPromise = load();
|
|
95
|
-
const fp = await fpPromise;
|
|
96
|
-
const result = await fp.get();
|
|
97
|
-
const { screenFrame, ...componentsReduced } = result.components;
|
|
98
|
-
return hashComponents(componentsReduced);
|
|
99
|
-
}
|
|
100
91
|
}
|
|
101
92
|
//# sourceMappingURL=ExtensionWeb2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionWeb2.js","sourceRoot":"","sources":["../../src/extension/ExtensionWeb2.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ExtensionWeb2.js","sourceRoot":"","sources":["../../src/extension/ExtensionWeb2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Account, ProcaptchaClientConfigOutput } from
|
|
2
|
-
import { Extension } from
|
|
1
|
+
import type { Account, ProcaptchaClientConfigOutput } from "@prosopo/types";
|
|
2
|
+
import { Extension } from "./Extension.js";
|
|
3
3
|
export declare class ExtensionWeb3 extends Extension {
|
|
4
4
|
getAccount(config: ProcaptchaClientConfigOutput): Promise<Account>;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionWeb3.d.ts","sourceRoot":"","sources":["../../src/extension/ExtensionWeb3.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExtensionWeb3.d.ts","sourceRoot":"","sources":["../../src/extension/ExtensionWeb3.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,qBAAa,aAAc,SAAQ,SAAS;IAC9B,UAAU,CACtB,MAAM,EAAE,4BAA4B,GAClC,OAAO,CAAC,OAAO,CAAC;CA4BnB"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ProsopoError } from
|
|
3
|
-
import {
|
|
1
|
+
import { web3Enable } from "@polkadot/extension-dapp";
|
|
2
|
+
import { ProsopoError } from "@prosopo/common";
|
|
3
|
+
import { Extension } from "./Extension.js";
|
|
4
4
|
export class ExtensionWeb3 extends Extension {
|
|
5
5
|
async getAccount(config) {
|
|
6
6
|
const { dappName, userAccountAddress: address } = config;
|
|
7
7
|
if (!address) {
|
|
8
|
-
throw new ProsopoError(
|
|
8
|
+
throw new ProsopoError("WIDGET.NO_ACCOUNTS_FOUND", {
|
|
9
|
+
context: { error: "No account address provided" },
|
|
10
|
+
});
|
|
9
11
|
}
|
|
10
12
|
const extensions = await web3Enable(dappName);
|
|
11
13
|
if (extensions.length === 0) {
|
|
12
|
-
throw new ProsopoError(
|
|
14
|
+
throw new ProsopoError("WIDGET.NO_EXTENSION_FOUND");
|
|
13
15
|
}
|
|
14
16
|
for (const extension of extensions) {
|
|
15
17
|
const accounts = await extension.accounts.get();
|
|
@@ -18,7 +20,7 @@ export class ExtensionWeb3 extends Extension {
|
|
|
18
20
|
return { account, extension };
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
throw new ProsopoError(
|
|
23
|
+
throw new ProsopoError("WIDGET.ACCOUNT_NOT_FOUND", {
|
|
22
24
|
context: { error: `No account found matching ${address}` },
|
|
23
25
|
});
|
|
24
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionWeb3.js","sourceRoot":"","sources":["../../src/extension/ExtensionWeb3.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExtensionWeb3.js","sourceRoot":"","sources":["../../src/extension/ExtensionWeb3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,MAAM,OAAO,aAAc,SAAQ,SAAS;IACpC,KAAK,CAAC,UAAU,CACtB,MAAoC;QAEpC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE;YACb,MAAM,IAAI,YAAY,CAAC,0BAA0B,EAAE;gBAClD,OAAO,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE;aACjD,CAAC,CAAC;SACH;QAGD,MAAM,UAAU,GAAwB,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;SACpD;QAGD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;YACxE,IAAI,OAAO,EAAE;gBACZ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aAC9B;SACD;QAED,MAAM,IAAI,YAAY,CAAC,0BAA0B,EAAE;YAClD,OAAO,EAAE,EAAE,KAAK,EAAE,6BAA6B,OAAO,EAAE,EAAE;SAC1D,CAAC,CAAC;IACJ,CAAC;CACD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
1
|
+
export * from "./extension/Extension.js";
|
|
2
|
+
export * from "./extension/ExtensionWeb2.js";
|
|
3
|
+
export * from "./extension/ExtensionWeb3.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
1
|
+
export * from "./extension/Extension.js";
|
|
2
|
+
export * from "./extension/ExtensionWeb2.js";
|
|
3
|
+
export * from "./extension/ExtensionWeb3.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
|