@prosopo/client-example-server 2.7.184 → 2.7.185

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 (125) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +3 -3
  2. package/.turbo/{turbo-build.log → turbo-build$colon$esm.log} +9 -10
  3. package/.turbo/turbo-build$colon$tsc.log +20 -20
  4. package/.turbo/turbo-build$colon$types.log +1 -0
  5. package/CHANGELOG.md +19 -0
  6. package/dist/cjs/app.cjs +4 -4
  7. package/dist/{app.js → esm/app.js} +4 -4
  8. package/dist/{app.d.ts → tsc/app.d.ts} +1 -1
  9. package/dist/tsc/app.d.ts.map +1 -0
  10. package/dist/tsc/app.js +122 -0
  11. package/dist/tsc/app.js.map +1 -0
  12. package/dist/tsc/controllers/auth.d.ts.map +1 -0
  13. package/dist/tsc/controllers/auth.js +241 -0
  14. package/dist/tsc/controllers/auth.js.map +1 -0
  15. package/dist/tsc/errorSites.d.ts.map +1 -0
  16. package/dist/{errorSites.js.map → tsc/errorSites.js.map} +1 -1
  17. package/dist/tsc/models/user.d.ts.map +1 -0
  18. package/dist/tsc/models/user.js +23 -0
  19. package/dist/tsc/models/user.js.map +1 -0
  20. package/dist/tsc/routes/routes.d.ts.map +1 -0
  21. package/dist/tsc/routes/routes.js +20 -0
  22. package/dist/tsc/routes/routes.js.map +1 -0
  23. package/dist/tsc/tests/app.unit.test.d.ts.map +1 -0
  24. package/dist/{tests → tsc/tests}/app.unit.test.js +2 -2
  25. package/dist/tsc/tests/app.unit.test.js.map +1 -0
  26. package/dist/tsc/tests/appEntrypoint.unit.test.d.ts.map +1 -0
  27. package/dist/tsc/tests/appEntrypoint.unit.test.js.map +1 -0
  28. package/dist/tsc/tests/auth.unit.test.d.ts.map +1 -0
  29. package/dist/tsc/tests/auth.unit.test.js.map +1 -0
  30. package/dist/tsc/tests/authHarness.d.ts.map +1 -0
  31. package/dist/tsc/tests/authHarness.js.map +1 -0
  32. package/dist/tsc/tests/clientExampleServer.test-d.d.ts.map +1 -0
  33. package/dist/tsc/tests/clientExampleServer.test-d.js.map +1 -0
  34. package/dist/tsc/tests/routes.unit.test.d.ts.map +1 -0
  35. package/dist/tsc/tests/routes.unit.test.js.map +1 -0
  36. package/dist/tsc/tests/utils.unit.test.d.ts.map +1 -0
  37. package/dist/tsc/tests/utils.unit.test.js.map +1 -0
  38. package/dist/tsc/utils/connection.d.ts.map +1 -0
  39. package/dist/tsc/utils/connection.js +21 -0
  40. package/dist/tsc/utils/connection.js.map +1 -0
  41. package/dist/tsc/utils/database.d.ts.map +1 -0
  42. package/dist/tsc/utils/database.js +9 -0
  43. package/dist/tsc/utils/database.js.map +1 -0
  44. package/dist/types/app.d.ts +16 -0
  45. package/dist/types/app.d.ts.map +1 -0
  46. package/dist/types/controllers/auth.d.ts +8 -0
  47. package/dist/types/controllers/auth.d.ts.map +1 -0
  48. package/dist/types/errorSites.d.ts +9 -0
  49. package/dist/types/errorSites.d.ts.map +1 -0
  50. package/dist/types/models/user.d.ts +45 -0
  51. package/dist/types/models/user.d.ts.map +1 -0
  52. package/dist/types/routes/routes.d.ts +6 -0
  53. package/dist/types/routes/routes.d.ts.map +1 -0
  54. package/dist/types/tests/app.unit.test.d.ts +2 -0
  55. package/dist/types/tests/app.unit.test.d.ts.map +1 -0
  56. package/dist/types/tests/appEntrypoint.unit.test.d.ts +2 -0
  57. package/dist/types/tests/appEntrypoint.unit.test.d.ts.map +1 -0
  58. package/dist/types/tests/auth.unit.test.d.ts +2 -0
  59. package/dist/types/tests/auth.unit.test.d.ts.map +1 -0
  60. package/dist/types/tests/authHarness.d.ts +40 -0
  61. package/dist/types/tests/authHarness.d.ts.map +1 -0
  62. package/dist/types/tests/clientExampleServer.test-d.d.ts +2 -0
  63. package/dist/types/tests/clientExampleServer.test-d.d.ts.map +1 -0
  64. package/dist/types/tests/routes.unit.test.d.ts +2 -0
  65. package/dist/types/tests/routes.unit.test.d.ts.map +1 -0
  66. package/dist/types/tests/utils.unit.test.d.ts +2 -0
  67. package/dist/types/tests/utils.unit.test.d.ts.map +1 -0
  68. package/dist/types/utils/connection.d.ts +4 -0
  69. package/dist/types/utils/connection.d.ts.map +1 -0
  70. package/dist/types/utils/database.d.ts +3 -0
  71. package/dist/types/utils/database.d.ts.map +1 -0
  72. package/package.json +17 -18
  73. package/dist/app.d.ts.map +0 -1
  74. package/dist/app.js.map +0 -1
  75. package/dist/controllers/auth.d.ts.map +0 -1
  76. package/dist/controllers/auth.js.map +0 -1
  77. package/dist/errorSites.d.ts.map +0 -1
  78. package/dist/models/user.d.ts.map +0 -1
  79. package/dist/models/user.js.map +0 -1
  80. package/dist/routes/routes.d.ts.map +0 -1
  81. package/dist/routes/routes.js.map +0 -1
  82. package/dist/tests/app.unit.test.d.ts.map +0 -1
  83. package/dist/tests/app.unit.test.js.map +0 -1
  84. package/dist/tests/appEntrypoint.unit.test.d.ts.map +0 -1
  85. package/dist/tests/appEntrypoint.unit.test.js.map +0 -1
  86. package/dist/tests/auth.unit.test.d.ts.map +0 -1
  87. package/dist/tests/auth.unit.test.js.map +0 -1
  88. package/dist/tests/authHarness.d.ts.map +0 -1
  89. package/dist/tests/authHarness.js.map +0 -1
  90. package/dist/tests/clientExampleServer.test-d.d.ts.map +0 -1
  91. package/dist/tests/clientExampleServer.test-d.js.map +0 -1
  92. package/dist/tests/routes.unit.test.d.ts.map +0 -1
  93. package/dist/tests/routes.unit.test.js.map +0 -1
  94. package/dist/tests/utils.unit.test.d.ts.map +0 -1
  95. package/dist/tests/utils.unit.test.js.map +0 -1
  96. package/dist/utils/connection.d.ts.map +0 -1
  97. package/dist/utils/connection.js.map +0 -1
  98. package/dist/utils/database.d.ts.map +0 -1
  99. package/dist/utils/database.js.map +0 -1
  100. /package/dist/{_virtual → esm/_virtual}/_rolldown/runtime.js +0 -0
  101. /package/dist/{controllers → esm/controllers}/auth.js +0 -0
  102. /package/dist/{models → esm/models}/user.js +0 -0
  103. /package/dist/{routes → esm/routes}/routes.js +0 -0
  104. /package/dist/{utils → esm/utils}/connection.js +0 -0
  105. /package/dist/{utils → esm/utils}/database.js +0 -0
  106. /package/dist/{controllers → tsc/controllers}/auth.d.ts +0 -0
  107. /package/dist/{errorSites.d.ts → tsc/errorSites.d.ts} +0 -0
  108. /package/dist/{errorSites.js → tsc/errorSites.js} +0 -0
  109. /package/dist/{models → tsc/models}/user.d.ts +0 -0
  110. /package/dist/{routes → tsc/routes}/routes.d.ts +0 -0
  111. /package/dist/{tests → tsc/tests}/app.unit.test.d.ts +0 -0
  112. /package/dist/{tests → tsc/tests}/appEntrypoint.unit.test.d.ts +0 -0
  113. /package/dist/{tests → tsc/tests}/appEntrypoint.unit.test.js +0 -0
  114. /package/dist/{tests → tsc/tests}/auth.unit.test.d.ts +0 -0
  115. /package/dist/{tests → tsc/tests}/auth.unit.test.js +0 -0
  116. /package/dist/{tests → tsc/tests}/authHarness.d.ts +0 -0
  117. /package/dist/{tests → tsc/tests}/authHarness.js +0 -0
  118. /package/dist/{tests → tsc/tests}/clientExampleServer.test-d.d.ts +0 -0
  119. /package/dist/{tests → tsc/tests}/clientExampleServer.test-d.js +0 -0
  120. /package/dist/{tests → tsc/tests}/routes.unit.test.d.ts +0 -0
  121. /package/dist/{tests → tsc/tests}/routes.unit.test.js +0 -0
  122. /package/dist/{tests → tsc/tests}/utils.unit.test.d.ts +0 -0
  123. /package/dist/{tests → tsc/tests}/utils.unit.test.js +0 -0
  124. /package/dist/{utils → tsc/utils}/connection.d.ts +0 -0
  125. /package/dist/{utils → tsc/utils}/database.d.ts +0 -0
@@ -20,6 +20,7 @@ ViteCommonJSConfig: .
20
20
  '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json'
21
21
  ]
22
22
  }
23
+ The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
23
24
  {
24
25
  externals: [
25
26
  '@prosopo/common',
@@ -40,7 +41,6 @@ ViteCommonJSConfig: .
40
41
  '@prosopo/load-balancer'
41
42
  ]
42
43
  }
43
- The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
44
44
  vite v8.1.6 building ssr environment for production...
45
45
  Bundle build started
46
46
  
@@ -52,7 +52,7 @@ dist/cjs/models/user.cjs 0.60 kB │ gzip: 0.26 kB
52
52
  dist/cjs/utils/connection.cjs 0.89 kB │ gzip: 0.44 kB
53
53
  dist/cjs/routes/routes.cjs 0.94 kB │ gzip: 0.41 kB
54
54
  dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
55
- dist/cjs/app.cjs 6.71 kB │ gzip: 2.40 kB
55
+ dist/cjs/app.cjs 6.73 kB │ gzip: 2.42 kB
56
56
  dist/cjs/controllers/auth.cjs 8.19 kB │ gzip: 2.54 kB
57
57
 
58
- ✓ built in 79ms
58
+ ✓ built in 56ms
@@ -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: [
@@ -48,12 +47,12 @@ Bundle build started
48
47
  ✓ 7 modules transformed.
49
48
  rendering chunks...
50
49
  computing gzip size...
51
- dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
52
- dist/utils/database.js 0.23 kB │ gzip: 0.17 kB
53
- dist/models/user.js 0.45 kB │ gzip: 0.21 kB
54
- dist/utils/connection.js 0.64 kB │ gzip: 0.35 kB
55
- dist/routes/routes.js 0.79 kB │ gzip: 0.37 kB
56
- dist/app.js 5.63 kB │ gzip: 2.20 kB
57
- dist/controllers/auth.js 7.39 kB │ gzip: 2.40 kB
50
+ dist/esm/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
51
+ dist/esm/utils/database.js 0.23 kB │ gzip: 0.17 kB
52
+ dist/esm/models/user.js 0.45 kB │ gzip: 0.21 kB
53
+ dist/esm/utils/connection.js 0.64 kB │ gzip: 0.35 kB
54
+ dist/esm/routes/routes.js 0.79 kB │ gzip: 0.37 kB
55
+ dist/esm/app.js 5.64 kB │ gzip: 2.21 kB
56
+ dist/esm/controllers/auth.js 7.39 kB │ gzip: 2.40 kB
58
57
 
59
- ✓ built in 81ms
58
+ ✓ built in 49ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 9:13:32 AM - Projects in this build:
2
+ 11:55:04 AM - Projects in this build:
3
3
  * ../../dev/config/tsconfig.json
4
4
  * ../../packages/util/tsconfig.json
5
5
  * ../../packages/locale/tsconfig.json
@@ -19,41 +19,41 @@ $ tsc --build --verbose
19
19
  * ../../packages/server/tsconfig.json
20
20
  * tsconfig.json
21
21
 
22
- 9:13:32 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/tsconfig.tsbuildinfo'
22
+ 11:55:04 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'
23
23
 
24
- 9:13:32 AM - Project '../../packages/util/tsconfig.json' is up to date because newest input '../../packages/util/src/url.ts' is older than output '../../packages/util/tsconfig.tsbuildinfo'
24
+ 11:55:04 AM - Project '../../packages/util/tsconfig.json' is up to date because newest input '../../packages/util/src/url.ts' is older than output '../../packages/util/dist/tsc/tsconfig.tsbuildinfo'
25
25
 
26
- 9:13:32 AM - Project '../../packages/locale/tsconfig.json' is up to date because newest input '../../packages/locale/src/translations.ts' is older than output '../../packages/locale/tsconfig.tsbuildinfo'
26
+ 11:55:04 AM - Project '../../packages/locale/tsconfig.json' is up to date because newest input '../../packages/locale/src/process.ts' is older than output '../../packages/locale/dist/tsc/tsconfig.tsbuildinfo'
27
27
 
28
- 9:13:32 AM - Project '../../packages/util-crypto/tsconfig.json' is up to date because newest input '../../packages/util-crypto/src/types.ts' is older than output '../../packages/util-crypto/tsconfig.tsbuildinfo'
28
+ 11:55:04 AM - Project '../../packages/util-crypto/tsconfig.json' is up to date because newest input '../../packages/util-crypto/src/types.ts' is older than output '../../packages/util-crypto/dist/tsc/tsconfig.tsbuildinfo'
29
29
 
30
- 9:13:32 AM - Project '../../packages/types/tsconfig.json' is up to date because newest input '../../packages/types/src/types.test-d.ts' is older than output '../../packages/types/tsconfig.tsbuildinfo'
30
+ 11:55:04 AM - Project '../../packages/types/tsconfig.json' is up to date because newest input '../../packages/types/src/types.test-d.ts' is older than output '../../packages/types/dist/tsc/tsconfig.tsbuildinfo'
31
31
 
32
- 9:13:32 AM - Project '../../packages/common/tsconfig.json' is up to date because newest input '../../packages/common/src/errorCodes.ts' is older than output '../../packages/common/tsconfig.tsbuildinfo'
32
+ 11:55:04 AM - Project '../../packages/common/tsconfig.json' is up to date because newest input '../../packages/common/src/error.ts' is older than output '../../packages/common/dist/tsc/tsconfig.tsbuildinfo'
33
33
 
34
- 9:13:32 AM - Project '../../packages/logger/tsconfig.json' is up to date because newest input '../../packages/logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../../packages/logger/tsconfig.tsbuildinfo'
34
+ 11:55:04 AM - Project '../../packages/logger/tsconfig.json' is up to date because newest input '../../packages/logger/src/index.ts' is older than output '../../packages/logger/dist/tsc/tsconfig.tsbuildinfo'
35
35
 
36
- 9:13:32 AM - Project '../../packages/api-route/tsconfig.json' is up to date because newest input '../../packages/api-route/src/apiRoutes.ts' is older than output '../../packages/api-route/tsconfig.tsbuildinfo'
36
+ 11:55:04 AM - Project '../../packages/api-route/tsconfig.json' is up to date because newest input '../../packages/api-route/src/apiRoutes.ts' is older than output '../../packages/api-route/dist/tsc/tsconfig.tsbuildinfo'
37
37
 
38
- 9:13:32 AM - Project '../../packages/redis-client/tsconfig.json' is up to date because newest input '../../packages/redis-client/src/index.ts' is older than output '../../packages/redis-client/tsconfig.tsbuildinfo'
38
+ 11:55:04 AM - Project '../../packages/redis-client/tsconfig.json' is up to date because newest input '../../packages/redis-client/src/tests/redisIndex.integration.test.ts' is older than output '../../packages/redis-client/dist/tsc/tsconfig.tsbuildinfo'
39
39
 
40
- 9:13:32 AM - Project '../../packages/api/tsconfig.json' is up to date because newest input '../../packages/api/src/index.ts' is older than output '../../packages/api/tsconfig.tsbuildinfo'
40
+ 11:55:04 AM - Project '../../packages/api/tsconfig.json' is up to date because newest input '../../packages/api/src/tests/apiHarness.ts' is older than output '../../packages/api/dist/tsc/tsconfig.tsbuildinfo'
41
41
 
42
- 9:13:32 AM - Project '../../packages/user-access-policy/tsconfig.json' is up to date because newest input '../../packages/user-access-policy/src/transformRule.ts' is older than output '../../packages/user-access-policy/tsconfig.tsbuildinfo'
42
+ 11:55:04 AM - Project '../../packages/user-access-policy/tsconfig.json' is up to date because newest input '../../packages/user-access-policy/src/transformRule.ts' is older than output '../../packages/user-access-policy/dist/tsc/tsconfig.tsbuildinfo'
43
43
 
44
- 9:13:32 AM - Project '../../packages/types-database/tsconfig.json' is up to date because newest input '../../packages/types-database/src/types/captcha.ts' is older than output '../../packages/types-database/tsconfig.tsbuildinfo'
44
+ 11:55:04 AM - Project '../../packages/types-database/tsconfig.json' is up to date because newest input '../../packages/types-database/src/index.ts' is older than output '../../packages/types-database/dist/tsc/tsconfig.tsbuildinfo'
45
45
 
46
- 9:13:32 AM - Project '../../packages/database/tsconfig.json' is up to date because newest input '../../packages/database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../../packages/database/tsconfig.tsbuildinfo'
46
+ 11:55:04 AM - Project '../../packages/database/tsconfig.json' is up to date because newest input '../../packages/database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../../packages/database/dist/tsc/tsconfig.tsbuildinfo'
47
47
 
48
- 9:13:32 AM - Project '../../packages/dotenv/tsconfig.json' is up to date because newest input '../../packages/dotenv/src/env.ts' is older than output '../../packages/dotenv/tsconfig.tsbuildinfo'
48
+ 11:55:04 AM - Project '../../packages/dotenv/tsconfig.json' is up to date because newest input '../../packages/dotenv/src/env.ts' is older than output '../../packages/dotenv/dist/tsc/tsconfig.tsbuildinfo'
49
49
 
50
- 9:13:32 AM - Project '../../packages/keyring/tsconfig.json' is up to date because newest input '../../packages/keyring/src/pair/decode.ts' is older than output '../../packages/keyring/tsconfig.tsbuildinfo'
50
+ 11:55:04 AM - Project '../../packages/keyring/tsconfig.json' is up to date because newest input '../../packages/keyring/src/errorSites.ts' is older than output '../../packages/keyring/dist/tsc/tsconfig.tsbuildinfo'
51
51
 
52
- 9:13:32 AM - Project '../../packages/load-balancer/tsconfig.json' is up to date because newest input '../../packages/load-balancer/src/balancer.ts' is older than output '../../packages/load-balancer/tsconfig.tsbuildinfo'
52
+ 11:55:04 AM - Project '../../packages/load-balancer/tsconfig.json' is up to date because newest input '../../packages/load-balancer/src/balancer.ts' is older than output '../../packages/load-balancer/dist/tsc/tsconfig.tsbuildinfo'
53
53
 
54
- 9:13:32 AM - Project '../../packages/server/tsconfig.json' is up to date because newest input '../../packages/server/src/config.ts' is older than output '../../packages/server/tsconfig.tsbuildinfo'
54
+ 11:55:04 AM - Project '../../packages/server/tsconfig.json' is up to date because newest input '../../packages/server/src/config.ts' is older than output '../../packages/server/dist/tsc/tsconfig.tsbuildinfo'
55
55
 
56
- 9:13:32 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
56
+ 11:55:04 AM - Project 'tsconfig.json' is out of date because output file 'dist/tsc/tsconfig.tsbuildinfo' does not exist
57
57
 
58
- 9:13:32 AM - Building project '/home/runner/work/captcha/captcha/demos/client-example-server/tsconfig.json'...
58
+ 11:55:04 AM - Building project '/home/runner/work/captcha/captcha/demos/client-example-server/tsconfig.json'...
59
59
 
@@ -0,0 +1 @@
1
+ $ tsc --project tsconfig.types.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @prosopo/client-example-server
2
2
 
3
+ ## 2.7.185
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/common@3.3.1
14
+ - @prosopo/database@4.3.0
15
+ - @prosopo/dotenv@3.0.63
16
+ - @prosopo/keyring@2.10.12
17
+ - @prosopo/logger@2.1.6
18
+ - @prosopo/server@2.14.1
19
+ - @prosopo/types@5.19.0
20
+ - @prosopo/util@3.3.17
21
+
3
22
  ## 2.7.184
4
23
  ### Patch Changes
5
24
 
package/dist/cjs/app.cjs CHANGED
@@ -11,12 +11,12 @@ let node_https = require("node:https");
11
11
  node_https = require_runtime.__toESM(node_https, 1);
12
12
  let node_path = require("node:path");
13
13
  node_path = require_runtime.__toESM(node_path, 1);
14
- let node_url = require("node:url");
15
14
  let _prosopo_common = require("@prosopo/common");
16
15
  let _prosopo_dotenv = require("@prosopo/dotenv");
17
16
  let _prosopo_logger = require("@prosopo/logger");
18
17
  let _prosopo_server = require("@prosopo/server");
19
18
  let _prosopo_util = require("@prosopo/util");
19
+ let _prosopo_util_node = require("@prosopo/util/node");
20
20
  let cors = require("cors");
21
21
  cors = require_runtime.__toESM(cors, 1);
22
22
  let express = require("express");
@@ -77,9 +77,9 @@ var resolvePort = (config) => {
77
77
  * HTTPS in development/test when the repo's certificates exist, plain HTTP
78
78
  * otherwise — in production Caddy terminates TLS.
79
79
  */
80
- var startServer = (app, port, dirname = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href))) => {
81
- if (isDevelopmentOrTest()) {
82
- const certsDir = node_path.default.resolve(dirname, "../../../certs");
80
+ var startServer = (app, port, pkgDir = (0, _prosopo_util_node.packageDir)(require("url").pathToFileURL(__filename).href)) => {
81
+ if (isDevelopmentOrTest() && pkgDir !== void 0) {
82
+ const certsDir = node_path.default.resolve(pkgDir, "../../certs");
83
83
  const keyPath = node_path.default.join(certsDir, "server.key");
84
84
  const certPath = node_path.default.join(certsDir, "server.crt");
85
85
  if (node_fs.default.existsSync(keyPath) && node_fs.default.existsSync(certPath)) {
@@ -6,12 +6,12 @@ import fs from "node:fs";
6
6
  import http from "node:http";
7
7
  import https from "node:https";
8
8
  import path from "node:path";
9
- import { fileURLToPath } from "node:url";
10
9
  import { ProsopoError } from "@prosopo/common";
11
10
  import { loadEnv } from "@prosopo/dotenv";
12
11
  import { getLogger } from "@prosopo/logger";
13
12
  import { getServerConfig } from "@prosopo/server";
14
13
  import { at, isMain } from "@prosopo/util";
14
+ import { packageDir } from "@prosopo/util/node";
15
15
  import cors from "cors";
16
16
  import express from "express";
17
17
  //#region src/app.ts
@@ -70,9 +70,9 @@ var resolvePort = (config) => {
70
70
  * HTTPS in development/test when the repo's certificates exist, plain HTTP
71
71
  * otherwise — in production Caddy terminates TLS.
72
72
  */
73
- var startServer = (app, port, dirname = path.dirname(fileURLToPath(import.meta.url))) => {
74
- if (isDevelopmentOrTest()) {
75
- const certsDir = path.resolve(dirname, "../../../certs");
73
+ var startServer = (app, port, pkgDir = packageDir(import.meta.url)) => {
74
+ if (isDevelopmentOrTest() && pkgDir !== void 0) {
75
+ const certsDir = path.resolve(pkgDir, "../../certs");
76
76
  const keyPath = path.join(certsDir, "server.key");
77
77
  const certPath = path.join(certsDir, "server.crt");
78
78
  if (fs.existsSync(keyPath) && fs.existsSync(certPath)) {
@@ -11,6 +11,6 @@ export declare const isDevelopmentOrTest: () => boolean;
11
11
  export declare const createApp: () => express.Express;
12
12
  export declare const DEFAULT_PORT = 9228;
13
13
  export declare const resolvePort: (config: ProsopoServerConfigOutput) => number;
14
- export declare const startServer: (app: express.Express, port: number, dirname?: string) => Server;
14
+ export declare const startServer: (app: express.Express, port: number, pkgDir?: string | undefined) => Server;
15
15
  export declare function main(): Promise<Server>;
16
16
  //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAQxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAIhE,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,oBAAY,uBAAuB;IAClC,GAAG,QAAQ;IACX,KAAK,UAAU;CACf;AAUD,eAAO,MAAM,qBAAqB,QAAO,MAQxC,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAO,uBAKN,CAAC;AAEhC,eAAO,MAAM,mBAAmB,QAAO,OACmC,CAAC;AAG3E,eAAO,MAAM,SAAS,QAAO,OAAO,CAAC,OA8BpC,CAAC;AAEF,eAAO,MAAM,YAAY,OAAO,CAAC;AAOjC,eAAO,MAAM,WAAW,WAAY,yBAAyB,KAAG,MAM/D,CAAC;AAMF,eAAO,MAAM,WAAW,QAClB,OAAO,CAAC,OAAO,QACd,MAAM,WACJ,MAAM,GAAG,SAAS,KACxB,MA6BF,CAAC;AAEF,wBAAsB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CA2C5C"}
@@ -0,0 +1,122 @@
1
+ import fs from "node:fs";
2
+ import http from "node:http";
3
+ import https from "node:https";
4
+ import path from "node:path";
5
+ import { ProsopoError } from "@prosopo/common";
6
+ import { loadEnv } from "@prosopo/dotenv";
7
+ import { getLogger } from "@prosopo/logger";
8
+ import { getServerConfig } from "@prosopo/server";
9
+ import { at, isMain } from "@prosopo/util";
10
+ import { packageDir } from "@prosopo/util/node";
11
+ import cors from "cors";
12
+ import express from "express";
13
+ import routesFactory from "./routes/routes.js";
14
+ import connectionFactory from "./utils/connection.js";
15
+ import memoryServerSetup from "./utils/database.js";
16
+ export var ProsopoVerificationType;
17
+ (function (ProsopoVerificationType) {
18
+ ProsopoVerificationType["api"] = "api";
19
+ ProsopoVerificationType["local"] = "local";
20
+ })(ProsopoVerificationType || (ProsopoVerificationType = {}));
21
+ const logger = getLogger("info", "client-example-server:app");
22
+ export const resolveVerifyEndpoint = () => {
23
+ const environment = process.env.NODE_ENV;
24
+ const apiPrefix = !environment || environment === "production" ? "" : `${environment}-`;
25
+ return (process.env.PROSOPO_VERIFY_ENDPOINT ||
26
+ `https://${apiPrefix}api.prosopo.io/siteverify`);
27
+ };
28
+ export const resolveVerifyType = () => Object.keys(ProsopoVerificationType).includes(process.env.PROSOPO_VERIFICATION_TYPE)
29
+ ? process.env.PROSOPO_VERIFICATION_TYPE
30
+ : ProsopoVerificationType.api;
31
+ export const isDevelopmentOrTest = () => process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
32
+ export const createApp = () => {
33
+ const app = express();
34
+ app.set("trust proxy", 1);
35
+ app.use(cors({ origin: true, credentials: true }));
36
+ app.use(express.urlencoded({ extended: true }));
37
+ app.use(express.json());
38
+ app.use((_, res, next) => {
39
+ res.setHeader("Access-Control-Allow-Origin", "*");
40
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE");
41
+ res.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, Authorization");
42
+ next();
43
+ });
44
+ return app;
45
+ };
46
+ export const DEFAULT_PORT = 9228;
47
+ export const resolvePort = (config) => {
48
+ if (!config.serverUrl)
49
+ return DEFAULT_PORT;
50
+ const segments = config.serverUrl.split(":");
51
+ if (segments.length < 3)
52
+ return DEFAULT_PORT;
53
+ const port = Number.parseInt(at(segments, 2));
54
+ return Number.isNaN(port) ? DEFAULT_PORT : port;
55
+ };
56
+ export const startServer = (app, port, pkgDir = packageDir(import.meta.url)) => {
57
+ if (isDevelopmentOrTest() && pkgDir !== undefined) {
58
+ const certsDir = path.resolve(pkgDir, "../../certs");
59
+ const keyPath = path.join(certsDir, "server.key");
60
+ const certPath = path.join(certsDir, "server.crt");
61
+ if (fs.existsSync(keyPath) && fs.existsSync(certPath)) {
62
+ const httpsOptions = {
63
+ key: fs.readFileSync(keyPath),
64
+ cert: fs.readFileSync(certPath),
65
+ };
66
+ return https.createServer(httpsOptions, app).listen(port, () => {
67
+ logger.info(() => ({ msg: `HTTPS server started on port ${port}` }));
68
+ });
69
+ }
70
+ logger.warn(() => ({
71
+ msg: "Certificates not found, starting HTTP server instead. Run ./setup_certs.sh to enable HTTPS in development.",
72
+ }));
73
+ return http.createServer(app).listen(port, () => {
74
+ logger.info(() => ({ msg: `HTTP server started on port ${port}` }));
75
+ });
76
+ }
77
+ return http.createServer(app).listen(port, () => {
78
+ logger.info(() => ({
79
+ msg: `HTTP server started on port ${port} (TLS handled by reverse proxy)`,
80
+ }));
81
+ });
82
+ };
83
+ export async function main() {
84
+ loadEnv();
85
+ const verifyEndpoint = resolveVerifyEndpoint();
86
+ logger.info(() => ({ data: { verifyEndpoint } }));
87
+ const verifyType = resolveVerifyType();
88
+ const app = createApp();
89
+ if (!process.env.MONGO_URI && !isDevelopmentOrTest()) {
90
+ throw new Error("Cannot run mongo memory when NODE_ENV is neither development nor test");
91
+ }
92
+ logger.info(() => ({ msg: process.env.MONGO_URI }));
93
+ const uri = process.env.MONGO_URI || (await memoryServerSetup());
94
+ logger.info(() => ({ msg: "mongo uri", data: { uri } }));
95
+ const mongoose = connectionFactory(uri);
96
+ if (!process.env.PROSOPO_SITE_PRIVATE_KEY) {
97
+ const mnemonicError = new ProsopoError({
98
+ code: "CONFIG_INVALID",
99
+ errorSite: "CLEX-1",
100
+ message: "Mnemonic Undefined. Please set the mnemonic in environment variables",
101
+ context: { missingParams: ["PROSOPO_SITE_PRIVATE_KEY"] },
102
+ });
103
+ logger.error(() => ({ err: mnemonicError }));
104
+ }
105
+ const config = getServerConfig();
106
+ logger.info(() => ({ msg: "Config", data: { config } }));
107
+ app.use(routesFactory(mongoose, config, verifyEndpoint, verifyType));
108
+ const port = resolvePort(config);
109
+ logger.info(() => ({ msg: "Listening on port", data: { port } }));
110
+ return startServer(app, port);
111
+ }
112
+ if (isMain(import.meta.url)) {
113
+ main()
114
+ .then(() => {
115
+ logger.info(() => ({ msg: "Server started" }));
116
+ })
117
+ .catch((err) => {
118
+ logger.error(() => ({ err }));
119
+ process.exit(1);
120
+ });
121
+ }
122
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/controllers/auth.ts"],"names":[],"mappings":"AAsBA,OAAO,EAMN,KAAK,yBAAyB,EAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAmK3C,QAAA,MAAM,MAAM,aACD,UAAU,UACZ,yBAAyB,kBACjB,MAAM,cACV,MAAM,OACb,OAAO,OACP,QAAQ,QACP,YAAY,uDA8ElB,CAAC;AAEF,QAAA,MAAM,KAAK,aACA,UAAU,UACZ,yBAAyB,kBACjB,MAAM,cACV,MAAM,OACb,OAAO,OACP,QAAQ,kBA8Eb,CAAC;AAEF,QAAA,MAAM,MAAM,QAAS,OAAO,OAAO,QAAQ,uCAkC1C,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,241 @@
1
+ import { blake2b } from "@noble/hashes/blake2.js";
2
+ import { utf8ToBytes } from "@noble/hashes/utils.js";
3
+ import { u8aToHex } from "@polkadot/util";
4
+ import { randomAsHex } from "@polkadot/util-crypto";
5
+ import { ProsopoError } from "@prosopo/common";
6
+ import { getPair } from "@prosopo/keyring";
7
+ import { getLogger } from "@prosopo/logger";
8
+ import { ProsopoServer } from "@prosopo/server";
9
+ import { ApiParams, CaptchaType, ProcaptchaResponse, } from "@prosopo/types";
10
+ import { at } from "@prosopo/util";
11
+ import jwt from "jsonwebtoken";
12
+ import { z } from "zod";
13
+ const logger = getLogger("info", "client-example-server:auth");
14
+ const SubscribeBodySpec = ProcaptchaResponse.merge(z.object({
15
+ email: z.string().email(),
16
+ password: z.string(),
17
+ siteKey: z.string(),
18
+ }));
19
+ function hashPassword(password) {
20
+ return u8aToHex(blake2b(utf8ToBytes(password)));
21
+ }
22
+ const NO_IP = "NO_IP";
23
+ const getPairAndSecretForSiteKey = (baseSecret, siteKey) => {
24
+ let pair;
25
+ let secret = baseSecret;
26
+ pair = getPair(secret);
27
+ if (pair.address === siteKey) {
28
+ logger.info(() => ({
29
+ msg: "Site key matches the server configuration without captcha type suffix",
30
+ data: {
31
+ siteKeyDerived: pair?.address,
32
+ siteKey,
33
+ },
34
+ }));
35
+ return { pair, secret };
36
+ }
37
+ for (const captchaType of [
38
+ CaptchaType.pow,
39
+ CaptchaType.image,
40
+ CaptchaType.frictionless,
41
+ CaptchaType.puzzle,
42
+ CaptchaType.audio,
43
+ CaptchaType.iconOrder,
44
+ ]) {
45
+ const newSecret = `${baseSecret}//${captchaType}`;
46
+ pair = getPair(newSecret);
47
+ logger.info(() => ({
48
+ msg: "Checking pair",
49
+ data: {
50
+ captchaType,
51
+ siteKeyDerived: pair?.address,
52
+ siteKey,
53
+ },
54
+ }));
55
+ if (pair.address === siteKey) {
56
+ secret = newSecret;
57
+ break;
58
+ }
59
+ }
60
+ if (!pair || pair.address !== siteKey) {
61
+ throw new Error(`Site key does not match the server configuration: Provided ${siteKey} vs Server ${pair?.address}`);
62
+ }
63
+ return { pair, secret };
64
+ };
65
+ const getResponse = async (ip, token, secret, verifyEndpoint, email) => {
66
+ const body = {
67
+ [ApiParams.token]: token,
68
+ [ApiParams.secret]: secret,
69
+ ...(email ? { [ApiParams.email]: email } : {}),
70
+ };
71
+ if (process.env.NODE_ENV !== "development") {
72
+ body[ApiParams.ip] = ip;
73
+ }
74
+ logger.info(() => ({
75
+ data: {
76
+ body: { ...body, [ApiParams.secret]: "[redacted]" },
77
+ },
78
+ }));
79
+ const response = await fetch(verifyEndpoint, {
80
+ method: "POST",
81
+ body: JSON.stringify(body),
82
+ });
83
+ return response.json();
84
+ };
85
+ const verify = async (prosopoServer, verifyType, verifyEndpoint, token, secret, ip, email, clientSessionId) => {
86
+ if (verifyType === "api") {
87
+ logger.info(() => ({
88
+ msg: "Verifying using the API endpoint",
89
+ data: {
90
+ verifyEndpoint,
91
+ },
92
+ }));
93
+ const response = await getResponse(ip, token, secret, verifyEndpoint, email);
94
+ logger.info(() => ({
95
+ data: {
96
+ response,
97
+ },
98
+ }));
99
+ return response.verified;
100
+ }
101
+ const verified = await prosopoServer.isVerified(token, ip, email, clientSessionId);
102
+ logger.info(() => ({
103
+ data: {
104
+ verified,
105
+ },
106
+ }));
107
+ return verified[ApiParams.verified];
108
+ };
109
+ const signup = async (mongoose, config, verifyEndpoint, verifyType, req, res, next) => {
110
+ try {
111
+ if (!config.account.secret) {
112
+ throw new ProsopoError({
113
+ code: "CONFIG_INVALID",
114
+ errorSite: "CLEX-2",
115
+ message: "Mnemonic Undefined. Please set the mnemonic in environment variables",
116
+ context: { missingParams: ["PROSOPO_SITE_PRIVATE_KEY"] },
117
+ });
118
+ }
119
+ const User = mongoose.model("User");
120
+ const dbUser = await User.findOne({
121
+ email: { $eq: req.body.email },
122
+ });
123
+ const payload = SubscribeBodySpec.parse(req.body);
124
+ const token = payload[ApiParams.procaptchaResponse];
125
+ const siteKey = payload[ApiParams.siteKey];
126
+ const { pair, secret } = getPairAndSecretForSiteKey(config.account.secret, siteKey);
127
+ const prosopoServer = new ProsopoServer(config, pair);
128
+ if (dbUser) {
129
+ return res.status(409).json({ message: "email already exists" });
130
+ }
131
+ const email = req.body.email;
132
+ const verified = await verify(prosopoServer, verifyType, verifyEndpoint, token, secret, req.headers["x-client-ip"]?.toString() || "127.0.0.1", email, req.body[ApiParams.clientSessionId]);
133
+ if (verified === true) {
134
+ const salt = randomAsHex(32);
135
+ const passwordHash = hashPassword(`${req.body.password}${salt}`);
136
+ return User.create({
137
+ email: email,
138
+ name: req.body.name,
139
+ password: passwordHash,
140
+ salt: salt,
141
+ })
142
+ .then(() => {
143
+ res.status(200).json({ message: "user created" });
144
+ })
145
+ .catch((err) => {
146
+ logger.error(() => ({
147
+ err,
148
+ msg: "Error creating user in database",
149
+ }));
150
+ res.status(502).json({ message: "error while creating the user" });
151
+ });
152
+ }
153
+ res
154
+ .status(401)
155
+ .json({ message: "user has not completed a captcha", verified });
156
+ }
157
+ catch (err) {
158
+ console.error("error", err);
159
+ res
160
+ .status(500)
161
+ .json({ message: err.message || "internal server error" });
162
+ }
163
+ };
164
+ const login = async (mongoose, config, verifyEndpoint, verifyType, req, res) => {
165
+ const User = mongoose.model("User");
166
+ await User.findOne({
167
+ email: { $eq: req.body.email },
168
+ })
169
+ .then(async (dbUser) => {
170
+ if (dbUser) {
171
+ const payload = SubscribeBodySpec.parse(req.body);
172
+ const token = payload[ApiParams.procaptchaResponse];
173
+ const siteKey = payload[ApiParams.siteKey];
174
+ if (!config.account.secret) {
175
+ throw new ProsopoError({
176
+ code: "CONFIG_INVALID",
177
+ errorSite: "CLEX-3",
178
+ message: "Missing secret key",
179
+ context: { missingParams: ["PROSOPO_SITE_PRIVATE_KEY"] },
180
+ });
181
+ }
182
+ const { pair, secret } = getPairAndSecretForSiteKey(config.account.secret, siteKey);
183
+ const prosopoServer = new ProsopoServer(config, pair);
184
+ const verified = await verify(prosopoServer, verifyType, verifyEndpoint, token, secret, req.headers["x-client-ip"]?.toString() || NO_IP, undefined, req.body[ApiParams.clientSessionId]);
185
+ logger.info(() => ({
186
+ data: {
187
+ verified,
188
+ },
189
+ }));
190
+ if (verified) {
191
+ const passwordHash = hashPassword(`${req.body.password}${dbUser.salt}`);
192
+ if (passwordHash !== dbUser.password) {
193
+ return res.status(401).json({ message: "invalid credentials" });
194
+ }
195
+ const token = jwt.sign({ email: req.body.email }, "secret", {
196
+ expiresIn: "1h",
197
+ });
198
+ return res
199
+ .status(200)
200
+ .json({ message: "user logged in", token: token });
201
+ }
202
+ return res
203
+ .status(401)
204
+ .json({ message: "user has not completed a captcha", verified });
205
+ }
206
+ return res.status(404).json({ message: "user not found" });
207
+ })
208
+ .catch((err) => {
209
+ console.error("error", err);
210
+ res.status(500).json({ message: err.message || "internal server error" });
211
+ });
212
+ };
213
+ const isAuth = (req, res) => {
214
+ const authHeader = req.get("Authorization") || "";
215
+ if (!authHeader) {
216
+ return res.status(401).json({ message: "not authenticated" });
217
+ }
218
+ const headerParts = authHeader.split(" ");
219
+ if (headerParts.length < 2) {
220
+ return res.status(401).json({ message: "not authenticated" });
221
+ }
222
+ const token = at(headerParts, 1);
223
+ if (!token) {
224
+ return res.status(401).json({ message: "not authenticated" });
225
+ }
226
+ let decodedToken = "";
227
+ try {
228
+ decodedToken = jwt.verify(token, "secret");
229
+ }
230
+ catch (err) {
231
+ return res.status(500).json({
232
+ message: err.message || "could not decode the token",
233
+ });
234
+ }
235
+ if (!decodedToken) {
236
+ return res.status(401).json({ message: "unauthorized" });
237
+ }
238
+ return res.status(200).json({ message: "here is your resource" });
239
+ };
240
+ export { signup, login, isAuth };
241
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/controllers/auth.ts"],"names":[],"mappings":"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"}
@@ -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;QACf,QAAQ,EAAE,IAAI,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC;KACf;CACD;AAED,OAAO,EAAE,CAAC"}