@prosopo/procaptcha-pow 1.0.2 → 2.0.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.
- package/dist/Services/Manager.d.ts +2 -1
- package/dist/Services/Manager.d.ts.map +1 -1
- package/dist/Services/Manager.js +73 -38
- package/dist/Services/Manager.js.map +1 -1
- package/dist/cjs/Services/Manager.cjs +77 -43
- package/dist/cjs/components/ProcaptchaPoW.cjs +2 -4
- package/dist/cjs/components/ProcaptchaWidget.cjs +132 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/components/Captcha.d.ts +1 -3
- package/dist/components/Captcha.d.ts.map +1 -1
- package/dist/components/Captcha.js +1 -41
- package/dist/components/Captcha.js.map +1 -1
- package/dist/components/ProcaptchaPoW.d.ts +3 -3
- package/dist/components/ProcaptchaPoW.d.ts.map +1 -1
- package/dist/components/ProcaptchaPoW.js +3 -3
- package/dist/components/ProcaptchaPoW.js.map +1 -1
- package/dist/components/ProcaptchaWidget.d.ts +4 -0
- package/dist/components/ProcaptchaWidget.d.ts.map +1 -0
- package/dist/components/ProcaptchaWidget.js +62 -0
- package/dist/components/ProcaptchaWidget.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +68 -74
- package/vite.cjs.config.ts +6 -3
- package/dist/cjs/components/Captcha.cjs +0 -87
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ProcaptchaCallbacks, ProcaptchaClientConfigInput, ProcaptchaState, ProcaptchaStateUpdateFn } from
|
|
1
|
+
import { type ProcaptchaCallbacks, type ProcaptchaClientConfigInput, type ProcaptchaState, type ProcaptchaStateUpdateFn } from "@prosopo/types";
|
|
2
2
|
export declare const Manager: (configInput: ProcaptchaClientConfigInput, state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn, callbacks: ProcaptchaCallbacks) => {
|
|
3
3
|
start: () => Promise<void>;
|
|
4
|
+
resetState: () => void;
|
|
4
5
|
};
|
|
5
6
|
//# sourceMappingURL=Manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"AAoBA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAGhC,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAG7B,MAAM,gBAAgB,CAAC;AAGxB,eAAO,MAAM,OAAO,gBACL,2BAA2B,SACjC,eAAe,iBACP,uBAAuB,aAC3B,mBAAmB;;;CAwP/B,CAAC"}
|
package/dist/Services/Manager.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { buildUpdateState, getDefaultEvents } from '@prosopo/procaptcha-common';
|
|
11
|
-
import { sleep } from '@prosopo/procaptcha';
|
|
12
|
-
import { solvePoW } from '@prosopo/util';
|
|
1
|
+
import { stringToHex } from "@polkadot/util/string";
|
|
2
|
+
import { ExtensionWeb2, ExtensionWeb3 } from "@prosopo/account";
|
|
3
|
+
import { ProviderApi } from "@prosopo/api";
|
|
4
|
+
import { ProsopoEnvError } from "@prosopo/common";
|
|
5
|
+
import { loadBalancer } from "@prosopo/load-balancer";
|
|
6
|
+
import { sleep } from "@prosopo/procaptcha";
|
|
7
|
+
import { buildUpdateState, getDefaultEvents } from "@prosopo/procaptcha-common";
|
|
8
|
+
import { ApiParams, ProcaptchaConfigSchema, encodeProcaptchaOutput, } from "@prosopo/types";
|
|
9
|
+
import { at, solvePoW } from "@prosopo/util";
|
|
13
10
|
export const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
14
11
|
const events = getDefaultEvents(onStateUpdate, state, callbacks);
|
|
15
12
|
const defaultState = () => {
|
|
@@ -28,43 +25,43 @@ export const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
28
25
|
window.clearTimeout(state.timeout);
|
|
29
26
|
updateState({ timeout: undefined });
|
|
30
27
|
};
|
|
28
|
+
const clearSuccessfulChallengeTimeout = () => {
|
|
29
|
+
window.clearTimeout(state.successfullChallengeTimeout);
|
|
30
|
+
updateState({ successfullChallengeTimeout: undefined });
|
|
31
|
+
};
|
|
31
32
|
const getConfig = () => {
|
|
32
33
|
const config = {
|
|
33
|
-
userAccountAddress:
|
|
34
|
+
userAccountAddress: "",
|
|
34
35
|
...configInput,
|
|
35
36
|
};
|
|
37
|
+
if (state.account) {
|
|
38
|
+
config.userAccountAddress = state.account.account.address;
|
|
39
|
+
}
|
|
36
40
|
return ProcaptchaConfigSchema.parse(config);
|
|
37
41
|
};
|
|
38
42
|
const getNetwork = (config) => {
|
|
39
43
|
const network = config.networks[config.defaultNetwork];
|
|
40
44
|
if (!network) {
|
|
41
|
-
throw new ProsopoEnvError(
|
|
42
|
-
context: {
|
|
45
|
+
throw new ProsopoEnvError("DEVELOPER.NETWORK_NOT_FOUND", {
|
|
46
|
+
context: {
|
|
47
|
+
error: `No network found for environment ${config.defaultEnvironment}`,
|
|
48
|
+
},
|
|
43
49
|
});
|
|
44
50
|
}
|
|
45
51
|
return network;
|
|
46
52
|
};
|
|
47
|
-
const loadContract = async () => {
|
|
48
|
-
const network = getNetwork(getConfig());
|
|
49
|
-
const api = await ApiPromise.create({
|
|
50
|
-
provider: new WsProvider(network.endpoint),
|
|
51
|
-
initWasm: false,
|
|
52
|
-
noInitWarn: true,
|
|
53
|
-
});
|
|
54
|
-
const type = 'sr25519';
|
|
55
|
-
const keyring = new Keyring({ type, ss58Format: api.registry.chainSS58 });
|
|
56
|
-
return new ProsopoCaptchaContract(api, JSON.parse(abiJson), network.contract.address, 'prosopo', 0, keyring.addFromAddress(getConfig().account.address || ''));
|
|
57
|
-
};
|
|
58
53
|
const getAccount = () => {
|
|
59
54
|
if (!state.account) {
|
|
60
|
-
throw new ProsopoEnvError(
|
|
55
|
+
throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
|
|
56
|
+
context: { error: "Account not loaded" },
|
|
57
|
+
});
|
|
61
58
|
}
|
|
62
59
|
const account = state.account;
|
|
63
|
-
return account;
|
|
60
|
+
return { account };
|
|
64
61
|
};
|
|
65
62
|
const getDappAccount = () => {
|
|
66
63
|
if (!state.dappAccount) {
|
|
67
|
-
throw new ProsopoEnvError(
|
|
64
|
+
throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
|
|
68
65
|
}
|
|
69
66
|
const dappAccount = state.dappAccount;
|
|
70
67
|
return dappAccount;
|
|
@@ -72,6 +69,7 @@ export const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
72
69
|
const updateState = buildUpdateState(state, onStateUpdate);
|
|
73
70
|
const resetState = () => {
|
|
74
71
|
clearTimeout();
|
|
72
|
+
clearSuccessfulChallengeTimeout();
|
|
75
73
|
updateState(defaultState());
|
|
76
74
|
};
|
|
77
75
|
const setValidChallengeTimeout = () => {
|
|
@@ -94,26 +92,40 @@ export const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
94
92
|
loading: true,
|
|
95
93
|
});
|
|
96
94
|
const config = getConfig();
|
|
97
|
-
const ext = new ExtensionWeb2();
|
|
98
|
-
const userAccount = config.userAccountAddress ||
|
|
95
|
+
const ext = config.web2 ? new ExtensionWeb2() : new ExtensionWeb3();
|
|
96
|
+
const userAccount = config.userAccountAddress ||
|
|
97
|
+
(await ext.getAccount(config)).account.address;
|
|
99
98
|
updateState({
|
|
100
99
|
account: { account: { address: userAccount } },
|
|
101
100
|
});
|
|
102
101
|
updateState({ dappAccount: config.account.address });
|
|
103
102
|
await sleep(100);
|
|
104
103
|
if (!config.web2 && !config.userAccountAddress) {
|
|
105
|
-
throw new ProsopoEnvError(
|
|
106
|
-
context: { error:
|
|
104
|
+
throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
|
|
105
|
+
context: { error: "Account address has not been set for web3 mode" },
|
|
107
106
|
});
|
|
108
107
|
}
|
|
109
|
-
const
|
|
108
|
+
const getRandomProviderResponse = getRandomActiveProvider();
|
|
110
109
|
const events = getDefaultEvents(onStateUpdate, state, callbacks);
|
|
111
|
-
const
|
|
112
|
-
const providerUrl = trimProviderUrl(getRandomProviderResponse.provider.url.toString());
|
|
110
|
+
const providerUrl = getRandomProviderResponse.provider.url;
|
|
113
111
|
const providerApi = new ProviderApi(getNetwork(getConfig()), providerUrl, getDappAccount());
|
|
114
112
|
const challenge = await providerApi.getPowCaptchaChallenge(userAccount, getDappAccount());
|
|
115
113
|
const solution = solvePoW(challenge.challenge, challenge.difficulty);
|
|
116
|
-
const
|
|
114
|
+
const user = await ext.getAccount(getConfig());
|
|
115
|
+
const signer = user.extension?.signer;
|
|
116
|
+
if (!signer || !signer.signRaw) {
|
|
117
|
+
throw new ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", {
|
|
118
|
+
context: {
|
|
119
|
+
error: "Signer is not defined, cannot sign message to prove account ownership",
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const userTimestampSignature = await signer.signRaw({
|
|
124
|
+
address: userAccount,
|
|
125
|
+
data: stringToHex(challenge[ApiParams.timestamp].toString()),
|
|
126
|
+
type: "bytes",
|
|
127
|
+
});
|
|
128
|
+
const verifiedSolution = await providerApi.submitPowCaptchaSolution(challenge, getAccount().account.account.address, getDappAccount(), solution, userTimestampSignature.signature.toString(), config.captchas.pow.verifiedTimeout);
|
|
117
129
|
if (verifiedSolution[ApiParams.verified]) {
|
|
118
130
|
updateState({
|
|
119
131
|
isHuman: true,
|
|
@@ -121,17 +133,40 @@ export const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
121
133
|
});
|
|
122
134
|
events.onHuman(encodeProcaptchaOutput({
|
|
123
135
|
[ApiParams.providerUrl]: providerUrl,
|
|
124
|
-
[ApiParams.user]: getAccount().account.address,
|
|
136
|
+
[ApiParams.user]: getAccount().account.account.address,
|
|
125
137
|
[ApiParams.dapp]: getDappAccount(),
|
|
126
138
|
[ApiParams.challenge]: challenge.challenge,
|
|
127
139
|
[ApiParams.blockNumber]: getRandomProviderResponse.blockNumber,
|
|
128
140
|
[ApiParams.nonce]: solution,
|
|
141
|
+
[ApiParams.timestamp]: challenge.timestamp,
|
|
142
|
+
[ApiParams.signature]: {
|
|
143
|
+
[ApiParams.provider]: challenge.signature.provider,
|
|
144
|
+
[ApiParams.user]: {
|
|
145
|
+
[ApiParams.timestamp]: userTimestampSignature.signature.toString(),
|
|
146
|
+
},
|
|
147
|
+
},
|
|
129
148
|
}));
|
|
130
149
|
setValidChallengeTimeout();
|
|
131
150
|
}
|
|
132
151
|
};
|
|
152
|
+
const getRandomActiveProvider = () => {
|
|
153
|
+
const randomIntBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
|
|
154
|
+
const environment = getConfig().defaultEnvironment;
|
|
155
|
+
const PROVIDERS = loadBalancer(environment);
|
|
156
|
+
const randomProvderObj = at(PROVIDERS, randomIntBetween(0, PROVIDERS.length - 1));
|
|
157
|
+
return {
|
|
158
|
+
providerAccount: randomProvderObj.address,
|
|
159
|
+
provider: {
|
|
160
|
+
url: randomProvderObj.url,
|
|
161
|
+
datasetId: randomProvderObj.datasetId,
|
|
162
|
+
datasetIdContent: randomProvderObj.datasetIdContent,
|
|
163
|
+
},
|
|
164
|
+
blockNumber: 0,
|
|
165
|
+
};
|
|
166
|
+
};
|
|
133
167
|
return {
|
|
134
168
|
start,
|
|
169
|
+
resetState,
|
|
135
170
|
};
|
|
136
171
|
};
|
|
137
172
|
//# sourceMappingURL=Manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"AAaA,OAAO,
|
|
1
|
+
{"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/Services/Manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const Api = require("@polkadot/api/promise/Api");
|
|
3
|
+
const string = require("@polkadot/util/string");
|
|
5
4
|
const account = require("@prosopo/account");
|
|
6
|
-
const keyring = require("@polkadot/keyring");
|
|
7
|
-
const contract = require("@prosopo/contract");
|
|
8
|
-
const common = require("@prosopo/common");
|
|
9
5
|
const api = require("@prosopo/api");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
6
|
+
const common = require("@prosopo/common");
|
|
7
|
+
const loadBalancer = require("@prosopo/load-balancer");
|
|
13
8
|
const procaptcha = require("@prosopo/procaptcha");
|
|
9
|
+
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
10
|
+
const types = require("@prosopo/types");
|
|
14
11
|
const util = require("@prosopo/util");
|
|
15
12
|
const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
16
13
|
const events = procaptchaCommon.getDefaultEvents(onStateUpdate, state, callbacks);
|
|
@@ -32,46 +29,39 @@ const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
32
29
|
window.clearTimeout(state.timeout);
|
|
33
30
|
updateState({ timeout: void 0 });
|
|
34
31
|
};
|
|
32
|
+
const clearSuccessfulChallengeTimeout = () => {
|
|
33
|
+
window.clearTimeout(state.successfullChallengeTimeout);
|
|
34
|
+
updateState({ successfullChallengeTimeout: void 0 });
|
|
35
|
+
};
|
|
35
36
|
const getConfig = () => {
|
|
36
37
|
const config = {
|
|
37
38
|
userAccountAddress: "",
|
|
38
39
|
...configInput
|
|
39
40
|
};
|
|
41
|
+
if (state.account) {
|
|
42
|
+
config.userAccountAddress = state.account.account.address;
|
|
43
|
+
}
|
|
40
44
|
return types.ProcaptchaConfigSchema.parse(config);
|
|
41
45
|
};
|
|
42
46
|
const getNetwork = (config) => {
|
|
43
47
|
const network = config.networks[config.defaultNetwork];
|
|
44
48
|
if (!network) {
|
|
45
49
|
throw new common.ProsopoEnvError("DEVELOPER.NETWORK_NOT_FOUND", {
|
|
46
|
-
context: {
|
|
50
|
+
context: {
|
|
51
|
+
error: `No network found for environment ${config.defaultEnvironment}`
|
|
52
|
+
}
|
|
47
53
|
});
|
|
48
54
|
}
|
|
49
55
|
return network;
|
|
50
56
|
};
|
|
51
|
-
const loadContract = async () => {
|
|
52
|
-
const network = getNetwork(getConfig());
|
|
53
|
-
const api2 = await Api.ApiPromise.create({
|
|
54
|
-
provider: new ws.WsProvider(network.endpoint),
|
|
55
|
-
initWasm: false,
|
|
56
|
-
noInitWarn: true
|
|
57
|
-
});
|
|
58
|
-
const type = "sr25519";
|
|
59
|
-
const keyring$1 = new keyring.Keyring({ type, ss58Format: api2.registry.chainSS58 });
|
|
60
|
-
return new contract.ProsopoCaptchaContract(
|
|
61
|
-
api2,
|
|
62
|
-
JSON.parse(contractInfo.ContractAbi),
|
|
63
|
-
network.contract.address,
|
|
64
|
-
"prosopo",
|
|
65
|
-
0,
|
|
66
|
-
keyring$1.addFromAddress(getConfig().account.address || "")
|
|
67
|
-
);
|
|
68
|
-
};
|
|
69
57
|
const getAccount = () => {
|
|
70
58
|
if (!state.account) {
|
|
71
|
-
throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
|
|
59
|
+
throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", {
|
|
60
|
+
context: { error: "Account not loaded" }
|
|
61
|
+
});
|
|
72
62
|
}
|
|
73
63
|
const account2 = state.account;
|
|
74
|
-
return account2;
|
|
64
|
+
return { account: account2 };
|
|
75
65
|
};
|
|
76
66
|
const getDappAccount = () => {
|
|
77
67
|
if (!state.dappAccount) {
|
|
@@ -83,6 +73,7 @@ const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
83
73
|
const updateState = procaptchaCommon.buildUpdateState(state, onStateUpdate);
|
|
84
74
|
const resetState = () => {
|
|
85
75
|
clearTimeout();
|
|
76
|
+
clearSuccessfulChallengeTimeout();
|
|
86
77
|
updateState(defaultState());
|
|
87
78
|
};
|
|
88
79
|
const setValidChallengeTimeout = () => {
|
|
@@ -105,7 +96,7 @@ const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
105
96
|
loading: true
|
|
106
97
|
});
|
|
107
98
|
const config = getConfig();
|
|
108
|
-
const ext = new account.ExtensionWeb2();
|
|
99
|
+
const ext = config.web2 ? new account.ExtensionWeb2() : new account.ExtensionWeb3();
|
|
109
100
|
const userAccount = config.userAccountAddress || (await ext.getAccount(config)).account.address;
|
|
110
101
|
updateState({
|
|
111
102
|
account: { account: { address: userAccount } }
|
|
@@ -117,22 +108,39 @@ const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
117
108
|
context: { error: "Account address has not been set for web3 mode" }
|
|
118
109
|
});
|
|
119
110
|
}
|
|
120
|
-
const
|
|
111
|
+
const getRandomProviderResponse = getRandomActiveProvider();
|
|
121
112
|
const events2 = procaptchaCommon.getDefaultEvents(onStateUpdate, state, callbacks);
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const challenge = await providerApi.getPowCaptchaChallenge(
|
|
113
|
+
const providerUrl = getRandomProviderResponse.provider.url;
|
|
114
|
+
const providerApi = new api.ProviderApi(
|
|
115
|
+
getNetwork(getConfig()),
|
|
116
|
+
providerUrl,
|
|
117
|
+
getDappAccount()
|
|
118
|
+
);
|
|
119
|
+
const challenge = await providerApi.getPowCaptchaChallenge(
|
|
120
|
+
userAccount,
|
|
121
|
+
getDappAccount()
|
|
122
|
+
);
|
|
129
123
|
const solution = util.solvePoW(challenge.challenge, challenge.difficulty);
|
|
124
|
+
const user = await ext.getAccount(getConfig());
|
|
125
|
+
const signer = user.extension?.signer;
|
|
126
|
+
if (!signer || !signer.signRaw) {
|
|
127
|
+
throw new common.ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", {
|
|
128
|
+
context: {
|
|
129
|
+
error: "Signer is not defined, cannot sign message to prove account ownership"
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const userTimestampSignature = await signer.signRaw({
|
|
134
|
+
address: userAccount,
|
|
135
|
+
data: string.stringToHex(challenge[types.ApiParams.timestamp].toString()),
|
|
136
|
+
type: "bytes"
|
|
137
|
+
});
|
|
130
138
|
const verifiedSolution = await providerApi.submitPowCaptchaSolution(
|
|
131
139
|
challenge,
|
|
132
|
-
getAccount().account.address,
|
|
140
|
+
getAccount().account.account.address,
|
|
133
141
|
getDappAccount(),
|
|
134
|
-
getRandomProviderResponse,
|
|
135
142
|
solution,
|
|
143
|
+
userTimestampSignature.signature.toString(),
|
|
136
144
|
config.captchas.pow.verifiedTimeout
|
|
137
145
|
);
|
|
138
146
|
if (verifiedSolution[types.ApiParams.verified]) {
|
|
@@ -143,18 +151,44 @@ const Manager = (configInput, state, onStateUpdate, callbacks) => {
|
|
|
143
151
|
events2.onHuman(
|
|
144
152
|
types.encodeProcaptchaOutput({
|
|
145
153
|
[types.ApiParams.providerUrl]: providerUrl,
|
|
146
|
-
[types.ApiParams.user]: getAccount().account.address,
|
|
154
|
+
[types.ApiParams.user]: getAccount().account.account.address,
|
|
147
155
|
[types.ApiParams.dapp]: getDappAccount(),
|
|
148
156
|
[types.ApiParams.challenge]: challenge.challenge,
|
|
149
157
|
[types.ApiParams.blockNumber]: getRandomProviderResponse.blockNumber,
|
|
150
|
-
[types.ApiParams.nonce]: solution
|
|
158
|
+
[types.ApiParams.nonce]: solution,
|
|
159
|
+
[types.ApiParams.timestamp]: challenge.timestamp,
|
|
160
|
+
[types.ApiParams.signature]: {
|
|
161
|
+
[types.ApiParams.provider]: challenge.signature.provider,
|
|
162
|
+
[types.ApiParams.user]: {
|
|
163
|
+
[types.ApiParams.timestamp]: userTimestampSignature.signature.toString()
|
|
164
|
+
}
|
|
165
|
+
}
|
|
151
166
|
})
|
|
152
167
|
);
|
|
153
168
|
setValidChallengeTimeout();
|
|
154
169
|
}
|
|
155
170
|
};
|
|
171
|
+
const getRandomActiveProvider = () => {
|
|
172
|
+
const randomIntBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
|
|
173
|
+
const environment = getConfig().defaultEnvironment;
|
|
174
|
+
const PROVIDERS = loadBalancer.loadBalancer(environment);
|
|
175
|
+
const randomProvderObj = util.at(
|
|
176
|
+
PROVIDERS,
|
|
177
|
+
randomIntBetween(0, PROVIDERS.length - 1)
|
|
178
|
+
);
|
|
179
|
+
return {
|
|
180
|
+
providerAccount: randomProvderObj.address,
|
|
181
|
+
provider: {
|
|
182
|
+
url: randomProvderObj.url,
|
|
183
|
+
datasetId: randomProvderObj.datasetId,
|
|
184
|
+
datasetIdContent: randomProvderObj.datasetIdContent
|
|
185
|
+
},
|
|
186
|
+
blockNumber: 0
|
|
187
|
+
};
|
|
188
|
+
};
|
|
156
189
|
return {
|
|
157
|
-
start
|
|
190
|
+
start,
|
|
191
|
+
resetState
|
|
158
192
|
};
|
|
159
193
|
};
|
|
160
194
|
exports.Manager = Manager;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
-
const react = require("react");
|
|
5
4
|
const webComponents = require("@prosopo/web-components");
|
|
5
|
+
const react = require("react");
|
|
6
6
|
const _interopNamespaceDefaultOnly = (e) => Object.freeze(Object.defineProperty({ __proto__: null, default: e }, Symbol.toStringTag, { value: "Module" }));
|
|
7
|
-
const ProcaptchaWidget = react.lazy(
|
|
8
|
-
async () => Promise.resolve().then(() => /* @__PURE__ */ _interopNamespaceDefaultOnly(require("./Captcha.cjs")))
|
|
9
|
-
);
|
|
7
|
+
const ProcaptchaWidget = react.lazy(async () => Promise.resolve().then(() => /* @__PURE__ */ _interopNamespaceDefaultOnly(require("./ProcaptchaWidget.cjs"))));
|
|
10
8
|
const ProcaptchaPow = (props) => /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(webComponents.ProcaptchaPlaceholder, { darkMode: props.config.theme }), children: /* @__PURE__ */ jsxRuntime.jsx(ProcaptchaWidget, { config: props.config, callbacks: props.callbacks }) });
|
|
11
9
|
exports.ProcaptchaPow = ProcaptchaPow;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
3
|
+
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
4
|
+
const webComponents = require("@prosopo/web-components");
|
|
5
|
+
const react = require("react");
|
|
6
|
+
const Manager = require("../Services/Manager.cjs");
|
|
7
|
+
const Procaptcha = (props) => {
|
|
8
|
+
const config = props.config;
|
|
9
|
+
const themeColor = config.theme === "light" ? "light" : "dark";
|
|
10
|
+
const theme = props.config.theme === "light" ? webComponents.lightTheme : webComponents.darkTheme;
|
|
11
|
+
const callbacks = props.callbacks || {};
|
|
12
|
+
const [state, _updateState] = procaptchaCommon.useProcaptcha(react.useState, react.useRef);
|
|
13
|
+
const updateState = procaptchaCommon.buildUpdateState(state, _updateState);
|
|
14
|
+
const manager = react.useRef(Manager.Manager(config, state, updateState, callbacks));
|
|
15
|
+
const captchaRef = react.useRef(null);
|
|
16
|
+
react.useEffect(() => {
|
|
17
|
+
const element = captchaRef.current;
|
|
18
|
+
if (!element) return;
|
|
19
|
+
const form = element.closest("form");
|
|
20
|
+
if (!form) return;
|
|
21
|
+
const handleSubmit = () => {
|
|
22
|
+
manager.current.resetState();
|
|
23
|
+
};
|
|
24
|
+
form.addEventListener("submit", handleSubmit);
|
|
25
|
+
return () => {
|
|
26
|
+
form.removeEventListener("submit", handleSubmit);
|
|
27
|
+
};
|
|
28
|
+
}, []);
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: captchaRef, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
style: {
|
|
33
|
+
maxWidth: webComponents.WIDGET_MAX_WIDTH,
|
|
34
|
+
maxHeight: "100%",
|
|
35
|
+
overflowX: "auto"
|
|
36
|
+
},
|
|
37
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.ContainerDiv, { children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.WidthBasedStylesDiv, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: webComponents.WIDGET_DIMENSIONS, "data-cy": "button-human", children: [
|
|
38
|
+
" ",
|
|
39
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
40
|
+
"div",
|
|
41
|
+
{
|
|
42
|
+
style: {
|
|
43
|
+
padding: webComponents.WIDGET_PADDING,
|
|
44
|
+
border: webComponents.WIDGET_BORDER,
|
|
45
|
+
backgroundColor: theme.palette.background.default,
|
|
46
|
+
borderColor: theme.palette.grey[300],
|
|
47
|
+
borderRadius: webComponents.WIDGET_BORDER_RADIUS,
|
|
48
|
+
display: "flex",
|
|
49
|
+
alignItems: "center",
|
|
50
|
+
flexWrap: "wrap",
|
|
51
|
+
justifyContent: "space-between",
|
|
52
|
+
minHeight: `${webComponents.WIDGET_INNER_HEIGHT}px`,
|
|
53
|
+
overflow: "hidden"
|
|
54
|
+
},
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
"div",
|
|
58
|
+
{
|
|
59
|
+
style: { display: "inline-flex", flexDirection: "column" },
|
|
60
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
style: {
|
|
64
|
+
display: "flex",
|
|
65
|
+
justifyContent: "flex-start",
|
|
66
|
+
alignItems: "center",
|
|
67
|
+
flexWrap: "wrap"
|
|
68
|
+
},
|
|
69
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
style: {
|
|
73
|
+
display: "flex",
|
|
74
|
+
alignItems: "center",
|
|
75
|
+
justifyContent: "center",
|
|
76
|
+
flexDirection: "column",
|
|
77
|
+
verticalAlign: "middle"
|
|
78
|
+
},
|
|
79
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
style: {
|
|
83
|
+
display: "flex"
|
|
84
|
+
},
|
|
85
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: state.loading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
+
webComponents.LoadingSpinner,
|
|
87
|
+
{
|
|
88
|
+
themeColor,
|
|
89
|
+
"aria-label": "Loading spinner"
|
|
90
|
+
}
|
|
91
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
92
|
+
webComponents.Checkbox,
|
|
93
|
+
{
|
|
94
|
+
checked: state.isHuman,
|
|
95
|
+
onChange: manager.current.start,
|
|
96
|
+
themeColor,
|
|
97
|
+
labelText: "I am human",
|
|
98
|
+
"aria-label": "human checkbox"
|
|
99
|
+
}
|
|
100
|
+
) })
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
110
|
+
"div",
|
|
111
|
+
{
|
|
112
|
+
style: { display: "inline-flex", flexDirection: "column" },
|
|
113
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
"a",
|
|
115
|
+
{
|
|
116
|
+
href: webComponents.WIDGET_URL,
|
|
117
|
+
target: "_blank",
|
|
118
|
+
"aria-label": webComponents.WIDGET_URL_TEXT,
|
|
119
|
+
rel: "noreferrer",
|
|
120
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.Logo, { themeColor, "aria-label": "Prosopo logo" }) })
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
] }) }) })
|
|
129
|
+
}
|
|
130
|
+
) });
|
|
131
|
+
};
|
|
132
|
+
module.exports = Procaptcha;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("./components/
|
|
3
|
+
require("./components/ProcaptchaWidget.cjs");
|
|
4
4
|
const ProcaptchaPoW = require("./components/ProcaptchaPoW.cjs");
|
|
5
5
|
exports.ProcaptchaPow = ProcaptchaPoW.ProcaptchaPow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":""}
|
|
@@ -1,42 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { Checkbox, ContainerDiv, LoadingSpinner, Logo, WIDGET_BORDER, WIDGET_BORDER_RADIUS, WIDGET_DIMENSIONS, WIDGET_INNER_HEIGHT, WIDGET_PADDING, WIDGET_URL, WIDGET_URL_TEXT, WidthBasedStylesDiv, darkTheme, lightTheme, } from '@prosopo/web-components';
|
|
3
|
-
import { Manager } from '../Services/Manager.js';
|
|
4
|
-
import { buildUpdateState, useProcaptcha } from '@prosopo/procaptcha-common';
|
|
5
|
-
import { useRef, useState } from 'react';
|
|
6
|
-
const Procaptcha = (props) => {
|
|
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);
|
|
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: {
|
|
15
|
-
padding: WIDGET_PADDING,
|
|
16
|
-
border: WIDGET_BORDER,
|
|
17
|
-
backgroundColor: theme.palette.background.default,
|
|
18
|
-
borderColor: theme.palette.grey[300],
|
|
19
|
-
borderRadius: WIDGET_BORDER_RADIUS,
|
|
20
|
-
display: 'flex',
|
|
21
|
-
alignItems: 'center',
|
|
22
|
-
flexWrap: 'wrap',
|
|
23
|
-
justifyContent: 'space-between',
|
|
24
|
-
minHeight: `${WIDGET_INNER_HEIGHT}px`,
|
|
25
|
-
overflow: 'hidden',
|
|
26
|
-
}, children: [_jsx("div", { style: { display: 'inline-flex', flexDirection: 'column' }, children: _jsx("div", { style: {
|
|
27
|
-
display: 'flex',
|
|
28
|
-
justifyContent: 'flex-start',
|
|
29
|
-
alignItems: 'center',
|
|
30
|
-
flexWrap: 'wrap',
|
|
31
|
-
}, children: _jsx("div", { style: {
|
|
32
|
-
display: 'flex',
|
|
33
|
-
alignItems: 'center',
|
|
34
|
-
justifyContent: 'center',
|
|
35
|
-
flexDirection: 'column',
|
|
36
|
-
verticalAlign: 'middle',
|
|
37
|
-
}, children: _jsx("div", { style: {
|
|
38
|
-
display: 'flex',
|
|
39
|
-
}, children: _jsx("div", { style: { flex: 1 }, children: state.loading ? (_jsx(LoadingSpinner, { themeColor: themeColor, "aria-label": "Loading spinner" })) : (_jsx(Checkbox, { checked: state.isHuman, onChange: manager.start, themeColor: themeColor, labelText: 'I am human', "aria-label": "human checkbox" })) }) }) }) }) }), _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, "aria-label": "Prosopo logo" }) }) }) })] })] }) }) }) }) }));
|
|
40
|
-
};
|
|
41
|
-
export default Procaptcha;
|
|
1
|
+
export {};
|
|
42
2
|
//# sourceMappingURL=Captcha.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Captcha.js","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Captcha.js","sourceRoot":"","sources":["../../src/components/Captcha.tsx"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ReactElement } from
|
|
1
|
+
import type { ProcaptchaEvents } from "@prosopo/types";
|
|
2
|
+
import { type LazyExoticComponent } from "react";
|
|
3
|
+
import type { ReactElement } from "react";
|
|
4
4
|
type ProcaptchaProps = React.ComponentProps<typeof ProcaptchaWidget>;
|
|
5
5
|
declare const ProcaptchaWidget: LazyExoticComponent<(props: any, callbacks: Partial<ProcaptchaEvents>) => ReactElement>;
|
|
6
6
|
export declare const ProcaptchaPow: (props: ProcaptchaProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcaptchaPoW.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProcaptchaPoW.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAevD,OAAO,EAAE,KAAK,mBAAmB,EAAkB,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAErE,QAAA,MAAM,gBAAgB,EAAE,mBAAmB,CAE1C,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,YAAY,CACd,CAAC;AAEtD,eAAO,MAAM,aAAa,UAAW,eAAe,qDAInD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
const ProcaptchaWidget = lazy(async () => import(
|
|
2
|
+
import { ProcaptchaPlaceholder } from "@prosopo/web-components";
|
|
3
|
+
import { Suspense, lazy } from "react";
|
|
4
|
+
const ProcaptchaWidget = lazy(async () => import("./ProcaptchaWidget.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":";
|
|
1
|
+
{"version":3,"file":"ProcaptchaPoW.js","sourceRoot":"","sources":["../../src/components/ProcaptchaPoW.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAchE,OAAO,EAA4B,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAKjE,MAAM,gBAAgB,GAGlB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,CACxD,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,qBAAqB,IAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAI,YAC1E,KAAC,gBAAgB,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,GAC5D,CACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAkCtD,QAAA,MAAM,UAAU,UAAW,eAAe,qDA4HzC,CAAC;AACF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { buildUpdateState, useProcaptcha } from "@prosopo/procaptcha-common";
|
|
3
|
+
import { Checkbox, ContainerDiv, LoadingSpinner, Logo, WIDGET_BORDER, WIDGET_BORDER_RADIUS, WIDGET_DIMENSIONS, WIDGET_INNER_HEIGHT, WIDGET_MAX_WIDTH, WIDGET_PADDING, WIDGET_URL, WIDGET_URL_TEXT, WidthBasedStylesDiv, darkTheme, lightTheme, } from "@prosopo/web-components";
|
|
4
|
+
import { useEffect, useRef, useState } from "react";
|
|
5
|
+
import { Manager } from "../Services/Manager.js";
|
|
6
|
+
const Procaptcha = (props) => {
|
|
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 = useRef(Manager(config, state, updateState, callbacks));
|
|
14
|
+
const captchaRef = useRef(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const element = captchaRef.current;
|
|
17
|
+
if (!element)
|
|
18
|
+
return;
|
|
19
|
+
const form = element.closest("form");
|
|
20
|
+
if (!form)
|
|
21
|
+
return;
|
|
22
|
+
const handleSubmit = () => {
|
|
23
|
+
manager.current.resetState();
|
|
24
|
+
};
|
|
25
|
+
form.addEventListener("submit", handleSubmit);
|
|
26
|
+
return () => {
|
|
27
|
+
form.removeEventListener("submit", handleSubmit);
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
return (_jsx("div", { ref: captchaRef, children: _jsx("div", { style: {
|
|
31
|
+
maxWidth: WIDGET_MAX_WIDTH,
|
|
32
|
+
maxHeight: "100%",
|
|
33
|
+
overflowX: "auto",
|
|
34
|
+
}, children: _jsx(ContainerDiv, { children: _jsx(WidthBasedStylesDiv, { children: _jsxs("div", { style: WIDGET_DIMENSIONS, "data-cy": "button-human", children: [" ", _jsxs("div", { style: {
|
|
35
|
+
padding: WIDGET_PADDING,
|
|
36
|
+
border: WIDGET_BORDER,
|
|
37
|
+
backgroundColor: theme.palette.background.default,
|
|
38
|
+
borderColor: theme.palette.grey[300],
|
|
39
|
+
borderRadius: WIDGET_BORDER_RADIUS,
|
|
40
|
+
display: "flex",
|
|
41
|
+
alignItems: "center",
|
|
42
|
+
flexWrap: "wrap",
|
|
43
|
+
justifyContent: "space-between",
|
|
44
|
+
minHeight: `${WIDGET_INNER_HEIGHT}px`,
|
|
45
|
+
overflow: "hidden",
|
|
46
|
+
}, children: [_jsx("div", { style: { display: "inline-flex", flexDirection: "column" }, children: _jsx("div", { style: {
|
|
47
|
+
display: "flex",
|
|
48
|
+
justifyContent: "flex-start",
|
|
49
|
+
alignItems: "center",
|
|
50
|
+
flexWrap: "wrap",
|
|
51
|
+
}, children: _jsx("div", { style: {
|
|
52
|
+
display: "flex",
|
|
53
|
+
alignItems: "center",
|
|
54
|
+
justifyContent: "center",
|
|
55
|
+
flexDirection: "column",
|
|
56
|
+
verticalAlign: "middle",
|
|
57
|
+
}, children: _jsx("div", { style: {
|
|
58
|
+
display: "flex",
|
|
59
|
+
}, children: _jsx("div", { style: { flex: 1 }, children: state.loading ? (_jsx(LoadingSpinner, { themeColor: themeColor, "aria-label": "Loading spinner" })) : (_jsx(Checkbox, { checked: state.isHuman, onChange: manager.current.start, themeColor: themeColor, labelText: "I am human", "aria-label": "human checkbox" })) }) }) }) }) }), _jsx("div", { style: { display: "inline-flex", flexDirection: "column" }, children: _jsx("a", { href: WIDGET_URL, target: "_blank", "aria-label": WIDGET_URL_TEXT, rel: "noreferrer", children: _jsx("div", { style: { flex: 1 }, children: _jsx(Logo, { themeColor: themeColor, "aria-label": "Prosopo logo" }) }) }) })] })] }) }) }) }) }));
|
|
60
|
+
};
|
|
61
|
+
export default Procaptcha;
|
|
62
|
+
//# sourceMappingURL=ProcaptchaWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcaptchaWidget.js","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from "./components/ProcaptchaWidget.js";
|
|
2
|
+
export * from "./components/ProcaptchaPoW.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from "./components/ProcaptchaWidget.js";
|
|
2
|
+
export * from "./components/ProcaptchaPoW.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,76 +1,70 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
"homepage": "https://github.com/prosopo/captcha#readme",
|
|
72
|
-
"description": "",
|
|
73
|
-
"publishConfig": {
|
|
74
|
-
"registry": "https://registry.npmjs.org"
|
|
75
|
-
}
|
|
2
|
+
"name": "@prosopo/procaptcha-pow",
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"author": "PROSOPO LIMITED <info@prosopo.io>",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20",
|
|
11
|
+
"npm": ">=9"
|
|
12
|
+
},
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"require": "./dist/cjs/index.cjs"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"source": "./src/index.ts",
|
|
21
|
+
"scripts": {
|
|
22
|
+
"test": "echo \"No test specified\"",
|
|
23
|
+
"clean": "tsc --build --clean",
|
|
24
|
+
"build": "tsc --build --verbose",
|
|
25
|
+
"build:cjs": "npx vite --config vite.cjs.config.ts build"
|
|
26
|
+
},
|
|
27
|
+
"browserslist": [
|
|
28
|
+
"> 0.5%, last 2 versions, not dead"
|
|
29
|
+
],
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@emotion/react": "^11.11.1",
|
|
32
|
+
"@prosopo/account": "2.0.1",
|
|
33
|
+
"@polkadot/api": "10.13.1",
|
|
34
|
+
"@polkadot/keyring": "12.6.2",
|
|
35
|
+
"@polkadot/rpc-provider": "10.13.1",
|
|
36
|
+
"@prosopo/api": "2.0.1",
|
|
37
|
+
"@prosopo/common": "2.0.1",
|
|
38
|
+
"@prosopo/contract": "2.0.1",
|
|
39
|
+
"@prosopo/procaptcha": "2.0.1",
|
|
40
|
+
"@prosopo/procaptcha-common": "2.0.1",
|
|
41
|
+
"@prosopo/types": "2.0.1",
|
|
42
|
+
"@prosopo/util": "2.0.1",
|
|
43
|
+
"@prosopo/web-components": "2.0.1",
|
|
44
|
+
"react": "^18.3.1"
|
|
45
|
+
},
|
|
46
|
+
"overrides": {
|
|
47
|
+
"@polkadot/extension-inject": {
|
|
48
|
+
"@polkadot/api": {
|
|
49
|
+
"version": "10.13.1"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@prosopo/config": "2.0.1",
|
|
55
|
+
"tslib": "2.6.2",
|
|
56
|
+
"typescript": "5.1.6"
|
|
57
|
+
},
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "git+https://github.com/prosopo/captcha.git"
|
|
61
|
+
},
|
|
62
|
+
"bugs": {
|
|
63
|
+
"url": "https://github.com/prosopo/captcha/issues"
|
|
64
|
+
},
|
|
65
|
+
"homepage": "https://github.com/prosopo/captcha#readme",
|
|
66
|
+
"description": "",
|
|
67
|
+
"publishConfig": {
|
|
68
|
+
"registry": "https://registry.npmjs.org"
|
|
69
|
+
}
|
|
76
70
|
}
|
package/vite.cjs.config.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
// Copyright 2021-2024 Prosopo (UK) Ltd.
|
|
2
3
|
//
|
|
3
4
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -11,9 +12,11 @@
|
|
|
11
12
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
13
|
// See the License for the specific language governing permissions and
|
|
13
14
|
// limitations under the License.
|
|
14
|
-
import { ViteCommonJSConfig } from
|
|
15
|
-
import path from 'path'
|
|
15
|
+
import { ViteCommonJSConfig } from "@prosopo/config";
|
|
16
16
|
|
|
17
17
|
export default function () {
|
|
18
|
-
|
|
18
|
+
return ViteCommonJSConfig(
|
|
19
|
+
"procaptcha-pow",
|
|
20
|
+
path.resolve("./tsconfig.cjs.json"),
|
|
21
|
+
);
|
|
19
22
|
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
3
|
-
const webComponents = require("@prosopo/web-components");
|
|
4
|
-
const Manager = require("../Services/Manager.cjs");
|
|
5
|
-
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
6
|
-
const react = require("react");
|
|
7
|
-
const Procaptcha = (props) => {
|
|
8
|
-
const config = props.config;
|
|
9
|
-
const themeColor = config.theme === "light" ? "light" : "dark";
|
|
10
|
-
const theme = props.config.theme === "light" ? webComponents.lightTheme : webComponents.darkTheme;
|
|
11
|
-
const callbacks = props.callbacks || {};
|
|
12
|
-
const [state, _updateState] = procaptchaCommon.useProcaptcha(react.useState, react.useRef);
|
|
13
|
-
const updateState = procaptchaCommon.buildUpdateState(state, _updateState);
|
|
14
|
-
const manager = Manager.Manager(config, state, updateState, callbacks);
|
|
15
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { maxWidth: "100%", maxHeight: "100%", overflowX: "auto" }, children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.ContainerDiv, { children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.WidthBasedStylesDiv, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: webComponents.WIDGET_DIMENSIONS, "data-cy": "button-human", children: [
|
|
16
|
-
" ",
|
|
17
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18
|
-
"div",
|
|
19
|
-
{
|
|
20
|
-
style: {
|
|
21
|
-
padding: webComponents.WIDGET_PADDING,
|
|
22
|
-
border: webComponents.WIDGET_BORDER,
|
|
23
|
-
backgroundColor: theme.palette.background.default,
|
|
24
|
-
borderColor: theme.palette.grey[300],
|
|
25
|
-
borderRadius: webComponents.WIDGET_BORDER_RADIUS,
|
|
26
|
-
display: "flex",
|
|
27
|
-
alignItems: "center",
|
|
28
|
-
flexWrap: "wrap",
|
|
29
|
-
justifyContent: "space-between",
|
|
30
|
-
minHeight: `${webComponents.WIDGET_INNER_HEIGHT}px`,
|
|
31
|
-
overflow: "hidden"
|
|
32
|
-
},
|
|
33
|
-
children: [
|
|
34
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "inline-flex", flexDirection: "column" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
-
"div",
|
|
36
|
-
{
|
|
37
|
-
style: {
|
|
38
|
-
display: "flex",
|
|
39
|
-
justifyContent: "flex-start",
|
|
40
|
-
alignItems: "center",
|
|
41
|
-
flexWrap: "wrap"
|
|
42
|
-
},
|
|
43
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
-
"div",
|
|
45
|
-
{
|
|
46
|
-
style: {
|
|
47
|
-
display: "flex",
|
|
48
|
-
alignItems: "center",
|
|
49
|
-
justifyContent: "center",
|
|
50
|
-
flexDirection: "column",
|
|
51
|
-
verticalAlign: "middle"
|
|
52
|
-
},
|
|
53
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
|
-
"div",
|
|
55
|
-
{
|
|
56
|
-
style: {
|
|
57
|
-
display: "flex"
|
|
58
|
-
},
|
|
59
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: state.loading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
-
webComponents.LoadingSpinner,
|
|
61
|
-
{
|
|
62
|
-
themeColor,
|
|
63
|
-
"aria-label": "Loading spinner"
|
|
64
|
-
}
|
|
65
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
66
|
-
webComponents.Checkbox,
|
|
67
|
-
{
|
|
68
|
-
checked: state.isHuman,
|
|
69
|
-
onChange: manager.start,
|
|
70
|
-
themeColor,
|
|
71
|
-
labelText: "I am human",
|
|
72
|
-
"aria-label": "human checkbox"
|
|
73
|
-
}
|
|
74
|
-
) })
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
) }),
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "inline-flex", flexDirection: "column" }, children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: webComponents.WIDGET_URL, target: "_blank", "aria-label": webComponents.WIDGET_URL_TEXT, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(webComponents.Logo, { themeColor, "aria-label": "Prosopo logo" }) }) }) })
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
)
|
|
85
|
-
] }) }) }) }) });
|
|
86
|
-
};
|
|
87
|
-
module.exports = Procaptcha;
|