@prosopo/api-express-router 3.1.57 → 3.1.59

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,5 +1,5 @@
1
1
 
2
- > @prosopo/api-express-router@3.1.57 build:cjs
2
+ > @prosopo/api-express-router@3.1.59 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -52,9 +52,9 @@ rendering chunks...
52
52
  computing gzip size...
53
53
  dist/cjs/errorHandler.cjs 0.45 kB │ gzip: 0.25 kB
54
54
  dist/cjs/apiExpressRouterFactory.cjs 0.78 kB │ gzip: 0.35 kB
55
- dist/cjs/endpointAdapter/apiExpressDefaultEndpointAdapter.cjs 1.05 kB │ gzip: 0.50 kB
56
55
  dist/cjs/index.cjs 1.25 kB │ gzip: 0.37 kB
56
+ dist/cjs/endpointAdapter/apiExpressDefaultEndpointAdapter.cjs 1.49 kB │ gzip: 0.62 kB
57
57
  dist/cjs/middlewares/authMiddleware.cjs 1.71 kB │ gzip: 0.74 kB
58
58
  dist/cjs/middlewares/requestLoggerMiddleware.cjs 1.81 kB │ gzip: 0.78 kB
59
59
 
60
- ✓ built in 41ms
60
+ ✓ built in 53ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/api-express-router@3.1.57 build:tsc
2
+ > @prosopo/api-express-router@3.1.59 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 5:53:54 PM - Projects in this build:
5
+ 3:31:57 PM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../util/tsconfig.json
8
8
  * ../logger/tsconfig.json
@@ -22,41 +22,41 @@
22
22
  * ../env/tsconfig.json
23
23
  * tsconfig.json
24
24
 
25
- 5:53:54 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'
25
+ 3:31:57 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'
26
26
 
27
- 5:53:54 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
27
+ 3:31:57 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
28
28
 
29
- 5:53:54 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
29
+ 3:31:57 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
30
30
 
31
- 5:53:54 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
31
+ 3:31:57 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
32
32
 
33
- 5:53:54 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
33
+ 3:31:57 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
34
34
 
35
- 5:53:54 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'
35
+ 3:31:57 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'
36
36
 
37
- 5:53:54 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'
37
+ 3:31:57 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'
38
38
 
39
- 5:53:54 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
39
+ 3:31:57 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
40
40
 
41
- 5:53:54 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
41
+ 3:31:57 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
42
42
 
43
- 5:53:54 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/redisClient.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
43
+ 3:31:57 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
44
44
 
45
- 5:53:54 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
45
+ 3:31:57 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
46
46
 
47
- 5:53:54 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
47
+ 3:31:57 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
48
48
 
49
- 5:53:54 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/captcha.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
49
+ 3:31:57 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types.test-d.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
50
50
 
51
- 5:53:54 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/unit/redisCacheEscalation.unit.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
51
+ 3:31:57 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/unit/redisCacheEscalation.unit.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
52
52
 
53
- 5:53:54 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'
53
+ 3:31:57 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'
54
54
 
55
- 5:53:55 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
55
+ 3:31:57 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
56
56
 
57
- 5:53:55 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/index.ts' is older than output '../env/tsconfig.tsbuildinfo'
57
+ 3:31:58 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/index.ts' is older than output '../env/tsconfig.tsbuildinfo'
58
58
 
59
- 5:53:55 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
59
+ 3:31:58 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
60
60
 
61
- 5:53:55 PM - Building project '/home/runner/work/captcha/captcha/packages/api-express-router/tsconfig.json'...
61
+ 3:31:58 PM - Building project '/home/runner/work/captcha/captcha/packages/api-express-router/tsconfig.json'...
62
62
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/api-express-router@3.1.57 build
2
+ > @prosopo/api-express-router@3.1.59 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/api-express-router@3.1.57 build:cross-env
6
+ > @prosopo/api-express-router@3.1.59 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -30,7 +30,6 @@ ViteEsmConfig: .
30
30
  {
31
31
  externals: [
32
32
  '@prosopo/api-route',
33
- 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.
34
33
  '@prosopo/logger',
35
34
  '@prosopo/util',
36
35
  '@prosopo/common',
@@ -48,6 +47,7 @@ ViteEsmConfig: .
48
47
  '@prosopo/keyring'
49
48
  ]
50
49
  }
50
+ 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.
51
51
  vite v8.1.5 building ssr environment for production...
52
52
  Bundle build started
53
53
  
@@ -58,8 +58,8 @@ dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06
58
58
  dist/errorHandler.js 0.42 kB │ gzip: 0.24 kB
59
59
  dist/apiExpressRouterFactory.js 0.71 kB │ gzip: 0.34 kB
60
60
  dist/index.js 0.84 kB │ gzip: 0.31 kB
61
- dist/endpointAdapter/apiExpressDefaultEndpointAdapter.js 0.94 kB │ gzip: 0.47 kB
61
+ dist/endpointAdapter/apiExpressDefaultEndpointAdapter.js 1.30 kB │ gzip: 0.59 kB
62
62
  dist/middlewares/authMiddleware.js 1.60 kB │ gzip: 0.72 kB
63
63
  dist/middlewares/requestLoggerMiddleware.js 1.75 kB │ gzip: 0.76 kB
64
64
 
65
- ✓ built in 42ms
65
+ ✓ built in 39ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @prosopo/api-express-router
2
2
 
3
+ ## 3.1.59
4
+ ### Patch Changes
5
+
6
+ - Updated dependencies [216f8cd]
7
+ - @prosopo/types@5.0.4
8
+ - @prosopo/env@3.6.28
9
+
10
+ ## 3.1.58
11
+ ### Patch Changes
12
+
13
+ - d7b93f1: Honour the adapter's `errorStatusCode` and the `{ error: ... }` JSON envelope in the default endpoint adapter's catch block. `ProsopoBaseError`s now surface their own status code via `unwrapError`; unexpected errors fall back to the configured `errorStatusCode` as JSON, instead of a hardcoded 500 plain-text response.
14
+ - Updated dependencies [16dbab0]
15
+ - Updated dependencies [9091a78]
16
+ - Updated dependencies [9ec6cc4]
17
+ - Updated dependencies [d5e104b]
18
+ - Updated dependencies [063e69d]
19
+ - @prosopo/types@5.0.3
20
+ - @prosopo/util@3.3.6
21
+ - @prosopo/locale@3.3.0
22
+ - @prosopo/env@3.6.27
23
+ - @prosopo/common@3.1.50
24
+ - @prosopo/logger@2.0.6
25
+ - @prosopo/api-route@2.6.55
26
+
3
27
  ## 3.1.57
4
28
  ### Patch Changes
5
29
 
@@ -22,7 +22,13 @@ var ApiExpressDefaultEndpointAdapter = class {
22
22
  response.json(responseObject);
23
23
  } catch (error) {
24
24
  request.logger.error(() => ({ err: error }));
25
- response.status(500).send("An internal server error occurred.");
25
+ const responseError = error instanceof _prosopo_common.ProsopoApiError || error instanceof _prosopo_common.ProsopoBaseError && typeof error.context?.code === "number" ? error : new _prosopo_common.ProsopoApiError("API.UNKNOWN", {
26
+ context: { code: this.errorStatusCode },
27
+ silent: true
28
+ });
29
+ const { code, statusMessage, jsonError } = (0, _prosopo_common.unwrapError)(responseError, request.i18n);
30
+ response.statusMessage = statusMessage;
31
+ response.status(code).json({ error: jsonError });
26
32
  }
27
33
  }
28
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"apiExpressDefaultEndpointAdapter.d.ts","sourceRoot":"","sources":["../../src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,cAAM,gCAAiC,YAAW,yBAAyB;IAEzE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,MAAM;IAG5B,aAAa,CACzB,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,EAC1C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC;CA8BhB;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
1
+ {"version":3,"file":"apiExpressDefaultEndpointAdapter.d.ts","sourceRoot":"","sources":["../../src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,cAAM,gCAAiC,YAAW,yBAAyB;IAEzE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,MAAM;IAG5B,aAAa,CACzB,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,EAC1C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC;CAoDhB;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ProsopoApiError } from "@prosopo/common";
1
+ import { ProsopoApiError, ProsopoBaseError, unwrapError } from "@prosopo/common";
2
2
  import { stringifyBigInts } from "@prosopo/util";
3
3
  //#region src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts
4
4
  var ApiExpressDefaultEndpointAdapter = class {
@@ -21,7 +21,12 @@ var ApiExpressDefaultEndpointAdapter = class {
21
21
  response.json(responseObject);
22
22
  } catch (error) {
23
23
  request.logger.error(() => ({ err: error }));
24
- response.status(500).send("An internal server error occurred.");
24
+ const { code, statusMessage, jsonError } = unwrapError(error instanceof ProsopoApiError || error instanceof ProsopoBaseError && typeof error.context?.code === "number" ? error : new ProsopoApiError("API.UNKNOWN", {
25
+ context: { code: this.errorStatusCode },
26
+ silent: true
27
+ }), request.i18n);
28
+ response.statusMessage = statusMessage;
29
+ response.status(code).json({ error: jsonError });
25
30
  }
26
31
  }
27
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"apiExpressDefaultEndpointAdapter.js","sourceRoot":"","sources":["../../src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,gCAAgC;IACrC,YACkB,QAAkB,EAClB,eAAuB;QADvB,aAAQ,GAAR,QAAQ,CAAU;QAClB,oBAAe,GAAf,eAAe,CAAQ;IACtC,CAAC;IAEG,KAAK,CAAC,aAAa,CACzB,QAA0C,EAC1C,OAAgB,EAChB,QAAkB,EAClB,IAAkB;QAElB,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACJ,IAAI,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CACV,IAAI,eAAe,CAAC,iBAAiB,EAAE;gBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;aACpC,CAAC,CACF,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,cAAc,CACxD,IAAI,EACJ,OAAO,CAAC,MAAM,CACd,CAAC;YAGF,MAAM,cAAc,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YAE7D,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,GAAG,EAAE,KAAK;aACV,CAAC,CAAC,CAAC;YAEJ,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;CACD;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
1
+ {"version":3,"file":"apiExpressDefaultEndpointAdapter.js","sourceRoot":"","sources":["../../src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,WAAW,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,gCAAgC;IACrC,YACkB,QAAkB,EAClB,eAAuB;QADvB,aAAQ,GAAR,QAAQ,CAAU;QAClB,oBAAe,GAAf,eAAe,CAAQ;IACtC,CAAC;IAEG,KAAK,CAAC,aAAa,CACzB,QAA0C,EAC1C,OAAgB,EAChB,QAAkB,EAClB,IAAkB;QAElB,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACJ,IAAI,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CACV,IAAI,eAAe,CAAC,iBAAiB,EAAE;gBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;aACpC,CAAC,CACF,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,cAAc,CACxD,IAAI,EACJ,OAAO,CAAC,MAAM,CACd,CAAC;YAGF,MAAM,cAAc,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YAE7D,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,GAAG,EAAE,KAAK;aACV,CAAC,CAAC,CAAC;YASJ,MAAM,aAAa,GAClB,KAAK,YAAY,eAAe;gBAChC,CAAC,KAAK,YAAY,gBAAgB;oBACjC,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC;gBACxC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,eAAe,CAAC,aAAa,EAAE;oBACnC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE;oBACvC,MAAM,EAAE,IAAI;iBACZ,CAAC,CAAC;YAEN,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,WAAW,CACrD,aAAa,EACb,OAAO,CAAC,IAAI,CACZ,CAAC;YACF,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;CACD;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
@@ -141,18 +141,20 @@ describe("a body the schema rejects", () => {
141
141
  });
142
142
  });
143
143
  describe("an endpoint that fails", () => {
144
- test("is answered with a 500 and a generic message", async () => {
144
+ test("is answered with the adapter's error status and the json envelope", async () => {
145
145
  await harness.adapter.handleRequest(endpoint(undefined, async () => {
146
146
  throw new Error("database down");
147
147
  }), harness.request, harness.response, harness.next.fn);
148
148
  expect(harness.status).toHaveBeenCalledWith(500);
149
- expect(harness.send).toHaveBeenCalledWith("An internal server error occurred.");
149
+ expect(harness.json).toHaveBeenCalledWith({
150
+ error: expect.anything(),
151
+ });
150
152
  });
151
153
  test("does not leak the failure's message to the client", async () => {
152
154
  await harness.adapter.handleRequest(endpoint(undefined, async () => {
153
155
  throw new Error("connection string: postgres://user:secret@host");
154
156
  }), harness.request, harness.response, harness.next.fn);
155
- expect(String(harness.send.mock.calls[0]?.[0])).not.toContain("secret");
157
+ expect(JSON.stringify(harness.json.mock.calls[0]?.[0])).not.toContain("secret");
156
158
  });
157
159
  test("logs the failure against the request's logger", async () => {
158
160
  const failure = new Error("database down");
@@ -169,13 +171,21 @@ describe("an endpoint that fails", () => {
169
171
  }), harness.request, harness.response, harness.next.fn);
170
172
  expect(harness.next.calls).toHaveLength(0);
171
173
  });
172
- test("ignores the configured errorStatusCode and always answers 500", async () => {
174
+ test("answers with the configured errorStatusCode", async () => {
173
175
  harness = build({}, 503);
174
176
  await harness.adapter.handleRequest(endpoint(undefined, async () => {
175
177
  throw new Error("unavailable");
176
178
  }), harness.request, harness.response, harness.next.fn);
177
- expect(harness.status).toHaveBeenCalledWith(500);
178
- expect(harness.status).not.toHaveBeenCalledWith(503);
179
+ expect(harness.status).toHaveBeenCalledWith(503);
180
+ expect(harness.status).not.toHaveBeenCalledWith(500);
181
+ });
182
+ test("an error carrying its own status code keeps that code", async () => {
183
+ await harness.adapter.handleRequest(endpoint(undefined, async () => {
184
+ throw new ProsopoApiError("API.BAD_REQUEST", {
185
+ context: { code: 400 },
186
+ });
187
+ }), harness.request, harness.response, harness.next.fn);
188
+ expect(harness.status).toHaveBeenCalledWith(400);
179
189
  });
180
190
  test("a rejection with a non-Error value is handled just the same", async () => {
181
191
  await harness.adapter.handleRequest(endpoint(undefined, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"apiExpressDefaultEndpointAdapter.unit.test.js","sourceRoot":"","sources":["../../../src/tests/unit/apiExpressDefaultEndpointAdapter.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiExpressDefaultEndpointAdapter.unit.test.js","sourceRoot":"","sources":["../../../src/tests/unit/apiExpressDefaultEndpointAdapter.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAe,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAgB,CAAC,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,gCAAgC,EAAE,MAAM,2DAA2D,CAAC;AAC7G,OAAO,EAAoB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqBjE,MAAM,KAAK,GAAG,CAAC,OAAgB,EAAE,EAAE,eAAe,GAAG,GAAG,EAAW,EAAE;IACpE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAkC,CAAC;IACvD,MAAM,MAAM,GAAG;QACd,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAkC;QAC7C,KAAK,EAAE,EAAE,CAAC,EAAE,EAAkC;QAC9C,IAAI,EAAE,EAAE,CAAC,EAAE,EAAkC;KACxB,CAAC;IAEvB,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAkC,CAAC;IACrD,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAkC,CAAC;IACrD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAA8B,CAAC;IACnD,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAyB,CAAC;IAC/D,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO;QACN,OAAO,EAAE,IAAI,gCAAgC,CAC5C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAClB,eAAe,CACf;QACD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAwB;QAC/C,QAAQ;QACR,IAAI,EAAE,WAAW,EAAE;QACnB,MAAM;QACN,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,MAAM;KACN,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAChB,MAA2B,EAC3B,UAA8D,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,EAAE,yBAAyB,CAAC,OAAO;CACzC,CAAC,EACiC,EAAE,CAAC,CAAC;IACvC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM;IAClC,cAAc,EACb,EAAE,CAAC,EAAE,CAAqD,OAAO,CAAC;CACnE,CAAC,CAAC;AAEH,IAAI,OAAgB,CAAC;AAErB,UAAU,CAAC,GAAG,EAAE;IACf,OAAO,GAAG,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC/C,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QACjE,OAAO,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAGF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACjD,EAAE,KAAK,EAAE,CAAC,EAAE,EACZ,OAAO,CAAC,MAAM,CACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACjD,SAAS,EACT,OAAO,CAAC,MAAM,CACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/D,OAAO,CAAC,MAAM,CACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAClB,CAAC,CAAC,EACH,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;SAClB,CAAC,CAAC,EACH,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;SACnB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAGhE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE;SACR,CAAC,CAAC,EACH,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,MAAM,EAAE,yBAAyB,CAAC,OAAO;YACzC,IAAI,EAAE,EAAE;SACR,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QAGvE,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACjD,SAAS,EACT,OAAO,CAAC,MAAM,CACd,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,MAAM,EAAE,yBAAyB,CAAC,OAAO;SACzC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC5E,OAAO,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACtE,OAAO,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EACzC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,SAA4B,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QAG3F,MAAM,MAAM,GAAG;YACd,KAAK,EAAE,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC9C,CAAC;SACqB,CAAC;QAExB,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAIjF,MAAM,MAAM,GAAqC;YAChD,oBAAoB,EAAE,GAAG,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;YACD,cAAc,EACb,EAAE,CAAC,EAAE,EAAsD;SAC5D,CAAC;QAEF,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,MAAM,EACN,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACvC,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAGjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;SACxB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACnE,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CACpE,QAAQ,CACR,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,OAAO,CAAC;QACf,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAG9D,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QAGxE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE;gBAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;aACtB,CAAC,CAAC;QACJ,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,eAAe,CAAC;QACvB,CAAC,CAAC,EACF,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QAGzE,MAAM,OAAO,GAAwB;YACpC,IAAI,MAAM;gBACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpC,CAAC;SACD,CAAC;QACF,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,EACxC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/api-express-router",
3
- "version": "3.1.57",
3
+ "version": "3.1.59",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -26,13 +26,13 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@polkadot/util": "13.5.7",
29
- "@prosopo/api-route": "2.6.54",
30
- "@prosopo/common": "3.1.49",
31
- "@prosopo/logger": "2.0.5",
32
- "@prosopo/env": "3.6.26",
33
- "@prosopo/locale": "3.2.9",
34
- "@prosopo/types": "5.0.2",
35
- "@prosopo/util": "3.3.5",
29
+ "@prosopo/api-route": "2.6.55",
30
+ "@prosopo/common": "3.1.50",
31
+ "@prosopo/logger": "2.0.6",
32
+ "@prosopo/env": "3.6.28",
33
+ "@prosopo/locale": "3.3.0",
34
+ "@prosopo/types": "5.0.4",
35
+ "@prosopo/util": "3.3.6",
36
36
  "@prosopo/util-crypto": "13.5.30",
37
37
  "dotenv": "16.4.5",
38
38
  "express": "4.21.2",
@@ -41,7 +41,7 @@
41
41
  "zod": "3.23.8"
42
42
  },
43
43
  "devDependencies": {
44
- "@prosopo/config": "3.3.7",
44
+ "@prosopo/config": "3.3.8",
45
45
  "@types/node": "22.10.2",
46
46
  "vitest": "4.1.10"
47
47
  },
@@ -13,7 +13,11 @@
13
13
  // limitations under the License.
14
14
 
15
15
  import type { ApiEndpoint } from "@prosopo/api-route";
16
- import { ProsopoApiError } from "@prosopo/common";
16
+ import {
17
+ ProsopoApiError,
18
+ ProsopoBaseError,
19
+ unwrapError,
20
+ } from "@prosopo/common";
17
21
  import type { LogLevel } from "@prosopo/logger";
18
22
  import { stringifyBigInts } from "@prosopo/util";
19
23
  import type { NextFunction, Request, Response } from "express";
@@ -58,7 +62,29 @@ class ApiExpressDefaultEndpointAdapter implements ApiExpressEndpointAdapter {
58
62
  err: error,
59
63
  }));
60
64
 
61
- response.status(500).send("An internal server error occurred.");
65
+ // Errors that already carry an explicit HTTP status code (e.g. a 400
66
+ // admin auth/validation error) should surface that code with the
67
+ // standard `{ error: ... }` JSON envelope. Everything else — base
68
+ // errors without a status code, or non-Prosopo errors — is treated as
69
+ // an unexpected failure and mapped to this adapter's configured
70
+ // errorStatusCode. In both cases the envelope is produced by
71
+ // `unwrapError` so the message/key stay consistent and localised.
72
+ const responseError =
73
+ error instanceof ProsopoApiError ||
74
+ (error instanceof ProsopoBaseError &&
75
+ typeof error.context?.code === "number")
76
+ ? error
77
+ : new ProsopoApiError("API.UNKNOWN", {
78
+ context: { code: this.errorStatusCode },
79
+ silent: true,
80
+ });
81
+
82
+ const { code, statusMessage, jsonError } = unwrapError(
83
+ responseError,
84
+ request.i18n,
85
+ );
86
+ response.statusMessage = statusMessage;
87
+ response.status(code).json({ error: jsonError });
62
88
  }
63
89
  }
64
90
  }
@@ -290,7 +290,7 @@ describe("a body the schema rejects", () => {
290
290
  });
291
291
 
292
292
  describe("an endpoint that fails", () => {
293
- test("is answered with a 500 and a generic message", async () => {
293
+ test("is answered with the adapter's error status and the json envelope", async () => {
294
294
  await harness.adapter.handleRequest(
295
295
  endpoint(undefined, async () => {
296
296
  throw new Error("database down");
@@ -301,9 +301,11 @@ describe("an endpoint that fails", () => {
301
301
  );
302
302
 
303
303
  expect(harness.status).toHaveBeenCalledWith(500);
304
- expect(harness.send).toHaveBeenCalledWith(
305
- "An internal server error occurred.",
306
- );
304
+ // Every other route answers `{ error: ... }`; a plain-text body here meant
305
+ // a client parsing the envelope got a parse failure instead of the error.
306
+ expect(harness.json).toHaveBeenCalledWith({
307
+ error: expect.anything(),
308
+ });
307
309
  });
308
310
 
309
311
  test("does not leak the failure's message to the client", async () => {
@@ -315,7 +317,9 @@ describe("an endpoint that fails", () => {
315
317
  harness.response,
316
318
  harness.next.fn,
317
319
  );
318
- expect(String(harness.send.mock.calls[0]?.[0])).not.toContain("secret");
320
+ expect(JSON.stringify(harness.json.mock.calls[0]?.[0])).not.toContain(
321
+ "secret",
322
+ );
319
323
  });
320
324
 
321
325
  test("logs the failure against the request's logger", async () => {
@@ -346,10 +350,9 @@ describe("an endpoint that fails", () => {
346
350
  expect(harness.next.calls).toHaveLength(0);
347
351
  });
348
352
 
349
- test("ignores the configured errorStatusCode and always answers 500", async () => {
350
- // The constructor takes an errorStatusCode that the handler never reads.
351
- // Pinned here so the behaviour is visible rather than assumed; the fix
352
- // is in flight separately.
353
+ test("answers with the configured errorStatusCode", async () => {
354
+ // The admin router builds its adapter with 400, so a client error there
355
+ // used to surface as a 500 in plain text.
353
356
  harness = build({}, 503);
354
357
  await harness.adapter.handleRequest(
355
358
  endpoint(undefined, async () => {
@@ -359,8 +362,24 @@ describe("an endpoint that fails", () => {
359
362
  harness.response,
360
363
  harness.next.fn,
361
364
  );
362
- expect(harness.status).toHaveBeenCalledWith(500);
363
- expect(harness.status).not.toHaveBeenCalledWith(503);
365
+ expect(harness.status).toHaveBeenCalledWith(503);
366
+ expect(harness.status).not.toHaveBeenCalledWith(500);
367
+ });
368
+
369
+ test("an error carrying its own status code keeps that code", async () => {
370
+ // A ProsopoApiError already knows what it is; overwriting its code with
371
+ // the adapter's default turned a 400 into a 500.
372
+ await harness.adapter.handleRequest(
373
+ endpoint(undefined, async () => {
374
+ throw new ProsopoApiError("API.BAD_REQUEST", {
375
+ context: { code: 400 },
376
+ });
377
+ }),
378
+ harness.request,
379
+ harness.response,
380
+ harness.next.fn,
381
+ );
382
+ expect(harness.status).toHaveBeenCalledWith(400);
364
383
  });
365
384
 
366
385
  test("a rejection with a non-Error value is handled just the same", async () => {