@prosopo/procaptcha-puzzle 2.10.39 → 2.10.41

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.
Files changed (59) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +13 -11
  2. package/.turbo/turbo-build$colon$tsc.log +19 -19
  3. package/.turbo/turbo-build.log +15 -12
  4. package/CHANGELOG.md +41 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/cjs/components/ProcaptchaPuzzle.cjs +6 -9
  7. package/dist/cjs/components/ProcaptchaWidget.cjs +191 -213
  8. package/dist/cjs/components/PuzzleCanvas.cjs +228 -270
  9. package/dist/cjs/index.cjs +2 -4
  10. package/dist/cjs/services/Manager.cjs +209 -289
  11. package/dist/components/ProcaptchaPuzzle.js +6 -8
  12. package/dist/components/ProcaptchaWidget.d.ts.map +1 -1
  13. package/dist/components/ProcaptchaWidget.js +190 -212
  14. package/dist/components/ProcaptchaWidget.js.map +1 -1
  15. package/dist/components/PuzzleCanvas.js +229 -271
  16. package/dist/index.js +2 -4
  17. package/dist/services/Manager.d.ts.map +1 -1
  18. package/dist/services/Manager.js +205 -286
  19. package/dist/services/Manager.js.map +1 -1
  20. package/dist/tests/manager.unit.test.d.ts +2 -0
  21. package/dist/tests/manager.unit.test.d.ts.map +1 -0
  22. package/dist/tests/manager.unit.test.js +506 -0
  23. package/dist/tests/manager.unit.test.js.map +1 -0
  24. package/dist/tests/managerHarness.d.ts +20 -0
  25. package/dist/tests/managerHarness.d.ts.map +1 -0
  26. package/dist/tests/managerHarness.js +86 -0
  27. package/dist/tests/managerHarness.js.map +1 -0
  28. package/dist/tests/procaptchaPuzzle.test-d.d.ts +2 -0
  29. package/dist/tests/procaptchaPuzzle.test-d.d.ts.map +1 -0
  30. package/dist/tests/procaptchaPuzzle.test-d.js +97 -0
  31. package/dist/tests/procaptchaPuzzle.test-d.js.map +1 -0
  32. package/dist/tests/procaptchaPuzzle.unit.test.d.ts +2 -0
  33. package/dist/tests/procaptchaPuzzle.unit.test.d.ts.map +1 -0
  34. package/dist/tests/procaptchaPuzzle.unit.test.js +81 -0
  35. package/dist/tests/procaptchaPuzzle.unit.test.js.map +1 -0
  36. package/dist/tests/procaptchaWidget.unit.test.d.ts +2 -0
  37. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  38. package/dist/tests/procaptchaWidget.unit.test.js +547 -0
  39. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -0
  40. package/dist/tests/puzzleCanvas.unit.test.d.ts +2 -0
  41. package/dist/tests/puzzleCanvas.unit.test.d.ts.map +1 -0
  42. package/dist/tests/puzzleCanvas.unit.test.js +312 -0
  43. package/dist/tests/puzzleCanvas.unit.test.js.map +1 -0
  44. package/dist/tests/setup.d.ts +5 -0
  45. package/dist/tests/setup.d.ts.map +1 -0
  46. package/dist/tests/setup.js +3 -0
  47. package/dist/tests/setup.js.map +1 -0
  48. package/package.json +17 -12
  49. package/src/components/ProcaptchaWidget.tsx +17 -6
  50. package/src/services/Manager.ts +14 -10
  51. package/src/tests/manager.unit.test.ts +763 -0
  52. package/src/tests/managerHarness.ts +169 -0
  53. package/src/tests/procaptchaPuzzle.test-d.ts +191 -0
  54. package/src/tests/procaptchaPuzzle.unit.test.ts +123 -0
  55. package/src/tests/procaptchaWidget.unit.test.ts +789 -0
  56. package/src/tests/puzzleCanvas.unit.test.ts +418 -0
  57. package/src/tests/setup.ts +26 -0
  58. package/tsconfig.tsbuildinfo +1 -1
  59. package/vite.test.config.ts +27 -0
@@ -1,291 +1,211 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const string = require("@polkadot/util/string");
4
- const api = require("@prosopo/api");
5
- const common = require("@prosopo/common");
6
- const procaptchaCommon = require("@prosopo/procaptcha-common");
7
- const types = require("@prosopo/types");
8
- const util = require("@prosopo/util");
9
- const utilCrypto = require("@prosopo/util-crypto");
10
- const Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState, getHoneypotValue) => {
11
- const events = procaptchaCommon.getDefaultEvents(callbacks);
12
- let storedChallengeResponse;
13
- let storedProviderApi;
14
- let storedProviderUrl;
15
- let storedUser;
16
- let storedClickX;
17
- let storedClickY;
18
- let previousProviderUrl;
19
- const defaultState = () => {
20
- return {
21
- // note order matters! see buildUpdateState. These fields are set in order, so disable modal first, then set loading to false, etc.
22
- showModal: false,
23
- loading: false,
24
- index: 0,
25
- challenge: void 0,
26
- solutions: void 0,
27
- isHuman: false,
28
- captchaApi: void 0,
29
- account: void 0
30
- // don't handle timeout here, this should be handled by the state management
31
- };
32
- };
33
- const clearTimeout = () => {
34
- window.clearTimeout(Number(state.timeout));
35
- updateState({ timeout: void 0 });
36
- };
37
- const onFailed = () => {
38
- updateState({
39
- isHuman: false,
40
- loading: false
41
- });
42
- events.onFailed();
43
- resetState(frictionlessState?.restart);
44
- };
45
- const clearSuccessfulChallengeTimeout = () => {
46
- window.clearTimeout(Number(state.successfullChallengeTimeout));
47
- updateState({ successfullChallengeTimeout: void 0 });
48
- };
49
- const getConfig = () => {
50
- const config = {
51
- userAccountAddress: configInput.userAccountAddress || "",
52
- ...configInput
53
- };
54
- if (state.account) {
55
- config.userAccountAddress = state.account.account.address;
56
- }
57
- return types.ProcaptchaConfigSchema.parse(config);
58
- };
59
- const getAccount = () => {
60
- if (!state.account) {
61
- throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
62
- context: { error: "Account not loaded" }
63
- });
64
- }
65
- const account = state.account;
66
- return { account };
67
- };
68
- const getDappAccount = () => {
69
- if (!state.dappAccount) {
70
- throw new common.ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
71
- }
72
- const dappAccount = state.dappAccount;
73
- return dappAccount;
74
- };
75
- const updateState = procaptchaCommon.buildUpdateState(state, onStateUpdate);
76
- const resetState = (frictionlessRestart) => {
77
- clearTimeout();
78
- clearSuccessfulChallengeTimeout();
79
- updateState(defaultState());
80
- events.onReset();
81
- if (frictionlessRestart) {
82
- frictionlessRestart();
83
- }
84
- storedChallengeResponse = void 0;
85
- storedProviderApi = void 0;
86
- storedProviderUrl = void 0;
87
- storedUser = void 0;
88
- storedClickX = void 0;
89
- storedClickY = void 0;
90
- };
91
- const setValidChallengeTimeout = () => {
92
- const timeMillis = getConfig().captchas.puzzle.solutionTimeout;
93
- const successfullChallengeTimeout = setTimeout(() => {
94
- updateState({ isHuman: false });
95
- events.onExpired();
96
- resetState(frictionlessState?.restart);
97
- }, timeMillis);
98
- updateState({ successfullChallengeTimeout });
99
- };
100
- const start = async (x = 0, y = 0) => {
101
- storedClickX = x;
102
- storedClickY = y;
103
- await procaptchaCommon.providerRetry(
104
- async () => {
105
- if (state.loading) {
106
- return;
107
- }
108
- if (state.isHuman) {
109
- return;
110
- }
111
- resetState();
112
- updateState({
113
- loading: true
114
- });
115
- updateState({ attemptCount: state.attemptCount + 1 });
116
- const config = getConfig();
117
- const selectAccount = async () => {
118
- if (frictionlessState) {
119
- return frictionlessState.userAccount;
120
- }
121
- const ext = new (await procaptchaCommon.ExtensionLoader(config.web2))();
122
- return ext.getAccount(config);
123
- };
124
- const user = await selectAccount();
125
- const userAccount = user.account.address;
126
- updateState({
127
- account: { account: { address: userAccount } }
128
- });
129
- updateState({ dappAccount: config.account.address });
130
- await util.sleep(100);
131
- if (!config.web2 && !config.userAccountAddress) {
132
- throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
133
- context: {
134
- error: "Account address has not been set for web3 mode"
135
- }
136
- });
137
- }
138
- let getRandomProviderResponse = void 0;
139
- if (frictionlessState?.provider) {
140
- getRandomProviderResponse = frictionlessState.provider;
141
- } else {
142
- const currentConfig = getConfig();
143
- getRandomProviderResponse = await procaptchaCommon.getProcaptchaRandomActiveProvider(
144
- currentConfig.defaultEnvironment,
145
- procaptchaCommon.pickIpMode(currentConfig),
146
- { attempt: state.attemptCount, excludeUrl: previousProviderUrl }
147
- );
148
- }
149
- const providerUrl = getRandomProviderResponse.provider.url;
150
- previousProviderUrl = providerUrl;
151
- const providerApi = new api.ProviderApi(providerUrl, getDappAccount());
152
- const simdReadingsOnChallenge = frictionlessState?.getSimdReadings ? await frictionlessState.getSimdReadings(0) : void 0;
153
- const challenge = await providerApi.getPuzzleCaptchaChallenge(
154
- userAccount,
155
- getDappAccount(),
156
- frictionlessState?.sessionId,
157
- simdReadingsOnChallenge
158
- );
159
- if (challenge.error) {
160
- updateState({
161
- loading: false,
162
- error: {
163
- message: challenge.error.message,
164
- key: challenge.error.key || "API.UNKNOWN_ERROR"
165
- }
166
- });
167
- return;
168
- }
169
- storedChallengeResponse = challenge;
170
- storedProviderApi = providerApi;
171
- storedProviderUrl = providerUrl;
172
- storedUser = user;
173
- updateState({
174
- loading: false
175
- });
176
- },
177
- async () => {
178
- await start();
179
- },
180
- () => {
181
- resetState();
182
- },
183
- state.attemptCount,
184
- 3
185
- );
186
- return storedChallengeResponse;
187
- };
188
- const submitSolution = async (finalX, finalY, puzzleEvents) => {
189
- if (!storedChallengeResponse || !storedProviderApi || !storedProviderUrl || !storedUser) {
190
- throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
191
- context: { error: "No challenge data available. Call start() first." }
192
- });
193
- }
194
- updateState({ loading: true });
195
- try {
196
- const challenge = storedChallengeResponse;
197
- const providerApi = storedProviderApi;
198
- const providerUrl = storedProviderUrl;
199
- const user = storedUser;
200
- const config = getConfig();
201
- const signer = user.extension?.signer;
202
- if (!signer || !signer.signRaw) {
203
- throw new common.ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", {
204
- context: {
205
- error: "Signer is not defined, cannot sign message to prove account ownership"
206
- }
207
- });
208
- }
209
- const userTimestampSignature = await signer.signRaw({
210
- address: user.account.address,
211
- data: string.stringToHex(challenge[types.ApiParams.timestamp].toString()),
212
- type: "bytes"
213
- });
214
- let encryptedBehavioralData;
215
- if (frictionlessState?.encryptBehavioralData && (frictionlessState?.behaviorCollector1 || frictionlessState?.behaviorCollector2 || frictionlessState?.behaviorCollector3)) {
216
- try {
217
- const behavioralData = {
218
- collector1: frictionlessState.behaviorCollector1?.getData() || [],
219
- collector2: frictionlessState.behaviorCollector2?.getData() || [],
220
- collector3: frictionlessState.behaviorCollector3?.getData() || [],
221
- deviceCapability: frictionlessState.deviceCapability || "unknown"
222
- };
223
- const dataToEncrypt = frictionlessState.packBehavioralData ? frictionlessState.packBehavioralData(behavioralData) : behavioralData;
224
- encryptedBehavioralData = await frictionlessState.encryptBehavioralData(
225
- JSON.stringify(dataToEncrypt)
226
- );
227
- } catch {
228
- }
229
- }
230
- let salt;
231
- if (storedClickX !== void 0 && storedClickY !== void 0) {
232
- const coords = [storedClickX, storedClickY];
233
- const randomSalt = utilCrypto.randomAsHex(
234
- coords.map((coord) => coord.toString(16).length + 4).reduce((acc, curr) => acc + curr, 0)
235
- );
236
- salt = util.embedData(randomSalt, coords);
237
- }
238
- const simdReadings = frictionlessState?.getSimdReadings ? await frictionlessState.getSimdReadings() : void 0;
239
- const hpValue = getHoneypotValue?.();
240
- const clientMetaData = hpValue ? { hp: hpValue } : void 0;
241
- const verifiedSolution = await providerApi.submitPuzzleCaptchaSolution(
242
- challenge,
243
- getAccount().account.account.address,
244
- getDappAccount(),
245
- finalX,
246
- finalY,
247
- puzzleEvents,
248
- userTimestampSignature.signature.toString(),
249
- encryptedBehavioralData,
250
- salt,
251
- simdReadings,
252
- clientMetaData
253
- );
254
- if (verifiedSolution[types.ApiParams.verified]) {
255
- updateState({
256
- isHuman: true,
257
- loading: false
258
- });
259
- events.onHuman(
260
- types.encodeProcaptchaOutput({
261
- [types.ApiParams.providerUrl]: providerUrl,
262
- [types.ApiParams.user]: getAccount().account.account.address,
263
- [types.ApiParams.dapp]: getDappAccount(),
264
- [types.ApiParams.challenge]: challenge.challenge,
265
- [types.ApiParams.timestamp]: challenge.timestamp,
266
- [types.ApiParams.signature]: {
267
- [types.ApiParams.provider]: challenge.signature.provider,
268
- [types.ApiParams.user]: {
269
- [types.ApiParams.timestamp]: userTimestampSignature.signature.toString()
270
- }
271
- },
272
- [types.ApiParams.captchaType]: types.CaptchaType.puzzle
273
- })
274
- );
275
- setValidChallengeTimeout();
276
- return true;
277
- }
278
- onFailed();
279
- return false;
280
- } catch (error) {
281
- updateState({ loading: false });
282
- throw error;
283
- }
284
- };
285
- return {
286
- start,
287
- submitSolution,
288
- resetState
289
- };
1
+ let _prosopo_procaptcha_common = require("@prosopo/procaptcha-common");
2
+ let _prosopo_types = require("@prosopo/types");
3
+ let _polkadot_util_string = require("@polkadot/util/string");
4
+ let _prosopo_api = require("@prosopo/api");
5
+ let _prosopo_common = require("@prosopo/common");
6
+ let _prosopo_util = require("@prosopo/util");
7
+ let _prosopo_util_crypto = require("@prosopo/util-crypto");
8
+ //#region src/services/Manager.ts
9
+ var Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState, getHoneypotValue) => {
10
+ const events = (0, _prosopo_procaptcha_common.getDefaultEvents)(callbacks);
11
+ let storedChallengeResponse;
12
+ let storedProviderApi;
13
+ let storedProviderUrl;
14
+ let storedUser;
15
+ let storedClickX;
16
+ let storedClickY;
17
+ let previousProviderUrl;
18
+ const defaultState = () => {
19
+ return {
20
+ showModal: false,
21
+ loading: false,
22
+ index: 0,
23
+ challenge: void 0,
24
+ solutions: void 0,
25
+ isHuman: false,
26
+ captchaApi: void 0,
27
+ account: void 0
28
+ };
29
+ };
30
+ const clearTimeout = () => {
31
+ window.clearTimeout(Number(state.timeout));
32
+ updateState({ timeout: void 0 });
33
+ };
34
+ const onFailed = () => {
35
+ updateState({
36
+ isHuman: false,
37
+ loading: false
38
+ });
39
+ events.onFailed();
40
+ resetState(frictionlessState?.restart);
41
+ };
42
+ const clearSuccessfulChallengeTimeout = () => {
43
+ window.clearTimeout(Number(state.successfullChallengeTimeout));
44
+ updateState({ successfullChallengeTimeout: void 0 });
45
+ };
46
+ const getConfig = () => {
47
+ const config = {
48
+ userAccountAddress: configInput.userAccountAddress || "",
49
+ ...configInput
50
+ };
51
+ if (state.account) config.userAccountAddress = state.account.account.address;
52
+ return _prosopo_types.ProcaptchaConfigSchema.parse(config);
53
+ };
54
+ const getAccount = () => {
55
+ if (!state.account) throw new _prosopo_common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account not loaded" } });
56
+ return { account: state.account };
57
+ };
58
+ const getDappAccount = () => {
59
+ if (!state.dappAccount) throw new _prosopo_common.ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
60
+ return state.dappAccount;
61
+ };
62
+ const updateState = (0, _prosopo_procaptcha_common.buildUpdateState)(state, onStateUpdate);
63
+ const resetState = (frictionlessRestart) => {
64
+ clearTimeout();
65
+ clearSuccessfulChallengeTimeout();
66
+ updateState(defaultState());
67
+ events.onReset();
68
+ if (frictionlessRestart) frictionlessRestart();
69
+ storedChallengeResponse = void 0;
70
+ storedProviderApi = void 0;
71
+ storedProviderUrl = void 0;
72
+ storedUser = void 0;
73
+ storedClickX = void 0;
74
+ storedClickY = void 0;
75
+ };
76
+ const setValidChallengeTimeout = () => {
77
+ const timeMillis = getConfig().captchas.puzzle.solutionTimeout;
78
+ const successfullChallengeTimeout = setTimeout(() => {
79
+ updateState({ isHuman: false });
80
+ events.onExpired();
81
+ resetState(frictionlessState?.restart);
82
+ }, timeMillis);
83
+ updateState({ successfullChallengeTimeout });
84
+ };
85
+ const start = async (x = 0, y = 0) => {
86
+ await (0, _prosopo_procaptcha_common.providerRetry)(async () => {
87
+ if (state.loading) return;
88
+ if (state.isHuman) return;
89
+ resetState();
90
+ storedClickX = x;
91
+ storedClickY = y;
92
+ updateState({ loading: true });
93
+ updateState({ attemptCount: state.attemptCount + 1 });
94
+ const config = getConfig();
95
+ const selectAccount = async () => {
96
+ if (frictionlessState) return frictionlessState.userAccount;
97
+ return new (await ((0, _prosopo_procaptcha_common.ExtensionLoader)(config.web2)))().getAccount(config);
98
+ };
99
+ const user = await selectAccount();
100
+ const userAccount = user.account.address;
101
+ updateState({ account: { account: { address: userAccount } } });
102
+ updateState({ dappAccount: config.account.address });
103
+ await (0, _prosopo_util.sleep)(100);
104
+ if (!config.web2 && !config.userAccountAddress) throw new _prosopo_common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account address has not been set for web3 mode" } });
105
+ let getRandomProviderResponse = void 0;
106
+ if (frictionlessState?.provider) getRandomProviderResponse = frictionlessState.provider;
107
+ else {
108
+ const currentConfig = getConfig();
109
+ getRandomProviderResponse = await (0, _prosopo_procaptcha_common.getProcaptchaRandomActiveProvider)(currentConfig.defaultEnvironment, (0, _prosopo_procaptcha_common.pickIpMode)(currentConfig), {
110
+ attempt: state.attemptCount,
111
+ excludeUrl: previousProviderUrl
112
+ });
113
+ }
114
+ const providerUrl = getRandomProviderResponse.provider.url;
115
+ previousProviderUrl = providerUrl;
116
+ const providerApi = new _prosopo_api.ProviderApi(providerUrl, getDappAccount());
117
+ const simdReadingsOnChallenge = frictionlessState?.getSimdReadings ? await frictionlessState.getSimdReadings(0) : void 0;
118
+ const challenge = await providerApi.getPuzzleCaptchaChallenge(userAccount, getDappAccount(), frictionlessState?.sessionId, simdReadingsOnChallenge);
119
+ if (challenge.error) {
120
+ updateState({
121
+ loading: false,
122
+ error: {
123
+ message: challenge.error.message,
124
+ key: challenge.error.key || "API.UNKNOWN_ERROR"
125
+ }
126
+ });
127
+ return;
128
+ }
129
+ storedChallengeResponse = challenge;
130
+ storedProviderApi = providerApi;
131
+ storedProviderUrl = providerUrl;
132
+ storedUser = user;
133
+ updateState({ loading: false });
134
+ }, async () => {
135
+ await start(x, y);
136
+ }, () => {
137
+ resetState();
138
+ }, state.attemptCount, 3);
139
+ return storedChallengeResponse;
140
+ };
141
+ const submitSolution = async (finalX, finalY, puzzleEvents) => {
142
+ if (!storedChallengeResponse || !storedProviderApi || !storedProviderUrl || !storedUser) throw new _prosopo_common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "No challenge data available. Call start() first." } });
143
+ updateState({ loading: true });
144
+ try {
145
+ const challenge = storedChallengeResponse;
146
+ const providerApi = storedProviderApi;
147
+ const providerUrl = storedProviderUrl;
148
+ const user = storedUser;
149
+ getConfig();
150
+ const signer = user.extension?.signer;
151
+ if (!signer || !signer.signRaw) throw new _prosopo_common.ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", { context: { error: "Signer is not defined, cannot sign message to prove account ownership" } });
152
+ const userTimestampSignature = await signer.signRaw({
153
+ address: user.account.address,
154
+ data: (0, _polkadot_util_string.stringToHex)(challenge[_prosopo_types.ApiParams.timestamp].toString()),
155
+ type: "bytes"
156
+ });
157
+ let encryptedBehavioralData;
158
+ if (frictionlessState?.encryptBehavioralData && (frictionlessState?.behaviorCollector1 || frictionlessState?.behaviorCollector2 || frictionlessState?.behaviorCollector3)) try {
159
+ const behavioralData = {
160
+ collector1: frictionlessState.behaviorCollector1?.getData() || [],
161
+ collector2: frictionlessState.behaviorCollector2?.getData() || [],
162
+ collector3: frictionlessState.behaviorCollector3?.getData() || [],
163
+ deviceCapability: frictionlessState.deviceCapability || "unknown"
164
+ };
165
+ const dataToEncrypt = frictionlessState.packBehavioralData ? frictionlessState.packBehavioralData(behavioralData) : behavioralData;
166
+ encryptedBehavioralData = await frictionlessState.encryptBehavioralData(JSON.stringify(dataToEncrypt));
167
+ } catch {}
168
+ let salt;
169
+ if (storedClickX !== void 0 && storedClickY !== void 0) {
170
+ const coords = [storedClickX, storedClickY];
171
+ const randomSalt = (0, _prosopo_util_crypto.randomAsHex)(coords.map((coord) => coord.toString(16).length + 4).reduce((acc, curr) => acc + curr, 0));
172
+ salt = (0, _prosopo_util.embedData)(randomSalt, coords);
173
+ }
174
+ const simdReadings = await (0, _prosopo_procaptcha_common.getSimdReadingsForSubmit)(frictionlessState);
175
+ const hpValue = getHoneypotValue?.();
176
+ const clientMetaData = hpValue ? { hp: hpValue } : void 0;
177
+ if ((await providerApi.submitPuzzleCaptchaSolution(challenge, getAccount().account.account.address, getDappAccount(), finalX, finalY, puzzleEvents, userTimestampSignature.signature.toString(), encryptedBehavioralData, salt, simdReadings, clientMetaData))[_prosopo_types.ApiParams.verified]) {
178
+ updateState({
179
+ isHuman: true,
180
+ loading: false
181
+ });
182
+ events.onHuman((0, _prosopo_types.encodeProcaptchaOutput)({
183
+ [_prosopo_types.ApiParams.providerUrl]: providerUrl,
184
+ [_prosopo_types.ApiParams.user]: getAccount().account.account.address,
185
+ [_prosopo_types.ApiParams.dapp]: getDappAccount(),
186
+ [_prosopo_types.ApiParams.challenge]: challenge.challenge,
187
+ [_prosopo_types.ApiParams.timestamp]: challenge.timestamp,
188
+ [_prosopo_types.ApiParams.signature]: {
189
+ [_prosopo_types.ApiParams.provider]: challenge.signature.provider,
190
+ [_prosopo_types.ApiParams.user]: { [_prosopo_types.ApiParams.timestamp]: userTimestampSignature.signature.toString() }
191
+ },
192
+ [_prosopo_types.ApiParams.captchaType]: _prosopo_types.CaptchaType.puzzle
193
+ }));
194
+ setValidChallengeTimeout();
195
+ return true;
196
+ }
197
+ onFailed();
198
+ return false;
199
+ } catch (error) {
200
+ updateState({ loading: false });
201
+ throw error;
202
+ }
203
+ };
204
+ return {
205
+ start,
206
+ submitSolution,
207
+ resetState
208
+ };
290
209
  };
210
+ //#endregion
291
211
  exports.Manager = Manager;
@@ -1,9 +1,7 @@
1
+ import { Suspense, lazy } from "react";
1
2
  import { jsx } from "@emotion/react/jsx-runtime";
2
- import { lazy, Suspense } from "react";
3
- const ProcaptchaWidget = lazy(
4
- async () => import("./ProcaptchaWidget.js")
5
- );
6
- const ProcaptchaPuzzle = (props) => /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(ProcaptchaWidget, { ...props }) });
7
- export {
8
- ProcaptchaPuzzle
9
- };
3
+ //#region src/components/ProcaptchaPuzzle.tsx
4
+ var ProcaptchaWidget = lazy(async () => import("./ProcaptchaWidget.js"));
5
+ var ProcaptchaPuzzle = (props) => /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(ProcaptchaWidget, { ...props }) });
6
+ //#endregion
7
+ export { ProcaptchaPuzzle };
@@ -1 +1 @@
1
- {"version":3,"file":"ProcaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,QAAA,MAAM,UAAU,UAAW,eAAe,qDA+PzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ProcaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,QAAA,MAAM,UAAU,UAAW,eAAe,qDA0QzC,CAAC;AAEF,eAAe,UAAU,CAAC"}