@prosopo/procaptcha 0.3.1 → 0.3.3
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/account/dist/extension/Extension.cjs +5 -0
- package/dist/cjs/{api → account/dist/extension}/ExtensionWeb2.cjs +4 -4
- package/dist/cjs/{api → account/dist/extension}/ExtensionWeb3.cjs +10 -7
- package/dist/cjs/account/dist/index.cjs +8 -0
- package/dist/cjs/index.cjs +0 -6
- package/dist/cjs/modules/Manager.cjs +51 -88
- package/dist/cjs/modules/ProsopoCaptchaApi.cjs +4 -3
- package/dist/cjs/modules/collector.cjs +2 -6
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/Manager.d.ts +2 -3
- package/dist/modules/Manager.d.ts.map +1 -1
- package/dist/modules/Manager.js +37 -77
- package/dist/modules/Manager.js.map +1 -1
- package/dist/modules/ProsopoCaptchaApi.d.ts +7 -6
- package/dist/modules/ProsopoCaptchaApi.d.ts.map +1 -1
- package/dist/modules/ProsopoCaptchaApi.js +4 -3
- package/dist/modules/ProsopoCaptchaApi.js.map +1 -1
- package/dist/modules/collector.d.ts.map +1 -1
- package/dist/modules/collector.js +2 -6
- package/dist/modules/collector.js.map +1 -1
- package/package.json +8 -7
- package/typedoc.config.js +13 -0
- package/vite.cjs.config.ts +13 -0
- package/dist/api/Extension.d.ts +0 -5
- package/dist/api/Extension.d.ts.map +0 -1
- package/dist/api/Extension.js +0 -3
- package/dist/api/Extension.js.map +0 -1
- package/dist/api/ExtensionWeb2.d.ts +0 -18
- package/dist/api/ExtensionWeb2.d.ts.map +0 -1
- package/dist/api/ExtensionWeb2.js +0 -100
- package/dist/api/ExtensionWeb2.js.map +0 -1
- package/dist/api/ExtensionWeb3.d.ts +0 -6
- package/dist/api/ExtensionWeb3.d.ts.map +0 -1
- package/dist/api/ExtensionWeb3.js +0 -24
- package/dist/api/ExtensionWeb3.js.map +0 -1
- package/dist/api/errors.d.ts +0 -16
- package/dist/api/errors.d.ts.map +0 -1
- package/dist/api/errors.js +0 -26
- package/dist/api/errors.js.map +0 -1
- package/dist/api/index.d.ts +0 -3
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -3
- package/dist/api/index.js.map +0 -1
- package/dist/api/sign.d.ts +0 -5
- package/dist/api/sign.d.ts.map +0 -1
- package/dist/api/sign.js +0 -12
- package/dist/api/sign.js.map +0 -1
- package/dist/cjs/api/Extension.cjs +0 -4
- package/dist/cjs/api/errors.cjs +0 -32
- package/dist/cjs/api/index.cjs +0 -3
- package/dist/cjs/types/client.cjs +0 -1
- package/dist/cjs/types/contract.cjs +0 -1
- package/dist/cjs/types/index.cjs +0 -6
- package/dist/cjs/types/manager.cjs +0 -14
- package/dist/tests/mocks/browser.d.ts +0 -9
- package/dist/tests/mocks/browser.d.ts.map +0 -1
- package/dist/tests/mocks/browser.js +0 -18
- package/dist/tests/mocks/browser.js.map +0 -1
- package/dist/types/client.d.ts +0 -5
- package/dist/types/client.d.ts.map +0 -1
- package/dist/types/client.js +0 -2
- package/dist/types/client.js.map +0 -1
- package/dist/types/contract.d.ts +0 -5
- package/dist/types/contract.d.ts.map +0 -1
- package/dist/types/contract.js +0 -2
- package/dist/types/contract.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/manager.d.ts +0 -37
- package/dist/types/manager.d.ts.map +0 -1
- package/dist/types/manager.js +0 -12
- package/dist/types/manager.js.map +0 -1
- package/dist/types/utils.d.ts +0 -2
- package/dist/types/utils.d.ts.map +0 -1
- package/dist/types/utils.js +0 -2
- package/dist/types/utils.js.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
3
|
const Api = require("@polkadot/api/promise/Api");
|
|
4
|
+
const Extension = require("./Extension.cjs");
|
|
3
5
|
const keyring = require("@polkadot/keyring");
|
|
4
6
|
const common = require("@prosopo/common");
|
|
5
7
|
const ws = require("@polkadot/rpc-provider/ws");
|
|
@@ -9,9 +11,8 @@ const fingerprintjs = require("@fingerprintjs/fingerprintjs");
|
|
|
9
11
|
const util = require("@prosopo/util");
|
|
10
12
|
const string = require("@polkadot/util/string");
|
|
11
13
|
const u8a = require("@polkadot/util/u8a");
|
|
12
|
-
const Extension = require("./Extension.cjs");
|
|
13
14
|
const Signer = require("@polkadot/extension-base/page/Signer");
|
|
14
|
-
class
|
|
15
|
+
class ExtensionWeb2 extends Extension.Extension {
|
|
15
16
|
constructor() {
|
|
16
17
|
super(...arguments);
|
|
17
18
|
this.getNetwork = (config) => {
|
|
@@ -42,7 +43,6 @@ class ExtWeb2 extends Extension {
|
|
|
42
43
|
const signature = account.keypair.sign(payload.data);
|
|
43
44
|
return {
|
|
44
45
|
id: 1,
|
|
45
|
-
// the id of the request to sign. This should be incremented each time and adjust the signature, but we're hacking around this. Hence the signature will always be the same given the same payload.
|
|
46
46
|
signature: u8a.u8aToHex(signature)
|
|
47
47
|
};
|
|
48
48
|
};
|
|
@@ -97,4 +97,4 @@ class ExtWeb2 extends Extension {
|
|
|
97
97
|
return fingerprintjs.hashComponents(componentsReduced);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
exports.ExtensionWeb2 = ExtensionWeb2;
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const extensionDapp = require("@polkadot/extension-dapp");
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
3
|
const Extension = require("./Extension.cjs");
|
|
5
|
-
|
|
4
|
+
const common = require("@prosopo/common");
|
|
5
|
+
const extensionDapp = require("@polkadot/extension-dapp");
|
|
6
|
+
class ExtensionWeb3 extends Extension.Extension {
|
|
6
7
|
async getAccount(config) {
|
|
7
8
|
const { dappName, userAccountAddress: address } = config;
|
|
8
9
|
if (!address) {
|
|
9
|
-
throw new
|
|
10
|
+
throw new common.ProsopoError("WIDGET.NO_ACCOUNTS_FOUND", { context: { error: "No account address provided" } });
|
|
10
11
|
}
|
|
11
12
|
const extensions = await extensionDapp.web3Enable(dappName);
|
|
12
13
|
if (extensions.length === 0) {
|
|
13
|
-
throw new
|
|
14
|
+
throw new common.ProsopoError("WIDGET.NO_EXTENSION_FOUND");
|
|
14
15
|
}
|
|
15
16
|
for (const extension of extensions) {
|
|
16
17
|
const accounts = await extension.accounts.get();
|
|
@@ -19,7 +20,9 @@ class ExtWeb3 extends Extension {
|
|
|
19
20
|
return { account, extension };
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
throw new
|
|
23
|
+
throw new common.ProsopoError("WIDGET.ACCOUNT_NOT_FOUND", {
|
|
24
|
+
context: { error: `No account found matching ${address}` }
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
|
-
|
|
28
|
+
exports.ExtensionWeb3 = ExtensionWeb3;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const Extension = require("./extension/Extension.cjs");
|
|
4
|
+
const ExtensionWeb2 = require("./extension/ExtensionWeb2.cjs");
|
|
5
|
+
const ExtensionWeb3 = require("./extension/ExtensionWeb3.cjs");
|
|
6
|
+
exports.Extension = Extension.Extension;
|
|
7
|
+
exports.ExtensionWeb2 = ExtensionWeb2.ExtensionWeb2;
|
|
8
|
+
exports.ExtensionWeb3 = ExtensionWeb3.ExtensionWeb3;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("./api/index.cjs");
|
|
4
3
|
require("./modules/index.cjs");
|
|
5
|
-
require("./types/index.cjs");
|
|
6
4
|
require("./utils/index.cjs");
|
|
7
|
-
const ExtensionWeb2 = require("./api/ExtensionWeb2.cjs");
|
|
8
5
|
const Manager = require("./modules/Manager.cjs");
|
|
9
6
|
const ProsopoCaptchaApi = require("./modules/ProsopoCaptchaApi.cjs");
|
|
10
7
|
const collector = require("./modules/collector.cjs");
|
|
11
|
-
const manager = require("./types/manager.cjs");
|
|
12
8
|
const utils = require("./utils/utils.cjs");
|
|
13
|
-
exports.ExtensionWeb2 = ExtensionWeb2;
|
|
14
9
|
exports.Manager = Manager.Manager;
|
|
15
10
|
exports.ProsopoCaptchaApi = ProsopoCaptchaApi.ProsopoCaptchaApi;
|
|
16
11
|
exports.startCollector = collector.startCollector;
|
|
17
|
-
exports.ProcapchaEventNames = manager.ProcapchaEventNames;
|
|
18
12
|
exports.sleep = utils.sleep;
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const types = require("@prosopo/types");
|
|
4
|
-
const errors = require("../api/errors.cjs");
|
|
5
4
|
const Api = require("@polkadot/api/promise/Api");
|
|
6
|
-
|
|
5
|
+
require("../account/dist/index.cjs");
|
|
7
6
|
const keyring = require("@polkadot/keyring");
|
|
8
7
|
const common = require("@prosopo/common");
|
|
9
8
|
const contract = require("@prosopo/contract");
|
|
9
|
+
const api = require("@prosopo/api");
|
|
10
10
|
const ws = require("@polkadot/rpc-provider/ws");
|
|
11
11
|
const contractInfo = require("@prosopo/captcha-contract/contract-info");
|
|
12
12
|
const util = require("@prosopo/util");
|
|
13
|
+
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
13
14
|
const random = require("@polkadot/util-crypto/random");
|
|
14
15
|
const utils = require("../utils/utils.cjs");
|
|
15
16
|
const string = require("@polkadot/util/string");
|
|
16
|
-
const ExtensionWeb2 = require("../api/ExtensionWeb2.cjs");
|
|
17
|
-
const ExtensionWeb3 = require("../api/ExtensionWeb3.cjs");
|
|
18
17
|
const ProsopoCaptchaApi = require("./ProsopoCaptchaApi.cjs");
|
|
19
18
|
const storage = require("./storage.cjs");
|
|
19
|
+
const ExtensionWeb2 = require("../account/dist/extension/ExtensionWeb2.cjs");
|
|
20
|
+
const ExtensionWeb3 = require("../account/dist/extension/ExtensionWeb3.cjs");
|
|
20
21
|
const defaultState = () => {
|
|
21
22
|
return {
|
|
22
23
|
// note order matters! see buildUpdateState. These fields are set in order, so disable modal first, then set loading to false, etc.
|
|
@@ -31,14 +32,6 @@ const defaultState = () => {
|
|
|
31
32
|
// don't handle timeout here, this should be handled by the state management
|
|
32
33
|
};
|
|
33
34
|
};
|
|
34
|
-
const buildUpdateState = (state, onStateUpdate) => {
|
|
35
|
-
const updateCurrentState = (nextState) => {
|
|
36
|
-
Object.assign(state, nextState);
|
|
37
|
-
onStateUpdate(nextState);
|
|
38
|
-
console.log("Procaptcha state update:", nextState, "\nResult:", state);
|
|
39
|
-
};
|
|
40
|
-
return updateCurrentState;
|
|
41
|
-
};
|
|
42
35
|
const getNetwork = (config) => {
|
|
43
36
|
const network = config.networks[config.defaultNetwork];
|
|
44
37
|
if (!network) {
|
|
@@ -50,49 +43,14 @@ const getNetwork = (config) => {
|
|
|
50
43
|
};
|
|
51
44
|
function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
52
45
|
const alertError = (error) => {
|
|
53
|
-
console.log(error);
|
|
54
46
|
alert(error.message);
|
|
55
47
|
};
|
|
56
|
-
const events =
|
|
57
|
-
{
|
|
58
|
-
onAccountNotFound: alertError,
|
|
59
|
-
onError: alertError,
|
|
60
|
-
onHuman: (output) => {
|
|
61
|
-
console.log("onHuman event triggered", output);
|
|
62
|
-
updateState({ sendData: !state.sendData });
|
|
63
|
-
},
|
|
64
|
-
onExtensionNotFound: () => {
|
|
65
|
-
alert("No extension found");
|
|
66
|
-
},
|
|
67
|
-
onFailed: () => {
|
|
68
|
-
alert("Captcha challenge failed. Please try again");
|
|
69
|
-
updateState({ sendData: !state.sendData });
|
|
70
|
-
},
|
|
71
|
-
onExpired: () => {
|
|
72
|
-
alert("Completed challenge has expired, please try again");
|
|
73
|
-
},
|
|
74
|
-
onChallengeExpired: () => {
|
|
75
|
-
alert("Uncompleted challenge has expired, please try again");
|
|
76
|
-
},
|
|
77
|
-
onOpen: () => {
|
|
78
|
-
console.log("onOpen event triggered");
|
|
79
|
-
updateState({ sendData: !state.sendData });
|
|
80
|
-
},
|
|
81
|
-
onClose: () => {
|
|
82
|
-
console.log("onClose event triggered");
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
callbacks
|
|
86
|
-
);
|
|
48
|
+
const events = procaptchaCommon.getDefaultEvents(onStateUpdate, state, callbacks);
|
|
87
49
|
const dispatchErrorEvent = (err) => {
|
|
88
50
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
89
|
-
|
|
90
|
-
events.onAccountNotFound(error.message);
|
|
91
|
-
} else {
|
|
92
|
-
events.onError(error);
|
|
93
|
-
}
|
|
51
|
+
events.onError(error);
|
|
94
52
|
};
|
|
95
|
-
const updateState = buildUpdateState(state, onStateUpdate);
|
|
53
|
+
const updateState = procaptchaCommon.buildUpdateState(state, onStateUpdate);
|
|
96
54
|
const getConfig = () => {
|
|
97
55
|
const config = {
|
|
98
56
|
userAccountAddress: "",
|
|
@@ -113,15 +71,12 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
113
71
|
}
|
|
114
72
|
};
|
|
115
73
|
const start = async () => {
|
|
116
|
-
console.log("Starting procaptcha");
|
|
117
74
|
events.onOpen();
|
|
118
75
|
await fallable(async () => {
|
|
119
76
|
if (state.loading) {
|
|
120
|
-
console.log("Procaptcha already loading");
|
|
121
77
|
return;
|
|
122
78
|
}
|
|
123
79
|
if (state.isHuman) {
|
|
124
|
-
console.log("already human");
|
|
125
80
|
return;
|
|
126
81
|
}
|
|
127
82
|
resetState();
|
|
@@ -157,14 +112,16 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
157
112
|
void 0,
|
|
158
113
|
configOptional.challengeValidLength
|
|
159
114
|
);
|
|
160
|
-
if (verifyDappUserResponse.
|
|
115
|
+
if (verifyDappUserResponse.verified) {
|
|
161
116
|
updateState({ isHuman: true, loading: false });
|
|
162
|
-
|
|
163
|
-
providerUrl: providerUrlFromStorage,
|
|
164
|
-
user: account.account.address,
|
|
165
|
-
dapp: getDappAccount(),
|
|
166
|
-
commitmentId: verifyDappUserResponse.commitmentId
|
|
167
|
-
|
|
117
|
+
const output = {
|
|
118
|
+
[types.ApiParams.providerUrl]: providerUrlFromStorage,
|
|
119
|
+
[types.ApiParams.user]: account.account.address,
|
|
120
|
+
[types.ApiParams.dapp]: getDappAccount(),
|
|
121
|
+
[types.ApiParams.commitmentId]: util.hashToHex(verifyDappUserResponse.commitmentId),
|
|
122
|
+
[types.ApiParams.blockNumber]: verifyDappUserResponse.blockNumber
|
|
123
|
+
};
|
|
124
|
+
events.onHuman(output);
|
|
168
125
|
setValidChallengeTimeout();
|
|
169
126
|
return;
|
|
170
127
|
}
|
|
@@ -178,26 +135,20 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
178
135
|
type: "bytes"
|
|
179
136
|
};
|
|
180
137
|
const signed = await account.extension.signer.signRaw(payload);
|
|
181
|
-
console.log("Signature:", signed);
|
|
182
138
|
const getRandomProviderResponse = await contract.wrapQuery(
|
|
183
139
|
contract$1.query.getRandomActiveProvider,
|
|
184
140
|
contract$1.query
|
|
185
141
|
)(account.account.address, getDappAccount());
|
|
186
142
|
const blockNumber = parseInt(getRandomProviderResponse.blockNumber.toString());
|
|
187
|
-
console.log("provider", getRandomProviderResponse);
|
|
188
143
|
const providerUrl = common.trimProviderUrl(getRandomProviderResponse.provider.url.toString());
|
|
189
144
|
providerApi = await loadProviderApi(providerUrl);
|
|
190
|
-
console.log("providerApi", providerApi);
|
|
191
145
|
const captchaApi = await loadCaptchaApi(contract$1, getRandomProviderResponse, providerApi);
|
|
192
|
-
console.log("captchaApi", captchaApi);
|
|
193
146
|
const challenge = await captchaApi.getCaptchaChallenge();
|
|
194
|
-
console.log("challenge", challenge);
|
|
195
147
|
if (challenge.captchas.length <= 0) {
|
|
196
148
|
throw new common.ProsopoApiError("DEVELOPER.PROVIDER_NO_CAPTCHA");
|
|
197
149
|
}
|
|
198
150
|
const timeMillis = challenge.captchas.map((captcha) => captcha.captcha.timeLimitMs || 30 * 1e3).reduce((a, b) => a + b);
|
|
199
151
|
const timeout = setTimeout(() => {
|
|
200
|
-
console.log("challenge expired after " + timeMillis + "ms");
|
|
201
152
|
events.onChallengeExpired();
|
|
202
153
|
updateState({ isHuman: false, showModal: false, loading: false });
|
|
203
154
|
}, timeMillis);
|
|
@@ -213,7 +164,6 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
213
164
|
};
|
|
214
165
|
const submit = async () => {
|
|
215
166
|
await fallable(async () => {
|
|
216
|
-
console.log("submitting solutions");
|
|
217
167
|
clearTimeout();
|
|
218
168
|
if (!state.challenge) {
|
|
219
169
|
throw new common.ProsopoError("CAPTCHA.NO_CAPTCHA", {
|
|
@@ -223,15 +173,17 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
223
173
|
updateState({ showModal: false });
|
|
224
174
|
const challenge = state.challenge;
|
|
225
175
|
const salt = random.randomAsHex();
|
|
226
|
-
const captchaSolution = state.challenge.captchas.map(
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
176
|
+
const captchaSolution = state.challenge.captchas.map(
|
|
177
|
+
(captcha, index) => {
|
|
178
|
+
const solution = util.at(state.solutions, index);
|
|
179
|
+
return {
|
|
180
|
+
captchaId: captcha.captcha.captchaId,
|
|
181
|
+
captchaContentId: captcha.captcha.captchaContentId,
|
|
182
|
+
salt,
|
|
183
|
+
solution
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
);
|
|
235
187
|
const account = getAccount();
|
|
236
188
|
const blockNumber = getBlockNumber();
|
|
237
189
|
const signer = account.extension.signer;
|
|
@@ -249,7 +201,7 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
249
201
|
captchaSolution,
|
|
250
202
|
salt
|
|
251
203
|
);
|
|
252
|
-
const isHuman = submission[0].
|
|
204
|
+
const isHuman = submission[0].verified;
|
|
253
205
|
if (!isHuman) {
|
|
254
206
|
events.onFailed();
|
|
255
207
|
}
|
|
@@ -265,7 +217,7 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
265
217
|
providerUrl: trimmedUrl,
|
|
266
218
|
user: account.account.address,
|
|
267
219
|
dapp: getDappAccount(),
|
|
268
|
-
commitmentId: submission[1],
|
|
220
|
+
commitmentId: util.hashToHex(submission[1]),
|
|
269
221
|
blockNumber
|
|
270
222
|
});
|
|
271
223
|
setValidChallengeTimeout();
|
|
@@ -273,7 +225,6 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
273
225
|
});
|
|
274
226
|
};
|
|
275
227
|
const cancel = async () => {
|
|
276
|
-
console.log("cancel");
|
|
277
228
|
clearTimeout();
|
|
278
229
|
resetState();
|
|
279
230
|
events.onClose();
|
|
@@ -293,10 +244,8 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
293
244
|
const solutions = state.solutions;
|
|
294
245
|
const solution = util.at(solutions, index);
|
|
295
246
|
if (solution.includes(hash)) {
|
|
296
|
-
console.log("deselecting", hash);
|
|
297
247
|
solution.splice(solution.indexOf(hash), 1);
|
|
298
248
|
} else {
|
|
299
|
-
console.log("selecting", hash);
|
|
300
249
|
solution.push(hash);
|
|
301
250
|
}
|
|
302
251
|
updateState({ solutions });
|
|
@@ -312,7 +261,6 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
312
261
|
context: { error: "Cannot select, index is out of range for this Captcha" }
|
|
313
262
|
});
|
|
314
263
|
}
|
|
315
|
-
console.log("proceeding to next round");
|
|
316
264
|
updateState({ index: state.index + 1 });
|
|
317
265
|
};
|
|
318
266
|
const loadCaptchaApi = async (contract2, provider, providerApi) => {
|
|
@@ -341,10 +289,8 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
341
289
|
updateState({ timeout: void 0 });
|
|
342
290
|
};
|
|
343
291
|
const setValidChallengeTimeout = () => {
|
|
344
|
-
console.log("setting valid challenge timeout");
|
|
345
292
|
const timeMillis = configOptional.challengeValidLength || 120 * 1e3;
|
|
346
293
|
const successfullChallengeTimeout = setTimeout(() => {
|
|
347
|
-
console.log("valid challenge expired after " + timeMillis + "ms");
|
|
348
294
|
updateState({ isHuman: false });
|
|
349
295
|
events.onExpired();
|
|
350
296
|
}, timeMillis);
|
|
@@ -367,10 +313,9 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
367
313
|
context: { error: "Account address has not been set for web3 mode" }
|
|
368
314
|
});
|
|
369
315
|
}
|
|
370
|
-
const ext = config.web2 ? new ExtensionWeb2() : new ExtensionWeb3();
|
|
316
|
+
const ext = config.web2 ? new ExtensionWeb2.ExtensionWeb2() : new ExtensionWeb3.ExtensionWeb3();
|
|
371
317
|
const account = await ext.getAccount(config);
|
|
372
318
|
storage.setAccount(account.account.address);
|
|
373
|
-
console.log("Using account:", account);
|
|
374
319
|
updateState({ account });
|
|
375
320
|
return getAccount();
|
|
376
321
|
};
|
|
@@ -411,12 +356,30 @@ function Manager(configOptional, state, onStateUpdate, callbacks) {
|
|
|
411
356
|
);
|
|
412
357
|
};
|
|
413
358
|
const exportData = async (events2) => {
|
|
359
|
+
const providerUrlFromStorage = storage.getProviderUrl();
|
|
360
|
+
let providerApi;
|
|
361
|
+
if (providerUrlFromStorage) {
|
|
362
|
+
providerApi = await loadProviderApi(providerUrlFromStorage);
|
|
363
|
+
} else {
|
|
364
|
+
const contract$1 = await loadContract();
|
|
365
|
+
const getRandomProviderResponse = await contract.wrapQuery(
|
|
366
|
+
contract$1.query.getRandomActiveProvider,
|
|
367
|
+
contract$1.query
|
|
368
|
+
)(getAccount().account.address, getDappAccount());
|
|
369
|
+
const providerUrl2 = common.trimProviderUrl(getRandomProviderResponse.provider.url.toString());
|
|
370
|
+
providerApi = await loadProviderApi(providerUrl2);
|
|
371
|
+
}
|
|
414
372
|
const providerUrl = storage.getProviderUrl() || state.captchaApi?.provider.provider.url.toString();
|
|
415
373
|
if (!providerUrl) {
|
|
416
374
|
return;
|
|
417
375
|
}
|
|
418
|
-
|
|
419
|
-
|
|
376
|
+
let account = "";
|
|
377
|
+
try {
|
|
378
|
+
account = getAccount().account.address;
|
|
379
|
+
} catch (e) {
|
|
380
|
+
console.error(e);
|
|
381
|
+
}
|
|
382
|
+
await providerApi.submitUserEvents(events2, account);
|
|
420
383
|
};
|
|
421
384
|
return {
|
|
422
385
|
start,
|
|
@@ -10,9 +10,12 @@ class ProsopoCaptchaApi {
|
|
|
10
10
|
this.contract = contract;
|
|
11
11
|
this.provider = provider;
|
|
12
12
|
this.providerApi = providerApi;
|
|
13
|
-
this.
|
|
13
|
+
this._web2 = web2;
|
|
14
14
|
this.dappAccount = dappAccount;
|
|
15
15
|
}
|
|
16
|
+
get web2() {
|
|
17
|
+
return this._web2;
|
|
18
|
+
}
|
|
16
19
|
async getCaptchaChallenge() {
|
|
17
20
|
try {
|
|
18
21
|
const captchaChallenge = await this.providerApi.getCaptchaChallenge(this.userAccount, this.provider);
|
|
@@ -32,7 +35,6 @@ class ProsopoCaptchaApi {
|
|
|
32
35
|
verifyCaptchaChallengeContent(provider, captchaChallenge) {
|
|
33
36
|
const first = util.at(captchaChallenge.captchas, 0);
|
|
34
37
|
const proofLength = first.proof.length;
|
|
35
|
-
console.log(provider.provider);
|
|
36
38
|
const last = util.at(first.proof, proofLength - 1);
|
|
37
39
|
if (provider.provider.datasetIdContent.toString() !== util.at(last, 0)) {
|
|
38
40
|
throw new common.ProsopoEnvError("CAPTCHA.INVALID_DATASET_CONTENT_ID");
|
|
@@ -45,7 +47,6 @@ class ProsopoCaptchaApi {
|
|
|
45
47
|
throw new common.ProsopoEnvError("CAPTCHA.INVALID_CAPTCHA_CHALLENGE");
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
|
-
console.log("CAPTCHA.CHALLENGE_VERIFIED");
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
52
|
async submitCaptchaSolution(signer, requestHash, datasetId, solutions, salt) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const COLLECTOR_LIMIT =
|
|
3
|
+
const COLLECTOR_LIMIT = 1e4;
|
|
4
4
|
const storeLog = (event, setEvents) => {
|
|
5
5
|
setEvents((currentEvents) => {
|
|
6
6
|
let newEvents = [...currentEvents, event];
|
|
@@ -28,11 +28,7 @@ const logKeyboardEvent = (event, setKeyboardEvent) => {
|
|
|
28
28
|
storeLog(storedEvent, setKeyboardEvent);
|
|
29
29
|
};
|
|
30
30
|
const logTouchEvent = (event, setTouchEvent) => {
|
|
31
|
-
for (
|
|
32
|
-
const touch = event.touches[i];
|
|
33
|
-
if (!touch) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
31
|
+
for (const touch of Array.from(event.touches)) {
|
|
36
32
|
storeLog({ x: touch.clientX, y: touch.clientY, timestamp: event.timeStamp }, setTouchEvent);
|
|
37
33
|
}
|
|
38
34
|
};
|
package/dist/index.d.ts
CHANGED
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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { StoredEvents } from '@prosopo/types';
|
|
2
|
-
|
|
3
|
-
export declare function Manager(configOptional: ProcaptchaConfigOptional, state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn, callbacks: ProcaptchaCallbacks): {
|
|
1
|
+
import { ProcaptchaCallbacks, ProcaptchaClientConfigInput, ProcaptchaState, ProcaptchaStateUpdateFn, StoredEvents } from '@prosopo/types';
|
|
2
|
+
export declare function Manager(configOptional: ProcaptchaClientConfigInput, state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn, callbacks: ProcaptchaCallbacks): {
|
|
4
3
|
start: () => Promise<void>;
|
|
5
4
|
cancel: () => Promise<void>;
|
|
6
5
|
submit: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/modules/Manager.ts"],"names":[],"mappings":"AAaA,OAAO,EAMH,
|
|
1
|
+
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/modules/Manager.ts"],"names":[],"mappings":"AAaA,OAAO,EAMH,mBAAmB,EACnB,2BAA2B,EAI3B,eAAe,EACf,uBAAuB,EACvB,YAAY,EAEf,MAAM,gBAAgB,CAAA;AAsDvB,wBAAgB,OAAO,CACnB,cAAc,EAAE,2BAA2B,EAC3C,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,uBAAuB,EACtC,SAAS,EAAE,mBAAmB;;;;mBAwRR,MAAM;;yBA4KM,YAAY;EAsCjD"}
|