@prosopo/server 0.3.4 → 0.3.36

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,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Api = require("@polkadot/api/promise/Api");
4
- const util$1 = require("@polkadot/util");
5
4
  const types = require("@prosopo/types");
6
5
  const keyring = require("@polkadot/keyring");
7
6
  const common = require("@prosopo/common");
@@ -10,6 +9,8 @@ const api = require("@prosopo/api");
10
9
  const ws = require("@polkadot/rpc-provider/ws");
11
10
  const contractInfo = require("@prosopo/captcha-contract/contract-info");
12
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;
13
14
  class ProsopoServer {
14
15
  constructor(config, pair) {
15
16
  this.config = config;
@@ -39,7 +40,7 @@ class ProsopoServer {
39
40
  }
40
41
  async isReady() {
41
42
  try {
42
- this.api = await Api.ApiPromise.create({ provider: this.wsProvider, initWasm: false });
43
+ this.api = await Api.ApiPromise.create({ provider: this.wsProvider, initWasm: false, noInitWarn: true });
43
44
  await this.getSigner();
44
45
  await this.getContractApi();
45
46
  } catch (error) {
@@ -49,7 +50,7 @@ class ProsopoServer {
49
50
  async getSigner() {
50
51
  if (this.pair) {
51
52
  if (!this.api) {
52
- this.api = await Api.ApiPromise.create({ provider: this.wsProvider, initWasm: false });
53
+ this.api = await Api.ApiPromise.create({ provider: this.wsProvider, initWasm: false, noInitWarn: true });
53
54
  }
54
55
  await this.api.isReadyOrError;
55
56
  try {
@@ -73,10 +74,6 @@ class ProsopoServer {
73
74
  }
74
75
  return this.contract;
75
76
  }
76
- async getViableHistoricBlockCount(maxVerifiedTime) {
77
- const expectedBlockTime = contract.getExpectedBlockTime(this.getApi());
78
- return new util$1.BN(maxVerifiedTime || 6e4).div(expectedBlockTime).toNumber();
79
- }
80
77
  /**
81
78
  * Check if the provider was actually chosen at blockNumber.
82
79
  * - If no blockNumber is provided, check the last `n` blocks where `n` is the number of blocks that fit in
@@ -86,34 +83,69 @@ class ProsopoServer {
86
83
  * @param dapp
87
84
  * @param providerUrl
88
85
  * @param blockNumber
89
- * @param maxVerifiedTime
90
86
  * @returns
91
87
  */
92
- async checkRandomProvider(user, dapp, providerUrl, blockNumber, maxVerifiedTime) {
93
- let blocksToCheck = [];
94
- if (blockNumber) {
95
- blocksToCheck = [blockNumber];
96
- } else {
97
- const numberOfHistoricBlocksToCheck = await this.getViableHistoricBlockCount(maxVerifiedTime);
98
- const currentBlockNumber = (await this.getApi().rpc.chain.getBlock()).block.header.number.toNumber();
99
- blocksToCheck = Array.from(
100
- { length: numberOfHistoricBlocksToCheck },
101
- (_, index) => currentBlockNumber - index
102
- );
103
- }
104
- while (blocksToCheck.length > 0) {
105
- const block = await this.getApi().rpc.chain.getBlockHash(blocksToCheck.pop());
106
- const getRandomProviderResponse = await this.getContract().queryAtBlock(
107
- block,
108
- "getRandomActiveProvider",
109
- [user, dapp]
110
- );
111
- if (common.trimProviderUrl(getRandomProviderResponse.provider.url.toString()) === providerUrl) {
112
- return getRandomProviderResponse.provider;
113
- }
88
+ async checkRandomProvider(user, dapp, providerUrl, blockNumber) {
89
+ const block = await this.getApi().rpc.chain.getBlockHash(blockNumber);
90
+ const getRandomProviderResponse = await this.getContract().queryAtBlock(
91
+ block,
92
+ "getRandomActiveProvider",
93
+ [user, dapp]
94
+ );
95
+ if (common.trimProviderUrl(getRandomProviderResponse.provider.url.toString()) === providerUrl) {
96
+ return getRandomProviderResponse.provider;
114
97
  }
115
98
  return void 0;
116
99
  }
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
+ /**
113
+ * Verify the user with the contract. We check the contract to see if the user has completed a captcha in the
114
+ * past. If they have, we check the time since the last correct captcha is within the maxVerifiedTime and we check
115
+ * whether the user is marked as human within the contract.
116
+ * @param user
117
+ * @param maxVerifiedTime
118
+ */
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;
126
+ }
127
+ /**
128
+ * Verify the user with the provider URL passed in. If a challenge is provided, we use the challenge to verify the
129
+ * user. If not, we use the user, dapp, and optionally the commitmentID, to verify the user.
130
+ * @param providerUrl
131
+ * @param dapp
132
+ * @param user
133
+ * @param blockNumber
134
+ * @param challenge
135
+ * @param commitmentId
136
+ * @param maxVerifiedTime
137
+ */
138
+ async verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CACHED) {
139
+ this.logger.info("Verifying with provider.");
140
+ const providerApi = await this.getProviderApi(providerUrl);
141
+ if (challenge) {
142
+ const result2 = await providerApi.submitPowCaptchaVerify(challenge, dapp);
143
+ return result2.verified;
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;
148
+ }
117
149
  /**
118
150
  *
119
151
  * @param payload Info output by procaptcha on completion of the captcha process
@@ -122,29 +154,23 @@ class ProsopoServer {
122
154
  */
123
155
  async isVerified(payload, maxVerifiedTime) {
124
156
  const { user, dapp, providerUrl, commitmentId, blockNumber, challenge } = payload;
125
- const contractApi = await this.getContractApi();
126
- const randomProvider = await this.checkRandomProvider(user, dapp, providerUrl, blockNumber, maxVerifiedTime);
127
- if (!randomProvider) {
128
- this.logger.info("Random provider selection failed");
129
- return false;
130
- }
131
- if (providerUrl) {
132
- this.logger.info("Random provider is valid. Verifying with provider.");
133
- const providerApi = await this.getProviderApi(providerUrl);
134
- if (challenge) {
135
- const result2 = await providerApi.submitPowCaptchaVerify(challenge, dapp);
136
- return result2.verified;
137
- }
138
- const result = await providerApi.verifyDappUser(dapp, user, commitmentId, maxVerifiedTime);
139
- return result.verified;
140
- } else {
141
- this.logger.info("Provider URL not provided. Verifying with contract.");
142
- const blockTime = contractApi.api.consts.babe.expectedBlockTime.toNumber();
143
- const blocksSinceLastCorrectCaptcha = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value.unwrap().unwrap().before.valueOf();
144
- if (maxVerifiedTime && blockTime * blocksSinceLastCorrectCaptcha > maxVerifiedTime) {
157
+ if (providerUrl && blockNumber) {
158
+ const randomProvider = await this.checkRandomProvider(user, dapp, providerUrl, blockNumber);
159
+ if (!randomProvider) {
160
+ this.logger.info("Random provider selection failed");
145
161
  return false;
146
162
  }
147
- return (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value.unwrap().unwrap();
163
+ return await this.verifyProvider(
164
+ providerUrl,
165
+ dapp,
166
+ user,
167
+ blockNumber,
168
+ challenge,
169
+ commitmentId,
170
+ maxVerifiedTime
171
+ );
172
+ } else {
173
+ return await this.verifyContract(user, maxVerifiedTime);
148
174
  }
149
175
  }
150
176
  async getContractApi() {
@@ -159,4 +185,6 @@ class ProsopoServer {
159
185
  return this.contract;
160
186
  }
161
187
  }
188
+ exports.DEFAULT_MAX_VERIFIED_TIME_CACHED = DEFAULT_MAX_VERIFIED_TIME_CACHED;
189
+ exports.DEFAULT_MAX_VERIFIED_TIME_CONTRACT = DEFAULT_MAX_VERIFIED_TIME_CONTRACT;
162
190
  exports.ProsopoServer = ProsopoServer;
package/dist/server.d.ts CHANGED
@@ -6,6 +6,8 @@ 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;
9
11
  export declare class ProsopoServer {
10
12
  config: ProsopoServerConfigOutput;
11
13
  contract: ProsopoCaptchaContract | undefined;
@@ -27,8 +29,10 @@ export declare class ProsopoServer {
27
29
  getSigner(): Promise<void>;
28
30
  getApi(): ApiPromise;
29
31
  getContract(): ProsopoCaptchaContract;
30
- getViableHistoricBlockCount(maxVerifiedTime?: number): Promise<number>;
31
- checkRandomProvider(user: string, dapp: string, providerUrl?: string, blockNumber?: number, maxVerifiedTime?: number): Promise<import("@prosopo/captcha-contract/types-returns").Provider | undefined>;
32
+ 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>;
32
36
  isVerified(payload: ProcaptchaOutput, maxVerifiedTime?: number): Promise<boolean>;
33
37
  getContractApi(): Promise<ProsopoCaptchaContract>;
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,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,EAAwC,MAAM,mBAAmB,CAAA;AAChG,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;IAO/B,2BAA2B,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBtE,mBAAmB,CACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM;IAmCf,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCjF,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,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;IA8BjF,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC;CAWjE"}
package/dist/server.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import { ApiPromise } from '@polkadot/api/promise/Api';
2
- import { BN } from '@polkadot/util';
3
2
  import { NetworkNamesSchema, } from '@prosopo/types';
4
3
  import { Keyring } from '@polkadot/keyring';
5
4
  import { ProsopoEnvError, getLogger, trimProviderUrl } from '@prosopo/common';
6
- import { ProsopoCaptchaContract, getExpectedBlockTime, getZeroAddress } from '@prosopo/contract';
5
+ import { ProsopoCaptchaContract, getBlockTimeMs, getCurrentBlockNumber, getZeroAddress } from '@prosopo/contract';
7
6
  import { ProviderApi } from '@prosopo/api';
8
7
  import { WsProvider } from '@polkadot/rpc-provider/ws';
9
8
  import { ContractAbi as abiJson } from '@prosopo/captcha-contract/contract-info';
10
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;
11
12
  export class ProsopoServer {
12
13
  constructor(config, pair) {
13
14
  this.config = config;
@@ -36,7 +37,7 @@ export class ProsopoServer {
36
37
  }
37
38
  async isReady() {
38
39
  try {
39
- this.api = await ApiPromise.create({ provider: this.wsProvider, initWasm: false });
40
+ this.api = await ApiPromise.create({ provider: this.wsProvider, initWasm: false, noInitWarn: true });
40
41
  await this.getSigner();
41
42
  await this.getContractApi();
42
43
  }
@@ -47,7 +48,7 @@ export class ProsopoServer {
47
48
  async getSigner() {
48
49
  if (this.pair) {
49
50
  if (!this.api) {
50
- this.api = await ApiPromise.create({ provider: this.wsProvider, initWasm: false });
51
+ this.api = await ApiPromise.create({ provider: this.wsProvider, initWasm: false, noInitWarn: true });
51
52
  }
52
53
  await this.api.isReadyOrError;
53
54
  try {
@@ -72,60 +73,57 @@ export class ProsopoServer {
72
73
  }
73
74
  return this.contract;
74
75
  }
75
- async getViableHistoricBlockCount(maxVerifiedTime) {
76
- const expectedBlockTime = getExpectedBlockTime(this.getApi());
77
- return new BN(maxVerifiedTime || 60000).div(expectedBlockTime).toNumber();
78
- }
79
- async checkRandomProvider(user, dapp, providerUrl, blockNumber, maxVerifiedTime) {
80
- let blocksToCheck = [];
81
- if (blockNumber) {
82
- blocksToCheck = [blockNumber];
83
- }
84
- else {
85
- const numberOfHistoricBlocksToCheck = await this.getViableHistoricBlockCount(maxVerifiedTime);
86
- const currentBlockNumber = (await this.getApi().rpc.chain.getBlock()).block.header.number.toNumber();
87
- blocksToCheck = Array.from({ length: numberOfHistoricBlocksToCheck }, (_, index) => currentBlockNumber - index);
88
- }
89
- while (blocksToCheck.length > 0) {
90
- const block = await this.getApi().rpc.chain.getBlockHash(blocksToCheck.pop());
91
- const getRandomProviderResponse = await this.getContract().queryAtBlock(block, 'getRandomActiveProvider', [user, dapp]);
92
- if (trimProviderUrl(getRandomProviderResponse.provider.url.toString()) === providerUrl) {
93
- return getRandomProviderResponse.provider;
94
- }
76
+ async checkRandomProvider(user, dapp, providerUrl, blockNumber) {
77
+ const block = await this.getApi().rpc.chain.getBlockHash(blockNumber);
78
+ const getRandomProviderResponse = await this.getContract().queryAtBlock(block, 'getRandomActiveProvider', [user, dapp]);
79
+ if (trimProviderUrl(getRandomProviderResponse.provider.url.toString()) === providerUrl) {
80
+ return getRandomProviderResponse.provider;
95
81
  }
96
82
  return undefined;
97
83
  }
98
- async isVerified(payload, maxVerifiedTime) {
99
- const { user, dapp, providerUrl, commitmentId, blockNumber, challenge } = payload;
84
+ async verifyRecency(blockNumber, maxVerifiedTime) {
100
85
  const contractApi = await this.getContractApi();
101
- const randomProvider = await this.checkRandomProvider(user, dapp, providerUrl, blockNumber, maxVerifiedTime);
102
- if (!randomProvider) {
103
- this.logger.info('Random provider selection failed');
104
- return false;
105
- }
106
- if (providerUrl) {
107
- this.logger.info('Random provider is valid. Verifying with provider.');
108
- const providerApi = await this.getProviderApi(providerUrl);
109
- if (challenge) {
110
- const result = await providerApi.submitPowCaptchaVerify(challenge, dapp);
111
- return result.verified;
112
- }
113
- const result = await providerApi.verifyDappUser(dapp, user, commitmentId, maxVerifiedTime);
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;
103
+ }
104
+ async verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CACHED) {
105
+ this.logger.info('Verifying with provider.');
106
+ const providerApi = await this.getProviderApi(providerUrl);
107
+ if (challenge) {
108
+ const result = await providerApi.submitPowCaptchaVerify(challenge, dapp);
114
109
  return result.verified;
115
110
  }
116
- else {
117
- this.logger.info('Provider URL not provided. Verifying with contract.');
118
- const blockTime = contractApi.api.consts.babe.expectedBlockTime.toNumber();
119
- const blocksSinceLastCorrectCaptcha = (await contractApi.query.dappOperatorLastCorrectCaptcha(user)).value
120
- .unwrap()
121
- .unwrap()
122
- .before.valueOf();
123
- if (maxVerifiedTime && blockTime * blocksSinceLastCorrectCaptcha > maxVerifiedTime) {
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;
114
+ }
115
+ async isVerified(payload, maxVerifiedTime) {
116
+ const { user, dapp, providerUrl, commitmentId, blockNumber, challenge } = payload;
117
+ if (providerUrl && blockNumber) {
118
+ const randomProvider = await this.checkRandomProvider(user, dapp, providerUrl, blockNumber);
119
+ if (!randomProvider) {
120
+ this.logger.info('Random provider selection failed');
124
121
  return false;
125
122
  }
126
- return (await contractApi.query.dappOperatorIsHumanUser(user, this.config.solutionThreshold)).value
127
- .unwrap()
128
- .unwrap();
123
+ return await this.verifyProvider(providerUrl, dapp, user, blockNumber, challenge, commitmentId, maxVerifiedTime);
124
+ }
125
+ else {
126
+ return await this.verifyContract(user, maxVerifiedTime);
129
127
  }
130
128
  }
131
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.4",
3
+ "version": "0.3.36",
4
4
  "description": "NodeJS package for server side communication with the prosopo captcha client",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",
@@ -15,6 +15,7 @@
15
15
  }
16
16
  },
17
17
  "scripts": {
18
+ "test": "echo \"No test specified\"",
18
19
  "clean": "tsc --build --clean",
19
20
  "build": "tsc --build --verbose tsconfig.json",
20
21
  "build:cjs": "npx vite --config vite.cjs.config.ts build",
@@ -41,10 +42,10 @@
41
42
  "@polkadot/keyring": "12.6.2",
42
43
  "@polkadot/rpc-provider": "10.11.2",
43
44
  "@polkadot/types": "10.11.2",
44
- "@prosopo/api": "0.3.4",
45
- "@prosopo/contract": "0.3.4",
46
- "@prosopo/captcha-contract": "0.3.4",
47
- "@prosopo/types": "0.3.4"
45
+ "@prosopo/api": "0.3.36",
46
+ "@prosopo/contract": "0.3.36",
47
+ "@prosopo/captcha-contract": "0.3.36",
48
+ "@prosopo/types": "0.3.36"
48
49
  },
49
50
  "devDependencies": {
50
51
  "tslib": "2.6.2",