@prosopo/api-express-router 3.1.98 → 3.2.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 (48) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +7 -9
  2. package/.turbo/turbo-build$colon$tsc.log +21 -24
  3. package/.turbo/turbo-build.log +7 -12
  4. package/CHANGELOG.md +54 -0
  5. package/LICENSE +201 -0
  6. package/dist/cjs/index.cjs +2 -0
  7. package/dist/cjs/middlewares/authMiddleware.cjs +25 -14
  8. package/dist/cjs/middlewares/jwtReplayGuard.cjs +28 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/middlewares/authMiddleware.d.ts +7 -1
  14. package/dist/middlewares/authMiddleware.d.ts.map +1 -1
  15. package/dist/middlewares/authMiddleware.js +26 -15
  16. package/dist/middlewares/authMiddleware.js.map +1 -1
  17. package/dist/middlewares/jwtReplayGuard.d.ts +5 -0
  18. package/dist/middlewares/jwtReplayGuard.d.ts.map +1 -0
  19. package/dist/middlewares/jwtReplayGuard.js +28 -0
  20. package/dist/middlewares/jwtReplayGuard.js.map +1 -0
  21. package/dist/tests/apiExpressRouter.test-d.js +1 -1
  22. package/dist/tests/apiExpressRouter.test-d.js.map +1 -1
  23. package/dist/tests/unit/middlewares/authMiddleware.unit.test.js +94 -8
  24. package/dist/tests/unit/middlewares/authMiddleware.unit.test.js.map +1 -1
  25. package/dist/tests/unit/middlewares/jwtReplayGuard.unit.test.d.ts +2 -0
  26. package/dist/tests/unit/middlewares/jwtReplayGuard.unit.test.d.ts.map +1 -0
  27. package/dist/tests/unit/middlewares/jwtReplayGuard.unit.test.js +36 -0
  28. package/dist/tests/unit/middlewares/jwtReplayGuard.unit.test.js.map +1 -0
  29. package/package.json +62 -59
  30. package/src/apiExpressRouterFactory.ts +0 -68
  31. package/src/endpointAdapter/apiExpressDefaultEndpointAdapter.ts +0 -92
  32. package/src/endpointAdapter/apiExpressEndpointAdapter.ts +0 -28
  33. package/src/errorHandler.ts +0 -33
  34. package/src/index.ts +0 -37
  35. package/src/middlewares/authMiddleware.ts +0 -93
  36. package/src/middlewares/requestLoggerMiddleware.ts +0 -104
  37. package/src/tests/apiExpressRouter.test-d.ts +0 -190
  38. package/src/tests/unit/apiExpressDefaultEndpointAdapter.unit.test.ts +0 -414
  39. package/src/tests/unit/apiExpressRouterFactory.unit.test.ts +0 -215
  40. package/src/tests/unit/errorHandler.unit.test.ts +0 -190
  41. package/src/tests/unit/index.unit.test.ts +0 -95
  42. package/src/tests/unit/middlewares/authMiddleware.unit.test.ts +0 -342
  43. package/src/tests/unit/middlewares/requestLoggerMiddleware.unit.test.ts +0 -368
  44. package/src/tests/unit/testDoubles.ts +0 -39
  45. package/tsconfig.cjs.json +0 -37
  46. package/tsconfig.json +0 -44
  47. package/tsconfig.tsbuildinfo +0 -1
  48. package/tsconfig.types.json +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/middlewares/authMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,IAA6B,EAC7B,WAAqC,EACpC,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,KAAkC,CAAC;YAEvC,IAAI,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,EAAE,CAAC;gBACP,OAAO;YACR,CAAC;YAED,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,EAAE,CAAC;gBACP,OAAO;YACR,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,IAAI,eAAe,CAAC,KAAK,IAAI,kBAAkB,EAAE;oBACvD,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;iBACtC,CAAC;aACF,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9D,OAAO;QACR,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,EAAE;IACnC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAE1E,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,eAAe,CAAC,6BAA6B,EAAE;YACxD,OAAO,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,GAAG,EAAE;SAC7D,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE;YAChD,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE;SAC5C,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,GAAU,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAiB,EACjB,OAAe,EACf,IAAiB,EAChB,EAAE;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;YACtD,OAAO,EAAE;gBACR,KAAK,EAAE,+BAA+B;gBACtC,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO;gBACP,SAAS;aACT;SACD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/middlewares/authMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoBxE,MAAM,UAAU,GAAG,CAClB,GAA4B,EAC5B,GAAQ,EACR,OAA8B,EACA,EAAE;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAChB,MAAuB,EACvB,OAA8B,EACpB,EAAE;IACZ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAChC,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAC/B,OAAO,CAAC,GAAG,CACX,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,IAA6B,EAC7B,WAAqC,EACrC,UAAiC,EAAE,EAClC,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAE5B,MAAM,QAAQ,GACb,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAEzE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9C,IAAI,EAAE,CAAC;gBACP,OAAO;YACR,CAAC;YAED,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAC3C,OAAO;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAGhE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,OAAO;QACR,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAkB,EAAE,CACzD,GAAG,YAAY,gBAAgB;IAC/B,GAAG,CAAC,cAAc,KAAK,SAAS;IAChC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;IACnC,CAAC,CAAC,GAAG,CAAC,cAAc;IACpB,CAAC,CAAC,kBAAkB,CAAC;AAEvB,MAAM,YAAY,GAAG,CACpB,GAAY,EACZ,GAAa,EACb,GAAmB,EACZ,EAAE;IACT,MAAM,IAAI,GAA4B;QACrC,KAAK,EAAE;YACN,IAAI,EAAE,GAAG;YACT,GAAG;YACH,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;SACzC;KACD,CAAC;IACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,EAAE;IACnC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAE1E,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,eAAe,CAAC,6BAA6B,EAAE;YACxD,OAAO,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,GAAG,EAAE;SAC7D,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE;YAChD,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE;SAC5C,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,GAAU,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAiB,EACjB,OAAe,EACf,IAAiB,EAChB,EAAE;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;YACtD,OAAO,EAAE;gBACR,KAAK,EAAE,+BAA+B;gBACtC,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO;gBACP,SAAS;aACT;SACD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface JwtReplayGuard {
2
+ claim(id: string, expiresAtSeconds: number): boolean;
3
+ }
4
+ export declare const createMemoryJwtReplayGuard: (maxEntries?: number, nowSeconds?: () => number) => JwtReplayGuard;
5
+ //# sourceMappingURL=jwtReplayGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtReplayGuard.d.ts","sourceRoot":"","sources":["../../src/middlewares/jwtReplayGuard.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAK9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;CACrD;AAOD,eAAO,MAAM,0BAA0B,qCAE1B,MAAM,MAAM,KACtB,cAyBF,CAAC"}
@@ -0,0 +1,28 @@
1
+ //#region src/middlewares/jwtReplayGuard.ts
2
+ /**
3
+ * Per-process set of token ids seen until their expiry. Only tokens signed by
4
+ * an admin key reach it, so the size cap guards against a misbehaving issuer
5
+ * rather than an attacker; when full the oldest entry is dropped.
6
+ */
7
+ var createMemoryJwtReplayGuard = (maxEntries = 1e4, nowSeconds = () => Date.now() / 1e3) => {
8
+ const seen = /* @__PURE__ */ new Map();
9
+ const sweep = (now) => {
10
+ for (const [id, exp] of seen) if (exp < now) seen.delete(id);
11
+ };
12
+ return { claim(id, expiresAtSeconds) {
13
+ const now = nowSeconds();
14
+ const previous = seen.get(id);
15
+ if (previous !== void 0 && previous >= now) return false;
16
+ if (seen.size >= maxEntries) {
17
+ sweep(now);
18
+ if (seen.size >= maxEntries) {
19
+ const oldest = seen.keys().next();
20
+ if (!oldest.done) seen.delete(oldest.value);
21
+ }
22
+ }
23
+ seen.set(id, expiresAtSeconds);
24
+ return true;
25
+ } };
26
+ };
27
+ //#endregion
28
+ export { createMemoryJwtReplayGuard };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtReplayGuard.js","sourceRoot":"","sources":["../../src/middlewares/jwtReplayGuard.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACzC,UAAU,GAAG,MAAM,EACnB,aAA2B,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EACjC,EAAE;IACnB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QACnC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,GAAG;gBAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACF,CAAC,CAAC;IAEF,OAAO;QACN,KAAK,CAAC,EAAU,EAAE,gBAAwB;YACzC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,IAAI,GAAG;gBAAE,OAAO,KAAK,CAAC;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,IAAI;wBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -41,7 +41,7 @@ describe("the endpoint adapter interface", () => {
41
41
  });
42
42
  });
43
43
  describe("the middleware", () => {
44
- test("authMiddleware takes an optional pair and an optional auth account", () => {
44
+ test("authMiddleware takes an optional pair, auth account and options", () => {
45
45
  expectTypeOf(authMiddleware).parameters.toEqualTypeOf();
46
46
  });
47
47
  test("authMiddleware returns an async express handler", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"apiExpressRouter.test-d.js","sourceRoot":"","sources":["../../src/tests/apiExpressRouter.test-d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiExpressRouter.test-d.js","sourceRoot":"","sources":["../../src/tests/apiExpressRouter.test-d.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { ProsopoApiError } from "@prosopo/common";
2
2
  import { beforeEach, describe, expect, test, vi } from "vitest";
3
3
  import { authMiddleware, verifySignature, } from "../../../middlewares/authMiddleware.js";
4
+ import { createMemoryJwtReplayGuard } from "../../../middlewares/jwtReplayGuard.js";
4
5
  import { captureNext } from "../testDoubles.js";
5
6
  const pairThat = (verify) => ({
6
7
  jwtVerify: vi.fn(verify),
@@ -13,7 +14,7 @@ const rejects = () => pairThat(() => ({ isValid: false }));
13
14
  const explodes = () => pairThat(() => {
14
15
  throw new Error("verifier unavailable");
15
16
  });
16
- const build = (headers = {}) => {
17
+ const build = (headers = {}, i18n) => {
17
18
  const json = vi.fn();
18
19
  const status = vi.fn();
19
20
  const res = { status, json };
@@ -21,6 +22,7 @@ const build = (headers = {}) => {
21
22
  const logged = vi.fn();
22
23
  const req = {
23
24
  headers,
25
+ i18n,
24
26
  logger: { error: logged },
25
27
  };
26
28
  return { req, res, next: captureNext(), status, json, logged };
@@ -32,8 +34,8 @@ let harness;
32
34
  beforeEach(() => {
33
35
  harness = build(bearer("token-1"));
34
36
  });
35
- const run = async (pair, authAccount) => {
36
- await authMiddleware(pair, authAccount)(harness.req, harness.res, harness.next.fn);
37
+ const run = async (pair, authAccount, options) => {
38
+ await authMiddleware(pair, authAccount, options)(harness.req, harness.res, harness.next.fn);
37
39
  };
38
40
  describe("a token one of the keys accepts", () => {
39
41
  test("passes the request through on the auth account", async () => {
@@ -61,7 +63,7 @@ describe("a token one of the keys accepts", () => {
61
63
  test("hands the verifier the token without its Bearer prefix", async () => {
62
64
  const pair = accepts();
63
65
  await run(pair, undefined);
64
- expect(pair.jwtVerify).toHaveBeenCalledWith("token-1");
66
+ expect(pair.jwtVerify).toHaveBeenCalledWith("token-1", undefined);
65
67
  });
66
68
  });
67
69
  describe("a token neither key accepts", () => {
@@ -74,7 +76,55 @@ describe("a token neither key accepts", () => {
74
76
  });
75
77
  test("is answered with an error body carrying the 401 code", () => {
76
78
  const body = harness.json.mock.calls[0]?.[0];
77
- expect(body.error.context?.code).toBe(401);
79
+ expect(body.error).toEqual({
80
+ code: 401,
81
+ key: "API.UNAUTHORIZED",
82
+ message: "API.UNAUTHORIZED",
83
+ });
84
+ });
85
+ test("does not serialise the request's i18n instance or error context", () => {
86
+ harness = build(bearer("token-1"), { t: (key) => `t:${key}` });
87
+ return run(rejects(), rejects()).then(() => {
88
+ const body = harness.json.mock.calls[0]?.[0];
89
+ expect(JSON.stringify(body)).not.toContain("context");
90
+ expect(body).toEqual({
91
+ error: {
92
+ code: 401,
93
+ key: "API.UNAUTHORIZED",
94
+ message: "t:API.UNAUTHORIZED",
95
+ },
96
+ });
97
+ });
98
+ });
99
+ });
100
+ describe("the 401 body for a thrown error", () => {
101
+ test("does not echo what a verifier threw", async () => {
102
+ const leaky = pairThat(() => {
103
+ throw new Error("mongodb://admin:hunter2@10.0.0.5/provider");
104
+ });
105
+ await run(leaky, undefined);
106
+ const body = harness.json.mock.calls[0]?.[0];
107
+ expect(JSON.stringify(body)).not.toContain("hunter2");
108
+ expect(body).toEqual({
109
+ error: {
110
+ code: 401,
111
+ key: "API.UNAUTHORIZED",
112
+ message: "API.UNAUTHORIZED",
113
+ },
114
+ });
115
+ });
116
+ test("reports only the translation key of a Prosopo error", async () => {
117
+ harness = build({});
118
+ await run(accepts(), undefined);
119
+ const body = harness.json.mock.calls[0]?.[0];
120
+ expect(JSON.stringify(body)).not.toContain("Missing Authorization header");
121
+ expect(body).toEqual({
122
+ error: {
123
+ code: 401,
124
+ key: "GENERAL.MISSING_AUTH_HEADER",
125
+ message: "GENERAL.MISSING_AUTH_HEADER",
126
+ },
127
+ });
78
128
  });
79
129
  });
80
130
  describe("a request with no usable credentials", () => {
@@ -124,21 +174,21 @@ describe("header handling quirks worth pinning down", () => {
124
174
  harness = build({ authorization: "token-1" });
125
175
  const pair = accepts();
126
176
  await run(pair, undefined);
127
- expect(pair.jwtVerify).toHaveBeenCalledWith("token-1");
177
+ expect(pair.jwtVerify).toHaveBeenCalledWith("token-1", undefined);
128
178
  expect(harness.next.calls).toHaveLength(1);
129
179
  });
130
180
  test("a capitalised Authorization key is read as well as the lowercase one", async () => {
131
181
  harness = build({ Authorization: "Bearer token-1" });
132
182
  const pair = accepts();
133
183
  await run(pair, undefined);
134
- expect(pair.jwtVerify).toHaveBeenCalledWith("token-1");
184
+ expect(pair.jwtVerify).toHaveBeenCalledWith("token-1", undefined);
135
185
  expect(harness.next.calls).toHaveLength(1);
136
186
  });
137
187
  test("a Bearer prefix appearing inside the token is also stripped", async () => {
138
188
  harness = build({ authorization: "abcBearer xyz" });
139
189
  const pair = accepts();
140
190
  await run(pair, undefined);
141
- expect(pair.jwtVerify).toHaveBeenCalledWith("abcxyz");
191
+ expect(pair.jwtVerify).toHaveBeenCalledWith("abcxyz", undefined);
142
192
  });
143
193
  });
144
194
  describe("a verifier that throws", () => {
@@ -215,4 +265,40 @@ describe("verifySignature", () => {
215
265
  expect(pair.verify).toHaveBeenCalledWith("", new Uint8Array([1, 2]), pair.publicKey);
216
266
  });
217
267
  });
268
+ describe("admin token claim options", () => {
269
+ const payload = (jti) => ({
270
+ sub: "0x01",
271
+ iat: 1,
272
+ exp: Date.now() / 1000 + 300,
273
+ ...(jti ? { jti } : {}),
274
+ });
275
+ test("passes the verify options to the key", async () => {
276
+ const pair = accepts();
277
+ const verify = { audience: ["https://p1.example"] };
278
+ await run(pair, undefined, { verify });
279
+ expect(pair.jwtVerify).toHaveBeenCalledWith("token-1", verify);
280
+ });
281
+ test("a token with a jti is accepted once and refused on replay", async () => {
282
+ const pair = pairThat(() => ({ isValid: true, payload: payload("n-1") }));
283
+ const options = {
284
+ replayGuard: createMemoryJwtReplayGuard(),
285
+ };
286
+ await run(pair, undefined, options);
287
+ expect(harness.next.calls).toHaveLength(1);
288
+ harness = build(bearer("token-1"));
289
+ await run(pair, undefined, options);
290
+ expect(harness.next.calls).toHaveLength(0);
291
+ expect(harness.status).toHaveBeenCalledWith(401);
292
+ });
293
+ test("a token without a jti can still be reused", async () => {
294
+ const pair = pairThat(() => ({ isValid: true, payload: payload() }));
295
+ const options = {
296
+ replayGuard: createMemoryJwtReplayGuard(),
297
+ };
298
+ await run(pair, undefined, options);
299
+ harness = build(bearer("token-1"));
300
+ await run(pair, undefined, options);
301
+ expect(harness.next.calls).toHaveLength(1);
302
+ });
303
+ });
218
304
  //# sourceMappingURL=authMiddleware.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authMiddleware.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/middlewares/authMiddleware.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authMiddleware.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/middlewares/authMiddleware.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jwtReplayGuard.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtReplayGuard.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit/middlewares/jwtReplayGuard.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { createMemoryJwtReplayGuard } from "../../../middlewares/jwtReplayGuard.js";
3
+ describe("createMemoryJwtReplayGuard", () => {
4
+ test("accepts an id once and refuses it until it expires", () => {
5
+ let now = 1000;
6
+ const guard = createMemoryJwtReplayGuard(10, () => now);
7
+ expect(guard.claim("a", 1300)).toBe(true);
8
+ expect(guard.claim("a", 1300)).toBe(false);
9
+ now = 1301;
10
+ expect(guard.claim("a", 1600)).toBe(true);
11
+ });
12
+ test("tracks ids independently", () => {
13
+ const guard = createMemoryJwtReplayGuard(10, () => 0);
14
+ expect(guard.claim("a", 100)).toBe(true);
15
+ expect(guard.claim("b", 100)).toBe(true);
16
+ expect(guard.claim("b", 100)).toBe(false);
17
+ });
18
+ test("drops expired entries before evicting live ones when full", () => {
19
+ let now = 0;
20
+ const guard = createMemoryJwtReplayGuard(2, () => now);
21
+ guard.claim("short", 10);
22
+ guard.claim("long", 1000);
23
+ now = 20;
24
+ expect(guard.claim("new", 1000)).toBe(true);
25
+ expect(guard.claim("long", 1000)).toBe(false);
26
+ });
27
+ test("evicts the oldest live entry rather than growing past the cap", () => {
28
+ const guard = createMemoryJwtReplayGuard(2, () => 0);
29
+ guard.claim("a", 100);
30
+ guard.claim("b", 100);
31
+ guard.claim("c", 100);
32
+ expect(guard.claim("a", 100)).toBe(true);
33
+ expect(guard.claim("c", 100)).toBe(false);
34
+ });
35
+ });
36
+ //# sourceMappingURL=jwtReplayGuard.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtReplayGuard.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/middlewares/jwtReplayGuard.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,0BAA0B,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,GAAG,GAAG,IAAI,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,0BAA0B,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACtE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,KAAK,GAAG,0BAA0B,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACvD,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1B,GAAG,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAC1E,MAAM,KAAK,GAAG,0BAA0B,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,60 +1,63 @@
1
1
  {
2
- "name": "@prosopo/api-express-router",
3
- "version": "3.1.98",
4
- "main": "dist/index.js",
5
- "types": "dist/index.d.ts",
6
- "type": "module",
7
- "engines": {
8
- "node": "^24",
9
- "npm": "^11"
10
- },
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js",
15
- "require": "./dist/cjs/index.cjs"
16
- }
17
- },
18
- "scripts": {
19
- "clean": "del-cli --verbose dist tsconfig.tsbuildinfo",
20
- "build": "npm run build:cross-env -- --mode ${NODE_ENV:-development}",
21
- "build:cross-env": "vite build --config vite.esm.config.ts",
22
- "build:tsc": "tsc --build --verbose",
23
- "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV",
24
- "typecheck": "tsc --project tsconfig.types.json",
25
- "test": "NODE_ENV=${NODE_ENV:-test}; npx vitest run --config ./vite.test.config.ts"
26
- },
27
- "dependencies": {
28
- "@polkadot/util": "14.0.3",
29
- "@prosopo/api-route": "2.6.61",
30
- "@prosopo/common": "3.1.60",
31
- "@prosopo/logger": "2.1.1",
32
- "@prosopo/env": "3.6.67",
33
- "@prosopo/locale": "3.6.1",
34
- "@prosopo/types": "5.11.1",
35
- "@prosopo/util": "3.3.12",
36
- "@prosopo/util-crypto": "13.5.33",
37
- "dotenv": "16.4.5",
38
- "express": "4.22.2",
39
- "i18next": "26.4.2",
40
- "uuid": "14.0.2",
41
- "zod": "3.23.8"
42
- },
43
- "devDependencies": {
44
- "@prosopo/config": "3.4.2",
45
- "@types/node": "22.10.2",
46
- "vitest": "4.1.11"
47
- },
48
- "author": "PROSOPO LIMITED <info@prosopo.io>",
49
- "license": "Apache-2.0",
50
- "bugs": {
51
- "url": "https://github.com/prosopo/captcha/issues"
52
- },
53
- "homepage": "https://github.com/prosopo/captcha#readme",
54
- "sideEffects": false,
55
- "repository": {
56
- "type": "git",
57
- "url": "git+https://github.com/prosopo/captcha.git",
58
- "directory": "packages/api-express-router"
59
- }
60
- }
2
+ "name": "@prosopo/api-express-router",
3
+ "version": "3.2.1",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": "^24"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/cjs/index.cjs"
15
+ }
16
+ },
17
+ "dependencies": {
18
+ "@polkadot/util": "14.0.3",
19
+ "@prosopo/api-route": "2.6.63",
20
+ "@prosopo/common": "3.1.62",
21
+ "@prosopo/logger": "2.1.3",
22
+ "@prosopo/env": "3.6.69",
23
+ "@prosopo/locale": "3.7.0",
24
+ "@prosopo/types": "5.13.0",
25
+ "@prosopo/util": "3.3.14",
26
+ "@prosopo/util-crypto": "13.6.0",
27
+ "dotenv": "16.4.5",
28
+ "express": "4.22.2",
29
+ "i18next": "26.4.2",
30
+ "uuid": "14.0.2",
31
+ "zod": "3.23.8"
32
+ },
33
+ "devDependencies": {
34
+ "@prosopo/config": "3.4.3",
35
+ "@types/express": "4.17.25",
36
+ "@types/node": "22.10.2",
37
+ "del-cli": "6.0.0",
38
+ "typescript": "5.6.2",
39
+ "vite": "8.1.5",
40
+ "vitest": "4.1.11"
41
+ },
42
+ "author": "PROSOPO LIMITED <info@prosopo.io>",
43
+ "license": "Apache-2.0",
44
+ "bugs": {
45
+ "url": "https://github.com/prosopo/captcha/issues"
46
+ },
47
+ "homepage": "https://github.com/prosopo/captcha#readme",
48
+ "sideEffects": false,
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/prosopo/captcha.git",
52
+ "directory": "packages/api-express-router"
53
+ },
54
+ "scripts": {
55
+ "clean": "del-cli --verbose dist tsconfig.tsbuildinfo",
56
+ "build": "pnpm run build:cross-env --mode ${NODE_ENV:-development}",
57
+ "build:cross-env": "vite build --config vite.esm.config.ts",
58
+ "build:tsc": "tsc --build --verbose",
59
+ "build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV",
60
+ "typecheck": "tsc --project tsconfig.types.json",
61
+ "test": "NODE_ENV=${NODE_ENV:-test}; pnpm exec vitest run --config ./vite.test.config.ts"
62
+ }
63
+ }
@@ -1,68 +0,0 @@
1
- // Copyright 2021-2026 Prosopo (UK) Ltd.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- import type { ApiRoutes, ApiRoutesProvider } from "@prosopo/api-route";
16
- import {
17
- type NextFunction,
18
- type Request,
19
- type Response,
20
- Router,
21
- } from "express";
22
- import type { ApiExpressEndpointAdapter } from "./endpointAdapter/apiExpressEndpointAdapter.js";
23
- import { handleErrors } from "./errorHandler.js";
24
-
25
- class ApiExpressRouterFactory {
26
- public createRouter(
27
- routersProvider: ApiRoutesProvider,
28
- apiEndpointAdapter: ApiExpressEndpointAdapter,
29
- ): Router {
30
- const router = Router();
31
- const apiRoutes = routersProvider.getRoutes();
32
-
33
- this.registerRoutes(router, apiRoutes, apiEndpointAdapter);
34
-
35
- // Your error handler should always be at the end of your application stack. Apparently it means not only after all
36
- // app.use() but also after all your app.get() and app.post() calls.
37
- // https://stackoverflow.com/a/62358794/1178971
38
- router.use(handleErrors);
39
-
40
- return router;
41
- }
42
-
43
- protected registerRoutes(
44
- router: Router,
45
- routes: ApiRoutes,
46
- apiEndpointAdapter: ApiExpressEndpointAdapter,
47
- ): void {
48
- for (const [route, endpoint] of Object.entries(routes)) {
49
- router.post(
50
- route,
51
- async (
52
- request: Request,
53
- response: Response,
54
- next: NextFunction,
55
- ): Promise<void> => {
56
- return await apiEndpointAdapter.handleRequest(
57
- endpoint,
58
- request,
59
- response,
60
- next,
61
- );
62
- },
63
- );
64
- }
65
- }
66
- }
67
-
68
- export { ApiExpressRouterFactory };