@prosopo/procaptcha-common 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/procaptcha-common",
3
- "version": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -26,13 +26,13 @@
26
26
  },
27
27
  "browserslist": ["> 0.5%, last 2 versions, not dead"],
28
28
  "dependencies": {
29
- "@prosopo/common": "2.1.1",
30
- "@prosopo/load-balancer": "2.1.1",
31
- "@prosopo/types": "2.1.1",
32
- "@prosopo/util": "2.1.1"
29
+ "@prosopo/common": "2.1.2",
30
+ "@prosopo/load-balancer": "2.1.2",
31
+ "@prosopo/types": "2.1.2",
32
+ "@prosopo/util": "2.1.2"
33
33
  },
34
34
  "devDependencies": {
35
- "@prosopo/config": "2.1.1",
35
+ "@prosopo/config": "2.1.2",
36
36
  "@vitest/coverage-v8": "2.1.1",
37
37
  "concurrently": "9.0.1",
38
38
  "npm-run-all": "4.1.5",
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const alertError = (error) => {
4
- alert(error.message);
5
- };
6
- const getDefaultEvents = (stateUpdater, state, callbacks) => Object.assign(
7
- {
8
- onError: alertError,
9
- onHuman: (output) => {
10
- stateUpdater({ sendData: !state.sendData });
11
- },
12
- onExtensionNotFound: () => {
13
- alert("No extension found");
14
- },
15
- onFailed: () => {
16
- alert("Captcha challenge failed. Please try again");
17
- stateUpdater({ sendData: !state.sendData });
18
- },
19
- onExpired: () => {
20
- alert("Completed challenge has expired, please try again");
21
- },
22
- onChallengeExpired: () => {
23
- alert("Uncompleted challenge has expired, please try again");
24
- },
25
- onOpen: () => {
26
- console.info("captcha opened");
27
- },
28
- onClose: () => {
29
- console.info("captcha closed");
30
- }
31
- },
32
- callbacks
33
- );
34
- exports.getDefaultEvents = getDefaultEvents;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const events = require("./events.cjs");
4
- const providers = require("./providers.cjs");
5
- const builder = require("./state/builder.cjs");
6
- exports.getDefaultEvents = events.getDefaultEvents;
7
- exports.getRandomActiveProvider = providers.getRandomActiveProvider;
8
- exports.providerRetry = providers.providerRetry;
9
- exports.buildUpdateState = builder.buildUpdateState;
10
- exports.useProcaptcha = builder.useProcaptcha;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const loadBalancer = require("@prosopo/load-balancer");
4
- const util = require("@prosopo/util");
5
- const getRandomActiveProvider = async (config) => {
6
- const randomIntBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
7
- const PROVIDERS = await loadBalancer.loadBalancer(config.defaultEnvironment);
8
- const randomProvderObj = util.at(
9
- PROVIDERS,
10
- randomIntBetween(0, PROVIDERS.length - 1)
11
- );
12
- return {
13
- providerAccount: randomProvderObj.address,
14
- provider: {
15
- url: randomProvderObj.url,
16
- datasetId: randomProvderObj.datasetId
17
- }
18
- };
19
- };
20
- const providerRetry = async (currentFn, retryFn, stateReset, attemptCount, retryMax) => {
21
- try {
22
- await currentFn();
23
- } catch (err) {
24
- if (attemptCount >= retryMax) {
25
- console.error(err);
26
- console.error(
27
- `Max retries (${attemptCount} of ${retryMax}) reached, aborting`
28
- );
29
- return stateReset();
30
- }
31
- console.error(err);
32
- stateReset();
33
- await retryFn();
34
- }
35
- };
36
- exports.getRandomActiveProvider = getRandomActiveProvider;
37
- exports.providerRetry = providerRetry;
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const buildUpdateState = (state, onStateUpdate) => (nextState) => {
4
- Object.assign(state, nextState);
5
- onStateUpdate(nextState);
6
- };
7
- const useRefAsState = (useRef, defaultValue) => {
8
- const ref = useRef(defaultValue);
9
- const setter = (value2) => {
10
- ref.current = value2;
11
- };
12
- const value = ref.current;
13
- return [value, setter];
14
- };
15
- const useProcaptcha = (useState, useRef) => {
16
- const [isHuman, setIsHuman] = useState(false);
17
- const [index, setIndex] = useState(0);
18
- const [solutions, setSolutions] = useState([]);
19
- const [captchaApi, setCaptchaApi] = useRefAsState(useRef, void 0);
20
- const [showModal, setShowModal] = useState(false);
21
- const [challenge, setChallenge] = useState(
22
- void 0
23
- );
24
- const [loading, setLoading] = useState(false);
25
- const [account, setAccount] = useState(void 0);
26
- const [dappAccount, setDappAccount] = useState(void 0);
27
- const [submission, setSubmission] = useRefAsState(useRef, void 0);
28
- const [timeout, setTimeout] = useRefAsState(
29
- useRef,
30
- void 0
31
- );
32
- const [successfullChallengeTimeout, setSuccessfullChallengeTimeout] = useRefAsState(useRef, void 0);
33
- const [sendData, setSendData] = useState(false);
34
- const [attemptCount, setAttemptCount] = useState(0);
35
- const [error, setError] = useState(void 0);
36
- return [
37
- // the state
38
- {
39
- isHuman,
40
- index,
41
- solutions,
42
- captchaApi,
43
- showModal,
44
- challenge,
45
- loading,
46
- account,
47
- dappAccount,
48
- submission,
49
- timeout,
50
- successfullChallengeTimeout,
51
- sendData,
52
- attemptCount,
53
- error
54
- },
55
- // and method to update the state
56
- (nextState) => {
57
- if (nextState.account !== void 0) setAccount(nextState.account);
58
- if (nextState.isHuman !== void 0) setIsHuman(nextState.isHuman);
59
- if (nextState.index !== void 0) setIndex(nextState.index);
60
- if (nextState.solutions !== void 0)
61
- setSolutions(nextState.solutions.slice());
62
- if (nextState.captchaApi !== void 0)
63
- setCaptchaApi(nextState.captchaApi);
64
- if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
65
- if (nextState.challenge !== void 0) setChallenge(nextState.challenge);
66
- if (nextState.loading !== void 0) setLoading(nextState.loading);
67
- if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
68
- if (nextState.dappAccount !== void 0)
69
- setDappAccount(nextState.dappAccount);
70
- if (nextState.submission !== void 0)
71
- setSubmission(nextState.submission);
72
- if (nextState.timeout !== void 0) setTimeout(nextState.timeout);
73
- if (nextState.successfullChallengeTimeout !== void 0)
74
- setSuccessfullChallengeTimeout(nextState.timeout);
75
- if (nextState.sendData !== void 0) setSendData(nextState.sendData);
76
- if (nextState.attemptCount !== void 0)
77
- setAttemptCount(nextState.attemptCount);
78
- if (nextState.error !== void 0) setError(nextState.error);
79
- }
80
- ];
81
- };
82
- exports.buildUpdateState = buildUpdateState;
83
- exports.useProcaptcha = useProcaptcha;
package/dist/events.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { ProcaptchaCallbacks, ProcaptchaEvents, ProcaptchaState, ProcaptchaStateUpdateFn } from "@prosopo/types";
2
- export declare const getDefaultEvents: (stateUpdater: ProcaptchaStateUpdateFn, state: ProcaptchaState, callbacks: ProcaptchaCallbacks) => ProcaptchaEvents;
3
- //# sourceMappingURL=events.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,MAAM,gBAAgB,CAAC;AAMxB,eAAO,MAAM,gBAAgB,iBACd,uBAAuB,SAC9B,eAAe,aACX,mBAAmB,KAC5B,gBAiCD,CAAC"}
package/dist/events.js DELETED
@@ -1,29 +0,0 @@
1
- const alertError = (error) => {
2
- alert(error.message);
3
- };
4
- export const getDefaultEvents = (stateUpdater, state, callbacks) => Object.assign({
5
- onError: alertError,
6
- onHuman: (output) => {
7
- stateUpdater({ sendData: !state.sendData });
8
- },
9
- onExtensionNotFound: () => {
10
- alert("No extension found");
11
- },
12
- onFailed: () => {
13
- alert("Captcha challenge failed. Please try again");
14
- stateUpdater({ sendData: !state.sendData });
15
- },
16
- onExpired: () => {
17
- alert("Completed challenge has expired, please try again");
18
- },
19
- onChallengeExpired: () => {
20
- alert("Uncompleted challenge has expired, please try again");
21
- },
22
- onOpen: () => {
23
- console.info("captcha opened");
24
- },
25
- onClose: () => {
26
- console.info("captcha closed");
27
- },
28
- }, callbacks);
29
- //# sourceMappingURL=events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,GAAG,CAAC,KAAmB,EAAE,EAAE;IAC1C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,YAAqC,EACrC,KAAsB,EACtB,SAA8B,EACX,EAAE,CACrB,MAAM,CAAC,MAAM,CACZ;IACC,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,CAAC,MAKT,EAAE,EAAE;QACJ,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,mBAAmB,EAAE,GAAG,EAAE;QACzB,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,EAAE,GAAG,EAAE;QACd,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACpD,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,SAAS,EAAE,GAAG,EAAE;QACf,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC5D,CAAC;IACD,kBAAkB,EAAE,GAAG,EAAE;QACxB,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,EAAE,GAAG,EAAE;QACZ,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE;QACb,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;CACD,EACD,SAAS,CACT,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from "./events.js";
2
- export * from "./providers.js";
3
- export * from "./state/builder.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
package/dist/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./events.js";
2
- export * from "./providers.js";
3
- export * from "./state/builder.js";
4
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { ProcaptchaClientConfigOutput, RandomProvider } from "@prosopo/types";
2
- export declare const getRandomActiveProvider: (config: ProcaptchaClientConfigOutput) => Promise<RandomProvider>;
3
- export declare const providerRetry: (currentFn: () => Promise<void>, retryFn: () => Promise<void>, stateReset: () => void, attemptCount: number, retryMax: number) => Promise<void>;
4
- //# sourceMappingURL=providers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,4BAA4B,EAC5B,cAAc,EACd,MAAM,gBAAgB,CAAC;AAGxB,eAAO,MAAM,uBAAuB,WAC3B,4BAA4B,KAClC,OAAO,CAAC,cAAc,CAoBxB,CAAC;AAEF,eAAO,MAAM,aAAa,cACd,MAAM,OAAO,CAAC,IAAI,CAAC,WACrB,MAAM,OAAO,CAAC,IAAI,CAAC,cAChB,MAAM,IAAI,gBACR,MAAM,YACV,MAAM,kBAkBhB,CAAC"}
package/dist/providers.js DELETED
@@ -1,30 +0,0 @@
1
- import { loadBalancer } from "@prosopo/load-balancer";
2
- import { at } from "@prosopo/util";
3
- export const getRandomActiveProvider = async (config) => {
4
- const randomIntBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
5
- const PROVIDERS = await loadBalancer(config.defaultEnvironment);
6
- const randomProvderObj = at(PROVIDERS, randomIntBetween(0, PROVIDERS.length - 1));
7
- return {
8
- providerAccount: randomProvderObj.address,
9
- provider: {
10
- url: randomProvderObj.url,
11
- datasetId: randomProvderObj.datasetId,
12
- },
13
- };
14
- };
15
- export const providerRetry = async (currentFn, retryFn, stateReset, attemptCount, retryMax) => {
16
- try {
17
- await currentFn();
18
- }
19
- catch (err) {
20
- if (attemptCount >= retryMax) {
21
- console.error(err);
22
- console.error(`Max retries (${attemptCount} of ${retryMax}) reached, aborting`);
23
- return stateReset();
24
- }
25
- console.error(err);
26
- stateReset();
27
- await retryFn();
28
- }
29
- };
30
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKtD,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC3C,MAAoC,EACV,EAAE;IAC5B,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CACrD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAKnD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEhE,MAAM,gBAAgB,GAAG,EAAE,CAC1B,SAAS,EACT,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CACzC,CAAC;IACF,OAAO;QACN,eAAe,EAAE,gBAAgB,CAAC,OAAO;QACzC,QAAQ,EAAE;YACT,GAAG,EAAE,gBAAgB,CAAC,GAAG;YACzB,SAAS,EAAE,gBAAgB,CAAC,SAAS;SACrC;KACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,SAA8B,EAC9B,OAA4B,EAC5B,UAAsB,EACtB,YAAoB,EACpB,QAAgB,EACf,EAAE;IACH,IAAI,CAAC;QACJ,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CACZ,gBAAgB,YAAY,OAAO,QAAQ,qBAAqB,CAChE,CAAC;YACF,OAAO,UAAU,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnB,UAAU,EAAE,CAAC;QAEb,MAAM,OAAO,EAAE,CAAC;IACjB,CAAC;AACF,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { ProcaptchaState, ProcaptchaStateUpdateFn } from "@prosopo/types";
2
- type useRefType = <T>(defaultValue: T) => {
3
- current: T;
4
- };
5
- type useStateType = <T>(defaultValue: T) => [T, (value: T) => void];
6
- export declare const buildUpdateState: (state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn) => (nextState: Partial<ProcaptchaState>) => void;
7
- export declare const useProcaptcha: (useState: useStateType, useRef: useRefType) => [ProcaptchaState, ProcaptchaStateUpdateFn];
8
- export {};
9
- //# sourceMappingURL=builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/state/builder.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAIX,eAAe,EACf,uBAAuB,EAEvB,MAAM,gBAAgB,CAAC;AAExB,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AACzD,KAAK,YAAY,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AAEpE,eAAO,MAAM,gBAAgB,UACpB,eAAe,iBAAiB,uBAAuB,iBACnD,OAAO,CAAC,eAAe,CAAC,SAMnC,CAAC;AAoBH,eAAO,MAAM,aAAa,aACf,YAAY,UACd,UAAU,KAChB,CAAC,eAAe,EAAE,uBAAuB,CAyE3C,CAAC"}
@@ -1,83 +0,0 @@
1
- export const buildUpdateState = (state, onStateUpdate) => (nextState) => {
2
- Object.assign(state, nextState);
3
- onStateUpdate(nextState);
4
- };
5
- const useRefAsState = (useRef, defaultValue) => {
6
- const ref = useRef(defaultValue);
7
- const setter = (value) => {
8
- ref.current = value;
9
- };
10
- const value = ref.current;
11
- return [value, setter];
12
- };
13
- export const useProcaptcha = (useState, useRef) => {
14
- const [isHuman, setIsHuman] = useState(false);
15
- const [index, setIndex] = useState(0);
16
- const [solutions, setSolutions] = useState([]);
17
- const [captchaApi, setCaptchaApi] = useRefAsState(useRef, undefined);
18
- const [showModal, setShowModal] = useState(false);
19
- const [challenge, setChallenge] = useState(undefined);
20
- const [loading, setLoading] = useState(false);
21
- const [account, setAccount] = useState(undefined);
22
- const [dappAccount, setDappAccount] = useState(undefined);
23
- const [submission, setSubmission] = useRefAsState(useRef, undefined);
24
- const [timeout, setTimeout] = useRefAsState(useRef, undefined);
25
- const [successfullChallengeTimeout, setSuccessfullChallengeTimeout] = useRefAsState(useRef, undefined);
26
- const [sendData, setSendData] = useState(false);
27
- const [attemptCount, setAttemptCount] = useState(0);
28
- const [error, setError] = useState(undefined);
29
- return [
30
- {
31
- isHuman,
32
- index,
33
- solutions,
34
- captchaApi,
35
- showModal,
36
- challenge,
37
- loading,
38
- account,
39
- dappAccount,
40
- submission,
41
- timeout,
42
- successfullChallengeTimeout,
43
- sendData,
44
- attemptCount,
45
- error,
46
- },
47
- (nextState) => {
48
- if (nextState.account !== undefined)
49
- setAccount(nextState.account);
50
- if (nextState.isHuman !== undefined)
51
- setIsHuman(nextState.isHuman);
52
- if (nextState.index !== undefined)
53
- setIndex(nextState.index);
54
- if (nextState.solutions !== undefined)
55
- setSolutions(nextState.solutions.slice());
56
- if (nextState.captchaApi !== undefined)
57
- setCaptchaApi(nextState.captchaApi);
58
- if (nextState.showModal !== undefined)
59
- setShowModal(nextState.showModal);
60
- if (nextState.challenge !== undefined)
61
- setChallenge(nextState.challenge);
62
- if (nextState.loading !== undefined)
63
- setLoading(nextState.loading);
64
- if (nextState.showModal !== undefined)
65
- setShowModal(nextState.showModal);
66
- if (nextState.dappAccount !== undefined)
67
- setDappAccount(nextState.dappAccount);
68
- if (nextState.submission !== undefined)
69
- setSubmission(nextState.submission);
70
- if (nextState.timeout !== undefined)
71
- setTimeout(nextState.timeout);
72
- if (nextState.successfullChallengeTimeout !== undefined)
73
- setSuccessfullChallengeTimeout(nextState.timeout);
74
- if (nextState.sendData !== undefined)
75
- setSendData(nextState.sendData);
76
- if (nextState.attemptCount !== undefined)
77
- setAttemptCount(nextState.attemptCount);
78
- if (nextState.error !== undefined)
79
- setError(nextState.error);
80
- },
81
- ];
82
- };
83
- //# sourceMappingURL=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/state/builder.ts"],"names":[],"mappings":"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"}