@prosopo/server 2.13.8 → 2.14.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.
Files changed (115) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +2 -2
  2. package/.turbo/{turbo-build.log → turbo-build$colon$esm.log} +7 -8
  3. package/.turbo/turbo-build$colon$tsc.log +13 -13
  4. package/.turbo/turbo-build$colon$types.log +1 -0
  5. package/CHANGELOG.md +35 -0
  6. package/dist/cjs/server.cjs +9 -9
  7. package/dist/{server.js → esm/server.js} +9 -8
  8. package/dist/tsc/config.d.ts.map +1 -0
  9. package/dist/tsc/config.js +21 -0
  10. package/dist/tsc/config.js.map +1 -0
  11. package/dist/{errorSites.d.ts → tsc/errorSites.d.ts} +0 -1
  12. package/dist/tsc/errorSites.d.ts.map +1 -0
  13. package/dist/{errorSites.js.map → tsc/errorSites.js.map} +1 -1
  14. package/dist/tsc/index.d.ts.map +1 -0
  15. package/dist/tsc/index.js +9 -0
  16. package/dist/tsc/index.js.map +1 -0
  17. package/dist/tsc/server.d.ts.map +1 -0
  18. package/dist/tsc/server.js +180 -0
  19. package/dist/tsc/server.js.map +1 -0
  20. package/dist/tsc/tests/config.unit.test.d.ts.map +1 -0
  21. package/dist/tsc/tests/config.unit.test.js.map +1 -0
  22. package/dist/tsc/tests/detectIpMode.unit.test.d.ts.map +1 -0
  23. package/dist/tsc/tests/detectIpMode.unit.test.js.map +1 -0
  24. package/dist/tsc/tests/mintSites.unit.test.d.ts.map +1 -0
  25. package/dist/tsc/tests/mintSites.unit.test.js.map +1 -0
  26. package/dist/tsc/tests/providerTimeout.unit.test.d.ts.map +1 -0
  27. package/dist/{tests → tsc/tests}/providerTimeout.unit.test.js +8 -10
  28. package/dist/tsc/tests/providerTimeout.unit.test.js.map +1 -0
  29. package/dist/tsc/tests/server.unit.test.d.ts.map +1 -0
  30. package/dist/{tests → tsc/tests}/server.unit.test.js +23 -2
  31. package/dist/tsc/tests/server.unit.test.js.map +1 -0
  32. package/dist/tsc/tests/serverEdges.unit.test.d.ts.map +1 -0
  33. package/dist/{tests → tsc/tests}/serverEdges.unit.test.js +2 -2
  34. package/dist/tsc/tests/serverEdges.unit.test.js.map +1 -0
  35. package/dist/tsc/tests/token.unit.test.d.ts.map +1 -0
  36. package/dist/tsc/tests/token.unit.test.js.map +1 -0
  37. package/dist/tsc/tests/translate.unit.test.d.ts.map +1 -0
  38. package/dist/tsc/tests/translate.unit.test.js.map +1 -0
  39. package/dist/tsc/translate.d.ts.map +1 -0
  40. package/dist/tsc/translate.js +3 -0
  41. package/dist/tsc/translate.js.map +1 -0
  42. package/dist/types/config.d.ts +54 -0
  43. package/dist/types/config.d.ts.map +1 -0
  44. package/dist/types/errorSites.d.ts +7 -0
  45. package/dist/types/errorSites.d.ts.map +1 -0
  46. package/dist/types/index.d.ts +6 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/server.d.ts +22 -0
  49. package/dist/types/server.d.ts.map +1 -0
  50. package/dist/types/tests/config.unit.test.d.ts +2 -0
  51. package/dist/types/tests/config.unit.test.d.ts.map +1 -0
  52. package/dist/types/tests/detectIpMode.unit.test.d.ts +2 -0
  53. package/dist/types/tests/detectIpMode.unit.test.d.ts.map +1 -0
  54. package/dist/types/tests/mintSites.unit.test.d.ts +2 -0
  55. package/dist/types/tests/mintSites.unit.test.d.ts.map +1 -0
  56. package/dist/types/tests/providerTimeout.unit.test.d.ts +2 -0
  57. package/dist/types/tests/providerTimeout.unit.test.d.ts.map +1 -0
  58. package/dist/types/tests/server.unit.test.d.ts +2 -0
  59. package/dist/types/tests/server.unit.test.d.ts.map +1 -0
  60. package/dist/types/tests/serverEdges.unit.test.d.ts +2 -0
  61. package/dist/types/tests/serverEdges.unit.test.d.ts.map +1 -0
  62. package/dist/types/tests/token.unit.test.d.ts +2 -0
  63. package/dist/types/tests/token.unit.test.d.ts.map +1 -0
  64. package/dist/types/tests/translate.unit.test.d.ts +2 -0
  65. package/dist/types/tests/translate.unit.test.d.ts.map +1 -0
  66. package/dist/types/translate.d.ts +3 -0
  67. package/dist/types/translate.d.ts.map +1 -0
  68. package/package.json +17 -18
  69. package/dist/config.d.ts.map +0 -1
  70. package/dist/config.js.map +0 -1
  71. package/dist/errorSites.d.ts.map +0 -1
  72. package/dist/index.d.ts.map +0 -1
  73. package/dist/index.js.map +0 -1
  74. package/dist/server.d.ts.map +0 -1
  75. package/dist/server.js.map +0 -1
  76. package/dist/tests/config.unit.test.d.ts.map +0 -1
  77. package/dist/tests/config.unit.test.js.map +0 -1
  78. package/dist/tests/detectIpMode.unit.test.d.ts.map +0 -1
  79. package/dist/tests/detectIpMode.unit.test.js.map +0 -1
  80. package/dist/tests/mintSites.unit.test.d.ts.map +0 -1
  81. package/dist/tests/mintSites.unit.test.js.map +0 -1
  82. package/dist/tests/providerTimeout.unit.test.d.ts.map +0 -1
  83. package/dist/tests/providerTimeout.unit.test.js.map +0 -1
  84. package/dist/tests/server.unit.test.d.ts.map +0 -1
  85. package/dist/tests/server.unit.test.js.map +0 -1
  86. package/dist/tests/serverEdges.unit.test.d.ts.map +0 -1
  87. package/dist/tests/serverEdges.unit.test.js.map +0 -1
  88. package/dist/tests/token.unit.test.d.ts.map +0 -1
  89. package/dist/tests/token.unit.test.js.map +0 -1
  90. package/dist/tests/translate.unit.test.d.ts.map +0 -1
  91. package/dist/tests/translate.unit.test.js.map +0 -1
  92. package/dist/translate.d.ts.map +0 -1
  93. package/dist/translate.js.map +0 -1
  94. /package/dist/{_virtual → esm/_virtual}/_rolldown/runtime.js +0 -0
  95. /package/dist/{config.js → esm/config.js} +0 -0
  96. /package/dist/{index.js → esm/index.js} +0 -0
  97. /package/dist/{translate.js → esm/translate.js} +0 -0
  98. /package/dist/{config.d.ts → tsc/config.d.ts} +0 -0
  99. /package/dist/{errorSites.js → tsc/errorSites.js} +0 -0
  100. /package/dist/{index.d.ts → tsc/index.d.ts} +0 -0
  101. /package/dist/{server.d.ts → tsc/server.d.ts} +0 -0
  102. /package/dist/{tests → tsc/tests}/config.unit.test.d.ts +0 -0
  103. /package/dist/{tests → tsc/tests}/config.unit.test.js +0 -0
  104. /package/dist/{tests → tsc/tests}/detectIpMode.unit.test.d.ts +0 -0
  105. /package/dist/{tests → tsc/tests}/detectIpMode.unit.test.js +0 -0
  106. /package/dist/{tests → tsc/tests}/mintSites.unit.test.d.ts +0 -0
  107. /package/dist/{tests → tsc/tests}/mintSites.unit.test.js +0 -0
  108. /package/dist/{tests → tsc/tests}/providerTimeout.unit.test.d.ts +0 -0
  109. /package/dist/{tests → tsc/tests}/server.unit.test.d.ts +0 -0
  110. /package/dist/{tests → tsc/tests}/serverEdges.unit.test.d.ts +0 -0
  111. /package/dist/{tests → tsc/tests}/token.unit.test.d.ts +0 -0
  112. /package/dist/{tests → tsc/tests}/token.unit.test.js +0 -0
  113. /package/dist/{tests → tsc/tests}/translate.unit.test.d.ts +0 -0
  114. /package/dist/{tests → tsc/tests}/translate.unit.test.js +0 -0
  115. /package/dist/{translate.d.ts → tsc/translate.d.ts} +0 -0
@@ -37,6 +37,6 @@ dist/cjs/translate.cjs 0.56 kB │ gzip: 0.33 kB
37
37
  dist/cjs/index.cjs 0.65 kB │ gzip: 0.31 kB
38
38
  dist/cjs/config.cjs 0.82 kB │ gzip: 0.41 kB
39
39
  dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
40
- dist/cjs/server.cjs 8.16 kB │ gzip: 2.28 kB
40
+ dist/cjs/server.cjs 8.12 kB │ gzip: 2.24 kB
41
41
 
42
- ✓ built in 28ms
42
+ ✓ built in 43ms
@@ -1,5 +1,4 @@
1
- $ pnpm run build:cross-env --mode ${NODE_ENV:-development}
2
- $ vite build --config vite.esm.config.ts --mode production
1
+ $ vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}
3
2
  ViteEsmConfig: .
4
3
  {
5
4
  tsConfigPaths: [
@@ -34,10 +33,10 @@ Bundle build started
34
33
  ✓ 5 modules transformed.
35
34
  rendering chunks...
36
35
  computing gzip size...
37
- dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
38
- dist/translate.js 0.41 kB │ gzip: 0.27 kB
39
- dist/index.js 0.43 kB │ gzip: 0.23 kB
40
- dist/config.js 0.78 kB │ gzip: 0.40 kB
41
- dist/server.js 7.82 kB │ gzip: 2.22 kB
36
+ dist/esm/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
37
+ dist/esm/translate.js 0.41 kB │ gzip: 0.27 kB
38
+ dist/esm/index.js 0.43 kB │ gzip: 0.23 kB
39
+ dist/esm/config.js 0.78 kB │ gzip: 0.40 kB
40
+ dist/esm/server.js 7.79 kB │ gzip: 2.20 kB
42
41
 
43
- ✓ built in 30ms
42
+ ✓ built in 40ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 7:40:48 PM - Projects in this build:
2
+ 11:54:25 AM - Projects in this build:
3
3
  * ../../dev/config/tsconfig.json
4
4
  * ../util/tsconfig.json
5
5
  * ../locale/tsconfig.json
@@ -12,27 +12,27 @@ $ tsc --build --verbose
12
12
  * ../load-balancer/tsconfig.json
13
13
  * tsconfig.json
14
14
 
15
- 7:40:48 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
15
+ 11:54:25 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/dist/tsc/tsconfig.tsbuildinfo'
16
16
 
17
- 7:40:48 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
17
+ 11:54:25 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/dist/tsc/tsconfig.tsbuildinfo'
18
18
 
19
- 7:40:48 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/process.ts' is older than output '../locale/tsconfig.tsbuildinfo'
19
+ 11:54:25 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/process.ts' is older than output '../locale/dist/tsc/tsconfig.tsbuildinfo'
20
20
 
21
- 7:40:48 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
21
+ 11:54:25 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/dist/tsc/tsconfig.tsbuildinfo'
22
22
 
23
- 7:40:48 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
23
+ 11:54:25 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/dist/tsc/tsconfig.tsbuildinfo'
24
24
 
25
- 7:40:48 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
25
+ 11:54:25 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/dist/tsc/tsconfig.tsbuildinfo'
26
26
 
27
- 7:40:48 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/objectUtils.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
27
+ 11:54:25 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/dist/tsc/tsconfig.tsbuildinfo'
28
28
 
29
- 7:40:48 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../logger/tsconfig.tsbuildinfo'
29
+ 11:54:25 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/dist/tsc/tsconfig.tsbuildinfo'
30
30
 
31
- 7:40:48 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
31
+ 11:54:26 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/errorSites.ts' is older than output '../keyring/dist/tsc/tsconfig.tsbuildinfo'
32
32
 
33
- 7:40:48 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
33
+ 11:54:26 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/dist/tsc/tsconfig.tsbuildinfo'
34
34
 
35
- 7:40:48 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
35
+ 11:54:26 AM - Project 'tsconfig.json' is out of date because output file 'dist/tsc/tsconfig.tsbuildinfo' does not exist
36
36
 
37
- 7:40:48 PM - Building project '/home/runner/work/captcha/captcha/packages/server/tsconfig.json'...
37
+ 11:54:26 AM - Building project '/home/runner/work/captcha/captcha/packages/server/tsconfig.json'...
38
38
 
@@ -0,0 +1 @@
1
+ $ tsc --project tsconfig.types.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @prosopo/server
2
2
 
3
+ ## 2.14.1
4
+ ### Patch Changes
5
+
6
+ - 2086040: Each kind of build now writes to its own folder under dist: dist/esm (vite ESM), dist/cjs (vite CommonJS), dist/types (declarations), dist/tsc (plain tsc), dist/bundle and dist/bundle-webpack (bundles) and dist/native (the Rust addons). Turbo caches each folder separately, so building one variant no longer overwrites or invalidates another. Package exports point at the new folders; anything importing a file from dist by path has to add the variant folder.
7
+
8
+ The Rust addons are no longer committed. They are built into dist/native, in debug for development and tests and fully optimised when NODE_ENV=production, so building them now needs a Rust toolchain.
9
+
10
+ Code that found the repo root or its certificates by climbing a fixed number of folders up from its own file now starts from its package's folder instead (new `packageDir` in @prosopo/util/node). The fixed count stopped working once the build output moved one folder deeper.
11
+ - Updated dependencies [2086040]
12
+ - Updated dependencies [915f30b]
13
+ - @prosopo/api@4.7.7
14
+ - @prosopo/common@3.3.1
15
+ - @prosopo/keyring@2.10.12
16
+ - @prosopo/load-balancer@2.11.16
17
+ - @prosopo/locale@3.13.1
18
+ - @prosopo/logger@2.1.6
19
+ - @prosopo/types@5.19.0
20
+ - @prosopo/util@3.3.17
21
+
22
+ ## 2.14.0
23
+ ### Minor Changes
24
+
25
+ - f695b3a: `ProsopoServer.isVerified` now resolves `{ verified: false }` when verification cannot be completed — a malformed token, an unreachable provider list or provider, a provider request that times out, or a signing failure — instead of throwing. A timed-out provider request used to reject with a 504 error; it now answers "not verified" too. The outcome is still fail-closed, but site owners who did not wrap the call in `try`/`catch` no longer return a 500 from their own endpoint. The underlying error, with its 504 or 500 status, is still logged.
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies [b460b0b]
30
+ - Updated dependencies [159766a]
31
+ - @prosopo/locale@3.13.0
32
+ - @prosopo/types@5.18.0
33
+ - @prosopo/api@4.7.6
34
+ - @prosopo/common@3.3.0
35
+ - @prosopo/keyring@2.10.11
36
+ - @prosopo/load-balancer@2.11.15
37
+
3
38
  ## 2.13.8
4
39
  ### Patch Changes
5
40
 
@@ -181,18 +181,18 @@ var ProsopoServer = class ProsopoServer {
181
181
  } }));
182
182
  return verificationResponse;
183
183
  } catch (err) {
184
+ const code = err instanceof _prosopo_api.HttpError ? err.status : isTimeoutError(err) ? 504 : 500;
184
185
  this.logger.error(() => ({
185
186
  err,
186
- data: { token }
187
+ data: {
188
+ token,
189
+ code
190
+ }
187
191
  }));
188
- const code = err instanceof _prosopo_api.HttpError ? err.status : isTimeoutError(err) ? 504 : 500;
189
- throw new _prosopo_common.ProsopoError({
190
- code: "INVALID_REQUEST",
191
- errorSite: "SRVR-2",
192
- message: "BadRequest",
193
- status: code,
194
- context: { token }
195
- });
192
+ return {
193
+ verified: false,
194
+ status: require_translate.translate("API.USER_NOT_VERIFIED")
195
+ };
196
196
  }
197
197
  }
198
198
  };
@@ -181,17 +181,18 @@ var ProsopoServer = class ProsopoServer {
181
181
  } }));
182
182
  return verificationResponse;
183
183
  } catch (err) {
184
+ const code = err instanceof HttpError ? err.status : isTimeoutError(err) ? 504 : 500;
184
185
  this.logger.error(() => ({
185
186
  err,
186
- data: { token }
187
+ data: {
188
+ token,
189
+ code
190
+ }
187
191
  }));
188
- throw new ProsopoError({
189
- code: "INVALID_REQUEST",
190
- errorSite: "SRVR-2",
191
- message: "BadRequest",
192
- status: err instanceof HttpError ? err.status : isTimeoutError(err) ? 504 : 500,
193
- context: { token }
194
- });
192
+ return {
193
+ verified: false,
194
+ status: translate("API.USER_NOT_VERIFIED")
195
+ };
195
196
  }
196
197
  }
197
198
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqBuoqB,CAAC;eAAqC,CAAC;gBAAsC,CAAC;;;;;;;;;;;;;;CAX9uqB,CAAC;AAEJ,eAAO,MAAM,YAAY,QAAO,MAQ/B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { ProsopoServerConfigSchema } from "@prosopo/types";
2
+ export const getServerConfig = () => ProsopoServerConfigSchema.parse({
3
+ defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT,
4
+ serverUrl: getServerUrl(),
5
+ dappName: process.env.PROSOPO_DAPP_NAME || "client-example-server",
6
+ account: {
7
+ password: "",
8
+ address: process.env.PROSOPO_SITE_KEY || "",
9
+ secret: process.env.PROSOPO_SITE_PRIVATE_KEY || "",
10
+ },
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 "https://localhost:9228";
20
+ };
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CACnC,yBAAyB,CAAC,KAAK,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;IAC3D,SAAS,EAAE,YAAY,EAAE;IACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB;IAClE,OAAO,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;QAC3C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE;KAClD;CACD,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACvC,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;IACvF,CAAC;IACD,OAAO,wBAAwB,CAAC;AACjC,CAAC,CAAC"}
@@ -1,7 +1,6 @@
1
1
  declare module "@prosopo/common" {
2
2
  interface ErrorSites {
3
3
  "SRVR-1": true;
4
- "SRVR-2": true;
5
4
  }
6
5
  }
7
6
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorSites.d.ts","sourceRoot":"","sources":["../../src/errorSites.ts"],"names":[],"mappings":"AAcA,OAAO,QAAQ,iBAAiB,CAAC;IAChC,UAAU,UAAU;QACnB,QAAQ,EAAE,IAAI,CAAC;KACf;CACD;AAED,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errorSites.js","sourceRoot":"","sources":["../src/errorSites.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"errorSites.js","sourceRoot":"","sources":["../../src/errorSites.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,eAAO,MAAM,mBAAmB,WACvB,yBAAyB,2BAKjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ProsopoServer } from "./server.js";
2
+ export { ProsopoServer } from "./server.js";
3
+ export { getServerConfig, getServerUrl } from "./config.js";
4
+ import { getPair } from "@prosopo/keyring";
5
+ export const PublicProsopoServer = async (config) => {
6
+ const pair = getPair(undefined, config.account.address);
7
+ return new ProsopoServer(config, pair);
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACvC,MAAiC,EAChC,EAAE;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAcA,OAAO,EAAa,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAiB,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,KAAK,oBAAoB,EACzB,WAAW,EAEX,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EAEzB,MAAM,gBAAgB,CAAC;AAqBxB,eAAO,MAAM,YAAY,gBACX,MAAM,GAAG,SAAS,KAC7B,MAAM,GAAG,MAAM,GAAG,SAWpB,CAAC;AAMF,qBAAa,aAAa;IAGzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAEnD,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;gBAElB,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW;IAcjE,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW;IAkCnC,cAAc,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,EAAE,CAAC,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,oBAAoB,CAAC;IA2JhC,OAAO,CAAC,QAAQ;IA6BhB,OAAO,CAAC,iBAAiB;IAaZ,UAAU,CACtB,KAAK,EAAE,eAAe,EACtB,EAAE,CAAC,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,oBAAoB,CAAC;CAsEhC"}
@@ -0,0 +1,180 @@
1
+ import { HttpError, ProviderApi } from "@prosopo/api";
2
+ import { ProsopoError } from "@prosopo/common";
3
+ import { Keyring } from "@prosopo/keyring";
4
+ import { findProvider } from "@prosopo/load-balancer";
5
+ import { getLogger } from "@prosopo/logger";
6
+ import { CaptchaType, ProcaptchaOutputSchema, decodeProcaptchaOutput, } from "@prosopo/types";
7
+ import { u8aToHex } from "@prosopo/util";
8
+ import { translate } from "./translate.js";
9
+ export const detectIpMode = (providerUrl) => {
10
+ if (!providerUrl)
11
+ return undefined;
12
+ let hostname;
13
+ try {
14
+ hostname = new URL(providerUrl).hostname;
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ if (hostname.startsWith("ipv4."))
20
+ return "ipv4";
21
+ if (hostname.startsWith("ipv6."))
22
+ return "ipv6";
23
+ return undefined;
24
+ };
25
+ const isTimeoutError = (err) => err instanceof Error && err.name === "TimeoutError";
26
+ export class ProsopoServer {
27
+ constructor(config, pair) {
28
+ this.config = config;
29
+ this.pair = pair;
30
+ this.defaultEnvironment = this.config.defaultEnvironment;
31
+ this.dappAccount = this.config.account.address;
32
+ this.logger = getLogger(this.config.logLevel, "@prosopo/server");
33
+ this.keyring = new Keyring({
34
+ type: "sr25519",
35
+ });
36
+ }
37
+ getProviderApi(providerUrl) {
38
+ return new ProviderApi(providerUrl, this.dappAccount || "", this.config.providerRequestTimeoutMs);
39
+ }
40
+ async verifyProvider(token, timeouts, providerUrl, timestamp, user, challenge, ip, email, captchaType, clientSessionId) {
41
+ this.logger.info(() => ({
42
+ data: { providerUrl, captchaType: captchaType ?? "legacy" },
43
+ msg: "Verifying with provider",
44
+ }));
45
+ const dappUserSignature = this.pair?.sign(timestamp.toString());
46
+ if (!dappUserSignature) {
47
+ throw new ProsopoError({
48
+ code: "INVALID_TIMESTAMP",
49
+ errorSite: "SRVR-1",
50
+ context: { error: "Timestamp not found" },
51
+ });
52
+ }
53
+ const signatureHex = u8aToHex(dappUserSignature);
54
+ const providerApi = this.getProviderApi(providerUrl);
55
+ if (captchaType === CaptchaType.iconOrder) {
56
+ const iconOrderTimeout = this.config.timeouts.iconOrder.cachedTimeout;
57
+ if (!this.isRecent(timestamp, iconOrderTimeout, "IconOrder")) {
58
+ return this.notRecentResponse();
59
+ }
60
+ return await providerApi.submitIconOrderCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
61
+ }
62
+ if (captchaType === CaptchaType.puzzle) {
63
+ const puzzleTimeout = this.config.timeouts.puzzle.cachedTimeout;
64
+ if (!this.isRecent(timestamp, puzzleTimeout, "Puzzle")) {
65
+ return this.notRecentResponse();
66
+ }
67
+ return await providerApi.submitPuzzleCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
68
+ }
69
+ if (captchaType === CaptchaType.audio) {
70
+ const audioTimeout = this.config.timeouts.audio.cachedTimeout;
71
+ if (!this.isRecent(timestamp, audioTimeout, "Audio")) {
72
+ return this.notRecentResponse();
73
+ }
74
+ return await providerApi.submitAudioCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
75
+ }
76
+ if (captchaType === CaptchaType.pow) {
77
+ const powTimeout = this.config.timeouts.pow.cachedTimeout;
78
+ if (!this.isRecent(timestamp, powTimeout, "PoW")) {
79
+ return this.notRecentResponse();
80
+ }
81
+ return await providerApi.submitPowCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
82
+ }
83
+ if (captchaType === CaptchaType.authenticated) {
84
+ const authenticatedTimeout = this.config.timeouts.pow.cachedTimeout;
85
+ if (!this.isRecent(timestamp, authenticatedTimeout, "Authenticated")) {
86
+ return this.notRecentResponse();
87
+ }
88
+ return await providerApi.submitAuthenticatedCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
89
+ }
90
+ if (captchaType === CaptchaType.image) {
91
+ const imageTimeout = this.config.timeouts.image.cachedTimeout;
92
+ if (!this.isRecent(timestamp, imageTimeout, "Image")) {
93
+ return this.notRecentResponse();
94
+ }
95
+ return await providerApi.verifyDappUser(token, signatureHex, user, timeouts.image.cachedTimeout, ip, email, clientSessionId);
96
+ }
97
+ this.logger.warn(() => ({
98
+ data: { challenge: Boolean(challenge) },
99
+ msg: "Verifying legacy token without captchaType field; using challenge heuristic",
100
+ }));
101
+ if (challenge) {
102
+ const powTimeout = this.config.timeouts.pow.cachedTimeout;
103
+ if (!this.isRecent(timestamp, powTimeout, "PoW")) {
104
+ return this.notRecentResponse();
105
+ }
106
+ return await providerApi.submitPowCaptchaVerify(token, signatureHex, user, ip, email, clientSessionId);
107
+ }
108
+ const imageTimeout = this.config.timeouts.image.cachedTimeout;
109
+ if (!this.isRecent(timestamp, imageTimeout, "Image")) {
110
+ return this.notRecentResponse();
111
+ }
112
+ return await providerApi.verifyDappUser(token, signatureHex, user, timeouts.image.cachedTimeout, ip, email, clientSessionId);
113
+ }
114
+ isRecent(timestamp, timeoutMs, label) {
115
+ if (!timestamp)
116
+ return false;
117
+ const age = Date.now() - timestamp;
118
+ if (age < -ProsopoServer.MAX_CLOCK_SKEW_MS) {
119
+ this.logger.error(() => ({
120
+ data: { timestamp, timeoutMs },
121
+ msg: `${label} captcha timestamp is in the future`,
122
+ }));
123
+ return false;
124
+ }
125
+ const recent = age < timeoutMs;
126
+ if (!recent) {
127
+ this.logger.error(() => ({
128
+ data: { timestamp, timeoutMs },
129
+ msg: `${label} captcha is not recent`,
130
+ }));
131
+ }
132
+ return recent;
133
+ }
134
+ notRecentResponse() {
135
+ return {
136
+ verified: false,
137
+ status: translate("API.USER_NOT_VERIFIED_TIME_EXPIRED"),
138
+ };
139
+ }
140
+ async isVerified(token, ip, email, clientSessionId) {
141
+ try {
142
+ const payload = decodeProcaptchaOutput(token);
143
+ const { providerUrl, challenge, timestamp, user, captchaType } = ProcaptchaOutputSchema.parse(payload);
144
+ const ipMode = detectIpMode(providerUrl);
145
+ const provider = await findProvider(this.config.defaultEnvironment, providerUrl, ipMode);
146
+ if (!provider) {
147
+ this.logger.error(() => ({
148
+ data: { providerUrl },
149
+ msg: "Provider not found",
150
+ }));
151
+ return {
152
+ verified: false,
153
+ status: translate("API.USER_NOT_VERIFIED"),
154
+ };
155
+ }
156
+ const verificationResponse = await this.verifyProvider(token, this.config.timeouts, provider.url, Number(timestamp), user, challenge, ip, email, captchaType, clientSessionId);
157
+ this.logger.info(() => ({
158
+ data: {
159
+ verificationResponse,
160
+ providerUrl,
161
+ user,
162
+ challenge,
163
+ captchaType: captchaType ?? "legacy",
164
+ siteKey: this.pair?.address,
165
+ },
166
+ }));
167
+ return verificationResponse;
168
+ }
169
+ catch (err) {
170
+ const code = err instanceof HttpError ? err.status : isTimeoutError(err) ? 504 : 500;
171
+ this.logger.error(() => ({ err, data: { token, code } }));
172
+ return {
173
+ verified: false,
174
+ status: translate("API.USER_NOT_VERIFIED"),
175
+ };
176
+ }
177
+ }
178
+ }
179
+ ProsopoServer.MAX_CLOCK_SKEW_MS = 30_000;
180
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/config.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.unit.test.js","sourceRoot":"","sources":["../../../src/tests/config.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectIpMode.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/detectIpMode.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectIpMode.unit.test.js","sourceRoot":"","sources":["../../../src/tests/detectIpMode.unit.test.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAG7B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAIH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACnC,MAAM,CACL,YAAY,CAAC,iDAAiD,CAAC,CAC/D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAQH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,CACL,YAAY,CAAC,wCAAwC,CAAC,CACtD,CAAC,aAAa,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACzE,MAAM,CACL,YAAY,CAAC,yCAAyC,CAAC,CACvD,CAAC,aAAa,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAQH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAQH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mintSites.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/mintSites.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mintSites.unit.test.js","sourceRoot":"","sources":["../../../src/tests/mintSites.unit.test.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAU9C,MAAM,UAAU,GAAe;IAC9B;QACC,WAAW,EAAE,yBAAyB;QACtC,YAAY,EAAE,iDAAiD;QAC/D,mBAAmB,EAAE,iBAAiB;KACtC;IACD;QACC,WAAW,EAAE,4BAA4B;QACzC,YAAY,EAAE,oDAAoD;QAClE,mBAAmB,EAAE,oBAAoB;KACzC;IACD;QACC,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,4CAA4C;QAC1D,mBAAmB,EAAE,mBAAmB;KACxC;CACD,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,YAAoB,EAAU,EAAE;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC3C,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IACnE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,WAAW,IAAI,CAAC,mBAAmB,4BAA4B,EAAE,GAAG,EAAE;YAC3F,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAKpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,0CAA0C,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAGpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerTimeout.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/providerTimeout.unit.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,4 @@
1
1
  import { createServer, } from "node:http";
2
- import { ProsopoError } from "@prosopo/common";
3
2
  import { Keyring } from "@prosopo/keyring";
4
3
  import * as loadBalancerModule from "@prosopo/load-balancer";
5
4
  import { ApiParams, CaptchaType, DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS, ProsopoServerConfigSchema, encodeProcaptchaOutput, } from "@prosopo/types";
@@ -73,18 +72,17 @@ describe("ProsopoServer against a stalled provider", () => {
73
72
  CaptchaType.image,
74
73
  CaptchaType.authenticated,
75
74
  ]) {
76
- it(`fails closed with a 504 at the timeout (${captchaType})`, async () => {
75
+ it(`fails closed at the timeout (${captchaType})`, async () => {
77
76
  const prosopoServer = newServer(TIMEOUT_MS);
77
+ const logError = vi.spyOn(prosopoServer.logger, "error");
78
78
  const started = Date.now();
79
- const outcome = await prosopoServer
80
- .isVerified(buildToken(captchaType))
81
- .then((response) => ({ response, error: undefined }), (error) => ({ response: undefined, error }));
79
+ const response = await prosopoServer.isVerified(buildToken(captchaType));
82
80
  const elapsed = Date.now() - started;
83
- expect(outcome.response).toBeUndefined();
84
- expect(outcome.error).toBeInstanceOf(ProsopoError);
85
- if (outcome.error instanceof ProsopoError) {
86
- expect(outcome.error.status).toBe(504);
87
- }
81
+ expect(response.verified).toBe(false);
82
+ const logged = logError.mock.calls.map(([record]) => record());
83
+ expect(logged).toContainEqual(expect.objectContaining({
84
+ data: expect.objectContaining({ code: 504 }),
85
+ }));
88
86
  expect(elapsed).toBeGreaterThanOrEqual(TIMEOUT_MS / 2);
89
87
  expect(elapsed).toBeLessThan(5_000);
90
88
  }, 15_000);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerTimeout.unit.test.js","sourceRoot":"","sources":["../../../src/tests/providerTimeout.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/server.unit.test.ts"],"names":[],"mappings":""}
@@ -364,11 +364,32 @@ describe("ProsopoServer.isVerified — short-circuits", () => {
364
364
  expect(result.verified).toBe(false);
365
365
  expect(result.status).toBe("API.USER_NOT_VERIFIED");
366
366
  });
367
- it("throws BAD_REQUEST for an unparseable token", async () => {
367
+ it("answers not verified for an unparseable token", async () => {
368
368
  installProviderApiSpies();
369
369
  installProviderLookup();
370
370
  const server = new ProsopoServer(buildConfig(60_000, 60_000, 60_000), stubPair());
371
- await expect(server.isVerified("0xdeadbeef")).rejects.toThrow();
371
+ await expect(server.isVerified("0xdeadbeef")).resolves.toMatchObject({
372
+ verified: false,
373
+ });
374
+ });
375
+ it("answers not verified when the provider list cannot be fetched", async () => {
376
+ installProviderApiSpies();
377
+ vi.spyOn(loadBalancerModule, "findProvider").mockRejectedValue(new TypeError("fetch failed"));
378
+ const server = new ProsopoServer(buildConfig(60_000, 60_000, 60_000), stubPair());
379
+ await expect(server.isVerified(buildToken(Date.now()))).resolves.toMatchObject({ verified: false });
380
+ });
381
+ it("answers not verified when the provider call fails", async () => {
382
+ const spies = installProviderApiSpies();
383
+ spies.pow.mockRejectedValue(new TypeError("fetch failed"));
384
+ installProviderLookup();
385
+ const server = new ProsopoServer(buildConfig(60_000, 60_000, 60_000), stubPair());
386
+ const token = buildToken(Date.now(), {
387
+ [ApiParams.captchaType]: CaptchaType.pow,
388
+ });
389
+ await expect(server.isVerified(token)).resolves.toMatchObject({
390
+ verified: false,
391
+ });
392
+ expect(spies.pow).toHaveBeenCalledOnce();
372
393
  });
373
394
  });
374
395
  //# sourceMappingURL=server.unit.test.js.map