@prosopo/provider 5.8.1 → 5.10.0

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 (110) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +18 -13
  2. package/.turbo/turbo-build$colon$tsc.log +29 -26
  3. package/.turbo/turbo-build.log +22 -17
  4. package/CHANGELOG.md +153 -0
  5. package/dist/api/blacklistRequestInspector.d.ts +1 -1
  6. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  7. package/dist/api/blacklistRequestInspector.js +4 -2
  8. package/dist/api/blacklistRequestInspector.js.map +1 -1
  9. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  10. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +36 -3
  11. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  12. package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
  13. package/dist/api/captcha/getImageCaptchaChallenge.js +3 -1
  14. package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
  15. package/dist/api/captcha/signedAssetsResolver.d.ts +20 -0
  16. package/dist/api/captcha/signedAssetsResolver.d.ts.map +1 -0
  17. package/dist/api/captcha/signedAssetsResolver.js +53 -0
  18. package/dist/api/captcha/signedAssetsResolver.js.map +1 -0
  19. package/dist/api/healthzGeo.d.ts +54 -0
  20. package/dist/api/healthzGeo.d.ts.map +1 -0
  21. package/dist/api/healthzGeo.js +205 -0
  22. package/dist/api/healthzGeo.js.map +1 -0
  23. package/dist/api/metrics.d.ts +3 -0
  24. package/dist/api/metrics.d.ts.map +1 -1
  25. package/dist/api/metrics.js +11 -1
  26. package/dist/api/metrics.js.map +1 -1
  27. package/dist/api/public.d.ts.map +1 -1
  28. package/dist/api/public.js +13 -3
  29. package/dist/api/public.js.map +1 -1
  30. package/dist/api/verify.d.ts.map +1 -1
  31. package/dist/api/verify.js +83 -0
  32. package/dist/api/verify.js.map +1 -1
  33. package/dist/cjs/api/blacklistRequestInspector.cjs +4 -2
  34. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +36 -3
  35. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +3 -1
  36. package/dist/cjs/api/captcha/signedAssetsResolver.cjs +54 -0
  37. package/dist/cjs/api/healthzGeo.cjs +209 -0
  38. package/dist/cjs/api/metrics.cjs +11 -0
  39. package/dist/cjs/api/public.cjs +13 -2
  40. package/dist/cjs/api/verify.cjs +83 -0
  41. package/dist/cjs/tasks/detection/getBotScore.cjs +3 -1
  42. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +95 -2
  43. package/dist/cjs/tasks/frictionless/ipMatch.cjs +45 -0
  44. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +1 -1
  45. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +1 -1
  46. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +1 -1
  47. package/dist/tasks/detection/getBotScore.d.ts +2 -0
  48. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  49. package/dist/tasks/detection/getBotScore.js +3 -1
  50. package/dist/tasks/detection/getBotScore.js.map +1 -1
  51. package/dist/tasks/frictionless/frictionlessTasks.d.ts +6 -0
  52. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  53. package/dist/tasks/frictionless/frictionlessTasks.js +96 -3
  54. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  55. package/dist/tasks/frictionless/ipMatch.d.ts +3 -0
  56. package/dist/tasks/frictionless/ipMatch.d.ts.map +1 -0
  57. package/dist/tasks/frictionless/ipMatch.js +45 -0
  58. package/dist/tasks/frictionless/ipMatch.js.map +1 -0
  59. package/dist/tasks/frictionless/routingMachine.d.ts +1 -0
  60. package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
  61. package/dist/tasks/frictionless/routingMachine.js.map +1 -1
  62. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +1 -1
  63. package/dist/tasks/powCaptcha/powTasks.js +1 -1
  64. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +1 -1
  65. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +3 -1
  66. package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
  67. package/dist/tests/integration/clientSettingsPersistence.integration.test.js +2 -1
  68. package/dist/tests/integration/clientSettingsPersistence.integration.test.js.map +1 -1
  69. package/dist/tests/integration/trafficFilterHierarchy.integration.test.js +1 -0
  70. package/dist/tests/integration/trafficFilterHierarchy.integration.test.js.map +1 -1
  71. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.d.ts +2 -0
  72. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.d.ts.map +1 -0
  73. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js +449 -0
  74. package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js.map +1 -0
  75. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js +2 -1
  76. package/dist/tests/unit/api/admin/apiRegisterSiteKeyEndpoint.unit.test.js.map +1 -1
  77. package/dist/tests/unit/api/healthzGeo.unit.test.d.ts +2 -0
  78. package/dist/tests/unit/api/healthzGeo.unit.test.d.ts.map +1 -0
  79. package/dist/tests/unit/api/healthzGeo.unit.test.js +272 -0
  80. package/dist/tests/unit/api/healthzGeo.unit.test.js.map +1 -0
  81. package/dist/tests/unit/api/public.unit.test.js +132 -2
  82. package/dist/tests/unit/api/public.unit.test.js.map +1 -1
  83. package/dist/tests/unit/services/ipComparison.unit.test.js +2 -0
  84. package/dist/tests/unit/services/ipComparison.unit.test.js.map +1 -1
  85. package/dist/tests/unit/signedAssetsResolver.unit.test.d.ts +2 -0
  86. package/dist/tests/unit/signedAssetsResolver.unit.test.d.ts.map +1 -0
  87. package/dist/tests/unit/signedAssetsResolver.unit.test.js +77 -0
  88. package/dist/tests/unit/signedAssetsResolver.unit.test.js.map +1 -0
  89. package/dist/tests/unit/tasks/captchaManager.unit.test.js +2 -1
  90. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  91. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +35 -0
  92. package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -1
  93. package/dist/tests/unit/tasks/frictionless/ipMatch.unit.test.d.ts +2 -0
  94. package/dist/tests/unit/tasks/frictionless/ipMatch.unit.test.d.ts.map +1 -0
  95. package/dist/tests/unit/tasks/frictionless/ipMatch.unit.test.js +107 -0
  96. package/dist/tests/unit/tasks/frictionless/ipMatch.unit.test.js.map +1 -0
  97. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +88 -1
  98. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -1
  99. package/dist/tests/unit/tasks/puzzleMaxDifficultyMatchesLadder.unit.test.d.ts +2 -0
  100. package/dist/tests/unit/tasks/puzzleMaxDifficultyMatchesLadder.unit.test.d.ts.map +1 -0
  101. package/dist/tests/unit/tasks/puzzleMaxDifficultyMatchesLadder.unit.test.js +16 -0
  102. package/dist/tests/unit/tasks/puzzleMaxDifficultyMatchesLadder.unit.test.js.map +1 -0
  103. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts.map +1 -1
  104. package/dist/tests/unit/testUtils/mockProviderEnv.js +1 -0
  105. package/dist/tests/unit/testUtils/mockProviderEnv.js.map +1 -1
  106. package/dist/tests/unit/util.ipDistance.unit.test.js +1 -0
  107. package/dist/tests/unit/util.ipDistance.unit.test.js.map +1 -1
  108. package/dist/util.d.ts.map +1 -1
  109. package/dist/util.js.map +1 -1
  110. package/package.json +16 -14
@@ -0,0 +1,272 @@
1
+ import { IpInfoService, } from "@prosopo/ipinfo";
2
+ import { afterEach, describe, expect, it, vi } from "vitest";
3
+ import { HealthzGeoRouter, TargetHealthMonitor, getHealthzGeoRouter, readHealthzGeoConfig, resetHealthzGeoRouter, } from "../../../api/healthzGeo.js";
4
+ const OWN_HOST = "node-a.example.com";
5
+ const TARGET_HOST = "node-b.example.com";
6
+ const CLIENT_IP = "8.8.8.8";
7
+ const ipInfo = (options) => ({
8
+ initialize: vi.fn(async () => { }),
9
+ lookup: vi.fn(async () => {
10
+ throw new Error("lookup() must not be called by healthz");
11
+ }),
12
+ country: vi.fn(() => options.country),
13
+ isAvailable: vi.fn(() => options.available ?? true),
14
+ });
15
+ const config = (overrides = {}) => ({
16
+ enabled: true,
17
+ routes: new Map([["US", TARGET_HOST]]),
18
+ probeIntervalMs: 30_000,
19
+ probeTimeoutMs: 2_000,
20
+ ...overrides,
21
+ });
22
+ const monitorWith = (...upHosts) => {
23
+ const monitor = new TargetHealthMonitor({
24
+ hosts: upHosts,
25
+ intervalMs: 30_000,
26
+ timeoutMs: 2_000,
27
+ probe: vi.fn(async () => true),
28
+ });
29
+ return monitor;
30
+ };
31
+ const readyMonitor = async (...upHosts) => {
32
+ const monitor = monitorWith(...upHosts);
33
+ await monitor.pollAll();
34
+ return monitor;
35
+ };
36
+ describe("readHealthzGeoConfig", () => {
37
+ it("is disabled when nothing is set", () => {
38
+ expect(readHealthzGeoConfig({}).enabled).toBe(false);
39
+ });
40
+ it("is disabled when the flag is set to anything but 'true'", () => {
41
+ for (const flag of ["false", "1", "yes", "TRUE", ""]) {
42
+ expect(readHealthzGeoConfig({
43
+ PROSOPO_HEALTHZ_GEO_STEERING: flag,
44
+ PROSOPO_HEALTHZ_GEO_ROUTES: `{"US":"${TARGET_HOST}"}`,
45
+ }).enabled).toBe(false);
46
+ }
47
+ });
48
+ it("is disabled when the flag is on but no routes are configured", () => {
49
+ expect(readHealthzGeoConfig({ PROSOPO_HEALTHZ_GEO_STEERING: "true" }).enabled).toBe(false);
50
+ });
51
+ it("enables steering and upper-cases the country keys", () => {
52
+ const parsed = readHealthzGeoConfig({
53
+ PROSOPO_HEALTHZ_GEO_STEERING: "true",
54
+ PROSOPO_HEALTHZ_GEO_ROUTES: `{"us":"${TARGET_HOST}"}`,
55
+ });
56
+ expect(parsed.enabled).toBe(true);
57
+ expect(parsed.routes.get("US")).toBe(TARGET_HOST);
58
+ });
59
+ it("stays off when the route map is unparseable or malformed", () => {
60
+ for (const routes of [
61
+ "not json",
62
+ "[]",
63
+ '{"USA":"node-b.example.com"}',
64
+ '{"US":""}',
65
+ '{"US":"https://node-b.example.com/healthz"}',
66
+ '{"US":123}',
67
+ ]) {
68
+ const parsed = readHealthzGeoConfig({
69
+ PROSOPO_HEALTHZ_GEO_STEERING: "true",
70
+ PROSOPO_HEALTHZ_GEO_ROUTES: routes,
71
+ });
72
+ expect(parsed.enabled).toBe(false);
73
+ expect(parsed.routes.size).toBe(0);
74
+ }
75
+ });
76
+ it("defaults the probe period and timeout, and rejects nonsense overrides", () => {
77
+ const defaults = readHealthzGeoConfig({});
78
+ expect(defaults.probeIntervalMs).toBe(30_000);
79
+ expect(defaults.probeTimeoutMs).toBe(2_000);
80
+ const overridden = readHealthzGeoConfig({
81
+ PROSOPO_HEALTHZ_GEO_PROBE_INTERVAL_MS: "5000",
82
+ PROSOPO_HEALTHZ_GEO_PROBE_TIMEOUT_MS: "500",
83
+ });
84
+ expect(overridden.probeIntervalMs).toBe(5_000);
85
+ expect(overridden.probeTimeoutMs).toBe(500);
86
+ const nonsense = readHealthzGeoConfig({
87
+ PROSOPO_HEALTHZ_GEO_PROBE_INTERVAL_MS: "0",
88
+ PROSOPO_HEALTHZ_GEO_PROBE_TIMEOUT_MS: "-1",
89
+ });
90
+ expect(nonsense.probeIntervalMs).toBe(30_000);
91
+ expect(nonsense.probeTimeoutMs).toBe(2_000);
92
+ expect(readHealthzGeoConfig({ PROSOPO_HEALTHZ_GEO_PROBE_INTERVAL_MS: "5" })
93
+ .probeIntervalMs).toBe(1_000);
94
+ });
95
+ });
96
+ describe("HealthzGeoRouter.resolveHost", () => {
97
+ it("steers to the host the caller's country maps to", async () => {
98
+ const service = ipInfo({ country: "US" });
99
+ const router = new HealthzGeoRouter(config(), { ipInfoService: service }, await readyMonitor(TARGET_HOST));
100
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
101
+ host: TARGET_HOST,
102
+ outcome: "steered",
103
+ });
104
+ expect(service.lookup).not.toHaveBeenCalled();
105
+ });
106
+ it("answers with its own name when the flag is off", async () => {
107
+ const service = ipInfo({ country: "US" });
108
+ const router = new HealthzGeoRouter(config({ enabled: false }), { ipInfoService: service }, await readyMonitor(TARGET_HOST));
109
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
110
+ host: OWN_HOST,
111
+ outcome: "not_steered",
112
+ });
113
+ expect(service.isAvailable).not.toHaveBeenCalled();
114
+ expect(service.country).not.toHaveBeenCalled();
115
+ });
116
+ it("answers with its own name when the country has no override", async () => {
117
+ const router = new HealthzGeoRouter(config(), { ipInfoService: ipInfo({ country: "GB" }) }, await readyMonitor(TARGET_HOST));
118
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
119
+ host: OWN_HOST,
120
+ outcome: "not_steered",
121
+ });
122
+ });
123
+ it("answers with its own name when the override names this node", async () => {
124
+ const router = new HealthzGeoRouter(config({ routes: new Map([["US", OWN_HOST]]) }), { ipInfoService: ipInfo({ country: "US" }) }, await readyMonitor(OWN_HOST));
125
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
126
+ host: OWN_HOST,
127
+ outcome: "not_steered",
128
+ });
129
+ });
130
+ it("reports geo_unavailable when the country is unknown", async () => {
131
+ const router = new HealthzGeoRouter(config(), { ipInfoService: ipInfo({ country: undefined }) }, await readyMonitor(TARGET_HOST));
132
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
133
+ host: OWN_HOST,
134
+ outcome: "geo_unavailable",
135
+ });
136
+ });
137
+ it("reports geo_unavailable, without a lookup, while ip info is unavailable", async () => {
138
+ const service = ipInfo({ available: false, country: "US" });
139
+ const router = new HealthzGeoRouter(config(), { ipInfoService: service }, await readyMonitor(TARGET_HOST));
140
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
141
+ host: OWN_HOST,
142
+ outcome: "geo_unavailable",
143
+ });
144
+ expect(service.country).not.toHaveBeenCalled();
145
+ expect(service.lookup).not.toHaveBeenCalled();
146
+ });
147
+ it("reports geo_unavailable when the request has no address", async () => {
148
+ const router = new HealthzGeoRouter(config(), { ipInfoService: ipInfo({ country: "US" }) }, await readyMonitor(TARGET_HOST));
149
+ expect(router.resolveHost(undefined, OWN_HOST)).toEqual({
150
+ host: OWN_HOST,
151
+ outcome: "geo_unavailable",
152
+ });
153
+ });
154
+ it("does not steer a loopback caller", async () => {
155
+ const maxmind = {
156
+ initialize: vi.fn(async () => { }),
157
+ isAvailable: vi.fn(() => true),
158
+ countryCode: vi.fn(() => "US"),
159
+ };
160
+ const service = new IpInfoService({}, {
161
+ maxmind: maxmind,
162
+ });
163
+ const router = new HealthzGeoRouter(config(), { ipInfoService: service }, await readyMonitor(TARGET_HOST));
164
+ for (const ip of ["127.0.0.1", "::1", "::ffff:127.0.0.1", "172.18.0.4"]) {
165
+ expect(router.resolveHost(ip, OWN_HOST)).toEqual({
166
+ host: OWN_HOST,
167
+ outcome: "geo_unavailable",
168
+ });
169
+ }
170
+ expect(maxmind.countryCode).not.toHaveBeenCalled();
171
+ });
172
+ it("does not steer to a target that is not confirmed up", async () => {
173
+ const router = new HealthzGeoRouter(config(), { ipInfoService: ipInfo({ country: "US" }) }, monitorWith(TARGET_HOST));
174
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST)).toEqual({
175
+ host: OWN_HOST,
176
+ outcome: "target_down",
177
+ });
178
+ });
179
+ it("stops steering once the target stops answering", async () => {
180
+ let healthy = true;
181
+ const monitor = new TargetHealthMonitor({
182
+ hosts: [TARGET_HOST],
183
+ intervalMs: 30_000,
184
+ timeoutMs: 2_000,
185
+ probe: vi.fn(async () => healthy),
186
+ });
187
+ const router = new HealthzGeoRouter(config(), { ipInfoService: ipInfo({ country: "US" }) }, monitor);
188
+ await monitor.pollAll();
189
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST).outcome).toBe("steered");
190
+ healthy = false;
191
+ await monitor.pollAll();
192
+ expect(router.resolveHost(CLIENT_IP, OWN_HOST).outcome).toBe("target_down");
193
+ });
194
+ });
195
+ describe("TargetHealthMonitor", () => {
196
+ afterEach(() => {
197
+ vi.useRealTimers();
198
+ });
199
+ it("reports every host down before it has probed anything", () => {
200
+ const monitor = monitorWith(TARGET_HOST);
201
+ expect(monitor.isUp(TARGET_HOST)).toBe(false);
202
+ expect(monitor.isUp("never-configured.example.com")).toBe(false);
203
+ });
204
+ it("keeps a host down when its probe rejects", async () => {
205
+ const monitor = new TargetHealthMonitor({
206
+ hosts: [TARGET_HOST],
207
+ intervalMs: 30_000,
208
+ timeoutMs: 2_000,
209
+ probe: vi.fn(async () => {
210
+ throw new Error("connect ECONNREFUSED");
211
+ }),
212
+ });
213
+ await expect(monitor.pollAll()).resolves.toBeUndefined();
214
+ expect(monitor.isUp(TARGET_HOST)).toBe(false);
215
+ });
216
+ it("probes each distinct host once per round", async () => {
217
+ const probe = vi.fn(async () => true);
218
+ const monitor = new TargetHealthMonitor({
219
+ hosts: [TARGET_HOST, TARGET_HOST, "node-c.example.com"],
220
+ intervalMs: 30_000,
221
+ timeoutMs: 1_500,
222
+ probe,
223
+ });
224
+ await monitor.pollAll();
225
+ expect(probe).toHaveBeenCalledTimes(2);
226
+ expect(probe).toHaveBeenCalledWith(TARGET_HOST, 1_500);
227
+ });
228
+ it("polls on its interval and stops when told to", async () => {
229
+ vi.useFakeTimers();
230
+ const probe = vi.fn(async () => true);
231
+ const monitor = new TargetHealthMonitor({
232
+ hosts: [TARGET_HOST],
233
+ intervalMs: 1_000,
234
+ timeoutMs: 500,
235
+ probe,
236
+ });
237
+ monitor.start();
238
+ expect(probe).toHaveBeenCalledTimes(1);
239
+ await vi.advanceTimersByTimeAsync(2_500);
240
+ expect(probe).toHaveBeenCalledTimes(3);
241
+ monitor.stop();
242
+ await vi.advanceTimersByTimeAsync(5_000);
243
+ expect(probe).toHaveBeenCalledTimes(3);
244
+ });
245
+ it("starts no timer when there is nothing to probe", () => {
246
+ vi.useFakeTimers();
247
+ const probe = vi.fn(async () => true);
248
+ const monitor = new TargetHealthMonitor({
249
+ hosts: [],
250
+ intervalMs: 1_000,
251
+ timeoutMs: 500,
252
+ probe,
253
+ });
254
+ monitor.start();
255
+ monitor.stop();
256
+ expect(probe).not.toHaveBeenCalled();
257
+ expect(vi.getTimerCount()).toBe(0);
258
+ });
259
+ });
260
+ describe("getHealthzGeoRouter", () => {
261
+ afterEach(() => {
262
+ resetHealthzGeoRouter();
263
+ });
264
+ it("is off by default and built once per process", () => {
265
+ const router = getHealthzGeoRouter({
266
+ ipInfoService: ipInfo({ country: "US" }),
267
+ });
268
+ expect(router.enabled).toBe(false);
269
+ expect(getHealthzGeoRouter({ ipInfoService: ipInfo({}) })).toBe(router);
270
+ });
271
+ });
272
+ //# sourceMappingURL=healthzGeo.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthzGeo.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/healthzGeo.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { handleErrors } from "@prosopo/api-express-router";
2
2
  import { ProsopoApiError } from "@prosopo/common";
3
- import { PublicApiPaths } from "@prosopo/types";
3
+ import { PublicApiPaths, providerDetailsSchema, } from "@prosopo/types";
4
4
  import { version } from "@prosopo/util";
5
- import { beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { afterEach, beforeEach, describe, expect, it, vi, } from "vitest";
6
+ import { resetHealthzGeoRouter } from "../../../api/healthzGeo.js";
6
7
  import { metricsHandler } from "../../../api/metrics.js";
7
8
  import { publicRouter } from "../../../api/public.js";
8
9
  vi.mock("@prosopo/api-express-router", () => ({
@@ -15,6 +16,15 @@ vi.mock("@prosopo/util", async (importActual) => {
15
16
  version: "1.0.0-test",
16
17
  };
17
18
  });
19
+ const getRouteHandler = (router, path) => {
20
+ const { stack } = router;
21
+ const handler = stack.find((layer) => layer.route?.path === path)?.route
22
+ ?.stack[0]?.handle;
23
+ if (!handler) {
24
+ throw new Error(`no handler registered for ${path}`);
25
+ }
26
+ return handler;
27
+ };
18
28
  describe("publicRouter", () => {
19
29
  let mockEnv;
20
30
  let mockDb;
@@ -266,5 +276,125 @@ describe("publicRouter", () => {
266
276
  ]),
267
277
  }));
268
278
  });
279
+ describe("the details endpoint reports the answering node", () => {
280
+ const envWithConfiguredHost = (host) => ({
281
+ getDb: vi.fn().mockReturnValue(mockDb),
282
+ logger: mockLogger,
283
+ config: { host },
284
+ });
285
+ const callDetails = async (env, hostname) => {
286
+ const handler = getRouteHandler(publicRouter(env), PublicApiPaths.GetProviderDetails);
287
+ const req = { hostname, params: {} };
288
+ await handler(req, mockRes, mockNext);
289
+ return vi.mocked(mockRes.json).mock.calls[0]?.[0];
290
+ };
291
+ it("reports the configured host", async () => {
292
+ const body = await callDetails(envWithConfiguredHost("provider.example.com"), "proxied.example.com");
293
+ expect(body).toEqual(expect.objectContaining({ host: "provider.example.com" }));
294
+ });
295
+ it("falls back to the request hostname when no host is configured", async () => {
296
+ const body = await callDetails(envWithConfiguredHost(""), "req.example.com");
297
+ expect(body).toEqual(expect.objectContaining({ host: "req.example.com" }));
298
+ });
299
+ it("returns a body the shared schema still accepts", async () => {
300
+ const body = await callDetails(envWithConfiguredHost("provider.example.com"), "proxied.example.com");
301
+ expect(providerDetailsSchema.safeParse(body).success).toBe(true);
302
+ });
303
+ });
304
+ });
305
+ describe("publicRouter /healthz", () => {
306
+ const healthzHandler = (router) => {
307
+ const layers = router.stack;
308
+ const handler = layers.find((layer) => layer.route?.path === PublicApiPaths.Healthz)?.route?.stack[0]?.handle;
309
+ if (!handler)
310
+ throw new Error("healthz route is not registered");
311
+ return handler;
312
+ };
313
+ const ipInfoService = {
314
+ initialize: vi.fn(async () => { }),
315
+ lookup: vi.fn(async () => {
316
+ throw new Error("lookup() must not be called by healthz");
317
+ }),
318
+ country: vi.fn(() => "US"),
319
+ isAvailable: vi.fn(() => true),
320
+ };
321
+ const env = (host) => ({
322
+ config: { host },
323
+ logger: { warn: vi.fn(), info: vi.fn(), error: vi.fn(), debug: vi.fn() },
324
+ ipInfoService,
325
+ });
326
+ const responseSpy = () => {
327
+ const set = vi.fn();
328
+ const json = vi.fn();
329
+ return {
330
+ res: {
331
+ status: vi.fn().mockReturnThis(),
332
+ set,
333
+ json,
334
+ },
335
+ set,
336
+ json,
337
+ };
338
+ };
339
+ const request = (ip) => ({ ip, hostname: "lb.example.com" });
340
+ const setEnvVars = (vars) => {
341
+ for (const [key, value] of Object.entries(vars)) {
342
+ if (value === undefined) {
343
+ delete process.env[key];
344
+ }
345
+ else {
346
+ process.env[key] = value;
347
+ }
348
+ }
349
+ };
350
+ beforeEach(() => {
351
+ vi.clearAllMocks();
352
+ resetHealthzGeoRouter();
353
+ vi.stubGlobal("fetch", vi.fn(async () => new Response(null, { status: 503 })));
354
+ });
355
+ afterEach(() => {
356
+ resetHealthzGeoRouter();
357
+ vi.unstubAllGlobals();
358
+ setEnvVars({
359
+ PROSOPO_HEALTHZ_GEO_STEERING: undefined,
360
+ PROSOPO_HEALTHZ_GEO_ROUTES: undefined,
361
+ });
362
+ });
363
+ it("answers with its own name and sets no headers when steering is off", () => {
364
+ setEnvVars({
365
+ PROSOPO_HEALTHZ_GEO_STEERING: undefined,
366
+ PROSOPO_HEALTHZ_GEO_ROUTES: JSON.stringify({
367
+ US: "node-b.example.com",
368
+ }),
369
+ });
370
+ const { res, set, json } = responseSpy();
371
+ healthzHandler(publicRouter(env("node-a.example.com")))(request("203.0.113.9"), res, vi.fn());
372
+ expect(json).toHaveBeenCalledWith({
373
+ ok: true,
374
+ host: "node-a.example.com",
375
+ });
376
+ expect(set).not.toHaveBeenCalled();
377
+ expect(ipInfoService.country).not.toHaveBeenCalled();
378
+ });
379
+ it("falls back to the request hostname when no host is configured", () => {
380
+ const { res, json } = responseSpy();
381
+ healthzHandler(publicRouter(env("")))(request("203.0.113.9"), res, vi.fn());
382
+ expect(json).toHaveBeenCalledWith({ ok: true, host: "lb.example.com" });
383
+ });
384
+ it("marks the response uncacheable once it can vary per caller", () => {
385
+ setEnvVars({
386
+ PROSOPO_HEALTHZ_GEO_STEERING: "true",
387
+ PROSOPO_HEALTHZ_GEO_ROUTES: JSON.stringify({
388
+ US: "node-b.example.com",
389
+ }),
390
+ });
391
+ const { res, set, json } = responseSpy();
392
+ healthzHandler(publicRouter(env("node-a.example.com")))(request("203.0.113.9"), res, vi.fn());
393
+ expect(set).toHaveBeenCalledWith("Cache-Control", "no-store, private");
394
+ expect(json).toHaveBeenCalledWith({
395
+ ok: true,
396
+ host: "node-a.example.com",
397
+ });
398
+ });
269
399
  });
270
400
  //# sourceMappingURL=public.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/public.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;IAC/C,MAAM,MAAM,GAAG,MAAM,YAAY,EAAkC,CAAC;IACpE,OAAO;QACN,GAAG,MAAM;QACT,OAAO,EAAE,YAAY;KACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,IAAI,OAA4B,CAAC;IAEjC,IAAI,MAAW,CAAC;IAEhB,IAAI,mBAAwB,CAAC;IAE7B,IAAI,8BAAmC,CAAC;IAExC,IAAI,UAAe,CAAC;IACpB,IAAI,OAAgB,CAAC;IACrB,IAAI,OAAiB,CAAC;IACtB,IAAI,QAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACf,EAAE,CAAC,aAAa,EAAE,CAAC;QAEnB,UAAU,GAAG;YACZ,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACd,CAAC;QAEF,mBAAmB,GAAG;YACrB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YACtC,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SAChD,CAAC;QAEF,8BAA8B,GAAG;YAChC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;YACvC,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;SACjD,CAAC;QAEF,MAAM,GAAG;YACR,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,mBAAmB,CAAC;YAChE,6BAA6B,EAAE,EAAE;iBAC/B,EAAE,EAAE;iBACJ,eAAe,CAAC,8BAA8B,CAAC;SACjD,CAAC;QAEF,OAAO,GAAG;YACT,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;YACtC,MAAM,EAAE,UAAU;SACgB,CAAC;QAEpC,OAAO,GAAG,EAAa,CAAC;QAExB,OAAO,GAAG;YACT,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;YAChC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;SACU,CAAC;QAEzB,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAkB,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAE9C,MAAM,kBAAkB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAGrC,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACJ,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,eAAe,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBAChD,MAAM,0BAA0B,GAAG,EAAE,CAAC,6BAA6B,EAAE,CAAC;gBAEtE,MAAM,QAAQ,GAAG;oBAChB,OAAO;oBACP,OAAO,EAAE,iBAAiB;oBAC1B,KAAK,EAAE;wBACN;4BACC,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE;4BAClC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,eAAe,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAC1C;yBACD;wBACD;4BACC,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,0BAA0B,CAAC,OAAO,EAAE;4BAC7C,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,0BAA0B,CAAC,iBAAiB,EAAE,GAAG,IAAI,CACrD;yBACD;qBACD;iBACD,CAAC;gBAEF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3B,GAAG;oBACH,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;oBAC/B,GAAG,EAAE,gCAAgC;iBACrC,CAAC,CAAC,CAAC;gBACJ,OAAO,IAAI,CACV,IAAI,eAAe,CAAC,iBAAiB,EAAE;oBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;iBACtB,CAAC,CACF,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;QAGH,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACzC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,iBAAiB;YAC1B,KAAK,EAAE;gBACN;oBACC,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,IAAI;oBACb,mBAAmB,EAAE,CAAC;iBACtB;gBACD;oBACC,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,KAAK;oBACd,mBAAmB,EAAE,EAAE;iBACvB;aACD;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAE7E,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAGrC,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACJ,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAE3B,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3B,GAAG;oBACH,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;oBAC/B,GAAG,EAAE,gCAAgC;iBACrC,CAAC,CAAC,CAAC;gBACJ,OAAO,IAAI,CACV,IAAI,eAAe,CAAC,iBAAiB,EAAE;oBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;iBACtB,CAAC,CACF,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;QAGH,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CACpB,CAAC;QAGF,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAGnE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAoB,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAIrC,MAAM,MAAM,GAAI,MAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CACpC,CAAC,KAAsC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,CACzE,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAIH,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAA4B,EAAE,EAAE;QAChE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC7B,CAAC;IACF,CAAC,CAAC;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC;QAC7C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAErC,MAAM,MAAM,GAAI,MAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC/B,CAAC,KAAoC,EAAE,EAAE,CACxC,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,CAAC,OAAO,CAC7C,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;gBAAS,CAAC;YACV,UAAU,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,OAAO,CAAC;QAC9C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAErC,MAAM,MAAM,GAAI,MAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC/B,CAAC,KAAoC,EAAE,EAAE,CACxC,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,CAAC,OAAO,CAC7C,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;QACtC,CAAC;gBAAS,CAAC;YACV,UAAU,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG;YAClB,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;YAChC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;SACU,CAAC;QACzB,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAa,CAAC;QAE9C,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CACnC,cAAc,EACd,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACrC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAInC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QAC7C,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG;gBAClB,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBACZ,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;aACW,CAAC;YACzB,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAa,CAAC;YAE9C,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEhE,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACV,UAAU,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAEzD,mBAAmB,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5D,8BAA8B,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACJ,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,eAAe,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBAChD,MAAM,0BAA0B,GAAG,EAAE,CAAC,6BAA6B,EAAE,CAAC;gBAEtE,MAAM,QAAQ,GAAG;oBAChB,OAAO;oBACP,OAAO,EAAE,iBAAiB;oBAC1B,KAAK,EAAE;wBACN;4BACC,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE;4BAClC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,eAAe,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAC1C;yBACD;wBACD;4BACC,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,0BAA0B,CAAC,OAAO,EAAE;4BAC7C,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,0BAA0B,CAAC,iBAAiB,EAAE,GAAG,IAAI,CACrD;yBACD;qBACD;iBACD,CAAC;gBAEF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC;YACvB,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC;gBAC7B,MAAM,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;aACnD,CAAC;SACF,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"public.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/public.unit.test.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ const createMockService = (responses) => {
36
36
  }
37
37
  return response;
38
38
  }),
39
+ country: vi.fn().mockReturnValue(undefined),
39
40
  isAvailable: vi.fn().mockReturnValue(true),
40
41
  };
41
42
  };
@@ -251,6 +252,7 @@ describe("compareIPs", () => {
251
252
  const service = {
252
253
  initialize: vi.fn(),
253
254
  lookup: vi.fn().mockRejectedValue(new Error("Network error")),
255
+ country: vi.fn().mockReturnValue(undefined),
254
256
  isAvailable: vi.fn().mockReturnValue(true),
255
257
  };
256
258
  const result = await compareIPs("8.8.8.8", "1.1.1.1", service);
@@ -1 +1 @@
1
- {"version":3,"file":"ipComparison.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/services/ipComparison.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipComparison.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/services/ipComparison.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signedAssetsResolver.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signedAssetsResolver.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/unit/signedAssetsResolver.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import { createHash } from "node:crypto";
2
+ import { afterEach, describe, expect, test } from "vitest";
3
+ import { DEFAULT_ASSET_TOKEN_TTL_SECONDS, SignedAssetsResolver, getSignedAssetsResolver, } from "../../api/captcha/signedAssetsResolver.js";
4
+ const KEY = "test-security-key";
5
+ const NOW_MS = 1_700_000_000_000;
6
+ const IMAGE = "https://prosopoimages.b-cdn.net/v5_dataset_flat/images/abc.webp";
7
+ const resolver = (ttlSeconds, clientIp) => new SignedAssetsResolver({
8
+ securityKey: KEY,
9
+ now: () => NOW_MS,
10
+ ...(ttlSeconds !== undefined ? { ttlSeconds } : {}),
11
+ ...(clientIp !== undefined ? { clientIp } : {}),
12
+ });
13
+ const expected = (path, expires, ip = "") => createHash("sha256")
14
+ .update(`${KEY}${path}${expires}${ip}`)
15
+ .digest("base64")
16
+ .replace(/\+/g, "-")
17
+ .replace(/\//g, "_")
18
+ .replace(/=/g, "");
19
+ describe("SignedAssetsResolver", () => {
20
+ test("signs the URL with a token and expiry", () => {
21
+ const url = new URL(resolver(300).resolveAsset(IMAGE).getURL());
22
+ const expires = NOW_MS / 1000 + 300;
23
+ expect(url.origin + url.pathname).toBe(IMAGE);
24
+ expect(url.searchParams.get("expires")).toBe(String(expires));
25
+ expect(url.searchParams.get("token")).toBe(expected("/v5_dataset_flat/images/abc.webp", expires));
26
+ });
27
+ test("preserves the original URI on the asset", () => {
28
+ expect(resolver().resolveAsset(IMAGE).URI).toBe(IMAGE);
29
+ });
30
+ test("defaults to a short TTL", () => {
31
+ const url = new URL(resolver().resolveAsset(IMAGE).getURL());
32
+ expect(url.searchParams.get("expires")).toBe(String(NOW_MS / 1000 + DEFAULT_ASSET_TOKEN_TTL_SECONDS));
33
+ });
34
+ test("binds the token to its exact path", () => {
35
+ const a = resolver().resolveAsset(IMAGE).getURL();
36
+ const b = resolver()
37
+ .resolveAsset("https://prosopoimages.b-cdn.net/v5_dataset_flat/images/def.webp")
38
+ .getURL();
39
+ const tokenOf = (u) => new URL(u).searchParams.get("token");
40
+ expect(tokenOf(a)).not.toBe(tokenOf(b));
41
+ });
42
+ test("includes the client IP when bound", () => {
43
+ const url = new URL(resolver(300, "203.0.113.9").resolveAsset(IMAGE).getURL());
44
+ const expires = NOW_MS / 1000 + 300;
45
+ expect(url.searchParams.get("token")).toBe(expected("/v5_dataset_flat/images/abc.webp", expires, "203.0.113.9"));
46
+ });
47
+ test("passes non-http URIs through untouched", () => {
48
+ const local = "/home/prosopo/images/abc.webp";
49
+ expect(resolver().resolveAsset(local).getURL()).toBe(local);
50
+ });
51
+ test("refuses to sign a URL that already has a query string", () => {
52
+ expect(() => resolver().resolveAsset(`${IMAGE}?w=100`)).toThrow(/already has a query string/);
53
+ });
54
+ });
55
+ describe("getSignedAssetsResolver", () => {
56
+ afterEach(() => {
57
+ process.env.PROSOPO_ASSET_TOKEN_KEY = undefined;
58
+ process.env.PROSOPO_ASSET_TOKEN_BIND_IP = undefined;
59
+ });
60
+ test("is undefined when no key is configured", () => {
61
+ process.env.PROSOPO_ASSET_TOKEN_KEY = "";
62
+ expect(getSignedAssetsResolver()).toBeUndefined();
63
+ });
64
+ test("is constructed when a key is configured", () => {
65
+ process.env.PROSOPO_ASSET_TOKEN_KEY = KEY;
66
+ expect(getSignedAssetsResolver()).toBeInstanceOf(SignedAssetsResolver);
67
+ });
68
+ test("ignores the client IP unless binding is enabled", () => {
69
+ process.env.PROSOPO_ASSET_TOKEN_KEY = KEY;
70
+ const unbound = getSignedAssetsResolver("203.0.113.9");
71
+ process.env.PROSOPO_ASSET_TOKEN_BIND_IP = "true";
72
+ const bound = getSignedAssetsResolver("203.0.113.9");
73
+ const tokenOf = (u) => new URL(u).searchParams.get("token");
74
+ expect(tokenOf(unbound?.resolveAsset(IMAGE).getURL() ?? "")).not.toBe(tokenOf(bound?.resolveAsset(IMAGE).getURL() ?? ""));
75
+ });
76
+ });
77
+ //# sourceMappingURL=signedAssetsResolver.unit.test.js.map