@prosopo/server 0.3.39 → 0.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,14 +5,21 @@ const getServerConfig = () => types.ProsopoServerConfigSchema.parse({
5
5
  defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT,
6
6
  // enviromental variables
7
7
  defaultNetwork: process.env.PROSOPO_DEFAULT_NETWORK,
8
- serverUrl: (
9
- // https://github.com/prosopo/captcha/issues/701
10
- process.env.PROSOPO_SERVER_URL && process.env.PROSOPO_SERVER_PORT ? `${process.env.PROSOPO_SERVER_URL}:${process.env.PROSOPO_SERVER_PORT}` : "http://localhost:9228"
11
- ),
8
+ serverUrl: getServerUrl(),
12
9
  dappName: process.env.PROSOPO_DAPP_NAME || "client-example-server",
13
10
  account: {
14
11
  password: "",
15
12
  address: process.env.PROSOPO_SITE_KEY || ""
16
13
  }
17
14
  });
15
+ const getServerUrl = () => {
16
+ if (process.env.PROSOPO_SERVER_URL) {
17
+ if (process.env.PROSOPO_SERVER_URL.match(/:\d+/)) {
18
+ return process.env.PROSOPO_SERVER_URL;
19
+ }
20
+ return `${process.env.PROSOPO_SERVER_URL}:${process.env.PROSOPO_SERVER_PORT || 9228}`;
21
+ }
22
+ return "http://localhost:9228";
23
+ };
18
24
  exports.getServerConfig = getServerConfig;
25
+ exports.getServerUrl = getServerUrl;
@@ -9,4 +9,5 @@ const PublicProsopoServer = async (config2) => {
9
9
  };
10
10
  exports.ProsopoServer = server.ProsopoServer;
11
11
  exports.getServerConfig = config.getServerConfig;
12
+ exports.getServerUrl = config.getServerUrl;
12
13
  exports.PublicProsopoServer = PublicProsopoServer;
@@ -9,8 +9,6 @@ const api = require("@prosopo/api");
9
9
  const ws = require("@polkadot/rpc-provider/ws");
10
10
  const contractInfo = require("@prosopo/captcha-contract/contract-info");
11
11
  const util = require("@prosopo/util");
12
- const DEFAULT_MAX_VERIFIED_TIME_CACHED = 60 * 1e3;
13
- const DEFAULT_MAX_VERIFIED_TIME_CONTRACT = 5 * 60 * 1e3;
14
12
  class ProsopoServer {
15
13
  constructor(config, pair) {
16
14
  this.config = config;
@@ -97,18 +95,6 @@ class ProsopoServer {
97
95
  }
98
96
  return void 0;
99
97
  }
100
- /**
101
- * Verify the time since the blockNumber is equal to or less than the maxVerifiedTime.
102
- * @param maxVerifiedTime
103
- * @param blockNumber
104
- */
105
- async verifyRecency(blockNumber, maxVerifiedTime) {
106
- const contractApi = await this.getContractApi();
107
- const currentBlock = await contract.getCurrentBlockNumber(contractApi.api);
108
- const blocksPassed = currentBlock - blockNumber;
109
- const blockTime = contract.getBlockTimeMs(contractApi.api);
110
- return blockTime * blocksPassed <= maxVerifiedTime;
111
- }
112
98
  /**
113
99
  * Verify the user with the contract. We check the contract to see if the user has completed a captcha in the
114
100
  * past. If they have, we check the time since the last correct captcha is within the maxVerifiedTime and we check
@@ -116,13 +102,27 @@ class ProsopoServer {
116
102
  * @param user
117
103
  * @param maxVerifiedTime
118
104
  */
119
- async verifyContract(user, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CONTRACT) {
120
- const contractApi = await this.getContractApi();
121
- this.logger.info("Provider URL not provided. Verifying with contract.");
122
- const correctCaptchaBlockNumber = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value.unwrap().unwrap().before.valueOf();
123
- const verifyRecency = await this.verifyRecency(correctCaptchaBlockNumber, maxVerifiedTime);
124
- const isHuman = (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value.unwrap().unwrap();
125
- return isHuman && verifyRecency;
105
+ async verifyContract(user, maxVerifiedTime) {
106
+ try {
107
+ const contractApi = await this.getContractApi();
108
+ this.logger.info("Provider URL not provided. Verifying with contract.");
109
+ const correctCaptchaBlockNumber = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value.unwrap().unwrap().before.valueOf();
110
+ const recent = await contract.verifyRecency(
111
+ (await this.getContractApi()).api,
112
+ correctCaptchaBlockNumber,
113
+ maxVerifiedTime
114
+ );
115
+ if (!recent) {
116
+ this.logger.info("User has not completed a captcha recently");
117
+ return false;
118
+ }
119
+ const isHuman = (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value.unwrap().unwrap();
120
+ this.logger.info("isHuman", isHuman);
121
+ return isHuman;
122
+ } catch (error) {
123
+ this.logger.error(error);
124
+ return false;
125
+ }
126
126
  }
127
127
  /**
128
128
  * Verify the user with the provider URL passed in. If a challenge is provided, we use the challenge to verify the
@@ -131,28 +131,36 @@ class ProsopoServer {
131
131
  * @param dapp
132
132
  * @param user
133
133
  * @param blockNumber
134
+ * @param timeouts
134
135
  * @param challenge
135
136
  * @param commitmentId
136
- * @param maxVerifiedTime
137
137
  */
138
- async verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CACHED) {
138
+ async verifyProvider(providerUrl, dapp, user, blockNumber, timeouts, challenge, commitmentId) {
139
139
  this.logger.info("Verifying with provider.");
140
140
  const providerApi = await this.getProviderApi(providerUrl);
141
141
  if (challenge) {
142
- const result2 = await providerApi.submitPowCaptchaVerify(challenge, dapp);
142
+ const result2 = await providerApi.submitPowCaptchaVerify(challenge, dapp, timeouts.pow.cachedTimeout);
143
143
  return result2.verified;
144
144
  }
145
- const result = await providerApi.verifyDappUser(dapp, user, blockNumber, commitmentId, maxVerifiedTime);
146
- const verifyRecency = await this.verifyRecency(result.blockNumber, maxVerifiedTime);
147
- return result.verified && verifyRecency;
145
+ const recent = await contract.verifyRecency((await this.getContractApi()).api, blockNumber, timeouts.image.cachedTimeout);
146
+ if (!recent) {
147
+ return false;
148
+ }
149
+ const result = await providerApi.verifyDappUser(
150
+ dapp,
151
+ user,
152
+ blockNumber,
153
+ commitmentId,
154
+ timeouts.image.cachedTimeout
155
+ );
156
+ return result.verified;
148
157
  }
149
158
  /**
150
159
  *
151
160
  * @param payload Info output by procaptcha on completion of the captcha process
152
- * @param maxVerifiedTime Maximum time in milliseconds since the blockNumber
153
161
  * @returns
154
162
  */
155
- async isVerified(payload, maxVerifiedTime) {
163
+ async isVerified(payload) {
156
164
  const { user, dapp, providerUrl, commitmentId, blockNumber, challenge } = payload;
157
165
  if (providerUrl && blockNumber) {
158
166
  return await this.verifyProvider(
@@ -160,12 +168,12 @@ class ProsopoServer {
160
168
  dapp,
161
169
  user,
162
170
  blockNumber,
171
+ this.config.timeouts,
163
172
  challenge,
164
- commitmentId,
165
- maxVerifiedTime
173
+ commitmentId
166
174
  );
167
175
  } else {
168
- return await this.verifyContract(user, maxVerifiedTime);
176
+ return await this.verifyContract(user, this.config.timeouts.contract.maxVerifiedTime);
169
177
  }
170
178
  }
171
179
  async getContractApi() {
@@ -180,6 +188,4 @@ class ProsopoServer {
180
188
  return this.contract;
181
189
  }
182
190
  }
183
- exports.DEFAULT_MAX_VERIFIED_TIME_CACHED = DEFAULT_MAX_VERIFIED_TIME_CACHED;
184
- exports.DEFAULT_MAX_VERIFIED_TIME_CONTRACT = DEFAULT_MAX_VERIFIED_TIME_CONTRACT;
185
191
  exports.ProsopoServer = ProsopoServer;
package/dist/config.d.ts CHANGED
@@ -8,17 +8,33 @@ export declare const getServerConfig: () => {
8
8
  password?: string | undefined;
9
9
  };
10
10
  networks: Record<"development" | "rococo" | "shiden", {
11
+ endpoint: string;
11
12
  contract: {
12
- name: string;
13
13
  address: string;
14
+ name: string;
14
15
  };
15
- endpoint: string;
16
16
  pairType: "sr25519" | "ed25519" | "ecdsa" | "ethereum";
17
17
  ss58Format: number;
18
18
  }>;
19
19
  web2: boolean;
20
20
  solutionThreshold: number;
21
21
  dappName: string;
22
+ timeouts: {
23
+ image: {
24
+ challengeTimeout: number;
25
+ solutionTimeout: number;
26
+ verifiedTimeout: number;
27
+ cachedTimeout: number;
28
+ };
29
+ contract: {
30
+ maxVerifiedTime: number;
31
+ };
32
+ pow: {
33
+ solutionTimeout: number;
34
+ verifiedTimeout: number;
35
+ cachedTimeout: number;
36
+ };
37
+ };
22
38
  database?: Partial<Record<"development" | "staging" | "production", {
23
39
  type: string;
24
40
  endpoint: string;
@@ -29,4 +45,5 @@ export declare const getServerConfig: () => {
29
45
  userAccountAddress?: string | undefined;
30
46
  serverUrl?: string | undefined;
31
47
  };
48
+ export declare const getServerUrl: () => string;
32
49
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CActB,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUtB,CAAA;AAEN,eAAO,MAAM,YAAY,QAAO,MAQ/B,CAAA"}
package/dist/config.js CHANGED
@@ -2,13 +2,20 @@ import { ProsopoServerConfigSchema } from '@prosopo/types';
2
2
  export const getServerConfig = () => ProsopoServerConfigSchema.parse({
3
3
  defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT,
4
4
  defaultNetwork: process.env.PROSOPO_DEFAULT_NETWORK,
5
- serverUrl: process.env.PROSOPO_SERVER_URL && process.env.PROSOPO_SERVER_PORT
6
- ? `${process.env.PROSOPO_SERVER_URL}:${process.env.PROSOPO_SERVER_PORT}`
7
- : 'http://localhost:9228',
5
+ serverUrl: getServerUrl(),
8
6
  dappName: process.env.PROSOPO_DAPP_NAME || 'client-example-server',
9
7
  account: {
10
8
  password: '',
11
9
  address: process.env.PROSOPO_SITE_KEY || '',
12
10
  },
13
11
  });
12
+ export const getServerUrl = () => {
13
+ if (process.env.PROSOPO_SERVER_URL) {
14
+ if (process.env.PROSOPO_SERVER_URL.match(/:\d+/)) {
15
+ return process.env.PROSOPO_SERVER_URL;
16
+ }
17
+ return `${process.env.PROSOPO_SERVER_URL}:${process.env.PROSOPO_SERVER_PORT || 9228}`;
18
+ }
19
+ return 'http://localhost:9228';
20
+ };
14
21
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAChC,yBAAyB,CAAC,KAAK,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;IAC3D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;IACnD,SAAS,EAEL,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC7D,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE;QACxE,CAAC,CAAC,uBAAuB;IACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB;IAClE,OAAO,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;KAC9C;CACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAChC,yBAAyB,CAAC,KAAK,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;IAC3D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;IACnD,SAAS,EAAE,YAAY,EAAE;IACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB;IAClE,OAAO,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;KAC9C;CACJ,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;SACxC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAA;KACxF;IACD,OAAO,uBAAuB,CAAA;AAClC,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ProsopoServer } from './server.js';
2
2
  export { ProsopoServer } from './server.js';
3
- export { getServerConfig } from './config.js';
3
+ export { getServerConfig, getServerUrl } from './config.js';
4
4
  import { ProsopoServerConfigOutput } from '@prosopo/types';
5
5
  export declare const PublicProsopoServer: (config: ProsopoServerConfigOutput) => Promise<ProsopoServer>;
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,eAAO,MAAM,mBAAmB,WAAkB,yBAAyB,2BAI1E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,eAAO,MAAM,mBAAmB,WAAkB,yBAAyB,2BAI1E,CAAA"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ProsopoServer } from './server.js';
2
2
  export { ProsopoServer } from './server.js';
3
- export { getServerConfig } from './config.js';
3
+ export { getServerConfig, getServerUrl } from './config.js';
4
4
  import { getPairAsync } from '@prosopo/contract';
5
5
  export const PublicProsopoServer = async (config) => {
6
6
  const pair = await getPairAsync(config.networks[config.defaultNetwork], undefined, config.account.address);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAiC,EAAE,EAAE;IAE3E,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1G,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAiC,EAAE,EAAE;IAE3E,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1G,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAA"}
package/dist/server.d.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  import { ApiPromise } from '@polkadot/api/promise/Api';
2
- import { ContractAbi, NetworkConfig, ProcaptchaOutput, ProsopoServerConfigOutput } from '@prosopo/types';
2
+ import { CaptchaTimeoutOutput, ContractAbi, NetworkConfig, ProcaptchaOutput, ProsopoServerConfigOutput } from '@prosopo/types';
3
3
  import { Keyring } from '@polkadot/keyring';
4
4
  import { KeyringPair } from '@polkadot/keyring/types';
5
5
  import { Logger } from '@prosopo/common';
6
6
  import { ProsopoCaptchaContract } from '@prosopo/contract';
7
7
  import { ProviderApi } from '@prosopo/api';
8
8
  import { WsProvider } from '@polkadot/rpc-provider/ws';
9
- export declare const DEFAULT_MAX_VERIFIED_TIME_CACHED: number;
10
- export declare const DEFAULT_MAX_VERIFIED_TIME_CONTRACT: number;
11
9
  export declare class ProsopoServer {
12
10
  config: ProsopoServerConfigOutput;
13
11
  contract: ProsopoCaptchaContract | undefined;
@@ -30,10 +28,9 @@ export declare class ProsopoServer {
30
28
  getApi(): ApiPromise;
31
29
  getContract(): ProsopoCaptchaContract;
32
30
  checkRandomProvider(user: string, dapp: string, providerUrl: string, blockNumber: number): Promise<import("@prosopo/captcha-contract/types-returns").Provider | undefined>;
33
- verifyRecency(blockNumber: number, maxVerifiedTime: number): Promise<boolean>;
34
- verifyContract(user: string, maxVerifiedTime?: number): Promise<boolean>;
35
- verifyProvider(providerUrl: string, dapp: string, user: string, blockNumber: number, challenge?: string, commitmentId?: string, maxVerifiedTime?: number): Promise<boolean>;
36
- isVerified(payload: ProcaptchaOutput, maxVerifiedTime?: number): Promise<boolean>;
31
+ verifyContract(user: string, maxVerifiedTime: number): Promise<boolean>;
32
+ verifyProvider(providerUrl: string, dapp: string, user: string, blockNumber: number, timeouts: CaptchaTimeoutOutput, challenge?: string, commitmentId?: string): Promise<boolean>;
33
+ isVerified(payload: ProcaptchaOutput): Promise<boolean>;
37
34
  getContractApi(): Promise<ProsopoCaptchaContract>;
38
35
  }
39
36
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EACH,WAAW,EACX,aAAa,EAEb,gBAAgB,EAChB,yBAAyB,EAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAY,MAAM,EAA+C,MAAM,iBAAiB,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAyD,MAAM,mBAAmB,CAAA;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAItD,eAAO,MAAM,gCAAgC,QAAY,CAAA;AACzD,eAAO,MAAM,kCAAkC,QAAgB,CAAA;AAE/D,qBAAa,aAAa;IACtB,MAAM,EAAE,yBAAyB,CAAA;IACjC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,CAAA;IAC5C,sBAAsB,EAAE,MAAM,CAAA;IAC9B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,WAAW,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7B,GAAG,EAAE,UAAU,GAAG,SAAS,CAAA;IAC3B,OAAO,EAAE,aAAa,CAAA;gBAEV,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW;IAiBpD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIxC,sBAAsB,IAAI,MAAM;IAOjC,OAAO;IAUP,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBhC,MAAM,IAAI,UAAU;IAOpB,WAAW,IAAI,sBAAsB;IAkB/B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAoBjF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAmB1D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,SAAqC;IAyBjF,cAAc,CACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,SAAmC;IAoBzC,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BjF,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC;CAWjE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EACH,oBAAoB,EACpB,WAAW,EACX,aAAa,EAEb,gBAAgB,EAChB,yBAAyB,EAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAY,MAAM,EAA+C,MAAM,iBAAiB,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAiC,MAAM,mBAAmB,CAAA;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAItD,qBAAa,aAAa;IACtB,MAAM,EAAE,yBAAyB,CAAA;IACjC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,CAAA;IAC5C,sBAAsB,EAAE,MAAM,CAAA;IAC9B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,WAAW,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7B,GAAG,EAAE,UAAU,GAAG,SAAS,CAAA;IAC3B,OAAO,EAAE,aAAa,CAAA;gBAEV,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW;IAiBpD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIxC,sBAAsB,IAAI,MAAM;IAOjC,OAAO;IAUP,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBhC,MAAM,IAAI,UAAU;IAOpB,WAAW,IAAI,sBAAsB;IAkB/B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAsBjF,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAwCpD,cAAc,CACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM;IAgCZ,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BvD,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC;CAWjE"}
package/dist/server.js CHANGED
@@ -2,13 +2,11 @@ import { ApiPromise } from '@polkadot/api/promise/Api';
2
2
  import { NetworkNamesSchema, } from '@prosopo/types';
3
3
  import { Keyring } from '@polkadot/keyring';
4
4
  import { ProsopoEnvError, getLogger, trimProviderUrl } from '@prosopo/common';
5
- import { ProsopoCaptchaContract, getBlockTimeMs, getCurrentBlockNumber, getZeroAddress } from '@prosopo/contract';
5
+ import { ProsopoCaptchaContract, getZeroAddress, verifyRecency } from '@prosopo/contract';
6
6
  import { ProviderApi } from '@prosopo/api';
7
7
  import { WsProvider } from '@polkadot/rpc-provider/ws';
8
8
  import { ContractAbi as abiJson } from '@prosopo/captcha-contract/contract-info';
9
9
  import { get } from '@prosopo/util';
10
- export const DEFAULT_MAX_VERIFIED_TIME_CACHED = 60 * 1000;
11
- export const DEFAULT_MAX_VERIFIED_TIME_CONTRACT = 5 * 60 * 1000;
12
10
  export class ProsopoServer {
13
11
  constructor(config, pair) {
14
12
  this.config = config;
@@ -81,44 +79,51 @@ export class ProsopoServer {
81
79
  }
82
80
  return undefined;
83
81
  }
84
- async verifyRecency(blockNumber, maxVerifiedTime) {
85
- const contractApi = await this.getContractApi();
86
- const currentBlock = await getCurrentBlockNumber(contractApi.api);
87
- const blocksPassed = currentBlock - blockNumber;
88
- const blockTime = getBlockTimeMs(contractApi.api);
89
- return blockTime * blocksPassed <= maxVerifiedTime;
90
- }
91
- async verifyContract(user, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CONTRACT) {
92
- const contractApi = await this.getContractApi();
93
- this.logger.info('Provider URL not provided. Verifying with contract.');
94
- const correctCaptchaBlockNumber = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value
95
- .unwrap()
96
- .unwrap()
97
- .before.valueOf();
98
- const verifyRecency = await this.verifyRecency(correctCaptchaBlockNumber, maxVerifiedTime);
99
- const isHuman = (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value
100
- .unwrap()
101
- .unwrap();
102
- return isHuman && verifyRecency;
82
+ async verifyContract(user, maxVerifiedTime) {
83
+ try {
84
+ const contractApi = await this.getContractApi();
85
+ this.logger.info('Provider URL not provided. Verifying with contract.');
86
+ const correctCaptchaBlockNumber = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value
87
+ .unwrap()
88
+ .unwrap()
89
+ .before.valueOf();
90
+ const recent = await verifyRecency((await this.getContractApi()).api, correctCaptchaBlockNumber, maxVerifiedTime);
91
+ if (!recent) {
92
+ this.logger.info('User has not completed a captcha recently');
93
+ return false;
94
+ }
95
+ const isHuman = (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value
96
+ .unwrap()
97
+ .unwrap();
98
+ this.logger.info('isHuman', isHuman);
99
+ return isHuman;
100
+ }
101
+ catch (error) {
102
+ this.logger.error(error);
103
+ return false;
104
+ }
103
105
  }
104
- async verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CACHED) {
106
+ async verifyProvider(providerUrl, dapp, user, blockNumber, timeouts, challenge, commitmentId) {
105
107
  this.logger.info('Verifying with provider.');
106
108
  const providerApi = await this.getProviderApi(providerUrl);
107
109
  if (challenge) {
108
- const result = await providerApi.submitPowCaptchaVerify(challenge, dapp);
110
+ const result = await providerApi.submitPowCaptchaVerify(challenge, dapp, timeouts.pow.cachedTimeout);
109
111
  return result.verified;
110
112
  }
111
- const result = await providerApi.verifyDappUser(dapp, user, blockNumber, commitmentId, maxVerifiedTime);
112
- const verifyRecency = await this.verifyRecency(result.blockNumber, maxVerifiedTime);
113
- return result.verified && verifyRecency;
113
+ const recent = await verifyRecency((await this.getContractApi()).api, blockNumber, timeouts.image.cachedTimeout);
114
+ if (!recent) {
115
+ return false;
116
+ }
117
+ const result = await providerApi.verifyDappUser(dapp, user, blockNumber, commitmentId, timeouts.image.cachedTimeout);
118
+ return result.verified;
114
119
  }
115
- async isVerified(payload, maxVerifiedTime) {
120
+ async isVerified(payload) {
116
121
  const { user, dapp, providerUrl, commitmentId, blockNumber, challenge } = payload;
117
122
  if (providerUrl && blockNumber) {
118
- return await this.verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime);
123
+ return await this.verifyProvider(providerUrl, dapp, user, blockNumber, this.config.timeouts, challenge, commitmentId);
119
124
  }
120
125
  else {
121
- return await this.verifyContract(user, maxVerifiedTime);
126
+ return await this.verifyContract(user, this.config.timeouts.contract.maxVerifiedTime);
122
127
  }
123
128
  }
124
129
  async getContractApi() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/server",
3
- "version": "0.3.39",
3
+ "version": "0.3.41",
4
4
  "description": "NodeJS package for server side communication with the prosopo captcha client",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",
@@ -19,7 +19,7 @@
19
19
  "clean": "tsc --build --clean",
20
20
  "build": "tsc --build --verbose tsconfig.json",
21
21
  "build:cjs": "npx vite --config vite.cjs.config.ts build",
22
- "eslint": "npx eslint . --no-error-on-unmatched-pattern --ignore-path ../../.eslintignore",
22
+ "eslint": "npx eslint . --no-error-on-unmatched-pattern --ignore-path ../../.eslintignore --quiet",
23
23
  "eslint:fix": "npm run eslint -- --fix",
24
24
  "prettier": "npx prettier . --check --no-error-on-unmatched-pattern --ignore-path ../../.eslintignore",
25
25
  "prettier:fix": "npm run prettier -- --write",
@@ -41,11 +41,12 @@
41
41
  "@polkadot/api": "10.13.1",
42
42
  "@polkadot/keyring": "12.6.2",
43
43
  "@polkadot/rpc-provider": "10.13.1",
44
- "@polkadot/types": "10.13.1",
45
- "@prosopo/api": "0.3.39",
46
- "@prosopo/contract": "0.3.39",
47
- "@prosopo/captcha-contract": "0.3.39",
48
- "@prosopo/types": "0.3.39"
44
+ "@prosopo/api": "0.3.41",
45
+ "@prosopo/common": "0.3.41",
46
+ "@prosopo/contract": "0.3.41",
47
+ "@prosopo/captcha-contract": "0.3.41",
48
+ "@prosopo/util": "0.3.41",
49
+ "@prosopo/types": "0.3.41"
49
50
  },
50
51
  "devDependencies": {
51
52
  "tslib": "2.6.2",