@prosopo/load-balancer 2.11.1 → 2.11.3

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/load-balancer@2.11.1 build:cjs
2
+ > @prosopo/load-balancer@2.11.3 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -32,9 +32,9 @@ rendering chunks...
32
32
  computing gzip size...
33
33
  dist/cjs/retry.cjs 1.13 kB │ gzip: 0.56 kB
34
34
  dist/cjs/providerUrlOverride.cjs 1.42 kB │ gzip: 0.78 kB
35
- dist/cjs/index.cjs 1.63 kB │ gzip: 0.41 kB
36
35
  dist/cjs/developmentProviderUrl.cjs 1.81 kB │ gzip: 0.88 kB
37
- dist/cjs/balancer.cjs 4.36 kB │ gzip: 1.90 kB
38
- dist/cjs/providers.cjs 6.12 kB │ gzip: 2.10 kB
36
+ dist/cjs/index.cjs 1.94 kB │ gzip: 0.47 kB
37
+ dist/cjs/balancer.cjs 4.95 kB │ gzip: 2.13 kB
38
+ dist/cjs/providers.cjs 7.56 kB │ gzip: 2.57 kB
39
39
 
40
- ✓ built in 78ms
40
+ ✓ built in 59ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/load-balancer@2.11.1 build:tsc
2
+ > @prosopo/load-balancer@2.11.3 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 3:36:58 PM - Projects in this build:
5
+ 7:49:07 PM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../util/tsconfig.json
8
8
  * ../locale/tsconfig.json
@@ -12,21 +12,21 @@
12
12
  * ../common/tsconfig.json
13
13
  * tsconfig.json
14
14
 
15
- 3:36:59 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
15
+ 7:49:07 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'
16
16
 
17
- 3:36:59 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
17
+ 7:49:07 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
18
18
 
19
- 3:36:59 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
19
+ 7:49:07 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
20
20
 
21
- 3:36:59 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
21
+ 7:49:07 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
22
22
 
23
- 3:36:59 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'
23
+ 7:49:07 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'
24
24
 
25
- 3:36:59 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'
25
+ 7:49:07 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'
26
26
 
27
- 3:36:59 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
27
+ 7:49:07 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
28
28
 
29
- 3:36:59 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
29
+ 7:49:07 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
30
30
 
31
- 3:36:59 PM - Building project '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json'...
31
+ 7:49:07 PM - Building project '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json'...
32
32
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/load-balancer@2.11.1 build
2
+ > @prosopo/load-balancer@2.11.3 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/load-balancer@2.11.1 build:cross-env
6
+ > @prosopo/load-balancer@2.11.3 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -35,11 +35,11 @@ Bundle build started
35
35
  rendering chunks...
36
36
  computing gzip size...
37
37
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
38
- dist/index.js 1.00 kB │ gzip: 0.32 kB
39
38
  dist/retry.js 1.09 kB │ gzip: 0.55 kB
39
+ dist/index.js 1.20 kB │ gzip: 0.36 kB
40
40
  dist/providerUrlOverride.js 1.39 kB │ gzip: 0.77 kB
41
41
  dist/developmentProviderUrl.js 1.70 kB │ gzip: 0.87 kB
42
- dist/balancer.js 4.11 kB │ gzip: 1.86 kB
43
- dist/providers.js 5.85 kB │ gzip: 2.07 kB
42
+ dist/balancer.js 4.66 kB │ gzip: 2.09 kB
43
+ dist/providers.js 7.19 kB │ gzip: 2.53 kB
44
44
 
45
- ✓ built in 70ms
45
+ ✓ built in 67ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @prosopo/load-balancer
2
2
 
3
+ ## 2.11.3
4
+ ### Patch Changes
5
+
6
+ - Updated dependencies [254bc05]
7
+ - @prosopo/types@5.11.1
8
+
9
+ ## 2.11.2
10
+ ### Patch Changes
11
+
12
+ - e5aefc6: Stop re-downloading the provider list on every server-side verification.
13
+
14
+ `ProsopoServer.isVerified` only needs the list to find the one provider that minted the token, but it called `loadBalancer` directly, which fetches the list fresh every time. The package already had a cached `getProviders`, and the verify path was the one caller not using it.
15
+
16
+ That fetch was measured at 201 ms (p50, and flat — 216 ms at p90) inside the production `siteverify` lambda, on a total invocation of 376 ms. It is a 5.6 KB file listing eight providers that changes when the fleet does, and it was being downloaded roughly 360,000 times a day.
17
+
18
+ `getProviders` is now keyed by environment *and* ipMode — the `ipv4`/`ipv6` sections of the list carry different urls to the dual-stack default, so they can't share a cache entry — and it ages entries out after five minutes, matching the `cache-control: max-age=300` the list is served with.
19
+
20
+ A new `findProvider` does the lookup. On a miss it reloads the list once before giving up, so a pronode added part-way through the TTL still verifies the tokens it has already minted. That reload is rate-limited to once every ten seconds, because `providerUrl` is read from the token and an unknown url is a miss too — without the floor, a caller could put the fetch back on every request.
21
+ - 5375d10: The provider-list fetch in `loadBalancer` now gives up after 10 seconds (overridable via a new optional third argument). `@prosopo/server` calls it on every `isVerified`, so a stalled provider-list endpoint used to hold the site owner's verification request open for the runtime's default timeout (about five minutes in Node). Browsers without `AbortSignal.timeout` keep the old unbounded behaviour.
22
+ - Updated dependencies [59b7e87]
23
+ - Updated dependencies [b5e55a6]
24
+ - Updated dependencies [0c8678e]
25
+ - Updated dependencies [b77c5f4]
26
+ - Updated dependencies [dab0338]
27
+ - @prosopo/types@5.11.0
28
+ - @prosopo/common@3.1.60
29
+
3
30
  ## 2.11.1
4
31
  ### Patch Changes
5
32
 
@@ -12,6 +12,7 @@ export declare const stripIpModeLabel: (hostname: string) => string;
12
12
  export declare const getProviderHostname: (provider: HardcodedProvider) => string;
13
13
  export declare const getProviderListOverride: (raw?: string | undefined, ipMode?: IpMode) => HardcodedProvider[];
14
14
  export declare const getLoadBalancerUrl: (environment: EnvironmentTypes) => string;
15
- export declare const loadBalancer: (environment: EnvironmentTypes, ipMode?: IpMode) => Promise<HardcodedProvider[]>;
15
+ export declare const PROVIDER_LIST_FETCH_TIMEOUT_MS = 10000;
16
+ export declare const loadBalancer: (environment: EnvironmentTypes, ipMode?: IpMode, timeoutMs?: number) => Promise<HardcodedProvider[]>;
16
17
  export {};
17
18
  //# sourceMappingURL=balancer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"balancer.d.ts","sourceRoot":"","sources":["../src/balancer.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAkCD,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAQrC,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAK/C,eAAO,MAAM,qBAAqB,aACvB,eAAe,WAChB,MAAM,KACb,iBAAiB,EAUnB,CAAC;AAKF,eAAO,MAAM,gBAAgB,aAAc,MAAM,KAAG,MACjB,CAAC;AAEpC,eAAO,MAAM,mBAAmB,aAAc,iBAAiB,KAAG,MACjB,CAAC;AA0ClD,eAAO,MAAM,uBAAuB,SAC9B,MAAM,GAAG,SAAS,WACd,MAAM,KACb,iBAAiB,EAiBnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,gBAAiB,gBAAgB,KAAG,MAUlE,CAAC;AAEF,eAAO,MAAM,YAAY,gBACX,gBAAgB,WACpB,MAAM,KACb,OAAO,CAAC,iBAAiB,EAAE,CAmC7B,CAAC"}
1
+ {"version":3,"file":"balancer.d.ts","sourceRoot":"","sources":["../src/balancer.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAkCD,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAQrC,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAK/C,eAAO,MAAM,qBAAqB,aACvB,eAAe,WAChB,MAAM,KACb,iBAAiB,EAUnB,CAAC;AAKF,eAAO,MAAM,gBAAgB,aAAc,MAAM,KAAG,MACjB,CAAC;AAEpC,eAAO,MAAM,mBAAmB,aAAc,iBAAiB,KAAG,MACjB,CAAC;AA0ClD,eAAO,MAAM,uBAAuB,SAC9B,MAAM,GAAG,SAAS,WACd,MAAM,KACb,iBAAiB,EAiBnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,gBAAiB,gBAAgB,KAAG,MAUlE,CAAC;AAQF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAUrD,eAAO,MAAM,YAAY,gBACX,gBAAgB,WACpB,MAAM,cACJ,MAAM,KACf,OAAO,CAAC,iBAAiB,EAAE,CAoC7B,CAAC"}
package/dist/balancer.js CHANGED
@@ -71,7 +71,15 @@ var getLoadBalancerUrl = (environment) => {
71
71
  if (environment === "staging") return "https://provider-list.prosopo.io/staging.json";
72
72
  throw new ProsopoEnvError("CONFIG.UNKNOWN_ENVIRONMENT", { context: { environment } });
73
73
  };
74
- var loadBalancer = async (environment, ipMode) => {
74
+ /**
75
+ * Upper bound on the provider-list fetch. `@prosopo/server` calls
76
+ * `loadBalancer` on every `isVerified`, so a stalled list endpoint would
77
+ * otherwise hold the site owner's request open for the runtime's default
78
+ * (~300s in undici).
79
+ */
80
+ var PROVIDER_LIST_FETCH_TIMEOUT_MS = 1e4;
81
+ var timeoutSignal = (timeoutMs) => typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeoutMs) : void 0;
82
+ var loadBalancer = async (environment, ipMode, timeoutMs = PROVIDER_LIST_FETCH_TIMEOUT_MS) => {
75
83
  const override = getProviderListOverride(void 0, ipMode);
76
84
  if (override.length > 0) return override;
77
85
  if (environment === "development") return [{
@@ -82,8 +90,9 @@ var loadBalancer = async (environment, ipMode) => {
82
90
  }];
83
91
  return convertHostedProvider(await fetch(getLoadBalancerUrl(environment), {
84
92
  method: "GET",
85
- mode: "cors"
93
+ mode: "cors",
94
+ signal: timeoutSignal(timeoutMs)
86
95
  }).then((res) => res.json()), ipMode);
87
96
  };
88
97
  //#endregion
89
- export { convertHostedProvider, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, loadBalancer, stripIpModeLabel };
98
+ export { PROVIDER_LIST_FETCH_TIMEOUT_MS, convertHostedProvider, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, loadBalancer, stripIpModeLabel };
@@ -1 +1 @@
1
- {"version":3,"file":"balancer.js","sourceRoot":"","sources":["../src/balancer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"balancer.js","sourceRoot":"","sources":["../src/balancer.ts"],"names":[],"mappings":"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"}
@@ -71,7 +71,15 @@ var getLoadBalancerUrl = (environment) => {
71
71
  if (environment === "staging") return "https://provider-list.prosopo.io/staging.json";
72
72
  throw new _prosopo_common.ProsopoEnvError("CONFIG.UNKNOWN_ENVIRONMENT", { context: { environment } });
73
73
  };
74
- var loadBalancer = async (environment, ipMode) => {
74
+ /**
75
+ * Upper bound on the provider-list fetch. `@prosopo/server` calls
76
+ * `loadBalancer` on every `isVerified`, so a stalled list endpoint would
77
+ * otherwise hold the site owner's request open for the runtime's default
78
+ * (~300s in undici).
79
+ */
80
+ var PROVIDER_LIST_FETCH_TIMEOUT_MS = 1e4;
81
+ var timeoutSignal = (timeoutMs) => typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeoutMs) : void 0;
82
+ var loadBalancer = async (environment, ipMode, timeoutMs = PROVIDER_LIST_FETCH_TIMEOUT_MS) => {
75
83
  const override = getProviderListOverride(void 0, ipMode);
76
84
  if (override.length > 0) return override;
77
85
  if (environment === "development") return [{
@@ -82,10 +90,12 @@ var loadBalancer = async (environment, ipMode) => {
82
90
  }];
83
91
  return convertHostedProvider(await fetch(getLoadBalancerUrl(environment), {
84
92
  method: "GET",
85
- mode: "cors"
93
+ mode: "cors",
94
+ signal: timeoutSignal(timeoutMs)
86
95
  }).then((res) => res.json()), ipMode);
87
96
  };
88
97
  //#endregion
98
+ exports.PROVIDER_LIST_FETCH_TIMEOUT_MS = PROVIDER_LIST_FETCH_TIMEOUT_MS;
89
99
  exports.convertHostedProvider = convertHostedProvider;
90
100
  exports.getLoadBalancerUrl = getLoadBalancerUrl;
91
101
  exports.getProviderHostname = getProviderHostname;
@@ -4,11 +4,15 @@ const require_providerUrlOverride = require("./providerUrlOverride.cjs");
4
4
  const require_balancer = require("./balancer.cjs");
5
5
  const require_providers = require("./providers.cjs");
6
6
  exports.DEFAULT_DEVELOPMENT_PROVIDER_URL = require_developmentProviderUrl.DEFAULT_DEVELOPMENT_PROVIDER_URL;
7
+ exports.PROVIDER_LIST_FETCH_TIMEOUT_MS = require_balancer.PROVIDER_LIST_FETCH_TIMEOUT_MS;
8
+ exports.PROVIDER_LIST_MISS_RELOAD_MS = require_providers.PROVIDER_LIST_MISS_RELOAD_MS;
9
+ exports.PROVIDER_LIST_TTL_MS = require_providers.PROVIDER_LIST_TTL_MS;
7
10
  exports._resetHealthzRetryPolicy = require_providers._resetHealthzRetryPolicy;
8
11
  exports._resetPinCache = require_providers._resetPinCache;
9
12
  exports._resetProviderListCache = require_providers._resetProviderListCache;
10
13
  exports._setHealthzRetryPolicy = require_providers._setHealthzRetryPolicy;
11
14
  exports.convertHostedProvider = require_balancer.convertHostedProvider;
15
+ exports.findProvider = require_providers.findProvider;
12
16
  exports.getDevelopmentProviderUrl = require_developmentProviderUrl.getDevelopmentProviderUrl;
13
17
  exports.getLoadBalancerUrl = require_balancer.getLoadBalancerUrl;
14
18
  exports.getProviderHostname = require_balancer.getProviderHostname;
@@ -71,21 +71,49 @@ var resolvePinnedUrl = async (env, ipMode) => {
71
71
  pinPromiseCache.set(key, promise);
72
72
  return promise;
73
73
  };
74
- var providerListPromiseCache = /* @__PURE__ */ new Map();
74
+ var PROVIDER_LIST_TTL_MS = 300 * 1e3;
75
+ var PROVIDER_LIST_MISS_RELOAD_MS = 10 * 1e3;
76
+ var providerListCache = /* @__PURE__ */ new Map();
75
77
  /**
76
78
  * Returns the full (cached) list of active providers for an environment.
77
79
  * Used to look up a provider by url/address, e.g. to find the provider that
78
80
  * issued a token before forwarding a verification request to it.
79
81
  */
80
- var getProviders = async (env) => {
81
- const cached = providerListPromiseCache.get(env);
82
- if (cached) return cached;
83
- const promise = require_balancer.loadBalancer(env).catch((err) => {
84
- providerListPromiseCache.delete(env);
82
+ var getProviders = async (env, ipMode) => {
83
+ const key = cacheKey(env, ipMode);
84
+ const cached = providerListCache.get(key);
85
+ if (cached && Date.now() - cached.loadedAt < 3e5) return cached.providers;
86
+ const providers = require_balancer.loadBalancer(env, ipMode).catch((err) => {
87
+ if (providerListCache.get(key)?.providers === providers) providerListCache.delete(key);
85
88
  throw err;
86
89
  });
87
- providerListPromiseCache.set(env, promise);
88
- return promise;
90
+ providerListCache.set(key, {
91
+ providers,
92
+ loadedAt: Date.now()
93
+ });
94
+ return providers;
95
+ };
96
+ /**
97
+ * Finds the provider that minted a token, by exact url match.
98
+ *
99
+ * Exact-string rather than normalised: the single-stack sections of the list
100
+ * carry sub-zone urls (`https://ipv4.pronode15.prosopo.io`), so the caller
101
+ * passes the `ipMode` it derived from the token's own hostname and both sides
102
+ * of the comparison stay in the same section.
103
+ *
104
+ * A miss reloads the list once before giving up, so a pronode added part-way
105
+ * through the TTL still verifies the tokens it has already minted. That reload
106
+ * is rate-limited, because a miss is also what an unknown url produces.
107
+ */
108
+ var findProvider = async (env, providerUrl, ipMode) => {
109
+ if (!providerUrl) return void 0;
110
+ const provider = (await getProviders(env, ipMode)).find((p) => p.url === providerUrl);
111
+ if (provider) return provider;
112
+ const key = cacheKey(env, ipMode);
113
+ const cached = providerListCache.get(key);
114
+ if (cached && Date.now() - cached.loadedAt < 1e4) return;
115
+ providerListCache.delete(key);
116
+ return (await getProviders(env, ipMode)).find((p) => p.url === providerUrl);
89
117
  };
90
118
  var getRandomActiveProvider = async (env, ipMode) => {
91
119
  return {
@@ -131,7 +159,7 @@ var _resetPinCache = () => {
131
159
  pinPromiseCache.clear();
132
160
  };
133
161
  var _resetProviderListCache = () => {
134
- providerListPromiseCache.clear();
162
+ providerListCache.clear();
135
163
  };
136
164
  var _setHealthzRetryPolicy = (opts) => {
137
165
  if (opts.maxAttempts !== void 0) healthzMaxAttempts = opts.maxAttempts;
@@ -144,10 +172,13 @@ var _resetHealthzRetryPolicy = () => {
144
172
  healthzRetryMaxDelayMs = HEALTHZ_RETRY_MAX_DELAY_MS;
145
173
  };
146
174
  //#endregion
175
+ exports.PROVIDER_LIST_MISS_RELOAD_MS = PROVIDER_LIST_MISS_RELOAD_MS;
176
+ exports.PROVIDER_LIST_TTL_MS = PROVIDER_LIST_TTL_MS;
147
177
  exports._resetHealthzRetryPolicy = _resetHealthzRetryPolicy;
148
178
  exports._resetPinCache = _resetPinCache;
149
179
  exports._resetProviderListCache = _resetProviderListCache;
150
180
  exports._setHealthzRetryPolicy = _setHealthzRetryPolicy;
181
+ exports.findProvider = findProvider;
151
182
  exports.getProviders = getProviders;
152
183
  exports.getRandomActiveProvider = getRandomActiveProvider;
153
184
  exports.getRandomProviderFromList = getRandomProviderFromList;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./_virtual/_rolldown/runtime.js";
2
2
  import { DEFAULT_DEVELOPMENT_PROVIDER_URL, getDevelopmentProviderUrl, readDevelopmentProviderUrlOverride } from "./developmentProviderUrl.js";
3
3
  import { readProviderListOverride } from "./providerUrlOverride.js";
4
- import { convertHostedProvider, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, loadBalancer, stripIpModeLabel } from "./balancer.js";
5
- import { _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, getProviders, getRandomActiveProvider, getRandomProviderFromList } from "./providers.js";
6
- export { DEFAULT_DEVELOPMENT_PROVIDER_URL, _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, convertHostedProvider, getDevelopmentProviderUrl, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, getProviders, getRandomActiveProvider, getRandomProviderFromList, loadBalancer, readDevelopmentProviderUrlOverride, readProviderListOverride, stripIpModeLabel };
4
+ import { PROVIDER_LIST_FETCH_TIMEOUT_MS, convertHostedProvider, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, loadBalancer, stripIpModeLabel } from "./balancer.js";
5
+ import { PROVIDER_LIST_MISS_RELOAD_MS, PROVIDER_LIST_TTL_MS, _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, findProvider, getProviders, getRandomActiveProvider, getRandomProviderFromList } from "./providers.js";
6
+ export { DEFAULT_DEVELOPMENT_PROVIDER_URL, PROVIDER_LIST_FETCH_TIMEOUT_MS, PROVIDER_LIST_MISS_RELOAD_MS, PROVIDER_LIST_TTL_MS, _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, convertHostedProvider, findProvider, getDevelopmentProviderUrl, getLoadBalancerUrl, getProviderHostname, getProviderListOverride, getProviders, getRandomActiveProvider, getRandomProviderFromList, loadBalancer, readDevelopmentProviderUrlOverride, readProviderListOverride, stripIpModeLabel };
@@ -1,6 +1,9 @@
1
1
  import type { EnvironmentTypes, RandomProvider } from "@prosopo/types";
2
2
  import { type HardcodedProvider, type IpMode } from "./balancer.js";
3
- export declare const getProviders: (env: EnvironmentTypes) => Promise<HardcodedProvider[]>;
3
+ export declare const PROVIDER_LIST_TTL_MS: number;
4
+ export declare const PROVIDER_LIST_MISS_RELOAD_MS: number;
5
+ export declare const getProviders: (env: EnvironmentTypes, ipMode?: IpMode) => Promise<HardcodedProvider[]>;
6
+ export declare const findProvider: (env: EnvironmentTypes, providerUrl: string | undefined, ipMode?: IpMode) => Promise<HardcodedProvider | undefined>;
4
7
  export declare const getRandomActiveProvider: (env: EnvironmentTypes, ipMode?: IpMode) => Promise<RandomProvider>;
5
8
  export declare const getRandomProviderFromList: (env: EnvironmentTypes, ipMode?: IpMode, excludeUrl?: string, random?: () => number) => Promise<RandomProvider>;
6
9
  export declare const _resetPinCache: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,MAAM,EAGX,MAAM,eAAe,CAAC;AAsJvB,eAAO,MAAM,YAAY,QACnB,gBAAgB,KACnB,OAAO,CAAC,iBAAiB,EAAE,CAY7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC9B,gBAAgB,WACZ,MAAM,KACb,OAAO,CAAC,cAAc,CAMxB,CAAC;AAoCF,eAAO,MAAM,yBAAyB,QAChC,gBAAgB,WACZ,MAAM,eACF,MAAM,WACX,MAAM,MAAM,KAClB,OAAO,CAAC,cAAc,CAyBxB,CAAC;AAIF,eAAO,MAAM,cAAc,YAE1B,CAAC;AAIF,eAAO,MAAM,uBAAuB,YAEnC,CAAC;AAKF,eAAO,MAAM,sBAAsB,SAAU;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,SAKA,CAAC;AAKF,eAAO,MAAM,wBAAwB,YAIpC,CAAC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,MAAM,EAGX,MAAM,eAAe,CAAC;AA4IvB,eAAO,MAAM,oBAAoB,QAAgB,CAAC;AAKlD,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAmBtD,eAAO,MAAM,YAAY,QACnB,gBAAgB,WACZ,MAAM,KACb,OAAO,CAAC,iBAAiB,EAAE,CAkB7B,CAAC;AAcF,eAAO,MAAM,YAAY,QACnB,gBAAgB,eACR,MAAM,GAAG,SAAS,WACtB,MAAM,KACb,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAgBvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC9B,gBAAgB,WACZ,MAAM,KACb,OAAO,CAAC,cAAc,CAMxB,CAAC;AAoCF,eAAO,MAAM,yBAAyB,QAChC,gBAAgB,WACZ,MAAM,eACF,MAAM,WACX,MAAM,MAAM,KAClB,OAAO,CAAC,cAAc,CAyBxB,CAAC;AAIF,eAAO,MAAM,cAAc,YAE1B,CAAC;AAIF,eAAO,MAAM,uBAAuB,YAEnC,CAAC;AAKF,eAAO,MAAM,sBAAsB,SAAU;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,SAKA,CAAC;AAKF,eAAO,MAAM,wBAAwB,YAIpC,CAAC"}
package/dist/providers.js CHANGED
@@ -71,21 +71,49 @@ var resolvePinnedUrl = async (env, ipMode) => {
71
71
  pinPromiseCache.set(key, promise);
72
72
  return promise;
73
73
  };
74
- var providerListPromiseCache = /* @__PURE__ */ new Map();
74
+ var PROVIDER_LIST_TTL_MS = 300 * 1e3;
75
+ var PROVIDER_LIST_MISS_RELOAD_MS = 10 * 1e3;
76
+ var providerListCache = /* @__PURE__ */ new Map();
75
77
  /**
76
78
  * Returns the full (cached) list of active providers for an environment.
77
79
  * Used to look up a provider by url/address, e.g. to find the provider that
78
80
  * issued a token before forwarding a verification request to it.
79
81
  */
80
- var getProviders = async (env) => {
81
- const cached = providerListPromiseCache.get(env);
82
- if (cached) return cached;
83
- const promise = loadBalancer(env).catch((err) => {
84
- providerListPromiseCache.delete(env);
82
+ var getProviders = async (env, ipMode) => {
83
+ const key = cacheKey(env, ipMode);
84
+ const cached = providerListCache.get(key);
85
+ if (cached && Date.now() - cached.loadedAt < 3e5) return cached.providers;
86
+ const providers = loadBalancer(env, ipMode).catch((err) => {
87
+ if (providerListCache.get(key)?.providers === providers) providerListCache.delete(key);
85
88
  throw err;
86
89
  });
87
- providerListPromiseCache.set(env, promise);
88
- return promise;
90
+ providerListCache.set(key, {
91
+ providers,
92
+ loadedAt: Date.now()
93
+ });
94
+ return providers;
95
+ };
96
+ /**
97
+ * Finds the provider that minted a token, by exact url match.
98
+ *
99
+ * Exact-string rather than normalised: the single-stack sections of the list
100
+ * carry sub-zone urls (`https://ipv4.pronode15.prosopo.io`), so the caller
101
+ * passes the `ipMode` it derived from the token's own hostname and both sides
102
+ * of the comparison stay in the same section.
103
+ *
104
+ * A miss reloads the list once before giving up, so a pronode added part-way
105
+ * through the TTL still verifies the tokens it has already minted. That reload
106
+ * is rate-limited, because a miss is also what an unknown url produces.
107
+ */
108
+ var findProvider = async (env, providerUrl, ipMode) => {
109
+ if (!providerUrl) return void 0;
110
+ const provider = (await getProviders(env, ipMode)).find((p) => p.url === providerUrl);
111
+ if (provider) return provider;
112
+ const key = cacheKey(env, ipMode);
113
+ const cached = providerListCache.get(key);
114
+ if (cached && Date.now() - cached.loadedAt < 1e4) return;
115
+ providerListCache.delete(key);
116
+ return (await getProviders(env, ipMode)).find((p) => p.url === providerUrl);
89
117
  };
90
118
  var getRandomActiveProvider = async (env, ipMode) => {
91
119
  return {
@@ -131,7 +159,7 @@ var _resetPinCache = () => {
131
159
  pinPromiseCache.clear();
132
160
  };
133
161
  var _resetProviderListCache = () => {
134
- providerListPromiseCache.clear();
162
+ providerListCache.clear();
135
163
  };
136
164
  var _setHealthzRetryPolicy = (opts) => {
137
165
  if (opts.maxAttempts !== void 0) healthzMaxAttempts = opts.maxAttempts;
@@ -144,4 +172,4 @@ var _resetHealthzRetryPolicy = () => {
144
172
  healthzRetryMaxDelayMs = HEALTHZ_RETRY_MAX_DELAY_MS;
145
173
  };
146
174
  //#endregion
147
- export { _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, getProviders, getRandomActiveProvider, getRandomProviderFromList };
175
+ export { PROVIDER_LIST_MISS_RELOAD_MS, PROVIDER_LIST_TTL_MS, _resetHealthzRetryPolicy, _resetPinCache, _resetProviderListCache, _setHealthzRetryPolicy, findProvider, getProviders, getRandomActiveProvider, getRandomProviderFromList };
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
- import { convertHostedProvider, getProviderHostname, loadBalancer, } from "../balancer.js";
2
+ import { PROVIDER_LIST_FETCH_TIMEOUT_MS, convertHostedProvider, getProviderHostname, loadBalancer, } from "../balancer.js";
3
3
  import { _resetPinCache, _resetProviderListCache, getRandomProviderFromList, } from "../providers.js";
4
4
  const DATASET_ID = "0x2e52a1e70f0e0c808972bc04e6fbc8f264b1fbb29c94041fdf01a839b000a40e";
5
5
  const ADDRESS = "5FnBurrfqWgSLJFMsojjEP74mLX1vZZ9ASyNXKfA5YXu8FR2";
@@ -129,4 +129,24 @@ describe("getRandomProviderFromList (production.json end-to-end)", () => {
129
129
  expect(mocked).toHaveBeenCalledTimes(1);
130
130
  });
131
131
  });
132
+ describe("loadBalancer provider-list fetch timeout", () => {
133
+ const stallingFetch = () => vi.fn((_input, init) => new Promise((_resolve, reject) => {
134
+ init?.signal?.addEventListener("abort", () => reject(init.signal?.reason));
135
+ }));
136
+ it("aborts a stalled provider-list fetch after the timeout", async () => {
137
+ const mocked = stallingFetch();
138
+ globalThis.fetch = mocked;
139
+ const started = Date.now();
140
+ await expect(loadBalancer("production", undefined, 50)).rejects.toMatchObject({ name: "TimeoutError" });
141
+ expect(Date.now() - started).toBeLessThan(2_000);
142
+ });
143
+ it("bounds the fetch by default", async () => {
144
+ const mocked = vi.fn(async (_input, _init) => new Response(JSON.stringify(productionJson), { status: 200 }));
145
+ globalThis.fetch = mocked;
146
+ await loadBalancer("production");
147
+ const init = mocked.mock.calls[0]?.[1];
148
+ expect(init?.signal).toBeInstanceOf(AbortSignal);
149
+ expect(PROVIDER_LIST_FETCH_TIMEOUT_MS).toBe(10_000);
150
+ });
151
+ });
132
152
  //# sourceMappingURL=productionProviderList.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"productionProviderList.unit.test.js","sourceRoot":"","sources":["../../src/tests/productionProviderList.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"productionProviderList.unit.test.js","sourceRoot":"","sources":["../../src/tests/productionProviderList.unit.test.ts"],"names":[],"mappings":"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"}