@prosopo/procaptcha 2.0.3 → 2.1.1

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.
@@ -1,301 +1,329 @@
1
1
  import { cryptoWaitReady } from "@polkadot/util-crypto";
2
2
  import { randomAsHex } from "@polkadot/util-crypto/random";
3
+ import { stringToHex } from "@polkadot/util/string";
3
4
  import { ExtensionWeb2, ExtensionWeb3 } from "@prosopo/account";
4
5
  import { ProviderApi } from "@prosopo/api";
5
- import { ProsopoDatasetError, ProsopoEnvError, ProsopoError, } from "@prosopo/common";
6
- import { loadBalancer } from "@prosopo/load-balancer";
7
- import { buildUpdateState, getDefaultEvents } from "@prosopo/procaptcha-common";
8
- import { ApiParams, ProcaptchaConfigSchema, encodeProcaptchaOutput, } from "@prosopo/types";
6
+ import {
7
+ ProsopoDatasetError,
8
+ ProsopoEnvError,
9
+ ProsopoError
10
+ } from "@prosopo/common";
11
+ import {
12
+ buildUpdateState,
13
+ getDefaultEvents,
14
+ getRandomActiveProvider,
15
+ providerRetry
16
+ } from "@prosopo/procaptcha-common";
17
+ import {
18
+ ApiParams,
19
+ ProcaptchaConfigSchema,
20
+ encodeProcaptchaOutput
21
+ } from "@prosopo/types";
9
22
  import { at, hashToHex } from "@prosopo/util";
10
23
  import { sleep } from "../utils/utils.js";
11
24
  import ProsopoCaptchaApi from "./ProsopoCaptchaApi.js";
12
25
  import storage from "./storage.js";
13
- import { stringToHex } from "@polkadot/util/string";
14
26
  const defaultState = () => {
15
- return {
16
- showModal: false,
17
- loading: false,
18
- index: 0,
19
- challenge: undefined,
20
- solutions: undefined,
21
- isHuman: false,
22
- captchaApi: undefined,
23
- account: undefined,
24
- };
27
+ return {
28
+ // note order matters! see buildUpdateState. These fields are set in order, so disable modal first, then set loading to false, etc.
29
+ showModal: false,
30
+ loading: false,
31
+ index: 0,
32
+ challenge: void 0,
33
+ solutions: void 0,
34
+ isHuman: false,
35
+ captchaApi: void 0,
36
+ account: void 0
37
+ // don't handle timeout here, this should be handled by the state management
38
+ };
25
39
  };
26
- const getRandomActiveProvider = (config) => {
27
- const randomIntBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
28
- const PROVIDERS = loadBalancer(config.defaultEnvironment);
29
- const randomProvderObj = at(PROVIDERS, randomIntBetween(0, PROVIDERS.length - 1));
30
- return {
31
- providerAccount: randomProvderObj.address,
32
- provider: {
33
- url: randomProvderObj.url,
34
- datasetId: randomProvderObj.datasetId,
35
- datasetIdContent: randomProvderObj.datasetIdContent,
36
- },
40
+ function Manager(configOptional, state, onStateUpdate, callbacks) {
41
+ const events = getDefaultEvents(onStateUpdate, state, callbacks);
42
+ const updateState = buildUpdateState(state, onStateUpdate);
43
+ const getConfig = () => {
44
+ const config = {
45
+ userAccountAddress: "",
46
+ ...configOptional
37
47
  };
38
- };
39
- export function Manager(configOptional, state, onStateUpdate, callbacks) {
40
- const events = getDefaultEvents(onStateUpdate, state, callbacks);
41
- const dispatchErrorEvent = (err) => {
42
- const error = err instanceof Error ? err : new Error(String(err));
43
- events.onError(error);
44
- };
45
- const updateState = buildUpdateState(state, onStateUpdate);
46
- const getConfig = () => {
47
- const config = {
48
- userAccountAddress: "",
49
- ...configOptional,
50
- };
51
- if (state.account) {
52
- config.userAccountAddress = state.account.account.address;
48
+ if (state.account) {
49
+ config.userAccountAddress = state.account.account.address;
50
+ }
51
+ return ProcaptchaConfigSchema.parse(config);
52
+ };
53
+ const start = async () => {
54
+ events.onOpen();
55
+ await providerRetry(
56
+ async () => {
57
+ if (state.loading) {
58
+ return;
53
59
  }
54
- return ProcaptchaConfigSchema.parse(config);
55
- };
56
- const fallable = async (fn) => {
57
- try {
58
- await fn();
60
+ if (state.isHuman) {
61
+ return;
59
62
  }
60
- catch (err) {
61
- console.error(err);
62
- dispatchErrorEvent(err);
63
+ await cryptoWaitReady();
64
+ resetState();
65
+ updateState({ loading: true });
66
+ updateState({
67
+ attemptCount: state.attemptCount ? state.attemptCount + 1 : 1
68
+ });
69
+ const config = getConfig();
70
+ updateState({ dappAccount: config.account.address });
71
+ await sleep(100);
72
+ const account = await loadAccount();
73
+ const getRandomProviderResponse = await getRandomActiveProvider(
74
+ getConfig()
75
+ );
76
+ const providerUrl = getRandomProviderResponse.provider.url;
77
+ const providerApi = await loadProviderApi(providerUrl);
78
+ const captchaApi = new ProsopoCaptchaApi(
79
+ account.account.address,
80
+ getRandomProviderResponse,
81
+ providerApi,
82
+ config.web2,
83
+ config.account.address || ""
84
+ );
85
+ updateState({ captchaApi });
86
+ const challenge = await captchaApi.getCaptchaChallenge();
87
+ if (challenge.error) {
88
+ updateState({
89
+ loading: false,
90
+ error: challenge.error
91
+ });
92
+ } else {
93
+ if (challenge.captchas.length <= 0) {
94
+ throw new ProsopoDatasetError("DEVELOPER.PROVIDER_NO_CAPTCHA");
95
+ }
96
+ const timeMillis = challenge.captchas.map(
97
+ (captcha) => captcha.timeLimitMs || config.captchas.image.challengeTimeout
98
+ ).reduce((a, b) => a + b);
99
+ const timeout = setTimeout(() => {
100
+ events.onChallengeExpired();
63
101
  updateState({ isHuman: false, showModal: false, loading: false });
102
+ }, timeMillis);
103
+ updateState({
104
+ index: 0,
105
+ solutions: challenge.captchas.map(() => []),
106
+ challenge,
107
+ showModal: true,
108
+ timeout
109
+ });
64
110
  }
65
- };
66
- const start = async () => {
67
- events.onOpen();
68
- await fallable(async () => {
69
- if (state.loading) {
70
- return;
71
- }
72
- if (state.isHuman) {
73
- return;
74
- }
75
- await cryptoWaitReady();
76
- resetState();
77
- updateState({ loading: true });
78
- const config = getConfig();
79
- updateState({ dappAccount: config.account.address });
80
- await sleep(100);
81
- const account = await loadAccount();
82
- const getRandomProviderResponse = getRandomActiveProvider(getConfig());
83
- const providerUrl = getRandomProviderResponse.provider.url;
84
- const providerApi = await loadProviderApi(providerUrl);
85
- const captchaApi = new ProsopoCaptchaApi(account.account.address, getRandomProviderResponse, providerApi, config.web2, config.account.address || "");
86
- updateState({ captchaApi });
87
- const challenge = await captchaApi.getCaptchaChallenge();
88
- if (challenge.captchas.length <= 0) {
89
- throw new ProsopoDatasetError("DEVELOPER.PROVIDER_NO_CAPTCHA");
90
- }
91
- const timeMillis = challenge.captchas
92
- .map((captcha) => captcha.timeLimitMs || config.captchas.image.challengeTimeout)
93
- .reduce((a, b) => a + b);
94
- const timeout = setTimeout(() => {
95
- events.onChallengeExpired();
96
- updateState({ isHuman: false, showModal: false, loading: false });
97
- }, timeMillis);
98
- updateState({
99
- index: 0,
100
- solutions: challenge.captchas.map(() => []),
101
- challenge,
102
- showModal: true,
103
- timeout,
104
- });
105
- });
106
- };
107
- const submit = async () => {
108
- await fallable(async () => {
109
- clearTimeout();
110
- if (!state.challenge) {
111
- throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
112
- context: { error: "Cannot submit, no Captcha found in state" },
113
- });
114
- }
115
- updateState({ showModal: false });
116
- const challenge = state.challenge;
117
- const salt = randomAsHex();
118
- const captchaSolution = state.challenge.captchas.map((captcha, index) => {
119
- const solution = at(state.solutions, index);
120
- return {
121
- captchaId: captcha.captchaId,
122
- captchaContentId: captcha.captchaContentId,
123
- salt,
124
- solution,
125
- };
126
- });
127
- const account = getAccount();
128
- const signer = getExtension(account).signer;
129
- const first = at(challenge.captchas, 0);
130
- if (!first.datasetId) {
131
- throw new ProsopoDatasetError("CAPTCHA.INVALID_CAPTCHA_ID", {
132
- context: { error: "No datasetId set for challenge" },
133
- });
134
- }
135
- const captchaApi = state.captchaApi;
136
- if (!captchaApi) {
137
- throw new ProsopoError("CAPTCHA.INVALID_TOKEN", {
138
- context: { error: "No Captcha API found in state" },
139
- });
140
- }
141
- if (!signer || !signer.signRaw) {
142
- throw new ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", {
143
- context: {
144
- error: "Signer is not defined, cannot sign message to prove account ownership",
145
- },
146
- });
147
- }
148
- const userRequestHashSignature = await signer.signRaw({
149
- address: account.account.address,
150
- data: stringToHex(challenge.requestHash),
151
- type: "bytes",
152
- });
153
- const submission = await captchaApi.submitCaptchaSolution(userRequestHashSignature.signature, challenge.requestHash, captchaSolution, challenge.timestamp, challenge.signature.provider.requestHash);
154
- const isHuman = submission[0].verified;
155
- if (!isHuman) {
156
- events.onFailed();
157
- }
158
- updateState({
159
- submission,
160
- isHuman,
161
- loading: false,
162
- });
163
- if (state.isHuman) {
164
- const providerUrl = captchaApi.provider.provider.url;
165
- storage.setProcaptchaStorage({
166
- ...storage.getProcaptchaStorage(),
167
- providerUrl,
168
- });
169
- events.onHuman(encodeProcaptchaOutput({
170
- [ApiParams.providerUrl]: providerUrl,
171
- [ApiParams.user]: account.account.address,
172
- [ApiParams.dapp]: getDappAccount(),
173
- [ApiParams.commitmentId]: hashToHex(submission[1]),
174
- [ApiParams.timestamp]: challenge.timestamp,
175
- [ApiParams.signature]: {
176
- [ApiParams.provider]: {
177
- [ApiParams.requestHash]: challenge.signature.provider.requestHash,
178
- },
179
- [ApiParams.user]: {
180
- [ApiParams.requestHash]: userRequestHashSignature.signature,
181
- },
182
- },
183
- }));
184
- setValidChallengeTimeout();
185
- }
186
- });
187
- };
188
- const cancel = async () => {
111
+ },
112
+ start,
113
+ resetState,
114
+ state.attemptCount,
115
+ 10
116
+ );
117
+ };
118
+ const submit = async () => {
119
+ await providerRetry(
120
+ async () => {
189
121
  clearTimeout();
190
- resetState();
191
- events.onClose();
192
- };
193
- const select = (hash) => {
194
122
  if (!state.challenge) {
195
- throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
196
- context: { error: "Cannot select, no Captcha found in state" },
197
- });
123
+ throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
124
+ context: { error: "Cannot submit, no Captcha found in state" }
125
+ });
198
126
  }
199
- if (state.index >= state.challenge.captchas.length || state.index < 0) {
200
- throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
201
- context: {
202
- error: "Cannot select, index is out of range for this Captcha",
203
- },
204
- });
127
+ updateState({ showModal: false });
128
+ const challenge = state.challenge;
129
+ const salt = randomAsHex();
130
+ const captchaSolution = state.challenge.captchas.map(
131
+ (captcha, index) => {
132
+ const solution = at(state.solutions, index);
133
+ return {
134
+ captchaId: captcha.captchaId,
135
+ captchaContentId: captcha.captchaContentId,
136
+ salt,
137
+ solution
138
+ };
139
+ }
140
+ );
141
+ const account = getAccount();
142
+ const signer = getExtension(account).signer;
143
+ const first = at(challenge.captchas, 0);
144
+ if (!first.datasetId) {
145
+ throw new ProsopoDatasetError("CAPTCHA.INVALID_CAPTCHA_ID", {
146
+ context: { error: "No datasetId set for challenge" }
147
+ });
205
148
  }
206
- const index = state.index;
207
- const solutions = state.solutions;
208
- const solution = at(solutions, index);
209
- if (solution.includes(hash)) {
210
- solution.splice(solution.indexOf(hash), 1);
149
+ const captchaApi = state.captchaApi;
150
+ if (!captchaApi) {
151
+ throw new ProsopoError("CAPTCHA.INVALID_TOKEN", {
152
+ context: { error: "No Captcha API found in state" }
153
+ });
211
154
  }
212
- else {
213
- solution.push(hash);
155
+ if (!signer || !signer.signRaw) {
156
+ throw new ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", {
157
+ context: {
158
+ error: "Signer is not defined, cannot sign message to prove account ownership"
159
+ }
160
+ });
214
161
  }
215
- updateState({ solutions });
216
- };
217
- const nextRound = () => {
218
- if (!state.challenge) {
219
- throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
220
- context: { error: "Cannot select, no Captcha found in state" },
221
- });
162
+ const userRequestHashSignature = await signer.signRaw({
163
+ address: account.account.address,
164
+ data: stringToHex(challenge.requestHash),
165
+ type: "bytes"
166
+ });
167
+ const submission = await captchaApi.submitCaptchaSolution(
168
+ userRequestHashSignature.signature,
169
+ challenge.requestHash,
170
+ captchaSolution,
171
+ challenge.timestamp,
172
+ challenge.signature.provider.requestHash
173
+ );
174
+ const isHuman = submission[0].verified;
175
+ if (!isHuman) {
176
+ events.onFailed();
222
177
  }
223
- if (state.index + 1 >= state.challenge.captchas.length) {
224
- throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
225
- context: {
226
- error: "Cannot select, index is out of range for this Captcha",
178
+ updateState({
179
+ submission,
180
+ isHuman,
181
+ loading: false
182
+ });
183
+ if (state.isHuman) {
184
+ const providerUrl = captchaApi.provider.provider.url;
185
+ storage.setProcaptchaStorage({
186
+ ...storage.getProcaptchaStorage(),
187
+ providerUrl
188
+ });
189
+ events.onHuman(
190
+ encodeProcaptchaOutput({
191
+ [ApiParams.providerUrl]: providerUrl,
192
+ [ApiParams.user]: account.account.address,
193
+ [ApiParams.dapp]: getDappAccount(),
194
+ [ApiParams.commitmentId]: hashToHex(submission[1]),
195
+ [ApiParams.timestamp]: challenge.timestamp,
196
+ [ApiParams.signature]: {
197
+ [ApiParams.provider]: {
198
+ [ApiParams.requestHash]: challenge.signature.provider.requestHash
227
199
  },
228
- });
229
- }
230
- updateState({ index: state.index + 1 });
231
- };
232
- const loadProviderApi = async (providerUrl) => {
233
- const config = getConfig();
234
- if (!config.account.address) {
235
- throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
236
- }
237
- return new ProviderApi(providerUrl, config.account.address);
238
- };
239
- const clearTimeout = () => {
240
- window.clearTimeout(state.timeout);
241
- updateState({ timeout: undefined });
242
- };
243
- const setValidChallengeTimeout = () => {
244
- const timeMillis = configOptional.captchas.image.solutionTimeout;
245
- const successfullChallengeTimeout = setTimeout(() => {
246
- updateState({ isHuman: false });
247
- events.onExpired();
248
- }, timeMillis);
249
- updateState({ successfullChallengeTimeout });
250
- };
251
- const resetState = () => {
252
- clearTimeout();
253
- updateState(defaultState());
254
- };
255
- const loadAccount = async () => {
256
- const config = getConfig();
257
- if (!config.web2 && !config.userAccountAddress) {
258
- throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
259
- context: { error: "Account address has not been set for web3 mode" },
260
- });
261
- }
262
- const ext = config.web2 ? new ExtensionWeb2() : new ExtensionWeb3();
263
- const account = await ext.getAccount(config);
264
- storage.setAccount(account.account.address);
265
- updateState({ account });
266
- return getAccount();
267
- };
268
- const getAccount = () => {
269
- if (!state.account) {
270
- throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
271
- context: { error: "Account not loaded" },
272
- });
200
+ [ApiParams.user]: {
201
+ [ApiParams.requestHash]: userRequestHashSignature.signature
202
+ }
203
+ }
204
+ })
205
+ );
206
+ setValidChallengeTimeout();
273
207
  }
274
- const account = state.account;
275
- return account;
276
- };
277
- const getDappAccount = () => {
278
- if (!state.dappAccount) {
279
- throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
208
+ },
209
+ start,
210
+ resetState,
211
+ state.attemptCount,
212
+ 10
213
+ );
214
+ };
215
+ const cancel = async () => {
216
+ clearTimeout();
217
+ resetState();
218
+ events.onClose();
219
+ };
220
+ const select = (hash) => {
221
+ if (!state.challenge) {
222
+ throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
223
+ context: { error: "Cannot select, no Captcha found in state" }
224
+ });
225
+ }
226
+ if (state.index >= state.challenge.captchas.length || state.index < 0) {
227
+ throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
228
+ context: {
229
+ error: "Cannot select, index is out of range for this Captcha"
280
230
  }
281
- const dappAccount = state.dappAccount;
282
- return dappAccount;
283
- };
284
- const getExtension = (possiblyAccount) => {
285
- const account = possiblyAccount || getAccount();
286
- if (!account.extension) {
287
- throw new ProsopoEnvError("ACCOUNT.NO_POLKADOT_EXTENSION", {
288
- context: { error: "Extension not loaded" },
289
- });
231
+ });
232
+ }
233
+ const index = state.index;
234
+ const solutions = state.solutions;
235
+ const solution = at(solutions, index);
236
+ if (solution.includes(hash)) {
237
+ solution.splice(solution.indexOf(hash), 1);
238
+ } else {
239
+ solution.push(hash);
240
+ }
241
+ updateState({ solutions });
242
+ };
243
+ const nextRound = () => {
244
+ if (!state.challenge) {
245
+ throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
246
+ context: { error: "Cannot select, no Captcha found in state" }
247
+ });
248
+ }
249
+ if (state.index + 1 >= state.challenge.captchas.length) {
250
+ throw new ProsopoError("CAPTCHA.NO_CAPTCHA", {
251
+ context: {
252
+ error: "Cannot select, index is out of range for this Captcha"
290
253
  }
291
- return account.extension;
292
- };
293
- return {
294
- start,
295
- cancel,
296
- submit,
297
- select,
298
- nextRound,
299
- };
254
+ });
255
+ }
256
+ updateState({ index: state.index + 1 });
257
+ };
258
+ const loadProviderApi = async (providerUrl) => {
259
+ const config = getConfig();
260
+ if (!config.account.address) {
261
+ throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
262
+ }
263
+ return new ProviderApi(providerUrl, config.account.address);
264
+ };
265
+ const clearTimeout = () => {
266
+ window.clearTimeout(state.timeout);
267
+ updateState({ timeout: void 0 });
268
+ };
269
+ const setValidChallengeTimeout = () => {
270
+ const timeMillis = configOptional.captchas.image.solutionTimeout;
271
+ const successfullChallengeTimeout = setTimeout(() => {
272
+ updateState({ isHuman: false });
273
+ events.onExpired();
274
+ }, timeMillis);
275
+ updateState({ successfullChallengeTimeout });
276
+ };
277
+ const resetState = () => {
278
+ clearTimeout();
279
+ updateState(defaultState());
280
+ };
281
+ const loadAccount = async () => {
282
+ const config = getConfig();
283
+ if (!config.web2 && !config.userAccountAddress) {
284
+ throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
285
+ context: { error: "Account address has not been set for web3 mode" }
286
+ });
287
+ }
288
+ const ext = config.web2 ? new ExtensionWeb2() : new ExtensionWeb3();
289
+ const account = await ext.getAccount(config);
290
+ storage.setAccount(account.account.address);
291
+ updateState({ account });
292
+ return getAccount();
293
+ };
294
+ const getAccount = () => {
295
+ if (!state.account) {
296
+ throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
297
+ context: { error: "Account not loaded" }
298
+ });
299
+ }
300
+ const account = state.account;
301
+ return account;
302
+ };
303
+ const getDappAccount = () => {
304
+ if (!state.dappAccount) {
305
+ throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
306
+ }
307
+ const dappAccount = state.dappAccount;
308
+ return dappAccount;
309
+ };
310
+ const getExtension = (possiblyAccount) => {
311
+ const account = possiblyAccount || getAccount();
312
+ if (!account.extension) {
313
+ throw new ProsopoEnvError("ACCOUNT.NO_POLKADOT_EXTENSION", {
314
+ context: { error: "Extension not loaded" }
315
+ });
316
+ }
317
+ return account.extension;
318
+ };
319
+ return {
320
+ start,
321
+ cancel,
322
+ submit,
323
+ select,
324
+ nextRound
325
+ };
300
326
  }
301
- //# sourceMappingURL=Manager.js.map
327
+ export {
328
+ Manager
329
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/modules/Manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/modules/Manager.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ProviderApi } from "@prosopo/api";
2
- import type { CaptchaResponseBody, CaptchaSolution, ProsopoCaptchaApiInterface, RandomProvider } from "@prosopo/types";
2
+ import { type CaptchaResponseBody, type CaptchaSolution, type ProcaptchaApiInterface, type RandomProvider } from "@prosopo/types";
3
3
  import type { TCaptchaSubmitResult } from "@prosopo/types";
4
- export declare class ProsopoCaptchaApi implements ProsopoCaptchaApiInterface {
4
+ export declare class ProsopoCaptchaApi implements ProcaptchaApiInterface {
5
5
  userAccount: string;
6
6
  provider: RandomProvider;
7
7
  providerApi: ProviderApi;
@@ -1 +1 @@
1
- {"version":3,"file":"ProsopoCaptchaApi.d.ts","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaApi.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAEf,0BAA0B,EAC1B,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,qBAAa,iBAAkB,YAAW,0BAA0B;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;gBAGb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,MAAM;IASrB,IAAI,IAAI,IAAI,OAAO,CAElB;IAEY,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAyBnD,qBAAqB,CAChC,wBAAwB,EAAE,MAAM,EAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,eAAe,EAAE,EAC5B,SAAS,EAAE,MAAM,EACjB,4BAA4B,EAAE,MAAM,GACnC,OAAO,CAAC,oBAAoB,CAAC;CAsCjC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ProsopoCaptchaApi.d.ts","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaApi.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAEpB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,qBAAa,iBAAkB,YAAW,sBAAsB;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;gBAGd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,MAAM;IASpB,IAAI,IAAI,IAAI,OAAO,CAElB;IAEY,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA8BnD,qBAAqB,CACjC,wBAAwB,EAAE,MAAM,EAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,eAAe,EAAE,EAC5B,SAAS,EAAE,MAAM,EACjB,4BAA4B,EAAE,MAAM,GAClC,OAAO,CAAC,oBAAoB,CAAC;CAsChC;AAED,eAAe,iBAAiB,CAAC"}