@prosopo/procaptcha-pow 0.3.2 → 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.
@@ -1,21 +1,5 @@
1
- import { ProcaptchaClientConfigInput } from '@prosopo/types';
2
- type ProcaptchaPowOutput = {
3
- user: string;
4
- dapp: string;
5
- commitmentId?: string | undefined;
6
- providerUrl?: string | undefined;
7
- blockNumber?: number | undefined;
1
+ import { ProcaptchaCallbacks, ProcaptchaClientConfigInput, ProcaptchaState, ProcaptchaStateUpdateFn } from '@prosopo/types';
2
+ export declare const Manager: (configInput: ProcaptchaClientConfigInput, state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn, callbacks: ProcaptchaCallbacks) => {
3
+ start: () => Promise<void>;
8
4
  };
9
- export interface ProcaptchaEvents {
10
- onError: (error: Error) => void;
11
- onHuman: (output: ProcaptchaPowOutput) => void;
12
- onExtensionNotFound: () => void;
13
- onChallengeExpired: () => void;
14
- onExpired: () => void;
15
- onFailed: () => void;
16
- onOpen: () => void;
17
- onClose: () => void;
18
- }
19
- export declare const Manager: (configInput: ProcaptchaClientConfigInput) => Promise<import("@prosopo/api").PowCaptchaSolutionResponse>;
20
- export {};
21
5
  //# sourceMappingURL=Manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,2BAA2B,EAAwD,MAAM,gBAAgB,CAAA;AASlH,KAAK,mBAAmB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC9C,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,OAAO,gBAAuB,2BAA2B,+DAmFrE,CAAA"}
1
+ {"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"AAaA,OAAO,EAGH,mBAAmB,EACnB,2BAA2B,EAG3B,eAAe,EACf,uBAAuB,EAC1B,MAAM,gBAAgB,CAAA;AAcvB,eAAO,MAAM,OAAO,gBACH,2BAA2B,SACjC,eAAe,iBACP,uBAAuB,aAC3B,mBAAmB;;CAmKjC,CAAA"}
@@ -1,14 +1,32 @@
1
+ import { ApiParams, ProcaptchaConfigSchema, } from '@prosopo/types';
1
2
  import { ApiPromise } from '@polkadot/api/promise/Api';
2
3
  import { ExtensionWeb2 } from '@prosopo/account';
3
4
  import { Keyring } from '@polkadot/keyring';
4
- import { ProcaptchaConfigSchema } from '@prosopo/types';
5
5
  import { ProsopoCaptchaContract, wrapQuery } from '@prosopo/contract';
6
- import { ProsopoEnvError, trimProviderUrl } from '@prosopo/common';
6
+ import { ProsopoContractError, ProsopoEnvError, trimProviderUrl } from '@prosopo/common';
7
7
  import { ProviderApi } from '@prosopo/api';
8
8
  import { WsProvider } from '@polkadot/rpc-provider/ws';
9
9
  import { ContractAbi as abiJson } from '@prosopo/captcha-contract/contract-info';
10
+ import { buildUpdateState, getDefaultEvents } from '@prosopo/procaptcha-common';
11
+ import { sleep } from '@prosopo/procaptcha';
10
12
  import { solvePoW } from './SolverService.js';
11
- export const Manager = async (configInput) => {
13
+ export const Manager = (configInput, state, onStateUpdate, callbacks) => {
14
+ 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
+ };
25
+ };
26
+ const clearTimeout = () => {
27
+ window.clearTimeout(state.timeout);
28
+ updateState({ timeout: undefined });
29
+ };
12
30
  const getConfig = () => {
13
31
  const config = {
14
32
  userAccountAddress: '',
@@ -32,25 +50,71 @@ export const Manager = async (configInput) => {
32
50
  const keyring = new Keyring({ type, ss58Format: api.registry.chainSS58 });
33
51
  return new ProsopoCaptchaContract(api, JSON.parse(abiJson), network.contract.address, 'prosopo', 0, keyring.addFromAddress(getConfig().account.address || ''));
34
52
  };
35
- const config = getConfig();
36
- if (!config.web2 && !config.userAccountAddress) {
37
- throw new ProsopoEnvError('GENERAL.ACCOUNT_NOT_FOUND', {
38
- context: { error: 'Account address has not been set for web3 mode' },
39
- });
40
- }
41
- const ext = new ExtensionWeb2();
42
- const account = await ext.getAccount(config);
43
- const contract = await loadContract();
44
- const getRandomProviderResponse = await wrapQuery(contract.query.getRandomActiveProvider, contract.query)(account.account.address, configInput.account.address || '');
45
- const providerUrl = trimProviderUrl(getRandomProviderResponse.provider.url.toString());
46
- const providerApi = new ProviderApi(getNetwork(getConfig()), providerUrl, configInput.account.address || '');
47
- const challenge = await providerApi.getPowCaptchaChallenge(account.account.address, configInput.account.address || '');
48
- console.log('challenge', challenge);
49
- console.log('challenge', challenge.challenge);
50
- console.log('challenge', challenge.difficulty);
51
- const solution = solvePoW(challenge.challenge, challenge.difficulty);
52
- console.log('solution', solution);
53
- const verifiedSolution = await providerApi.submitPowCaptchaSolution(challenge, account.account.address, configInput.account.address || '', getRandomProviderResponse, solution);
54
- return verifiedSolution;
53
+ const getAccount = () => {
54
+ if (!state.account) {
55
+ throw new ProsopoEnvError('GENERAL.ACCOUNT_NOT_FOUND', { context: { error: 'Account not loaded' } });
56
+ }
57
+ const account = state.account;
58
+ return account;
59
+ };
60
+ const getDappAccount = () => {
61
+ if (!state.dappAccount) {
62
+ throw new ProsopoEnvError('GENERAL.SITE_KEY_MISSING');
63
+ }
64
+ const dappAccount = state.dappAccount;
65
+ return dappAccount;
66
+ };
67
+ const getBlockNumber = () => {
68
+ if (!state.blockNumber) {
69
+ throw new ProsopoContractError('CAPTCHA.INVALID_BLOCK_NO', { context: { error: 'Block number not found' } });
70
+ }
71
+ const blockNumber = state.blockNumber;
72
+ return blockNumber;
73
+ };
74
+ const updateState = buildUpdateState(state, onStateUpdate);
75
+ const resetState = () => {
76
+ clearTimeout();
77
+ updateState(defaultState());
78
+ };
79
+ const start = async () => {
80
+ if (state.loading) {
81
+ return;
82
+ }
83
+ if (state.isHuman) {
84
+ return;
85
+ }
86
+ resetState();
87
+ updateState({ loading: true });
88
+ const config = getConfig();
89
+ updateState({ dappAccount: config.account.address });
90
+ await sleep(100);
91
+ if (!config.web2 && !config.userAccountAddress) {
92
+ throw new ProsopoEnvError('GENERAL.ACCOUNT_NOT_FOUND', {
93
+ context: { error: 'Account address has not been set for web3 mode' },
94
+ });
95
+ }
96
+ const ext = new ExtensionWeb2();
97
+ const account = await ext.getAccount(config);
98
+ const contract = await loadContract();
99
+ const events = getDefaultEvents(onStateUpdate, state, callbacks);
100
+ const getRandomProviderResponse = await wrapQuery(contract.query.getRandomActiveProvider, contract.query)(account.account.address, getDappAccount());
101
+ const providerUrl = trimProviderUrl(getRandomProviderResponse.provider.url.toString());
102
+ const providerApi = new ProviderApi(getNetwork(getConfig()), providerUrl, getDappAccount());
103
+ const challenge = await providerApi.getPowCaptchaChallenge(account.account.address, getDappAccount());
104
+ const solution = solvePoW(challenge.challenge, challenge.difficulty);
105
+ await providerApi.submitPowCaptchaSolution(challenge, getAccount().account.address, getDappAccount(), getRandomProviderResponse, solution);
106
+ if (state.isHuman) {
107
+ events.onHuman({
108
+ providerUrl,
109
+ [ApiParams.user]: getAccount().account.address,
110
+ [ApiParams.dapp]: getDappAccount(),
111
+ [ApiParams.challengeId]: challenge.challenge,
112
+ [ApiParams.blockNumber]: getBlockNumber(),
113
+ });
114
+ }
115
+ };
116
+ return {
117
+ start,
118
+ };
55
119
  };
56
120
  //# sourceMappingURL=Manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAA6D,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAClH,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAqB7C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,WAAwC,EAAE,EAAE;IACtE,MAAM,SAAS,GAAG,GAAG,EAAE;QACnB,MAAM,MAAM,GAAgC;YACxC,kBAAkB,EAAE,EAAE;YACtB,GAAG,WAAW;SACjB,CAAA;QAED,OAAO,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/C,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,MAAoC,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,EAAE;YACV,MAAM,IAAI,eAAe,CAAC,6BAA6B,EAAE;gBACrD,OAAO,EAAE,EAAE,KAAK,EAAE,oCAAoC,MAAM,CAAC,kBAAkB,EAAE,EAAE;aACtF,CAAC,CAAA;SACL;QACD,OAAO,OAAO,CAAA;IAClB,CAAC,CAAA;IAID,MAAM,YAAY,GAAG,KAAK,IAAqC,EAAE;QAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAA;QACvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACpG,MAAM,IAAI,GAAG,SAAS,CAAA;QACtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;QAEzE,OAAO,IAAI,sBAAsB,CAC7B,GAAG,EACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,EACxB,SAAS,EACT,CAAC,EACD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAC5D,CAAA;IACL,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;QAC5C,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;YACnD,OAAO,EAAE,EAAE,KAAK,EAAE,gDAAgD,EAAE;SACvE,CAAC,CAAA;KACL;IAGD,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAA;IAC/B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAE5C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IAErC,MAAM,yBAAyB,GAAmB,MAAM,SAAS,CAC7D,QAAQ,CAAC,KAAK,CAAC,uBAAuB,EACtC,QAAQ,CAAC,KAAK,CACjB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAE7D,MAAM,WAAW,GAAG,eAAe,CAAC,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEtF,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAE5G,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,sBAAsB,CACtD,OAAO,CAAC,OAAO,CAAC,OAAO,EACvB,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CACpC,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAEnC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAE9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAEpE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAEjC,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAC/D,SAAS,EACT,OAAO,CAAC,OAAO,CAAC,OAAO,EACvB,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EACjC,yBAAyB,EACzB,QAAQ,CACX,CAAA;IACD,OAAO,gBAAgB,CAAA;AAC3B,CAAC,CAAA"}
1
+ {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@prosopo/types");
3
4
  const Api = require("@polkadot/api/promise/Api");
4
5
  require("../account/dist/index.cjs");
5
6
  const keyring = require("@polkadot/keyring");
6
- const types = require("@prosopo/types");
7
7
  const contract = require("@prosopo/contract");
8
8
  const common = require("@prosopo/common");
9
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
+ const procaptchaCommon = require("@prosopo/procaptcha-common");
13
+ const procaptcha = require("@prosopo/procaptcha");
12
14
  const SolverService = require("./SolverService.cjs");
13
15
  const ExtensionWeb2 = require("../account/dist/extension/ExtensionWeb2.cjs");
14
- const Manager = async (configInput) => {
16
+ const Manager = (configInput, state, onStateUpdate, callbacks) => {
17
+ const defaultState = () => {
18
+ return {
19
+ // note order matters! see buildUpdateState. These fields are set in order, so disable modal first, then set loading to false, etc.
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
+ // don't handle timeout here, this should be handled by the state management
29
+ };
30
+ };
31
+ const clearTimeout = () => {
32
+ window.clearTimeout(state.timeout);
33
+ updateState({ timeout: void 0 });
34
+ };
15
35
  const getConfig = () => {
16
- const config2 = {
36
+ const config = {
17
37
  userAccountAddress: "",
18
38
  ...configInput
19
39
  };
20
- return types.ProcaptchaConfigSchema.parse(config2);
40
+ return types.ProcaptchaConfigSchema.parse(config);
21
41
  };
22
- const getNetwork = (config2) => {
23
- const network = config2.networks[config2.defaultNetwork];
42
+ const getNetwork = (config) => {
43
+ const network = config.networks[config.defaultNetwork];
24
44
  if (!network) {
25
45
  throw new common.ProsopoEnvError("DEVELOPER.NETWORK_NOT_FOUND", {
26
- context: { error: `No network found for environment ${config2.defaultEnvironment}` }
46
+ context: { error: `No network found for environment ${config.defaultEnvironment}` }
27
47
  });
28
48
  }
29
49
  return network;
@@ -42,37 +62,80 @@ const Manager = async (configInput) => {
42
62
  keyring$1.addFromAddress(getConfig().account.address || "")
43
63
  );
44
64
  };
45
- const config = getConfig();
46
- if (!config.web2 && !config.userAccountAddress) {
47
- throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
48
- context: { error: "Account address has not been set for web3 mode" }
49
- });
50
- }
51
- const ext = new ExtensionWeb2.ExtensionWeb2();
52
- const account = await ext.getAccount(config);
53
- const contract$1 = await loadContract();
54
- const getRandomProviderResponse = await contract.wrapQuery(
55
- contract$1.query.getRandomActiveProvider,
56
- contract$1.query
57
- )(account.account.address, configInput.account.address || "");
58
- const providerUrl = common.trimProviderUrl(getRandomProviderResponse.provider.url.toString());
59
- const providerApi = new api.ProviderApi(getNetwork(getConfig()), providerUrl, configInput.account.address || "");
60
- const challenge = await providerApi.getPowCaptchaChallenge(
61
- account.account.address,
62
- configInput.account.address || ""
63
- );
64
- console.log("challenge", challenge);
65
- console.log("challenge", challenge.challenge);
66
- console.log("challenge", challenge.difficulty);
67
- const solution = SolverService.solvePoW(challenge.challenge, challenge.difficulty);
68
- console.log("solution", solution);
69
- const verifiedSolution = await providerApi.submitPowCaptchaSolution(
70
- challenge,
71
- account.account.address,
72
- configInput.account.address || "",
73
- getRandomProviderResponse,
74
- solution
75
- );
76
- return verifiedSolution;
65
+ const getAccount = () => {
66
+ if (!state.account) {
67
+ throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account not loaded" } });
68
+ }
69
+ const account = state.account;
70
+ return account;
71
+ };
72
+ const getDappAccount = () => {
73
+ if (!state.dappAccount) {
74
+ throw new common.ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
75
+ }
76
+ const dappAccount = state.dappAccount;
77
+ return dappAccount;
78
+ };
79
+ const getBlockNumber = () => {
80
+ if (!state.blockNumber) {
81
+ throw new common.ProsopoContractError("CAPTCHA.INVALID_BLOCK_NO", { context: { error: "Block number not found" } });
82
+ }
83
+ const blockNumber = state.blockNumber;
84
+ return blockNumber;
85
+ };
86
+ const updateState = procaptchaCommon.buildUpdateState(state, onStateUpdate);
87
+ const resetState = () => {
88
+ clearTimeout();
89
+ updateState(defaultState());
90
+ };
91
+ const start = async () => {
92
+ if (state.loading) {
93
+ return;
94
+ }
95
+ if (state.isHuman) {
96
+ return;
97
+ }
98
+ resetState();
99
+ updateState({ loading: true });
100
+ const config = getConfig();
101
+ updateState({ dappAccount: config.account.address });
102
+ await procaptcha.sleep(100);
103
+ if (!config.web2 && !config.userAccountAddress) {
104
+ throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
105
+ context: { error: "Account address has not been set for web3 mode" }
106
+ });
107
+ }
108
+ const ext = new ExtensionWeb2.ExtensionWeb2();
109
+ const account = await ext.getAccount(config);
110
+ const contract$1 = await loadContract();
111
+ const events = procaptchaCommon.getDefaultEvents(onStateUpdate, state, callbacks);
112
+ const getRandomProviderResponse = await contract.wrapQuery(
113
+ contract$1.query.getRandomActiveProvider,
114
+ contract$1.query
115
+ )(account.account.address, getDappAccount());
116
+ const providerUrl = common.trimProviderUrl(getRandomProviderResponse.provider.url.toString());
117
+ const providerApi = new api.ProviderApi(getNetwork(getConfig()), providerUrl, getDappAccount());
118
+ const challenge = await providerApi.getPowCaptchaChallenge(account.account.address, getDappAccount());
119
+ const solution = SolverService.solvePoW(challenge.challenge, challenge.difficulty);
120
+ await providerApi.submitPowCaptchaSolution(
121
+ challenge,
122
+ getAccount().account.address,
123
+ getDappAccount(),
124
+ getRandomProviderResponse,
125
+ solution
126
+ );
127
+ if (state.isHuman) {
128
+ events.onHuman({
129
+ providerUrl,
130
+ [types.ApiParams.user]: getAccount().account.address,
131
+ [types.ApiParams.dapp]: getDappAccount(),
132
+ [types.ApiParams.challengeId]: challenge.challenge,
133
+ [types.ApiParams.blockNumber]: getBlockNumber()
134
+ });
135
+ }
136
+ };
137
+ return {
138
+ start
139
+ };
77
140
  };
78
141
  exports.Manager = Manager;
@@ -2,6 +2,7 @@
2
2
  const jsxRuntime = require("@emotion/react/jsx-runtime");
3
3
  require("../web-components/dist/index.cjs");
4
4
  const Manager = require("../Services/Manager.cjs");
5
+ const procaptchaCommon = require("@prosopo/procaptcha-common");
5
6
  const react = require("react");
6
7
  const theme = require("../web-components/dist/theme.cjs");
7
8
  const Containers = require("../web-components/dist/Containers.cjs");
@@ -10,21 +11,13 @@ const LoadingSpinner = require("../web-components/dist/LoadingSpinner.cjs");
10
11
  const Checkbox = require("../web-components/dist/Checkbox.cjs");
11
12
  const Logo = require("../web-components/dist/Logo.cjs");
12
13
  const Procaptcha = (props) => {
13
- const [checked, setChecked] = react.useState(false);
14
- const [loading, setLoading] = react.useState(false);
15
- const darkMode = props.config.theme;
16
- const themeColor = darkMode ? "light" : "dark";
17
- const theme$1 = react.useMemo(() => darkMode === "light" ? theme.lightTheme : theme.darkTheme, [darkMode]);
18
- const handlePowCaptcha = async () => {
19
- setLoading(true);
20
- Manager.Manager(props.config).then((verified) => {
21
- if (verified.verified) {
22
- console.log("verified");
23
- setChecked(true);
24
- }
25
- setLoading(false);
26
- });
27
- };
14
+ const config = props.config;
15
+ const themeColor = config.theme === "light" ? "light" : "dark";
16
+ const theme$1 = props.config.theme === "light" ? theme.lightTheme : theme.darkTheme;
17
+ const callbacks = props.callbacks || {};
18
+ const [state, _updateState] = procaptchaCommon.useProcaptcha(react.useState, react.useRef);
19
+ const updateState = procaptchaCommon.buildUpdateState(state, _updateState);
20
+ const manager = Manager.Manager(config, state, updateState, callbacks);
28
21
  return /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { maxWidth: "100%", maxHeight: "100%", overflowX: "auto" }, children: /* @__PURE__ */ jsxRuntime.jsx(Containers.ContainerDiv, { children: /* @__PURE__ */ jsxRuntime.jsx(Containers.WidthBasedStylesDiv, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: WidgetConstants.WIDGET_DIMENSIONS, "data-cy": "button-human", children: [
29
22
  " ",
30
23
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -69,11 +62,11 @@ const Procaptcha = (props) => {
69
62
  style: {
70
63
  display: "flex"
71
64
  },
72
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: loading ? /* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner.LoadingSpinner, { themeColor }) : /* @__PURE__ */ jsxRuntime.jsx(
65
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: state.loading ? /* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner.LoadingSpinner, { themeColor }) : /* @__PURE__ */ jsxRuntime.jsx(
73
66
  Checkbox.Checkbox,
74
67
  {
75
- checked,
76
- onChange: handlePowCaptcha,
68
+ checked: state.isHuman,
69
+ onChange: manager.start,
77
70
  themeColor,
78
71
  labelText: "I am human"
79
72
  }
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("@emotion/react/jsx-runtime");
4
- require("../web-components/dist/index.cjs");
5
4
  const react = require("react");
5
+ require("../web-components/dist/index.cjs");
6
6
  const CaptchaPlaceholder = require("../web-components/dist/CaptchaPlaceholder.cjs");
7
7
  const _interopNamespaceDefaultOnly = (e) => Object.freeze(Object.defineProperty({ __proto__: null, default: e }, Symbol.toStringTag, { value: "Module" }));
8
- const ProcaptchaWidget = react.lazy(async () => Promise.resolve().then(() => /* @__PURE__ */ _interopNamespaceDefaultOnly(require("./Captcha.cjs"))));
8
+ const ProcaptchaWidget = react.lazy(
9
+ async () => Promise.resolve().then(() => /* @__PURE__ */ _interopNamespaceDefaultOnly(require("./Captcha.cjs")))
10
+ );
9
11
  const ProcaptchaPow = (props) => /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(CaptchaPlaceholder.ProcaptchaPlaceholder, { darkMode: props.config.theme }), children: /* @__PURE__ */ jsxRuntime.jsx(ProcaptchaWidget, { config: props.config, callbacks: props.callbacks }) });
10
12
  exports.ProcaptchaPow = ProcaptchaPow;
@@ -5,12 +5,10 @@ const Containers = require("./Containers.cjs");
5
5
  const LoadingSpinner = require("./LoadingSpinner.cjs");
6
6
  const WidgetConstants = require("./WidgetConstants.cjs");
7
7
  const theme = require("./theme.cjs");
8
- const react = require("react");
9
8
  const Logo = require("./Logo.cjs");
10
9
  const ProcaptchaPlaceholder = (props) => {
11
- const darkMode = props.darkMode;
12
10
  const themeColor = props.darkMode === "light" ? "light" : "dark";
13
- const theme$1 = react.useMemo(() => darkMode === "light" ? theme.lightTheme : theme.darkTheme, [darkMode]);
11
+ const theme$1 = props.darkMode === "light" ? theme.lightTheme : theme.darkTheme;
14
12
  return jsxRuntime.jsx("div", { children: jsxRuntime.jsx("div", { style: { maxWidth: "100%", maxHeight: "100%", overflowX: "auto" }, children: jsxRuntime.jsx(Containers.ContainerDiv, { children: jsxRuntime.jsx(Containers.WidthBasedStylesDiv, { children: jsxRuntime.jsxs("div", { style: WidgetConstants.WIDGET_DIMENSIONS, "data-cy": "button-human", children: [" ", jsxRuntime.jsxs("div", { style: {
15
13
  padding: "2px",
16
14
  border: "1px solid",
@@ -1,19 +1,4 @@
1
- import { ProcaptchaClientConfigInput, ProcaptchaOutput } from '@prosopo/types';
2
- export type ProcaptchaCallbacks = Partial<ProcaptchaEvents>;
3
- export interface ProcaptchaEvents {
4
- onError: (error: Error) => void;
5
- onHuman: (output: ProcaptchaOutput) => void;
6
- onExtensionNotFound: () => void;
7
- onChallengeExpired: () => void;
8
- onExpired: () => void;
9
- onFailed: () => void;
10
- onOpen: () => void;
11
- onClose: () => void;
12
- }
13
- export interface ProcaptchaProps {
14
- config: ProcaptchaClientConfigInput;
15
- callbacks?: Partial<ProcaptchaCallbacks>;
16
- }
1
+ import { ProcaptchaProps } from '@prosopo/types';
17
2
  declare const Procaptcha: (props: ProcaptchaProps) => import("@emotion/react/jsx-runtime").JSX.Element;
18
3
  export default Procaptcha;
19
4
  //# sourceMappingURL=Captcha.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAG9E,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAK3D,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC3C,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAE5B,MAAM,EAAE,2BAA2B,CAAA;IAEnC,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAC3C;AAED,QAAA,MAAM,UAAU,UAAW,eAAe,qDA8FzC,CAAA;AACD,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAIhD,QAAA,MAAM,UAAU,UAAW,eAAe,qDAsFzC,CAAA;AACD,eAAe,UAAU,CAAA"}
@@ -1,23 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
2
  import { Checkbox, ContainerDiv, LoadingSpinner, Logo, WIDGET_DIMENSIONS, WIDGET_INNER_HEIGHT, WIDGET_URL, WIDGET_URL_TEXT, WidthBasedStylesDiv, darkTheme, lightTheme, } from '@prosopo/web-components';
3
3
  import { Manager } from '../Services/Manager.js';
4
- import { useMemo, useState } from 'react';
4
+ import { buildUpdateState, useProcaptcha } from '@prosopo/procaptcha-common';
5
+ import { useRef, useState } from 'react';
5
6
  const Procaptcha = (props) => {
6
- const [checked, setChecked] = useState(false);
7
- const [loading, setLoading] = useState(false);
8
- const darkMode = props.config.theme;
9
- const themeColor = darkMode ? 'light' : 'dark';
10
- const theme = useMemo(() => (darkMode === 'light' ? lightTheme : darkTheme), [darkMode]);
11
- const handlePowCaptcha = async () => {
12
- setLoading(true);
13
- Manager(props.config).then((verified) => {
14
- if (verified.verified) {
15
- console.log('verified');
16
- setChecked(true);
17
- }
18
- setLoading(false);
19
- });
20
- };
7
+ const config = props.config;
8
+ const themeColor = config.theme === 'light' ? 'light' : 'dark';
9
+ const theme = props.config.theme === 'light' ? lightTheme : darkTheme;
10
+ const callbacks = props.callbacks || {};
11
+ const [state, _updateState] = useProcaptcha(useState, useRef);
12
+ const updateState = buildUpdateState(state, _updateState);
13
+ const manager = Manager(config, state, updateState, callbacks);
21
14
  return (_jsx("div", { children: _jsx("div", { style: { maxWidth: '100%', maxHeight: '100%', overflowX: 'auto' }, children: _jsx(ContainerDiv, { children: _jsx(WidthBasedStylesDiv, { children: _jsxs("div", { style: WIDGET_DIMENSIONS, "data-cy": 'button-human', children: [' ', _jsxs("div", { style: {
22
15
  padding: '2px',
23
16
  border: '1px solid',
@@ -43,7 +36,7 @@ const Procaptcha = (props) => {
43
36
  verticalAlign: 'middle',
44
37
  }, children: _jsx("div", { style: {
45
38
  display: 'flex',
46
- }, children: _jsx("div", { style: { flex: 1 }, children: loading ? (_jsx(LoadingSpinner, { themeColor: themeColor })) : (_jsx(Checkbox, { checked: checked, onChange: handlePowCaptcha, themeColor: themeColor, labelText: 'I am human' })) }) }) }) }) }), _jsx("div", { style: { display: 'inline-flex', flexDirection: 'column' }, children: _jsx("a", { href: WIDGET_URL, target: "_blank", "aria-label": WIDGET_URL_TEXT, children: _jsx("div", { style: { flex: 1 }, children: _jsx(Logo, { themeColor: themeColor }) }) }) })] })] }) }) }) }) }));
39
+ }, children: _jsx("div", { style: { flex: 1 }, children: state.loading ? (_jsx(LoadingSpinner, { themeColor: themeColor })) : (_jsx(Checkbox, { checked: state.isHuman, onChange: manager.start, themeColor: themeColor, labelText: 'I am human' })) }) }) }) }) }), _jsx("div", { style: { display: 'inline-flex', flexDirection: 'column' }, children: _jsx("a", { href: WIDGET_URL, target: "_blank", "aria-label": WIDGET_URL_TEXT, children: _jsx("div", { style: { flex: 1 }, children: _jsx(Logo, { themeColor: themeColor }) }) }) })] })] }) }) }) }) }));
47
40
  };
48
41
  export default Procaptcha;
49
42
  //# sourceMappingURL=Captcha.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Captcha.js","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Captcha.js","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- /// <reference types="react" />
2
- declare const ProcaptchaWidget: import("react").LazyExoticComponent<(props: import("./Captcha.js").ProcaptchaProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
1
+ import { LazyExoticComponent } from 'react';
2
+ import { ProcaptchaEvents } from '@prosopo/types';
3
+ import { ReactElement } from 'react';
3
4
  type ProcaptchaProps = React.ComponentProps<typeof ProcaptchaWidget>;
5
+ declare const ProcaptchaWidget: LazyExoticComponent<(props: any, callbacks: Partial<ProcaptchaEvents>) => ReactElement>;
4
6
  export declare const ProcaptchaPow: (props: ProcaptchaProps) => import("@emotion/react/jsx-runtime").JSX.Element;
5
7
  export {};
6
8
  //# sourceMappingURL=ProcaptchaPoW.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcaptchaPoW.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":";AAgBA,QAAA,MAAM,gBAAgB,0IAA2C,CAAA;AACjE,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEpE,eAAO,MAAM,aAAa,UAAW,eAAe,qDAInD,CAAA"}
1
+ {"version":3,"file":"ProcaptchaPoW.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpC,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEpE,QAAA,MAAM,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,YAAY,CAE7G,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,eAAe,qDAInD,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
- import { ProcaptchaPlaceholder } from '@prosopo/web-components';
3
2
  import { Suspense, lazy } from 'react';
3
+ import { ProcaptchaPlaceholder } from '@prosopo/web-components';
4
4
  const ProcaptchaWidget = lazy(async () => import('./Captcha.js'));
5
5
  export const ProcaptchaPow = (props) => (_jsx(Suspense, { fallback: _jsx(ProcaptchaPlaceholder, { darkMode: props.config.theme }), children: _jsx(ProcaptchaWidget, { config: props.config, callbacks: props.callbacks }) }));
6
6
  //# sourceMappingURL=ProcaptchaPoW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcaptchaPoW.js","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;AAGjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,CACrD,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,qBAAqB,IAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAI,YACvE,KAAC,gBAAgB,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAqB,GAChF,CACd,CAAA"}
1
+ {"version":3,"file":"ProcaptchaPoW.js","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAuB,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAK/D,MAAM,gBAAgB,GAA4F,IAAI,CAClH,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CACrC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,CACrD,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,qBAAqB,IAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAI,YACvE,KAAC,gBAAgB,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAqB,GAChF,CACd,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/procaptcha-pow",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -37,13 +37,13 @@
37
37
  "@emotion/styled": "^11.11.0",
38
38
  "@noble/hashes": "^1.3.3",
39
39
  "@polkadot/extension-inject": "0.46.6",
40
- "@prosopo/account": "0.3.2",
41
- "@prosopo/api": "0.3.2",
42
- "@prosopo/common": "0.3.2",
43
- "@prosopo/procaptcha": "0.3.2",
44
- "@prosopo/types": "0.3.2",
45
- "@prosopo/util": "0.3.2",
46
- "@prosopo/web-components": "0.3.2",
40
+ "@prosopo/account": "0.3.3",
41
+ "@prosopo/api": "0.3.3",
42
+ "@prosopo/common": "0.3.3",
43
+ "@prosopo/procaptcha": "0.3.3",
44
+ "@prosopo/types": "0.3.3",
45
+ "@prosopo/util": "0.3.3",
46
+ "@prosopo/web-components": "0.3.3",
47
47
  "react": "^18.2.0"
48
48
  },
49
49
  "devDependencies": {