@chrischall/mcp-utils 0.10.5 → 0.12.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.
- package/README.md +124 -17
- package/dist/auth/cached-token.d.ts +45 -0
- package/dist/auth/cached-token.d.ts.map +1 -0
- package/dist/auth/cached-token.js +53 -0
- package/dist/auth/cached-token.js.map +1 -0
- package/dist/auth/es256.d.ts +23 -0
- package/dist/auth/es256.d.ts.map +1 -0
- package/dist/auth/es256.js +27 -0
- package/dist/auth/es256.js.map +1 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/concurrency/index.d.ts +1 -0
- package/dist/concurrency/index.d.ts.map +1 -1
- package/dist/concurrency/index.js +1 -0
- package/dist/concurrency/index.js.map +1 -1
- package/dist/concurrency/single-flight.d.ts +48 -0
- package/dist/concurrency/single-flight.d.ts.map +1 -0
- package/dist/concurrency/single-flight.js +76 -0
- package/dist/concurrency/single-flight.js.map +1 -0
- package/dist/config/index.d.ts +36 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -1
- package/dist/dates/index.d.ts +28 -0
- package/dist/dates/index.d.ts.map +1 -1
- package/dist/dates/index.js +48 -0
- package/dist/dates/index.js.map +1 -1
- package/dist/errors/index.d.ts +28 -3
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +52 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/fetchproxy/index.d.ts +39 -1
- package/dist/fetchproxy/index.d.ts.map +1 -1
- package/dist/fetchproxy/index.js +41 -13
- package/dist/fetchproxy/index.js.map +1 -1
- package/dist/fs/index.d.ts +1 -0
- package/dist/fs/index.d.ts.map +1 -1
- package/dist/fs/index.js +1 -0
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/output.d.ts +57 -0
- package/dist/fs/output.d.ts.map +1 -0
- package/dist/fs/output.js +106 -0
- package/dist/fs/output.js.map +1 -0
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +60 -6
- package/dist/html/index.js.map +1 -1
- package/dist/http/index.d.ts +35 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +30 -2
- package/dist/http/index.js.map +1 -1
- package/dist/http/net-atoms.d.ts +54 -0
- package/dist/http/net-atoms.d.ts.map +1 -0
- package/dist/http/net-atoms.js +76 -0
- package/dist/http/net-atoms.js.map +1 -0
- package/dist/http/response-cache.d.ts +55 -0
- package/dist/http/response-cache.d.ts.map +1 -0
- package/dist/http/response-cache.js +84 -0
- package/dist/http/response-cache.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/response/index.d.ts +17 -0
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +28 -0
- package/dist/response/index.js.map +1 -1
- package/dist/scrape/index.d.ts +144 -0
- package/dist/scrape/index.d.ts.map +1 -0
- package/dist/scrape/index.js +463 -0
- package/dist/scrape/index.js.map +1 -0
- package/dist/session/index.d.ts +43 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +44 -6
- package/dist/session/index.js.map +1 -1
- package/dist/zod/index.d.ts +1 -0
- package/dist/zod/index.d.ts.map +1 -1
- package/dist/zod/index.js +1 -0
- package/dist/zod/index.js.map +1 -1
- package/dist/zod/parse-lenient.d.ts +36 -0
- package/dist/zod/parse-lenient.d.ts.map +1 -0
- package/dist/zod/parse-lenient.js +37 -0
- package/dist/zod/parse-lenient.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -31,10 +31,11 @@ import light:
|
|
|
31
31
|
|
|
32
32
|
| Import | Contents |
|
|
33
33
|
| --- | --- |
|
|
34
|
-
| `@chrischall/mcp-utils` | core barrel: `server` + `response` + `errors` + `config` + `fs` + `http` + `zod` + `auth` |
|
|
34
|
+
| `@chrischall/mcp-utils` | core barrel: `server` + `response` + `errors` + `config` + `fs` + `http` + `concurrency` + `dates` + `zod` + `auth` + `scrape` |
|
|
35
35
|
| `@chrischall/mcp-utils/session` | session registry, session store, token manager, cookie-session manager |
|
|
36
36
|
| `@chrischall/mcp-utils/fetchproxy` | fetchproxy transport adapter, bot-wall / retry / concurrency helpers |
|
|
37
37
|
| `@chrischall/mcp-utils/html` | opt-in HTML scraping helpers (needs `node-html-parser`) |
|
|
38
|
+
| `@chrischall/mcp-utils/scrape` | convenience alias for the zero-dep `scrape` module (also in the core barrel) |
|
|
38
39
|
| `@chrischall/mcp-utils/test` | in-memory test harness for tool registration |
|
|
39
40
|
|
|
40
41
|
```ts
|
|
@@ -69,7 +70,13 @@ the server instance without connecting a transport.
|
|
|
69
70
|
### `response` — tool-result formatting
|
|
70
71
|
|
|
71
72
|
`textResult` / `jsonResult` (alias), `rawTextResult`, `imageResult`,
|
|
72
|
-
`errorResult`, `flattenJsonApi`, `deepMapStringField
|
|
73
|
+
`errorResult`, `flattenJsonApi`, `deepMapStringField`, `pruneUndefined`,
|
|
74
|
+
`toArray`.
|
|
75
|
+
|
|
76
|
+
`pruneUndefined(obj)` shallow-copies an object dropping `undefined`-valued keys
|
|
77
|
+
(the compact-projection idiom: skylight's `compact`, viator/alltrails' `prune`);
|
|
78
|
+
`toArray(v)` coerces `T | T[] | null | undefined` to `T[]` (the XML→JSON
|
|
79
|
+
single-item guard from canvas-parent / infinitecampus).
|
|
73
80
|
|
|
74
81
|
```ts
|
|
75
82
|
import { textResult, errorResult, flattenJsonApi, deepMapStringField } from '@chrischall/mcp-utils';
|
|
@@ -87,7 +94,10 @@ deepMapStringField(payload, 'eventDate', dmyToIso);
|
|
|
87
94
|
`McpToolError` and its subclasses (`SessionNotAuthenticatedError`,
|
|
88
95
|
`BotWallError`, `RateLimitError`, `UnreachableError`, `ModeMismatchError`),
|
|
89
96
|
plus `createHelpfulError`, `wrapToolError`, `truncateErrorMessage`,
|
|
90
|
-
`redactSecrets`, and `messageOf`. `
|
|
97
|
+
`redactSecrets`, `maskSecret`, and `messageOf`. `BotWallError` takes an optional
|
|
98
|
+
`{ vendor }` (e.g. `'DataDome'`) woven into the message and exposed as a field;
|
|
99
|
+
`maskSecret(value)` renders a `first8…last4` fingerprint for set-credential
|
|
100
|
+
confirmations (short values are fully hidden). `redactSecrets` scrubs `Bearer`/`Basic` auth
|
|
91
101
|
headers, `Cookie`/`Set-Cookie` values (cookie names stay visible), JWTs,
|
|
92
102
|
well-known API-key shapes (`sk-…`, `ghp_…`, `xox?-…`, `AIza…`, `AKIA…`,
|
|
93
103
|
`whsec_…`), and secret-bearing URL query params; `truncateErrorMessage` applies
|
|
@@ -113,8 +123,13 @@ tool surface can show the user.
|
|
|
113
123
|
|
|
114
124
|
### `config` — hardened env/config
|
|
115
125
|
|
|
116
|
-
`readEnvVar`, `requireEnvVar`, `parseBoolEnv`, `readPortEnv`, `
|
|
117
|
-
`loadDotenvSafely`, `createCachedJsonArrayLoader`.
|
|
126
|
+
`readEnvVar`, `requireEnvVar`, `parseBoolEnv`, `readPortEnv`, `readIntEnv`,
|
|
127
|
+
`readTtlMsEnv`, `expandPath`, `loadDotenvSafely`, `createCachedJsonArrayLoader`.
|
|
128
|
+
|
|
129
|
+
`readIntEnv` is the general hardened integer reader (strict parse + optional
|
|
130
|
+
`min`/`max`); `readTtlMsEnv(key, defaultMs)` reads a TTL in **seconds** and
|
|
131
|
+
returns **milliseconds**, honoring an explicit `0` as "disabled" — the
|
|
132
|
+
`<SVC>_CACHE_TTL` reader shared by the response-cache consumers.
|
|
118
133
|
|
|
119
134
|
```ts
|
|
120
135
|
import { requireEnvVar, parseBoolEnv, readPortEnv, expandPath } from '@chrischall/mcp-utils';
|
|
@@ -153,9 +168,17 @@ A successful parse is cached; a missing/unreadable file, invalid JSON, or a
|
|
|
153
168
|
non-string-array logs one stderr warning and negative-caches (returns defaults
|
|
154
169
|
without re-reading). Pass `readFile` to inject a reader in tests.
|
|
155
170
|
|
|
156
|
-
### `fs` — streaming file helpers (uploads)
|
|
171
|
+
### `fs` — streaming file helpers (uploads) & binary output
|
|
172
|
+
|
|
173
|
+
`fileBlob`, `readFileHead`, `resolveOutputDir`, `uniquePath`,
|
|
174
|
+
`writeBinaryOutput`, `sniffMimeBytes`.
|
|
157
175
|
|
|
158
|
-
|
|
176
|
+
The binary-output kit (hoisted from gemini + flightaware) is the fleet
|
|
177
|
+
convention for tools that generate bytes: `resolveOutputDir(perCall,
|
|
178
|
+
'<SVC>_OUTPUT_DIR')` resolves arg → env → cwd (creating the dir),
|
|
179
|
+
`writeBinaryOutput({ dir, baseName, base64, mimeType })` writes to a
|
|
180
|
+
**non-overwriting** path (`name.png`, `name-2.png`, …) and returns it, and
|
|
181
|
+
`sniffMimeBytes` magic-byte-detects PNG/JPEG/WebP/GIF.
|
|
159
182
|
|
|
160
183
|
```ts
|
|
161
184
|
import { fileBlob, readFileHead } from '@chrischall/mcp-utils';
|
|
@@ -177,9 +200,11 @@ constant memory instead of a 20 MB Buffer.
|
|
|
177
200
|
|
|
178
201
|
`createApiClient` plus building blocks: `buildQueryString`, `buildOptionalBody`,
|
|
179
202
|
`formatApiError`, `parseLinkHeader`, `parseCookieJar`, `parseCookieHeader`,
|
|
180
|
-
`runBoundedBatch`,
|
|
181
|
-
`
|
|
182
|
-
`
|
|
203
|
+
`runBoundedBatch`, `createThrottle`, `createResponseCache`, `parseRetryAfterMs`,
|
|
204
|
+
`splitHost`, `buildUserAgent`, `parseContentDispositionFilename`, JWT helpers
|
|
205
|
+
(`decodeJwtExp`, `decodeJwtSessionId`, `decodeJwtClaim`, `validateJwtExpiry`),
|
|
206
|
+
and the `ApiError` / `UpstreamHttpError` / `UnauthorizedError` /
|
|
207
|
+
`RateLimitedError` / `RequestTimeoutError` classes.
|
|
183
208
|
|
|
184
209
|
`decodeJwtClaim(token, claim)` is the generic single-claim reader — returns the
|
|
185
210
|
raw claim value (`unknown`) or `undefined` for an undecodable token / absent
|
|
@@ -203,6 +228,23 @@ const data = await api.get('/v1/things', { query: { page: 2 } });
|
|
|
203
228
|
`RequestTimeoutError` instead of hanging the tool call. A 429 retry gets a fresh
|
|
204
229
|
timeout. Omit it to keep the previous unbounded behavior.
|
|
205
230
|
|
|
231
|
+
`retry` also accepts `statuses` (e.g. `[429, 503]`), `honorRetryAfter: true`
|
|
232
|
+
(sleep the response's `Retry-After` instead of the fixed `delayMs`, bounded by
|
|
233
|
+
`maxRetryAfterMs`, default 30 s — hoisted from getyourguide / musicbrainz /
|
|
234
|
+
viator / tripadvisor), and the standalone `parseRetryAfterMs(header)` for custom
|
|
235
|
+
clients.
|
|
236
|
+
|
|
237
|
+
`api.fetchRaw(method, path)` is the binary path `fetchJson` can't express —
|
|
238
|
+
returns `{ status, contentType, headers, bytes }` with the same 401/429/error
|
|
239
|
+
mapping (gzip sales reports, PNG maps, attachment downloads).
|
|
240
|
+
|
|
241
|
+
`createResponseCache({ ttlMs: { dynamic, static }, maxEntries })` is the bounded
|
|
242
|
+
tiered-TTL response cache for billed / rate-limited reads (flightaware / viator
|
|
243
|
+
/ tripadvisor): key on the request path (and body for POST-reads), route
|
|
244
|
+
reference data through the long `static` tier via
|
|
245
|
+
`fetchThrough(key, load, 'static')`, and pair the TTLs with `readTtlMsEnv`.
|
|
246
|
+
Writes are never cached.
|
|
247
|
+
|
|
206
248
|
`parseCookieHeader(header)` parses an inbound *request* `Cookie:` header
|
|
207
249
|
(`name=value; name2=value2`) into a `Record<string, string>` (first `=` splits,
|
|
208
250
|
so values may contain `=`; last value wins on a duplicate name). It's the
|
|
@@ -234,10 +276,18 @@ a single hung row can't wedge the call. It always returns a full-length,
|
|
|
234
276
|
input-ordered array. `setTimer`/`clearTimer` are injectable for tests. This
|
|
235
277
|
hoists zillow's bulk-tool deadline + `pending`-backfill primitive.
|
|
236
278
|
|
|
237
|
-
### `concurrency` — bounded async map
|
|
279
|
+
### `concurrency` — bounded async map & single-flight
|
|
238
280
|
|
|
239
|
-
`mapWithConcurrency` —
|
|
240
|
-
|
|
281
|
+
`mapWithConcurrency`, `singleFlight`, `memoizeAsync` — zero-dependency async
|
|
282
|
+
primitives.
|
|
283
|
+
|
|
284
|
+
`singleFlight(fn)` shares ONE in-flight invocation across concurrent callers
|
|
285
|
+
(cleared on settle; a rejection doesn't poison the next call) — the
|
|
286
|
+
login/refresh/bridge-ready guard hand-rolled in honeybook / infinitecampus /
|
|
287
|
+
onehome / vibo / alltrails / tripadvisor / artsonia. `memoizeAsync(loader)` is
|
|
288
|
+
the keyed variant: a promise cache that coalesces concurrent loads per key and
|
|
289
|
+
evicts rejected loads so the next `get` retries (redfin's `LocalityPoolCache`),
|
|
290
|
+
with `delete`/`clear` for invalidation and test hooks.
|
|
241
291
|
|
|
242
292
|
```ts
|
|
243
293
|
import { mapWithConcurrency } from '@chrischall/mcp-utils';
|
|
@@ -256,7 +306,8 @@ plus per-item backfill rather than a plain all-or-nothing map.
|
|
|
256
306
|
|
|
257
307
|
### `dates` — date-format converters
|
|
258
308
|
|
|
259
|
-
`isoToDmy`, `dmyToIso`, `isoToCompactTimestamp
|
|
309
|
+
`isoToDmy`, `dmyToIso`, `isoToCompactTimestamp`, `todayIso`, `toIsoDateUtc`,
|
|
310
|
+
`shiftIsoDate`, `ensureSeconds`. For upstreams that don't speak
|
|
260
311
|
ISO 8601, so a server can keep its surface ISO (`yyyy-MM-dd`) and translate at
|
|
261
312
|
the API boundary. Pair with `deepMapStringField` to normalize a date field
|
|
262
313
|
across a whole response.
|
|
@@ -268,13 +319,56 @@ const apiDate = isoToDmy('2025-08-28'); // '28-08-2025' (request
|
|
|
268
319
|
deepMapStringField(payload, 'eventDate', dmyToIso); // '28-08-2025' → '2025-08-28' (response)
|
|
269
320
|
```
|
|
270
321
|
|
|
322
|
+
### `scrape` — SSR JSON-store & page extraction (zero-dep)
|
|
323
|
+
|
|
324
|
+
`decodeHtmlEntities`, `stripHtml`, `sanitizeJsLiterals`, `matchBalanced`,
|
|
325
|
+
`extractJsonAfterMarker`, `extractJsonLdBlocks`, `findJsonLdEntity`,
|
|
326
|
+
`ogContent`, `findArrayByShape`, `deepCollectArrays`, `deepFindObject`,
|
|
327
|
+
`isCloudflareChallenge`, `stripJsonGuard`.
|
|
328
|
+
|
|
329
|
+
Pure string/JSON primitives for server-rendered pages — no `node-html-parser`
|
|
330
|
+
(DOM-level scraping stays in the [`/html`](#html) subpath). Consolidates the SSR
|
|
331
|
+
JSON-store stack re-implemented across musescore / tock / zillow / opentable /
|
|
332
|
+
tripadvisor / etix:
|
|
333
|
+
|
|
334
|
+
```ts
|
|
335
|
+
import {
|
|
336
|
+
extractJsonAfterMarker, findJsonLdEntity, ogContent,
|
|
337
|
+
findArrayByShape, isCloudflareChallenge, stripJsonGuard,
|
|
338
|
+
} from '@chrischall/mcp-utils';
|
|
339
|
+
|
|
340
|
+
// A redux/__NEXT_DATA__-style store (JS literals repaired via sanitize):
|
|
341
|
+
const store = extractJsonAfterMarker(html, ['window.$REDUX_STATE', '"appState"'], { sanitize: true });
|
|
342
|
+
|
|
343
|
+
// schema.org / OpenGraph readers:
|
|
344
|
+
const event = findJsonLdEntity(html, 'Event'); // checks blocks, @graph, mainEntity
|
|
345
|
+
const title = ogContent(html, 'og:title');
|
|
346
|
+
|
|
347
|
+
// Drift-tolerant array location + anti-XSSI guard stripping:
|
|
348
|
+
const homes = findArrayByShape(pageProps, ['savedHomesList'], (f) => !!f && typeof f === 'object');
|
|
349
|
+
const data = JSON.parse(stripJsonGuard(body)); // )]}' while(1); for(;;); {}&&
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
`isCloudflareChallenge` matches the DEFINITIVE interstitial markers only
|
|
353
|
+
(`_cf_chl_opt`, `<title>Just a moment`) — never `cdn-cgi/challenge-platform`,
|
|
354
|
+
which Cloudflare inlines on cleared pages too. `decodeHtmlEntities` decodes
|
|
355
|
+
`&` LAST so attribute-escaped JSON survives one level; `matchBalanced` is
|
|
356
|
+
the string/escape-aware bracket walker regex can't replace.
|
|
357
|
+
|
|
271
358
|
### `zod` — schema atoms
|
|
272
359
|
|
|
273
360
|
Reusable schemas (`PositiveInt`, `NonNegInt`, `NonEmptyString`, `IsoDate`,
|
|
274
361
|
`IsoTime`, `NumericIdString`, `SafePathSegment`, `schemaOrigin`,
|
|
275
362
|
`schemaConfirm`), pagination helpers
|
|
276
363
|
(`paginationSchema`, `pageSchema`, `calculateOffset`), tool-annotation builders
|
|
277
|
-
(`toolAnnotations`),
|
|
364
|
+
(`toolAnnotations`), time normalizers (`extractTime`, `normalizeTime`), and the
|
|
365
|
+
lenient response validator `parseLenient`.
|
|
366
|
+
|
|
367
|
+
`parseLenient(schema, raw, { label, context, mode? })` is the degrade-never-break
|
|
368
|
+
validator for reverse-engineered APIs (alltrails' `parseAllTrails`, ofw's
|
|
369
|
+
`parseOFW`, getyourguide's `parseGYG`): on success it returns the parsed data;
|
|
370
|
+
on drift it warns to **stderr** with the precise issue paths and returns the
|
|
371
|
+
RAW response (or throws an `McpToolError` in `mode: 'strict'` for write paths).
|
|
278
372
|
|
|
279
373
|
```ts
|
|
280
374
|
import { paginationSchema, calculateOffset, toolAnnotations } from '@chrischall/mcp-utils';
|
|
@@ -292,8 +386,15 @@ injection.
|
|
|
292
386
|
### `auth` — auth resolver skeletons
|
|
293
387
|
|
|
294
388
|
`createAuthResolver`, `resolveAuthPattern`, `sessionLoginFlow`,
|
|
295
|
-
`createOAuth2Refresher`, and the
|
|
296
|
-
`AuthPattern` types.
|
|
389
|
+
`createOAuth2Refresher`, `createCachedTokenSource`, `signEs256Jwt`, and the
|
|
390
|
+
supporting `FetchproxySession` / `AuthPattern` types.
|
|
391
|
+
|
|
392
|
+
`createCachedTokenSource({ mint, bufferMs })` caches any minted token until
|
|
393
|
+
shortly before expiry with a single-flight mint and an `invalidate()` hook for
|
|
394
|
+
401-replay — wrap it around `createOAuth2Refresher` (musicbrainz), an ES256
|
|
395
|
+
self-mint (app-store-connect), or a login exchange (zola). `signEs256Jwt(pem,
|
|
396
|
+
payload, { header: { kid } })` is the P-256/`ieee-p1363` JWS signer those
|
|
397
|
+
self-minted-JWT APIs need (the decode counterparts live in `http`).
|
|
297
398
|
|
|
298
399
|
```ts
|
|
299
400
|
import { createAuthResolver, createOAuth2Refresher } from '@chrischall/mcp-utils';
|
|
@@ -462,6 +563,12 @@ registerBridgeHealthcheckTool({
|
|
|
462
563
|
});
|
|
463
564
|
```
|
|
464
565
|
|
|
566
|
+
Two optional hooks absorb the site-specific healthchecks workday / zillow /
|
|
567
|
+
etix hand-rolled: `classifyThrown(err)` maps the probe's thrown error to a
|
|
568
|
+
custom `{ kind, hint }` (e.g. an SSO bounce → `session_expired` with re-sign-in
|
|
569
|
+
copy; its hint wins the result hint), and `hints` overrides the default copy
|
|
570
|
+
per ladder arm (`{ timeout: 'DataDome may be challenging the tab — …' }`).
|
|
571
|
+
|
|
465
572
|
### `html` — scraping helpers *(subpath, optional peer)*
|
|
466
573
|
|
|
467
574
|
```ts
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createCachedTokenSource` — a tiny in-memory cache around any token mint.
|
|
3
|
+
*
|
|
4
|
+
* Consolidates the "cache `{ token, expiresAt }`, refresh a bit before expiry,
|
|
5
|
+
* single-flight the mint" shape hand-rolled in app-store-connect
|
|
6
|
+
* (`ensureToken`, ES256 self-mint), musicbrainz (`accessToken` around
|
|
7
|
+
* `createOAuth2Refresher`), and zola (`ensureSession` JWT refresh). The mint is
|
|
8
|
+
* injected, so the same source fronts an OAuth refresher, a JWT signer, or a
|
|
9
|
+
* login exchange.
|
|
10
|
+
*/
|
|
11
|
+
/** What a mint returns: the token plus (optionally) when it expires. */
|
|
12
|
+
export interface MintedToken {
|
|
13
|
+
/** The bearer/access token. */
|
|
14
|
+
token: string;
|
|
15
|
+
/** Absolute expiry (Date or epoch ms). Takes precedence over {@link ttlMs}. */
|
|
16
|
+
expiresAt?: Date | number;
|
|
17
|
+
/** Relative lifetime in ms, when the mint knows it (e.g. `expires_in * 1000`). */
|
|
18
|
+
ttlMs?: number;
|
|
19
|
+
}
|
|
20
|
+
/** Options for {@link createCachedTokenSource}. */
|
|
21
|
+
export interface CachedTokenSourceOptions {
|
|
22
|
+
/** Mint a fresh token (OAuth exchange, JWT sign, login…). */
|
|
23
|
+
mint: () => Promise<MintedToken>;
|
|
24
|
+
/** Refresh this many ms BEFORE the token's expiry. Defaults to 60 000. */
|
|
25
|
+
bufferMs?: number;
|
|
26
|
+
/** Lifetime assumed when the mint reports no expiry. Defaults to 3 600 000 (1 h). */
|
|
27
|
+
defaultTtlMs?: number;
|
|
28
|
+
/** Injectable clock (defaults to `Date.now`) — for tests. */
|
|
29
|
+
now?: () => number;
|
|
30
|
+
}
|
|
31
|
+
/** The token source returned by {@link createCachedTokenSource}. */
|
|
32
|
+
export interface CachedTokenSource {
|
|
33
|
+
/** A currently-valid token — cached, or freshly minted when absent/near expiry. */
|
|
34
|
+
getToken(): Promise<string>;
|
|
35
|
+
/** Drop the cached token so the next {@link getToken} re-mints (the 401-replay hook). */
|
|
36
|
+
invalidate(): void;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build a race-safe cached token source. Concurrent `getToken`s share one
|
|
40
|
+
* in-flight mint; a rejected mint is not cached (the next call retries);
|
|
41
|
+
* `invalidate()` is the reactive hook to call after an upstream 401 before
|
|
42
|
+
* replaying the request.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createCachedTokenSource(opts: CachedTokenSourceOptions): CachedTokenSource;
|
|
45
|
+
//# sourceMappingURL=cached-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cached-token.d.ts","sourceRoot":"","sources":["../../src/auth/cached-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,yFAAyF;IACzF,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,wBAAwB,GAAG,iBAAiB,CAmCzF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createCachedTokenSource` — a tiny in-memory cache around any token mint.
|
|
3
|
+
*
|
|
4
|
+
* Consolidates the "cache `{ token, expiresAt }`, refresh a bit before expiry,
|
|
5
|
+
* single-flight the mint" shape hand-rolled in app-store-connect
|
|
6
|
+
* (`ensureToken`, ES256 self-mint), musicbrainz (`accessToken` around
|
|
7
|
+
* `createOAuth2Refresher`), and zola (`ensureSession` JWT refresh). The mint is
|
|
8
|
+
* injected, so the same source fronts an OAuth refresher, a JWT signer, or a
|
|
9
|
+
* login exchange.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Build a race-safe cached token source. Concurrent `getToken`s share one
|
|
13
|
+
* in-flight mint; a rejected mint is not cached (the next call retries);
|
|
14
|
+
* `invalidate()` is the reactive hook to call after an upstream 401 before
|
|
15
|
+
* replaying the request.
|
|
16
|
+
*/
|
|
17
|
+
export function createCachedTokenSource(opts) {
|
|
18
|
+
const now = opts.now ?? Date.now;
|
|
19
|
+
const bufferMs = opts.bufferMs ?? 60_000;
|
|
20
|
+
const defaultTtlMs = opts.defaultTtlMs ?? 3_600_000;
|
|
21
|
+
let cached = null;
|
|
22
|
+
let inFlight = null;
|
|
23
|
+
const expiryOf = (minted) => {
|
|
24
|
+
if (minted.expiresAt !== undefined) {
|
|
25
|
+
return minted.expiresAt instanceof Date ? minted.expiresAt.getTime() : minted.expiresAt;
|
|
26
|
+
}
|
|
27
|
+
return now() + (minted.ttlMs ?? defaultTtlMs);
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
getToken() {
|
|
31
|
+
if (cached && cached.expiresAt - bufferMs > now())
|
|
32
|
+
return Promise.resolve(cached.token);
|
|
33
|
+
if (inFlight)
|
|
34
|
+
return inFlight;
|
|
35
|
+
const p = opts
|
|
36
|
+
.mint()
|
|
37
|
+
.then((minted) => {
|
|
38
|
+
cached = { token: minted.token, expiresAt: expiryOf(minted) };
|
|
39
|
+
return minted.token;
|
|
40
|
+
})
|
|
41
|
+
.finally(() => {
|
|
42
|
+
if (inFlight === p)
|
|
43
|
+
inFlight = null;
|
|
44
|
+
});
|
|
45
|
+
inFlight = p;
|
|
46
|
+
return p;
|
|
47
|
+
},
|
|
48
|
+
invalidate() {
|
|
49
|
+
cached = null;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=cached-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cached-token.js","sourceRoot":"","sources":["../../src/auth/cached-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAA8B;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IAEpD,IAAI,MAAM,GAAgD,IAAI,CAAC;IAC/D,IAAI,QAAQ,GAA2B,IAAI,CAAC;IAE5C,MAAM,QAAQ,GAAG,CAAC,MAAmB,EAAU,EAAE;QAC/C,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1F,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;YACN,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxF,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI;iBACX,IAAI,EAAE;iBACN,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9D,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,QAAQ,KAAK,CAAC;oBAAE,QAAQ,GAAG,IAAI,CAAC;YACtC,CAAC,CAAC,CAAC;YACL,QAAQ,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,CAAC;QACX,CAAC;QACD,UAAU;YACR,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `signEs256Jwt` — minimal ES256 (P-256 / SHA-256) JWS signer for APIs that
|
|
3
|
+
* authenticate with a self-minted JWT (App Store Connect's `kid`/`iss`/`aud`
|
|
4
|
+
* scheme). mcp-utils already DECODES JWTs (`decodeJwtExp` and friends); this is
|
|
5
|
+
* the signing counterpart, hoisted from app-store-connect's `signES256` +
|
|
6
|
+
* `mintJwt`.
|
|
7
|
+
*
|
|
8
|
+
* Uses `dsaEncoding: 'ieee-p1363'` (raw `r||s`) — the JOSE signature format —
|
|
9
|
+
* NOT the DER default, which upstreams reject.
|
|
10
|
+
*/
|
|
11
|
+
/** Options for {@link signEs256Jwt}. */
|
|
12
|
+
export interface SignEs256JwtOptions {
|
|
13
|
+
/** Extra header fields merged over `{ alg: 'ES256', typ: 'JWT' }` (e.g. `kid`). */
|
|
14
|
+
header?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sign a JWT with ES256. `privateKeyPem` is a PEM-encoded P-256 private key
|
|
18
|
+
* (PKCS#8 `.p8` contents); the payload is serialized verbatim — the caller
|
|
19
|
+
* supplies `iss` / `iat` / `exp` / `aud` per its API's rules. Returns the
|
|
20
|
+
* compact `header.payload.signature` JWS.
|
|
21
|
+
*/
|
|
22
|
+
export declare function signEs256Jwt(privateKeyPem: string, payload: Record<string, unknown>, opts?: SignEs256JwtOptions): string;
|
|
23
|
+
//# sourceMappingURL=es256.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es256.d.ts","sourceRoot":"","sources":["../../src/auth/es256.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,GAAE,mBAAwB,GAC7B,MAAM,CAOR"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `signEs256Jwt` — minimal ES256 (P-256 / SHA-256) JWS signer for APIs that
|
|
3
|
+
* authenticate with a self-minted JWT (App Store Connect's `kid`/`iss`/`aud`
|
|
4
|
+
* scheme). mcp-utils already DECODES JWTs (`decodeJwtExp` and friends); this is
|
|
5
|
+
* the signing counterpart, hoisted from app-store-connect's `signES256` +
|
|
6
|
+
* `mintJwt`.
|
|
7
|
+
*
|
|
8
|
+
* Uses `dsaEncoding: 'ieee-p1363'` (raw `r||s`) — the JOSE signature format —
|
|
9
|
+
* NOT the DER default, which upstreams reject.
|
|
10
|
+
*/
|
|
11
|
+
import { createSign } from 'node:crypto';
|
|
12
|
+
const b64url = (data) => (typeof data === 'string' ? Buffer.from(data, 'utf8') : data).toString('base64url');
|
|
13
|
+
/**
|
|
14
|
+
* Sign a JWT with ES256. `privateKeyPem` is a PEM-encoded P-256 private key
|
|
15
|
+
* (PKCS#8 `.p8` contents); the payload is serialized verbatim — the caller
|
|
16
|
+
* supplies `iss` / `iat` / `exp` / `aud` per its API's rules. Returns the
|
|
17
|
+
* compact `header.payload.signature` JWS.
|
|
18
|
+
*/
|
|
19
|
+
export function signEs256Jwt(privateKeyPem, payload, opts = {}) {
|
|
20
|
+
const header = { alg: 'ES256', typ: 'JWT', ...opts.header };
|
|
21
|
+
const signingInput = `${b64url(JSON.stringify(header))}.${b64url(JSON.stringify(payload))}`;
|
|
22
|
+
const signer = createSign('SHA256');
|
|
23
|
+
signer.update(signingInput);
|
|
24
|
+
const signature = signer.sign({ key: privateKeyPem, dsaEncoding: 'ieee-p1363' });
|
|
25
|
+
return `${signingInput}.${b64url(signature)}`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=es256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es256.js","sourceRoot":"","sources":["../../src/auth/es256.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAU,EAAE,CAC/C,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAQtF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,aAAqB,EACrB,OAAgC,EAChC,OAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5D,MAAM,YAAY,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;IACjF,OAAO,GAAG,YAAY,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AAChD,CAAC"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -234,4 +234,6 @@ export interface OAuth2RefreshResult {
|
|
|
234
234
|
* blow up a tool result.
|
|
235
235
|
*/
|
|
236
236
|
export declare function createOAuth2Refresher(opts: OAuth2RefresherOptions): () => Promise<OAuth2RefreshResult>;
|
|
237
|
+
export * from './cached-token.js';
|
|
238
|
+
export * from './es256.js';
|
|
237
239
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/index.js
CHANGED
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,4 +39,5 @@
|
|
|
39
39
|
* @param fn Async mapper, called with each `item` and its input `index`.
|
|
40
40
|
*/
|
|
41
41
|
export declare function mapWithConcurrency<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
42
|
+
export * from './single-flight.js';
|
|
42
43
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/concurrency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAad"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/concurrency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAad;AAED,cAAc,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/concurrency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;QAC1C,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/concurrency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;QAC1C,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `singleFlight` / `memoizeAsync` — in-flight promise coalescing.
|
|
3
|
+
*
|
|
4
|
+
* The fleet hand-rolls this shape at least nine times: honeybook's
|
|
5
|
+
* `apiVersionPromise` (self-clearing memoized fetch), infinitecampus's
|
|
6
|
+
* `loginInFlight`, onehome's `capturePromise`, vibo's `loginInFlight` +
|
|
7
|
+
* `reauthInFlight`, alltrails's `ensureApiKey`/`bridgeReady`, tripadvisor's
|
|
8
|
+
* `bridgeReady`, artsonia's `ensureStarted`, and redfin's promise-caching
|
|
9
|
+
* `LocalityPoolCache`. Two primitives cover all of them:
|
|
10
|
+
*
|
|
11
|
+
* - {@link singleFlight} — one shared in-flight promise, cleared on settle
|
|
12
|
+
* (the login/refresh/bridge-ready guard).
|
|
13
|
+
* - {@link memoizeAsync} — a keyed promise cache that coalesces concurrent
|
|
14
|
+
* loads and evicts a rejected load so the next call retries (the keyed
|
|
15
|
+
* loader cache).
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Wrap an async `fn` so concurrent calls share ONE in-flight invocation. The
|
|
19
|
+
* in-flight promise is cleared once it settles, so the next call starts fresh
|
|
20
|
+
* and a rejection doesn't poison later callers (every waiter of the failed
|
|
21
|
+
* flight still sees the rejection).
|
|
22
|
+
*
|
|
23
|
+
* This is the guard `createOAuth2Refresher` embeds, exposed standalone for
|
|
24
|
+
* login flows, bridge-start, and API-version fetches.
|
|
25
|
+
*/
|
|
26
|
+
export declare function singleFlight<T>(fn: () => Promise<T>): () => Promise<T>;
|
|
27
|
+
/** The keyed async cache returned by {@link memoizeAsync}. */
|
|
28
|
+
export interface AsyncMemo<K, V> {
|
|
29
|
+
/** Load (or return the cached/in-flight load of) the value for `key`. */
|
|
30
|
+
get(key: K): Promise<V>;
|
|
31
|
+
/** Drop one key so the next {@link get} reloads it. */
|
|
32
|
+
delete(key: K): void;
|
|
33
|
+
/** Drop everything. */
|
|
34
|
+
clear(): void;
|
|
35
|
+
/** Number of cached (or in-flight) keys. */
|
|
36
|
+
readonly size: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Memoize an async `loader` by key, caching the **promise** so concurrent
|
|
40
|
+
* `get`s of the same key coalesce onto one load. A load that REJECTS is
|
|
41
|
+
* evicted as it settles — the rejection reaches every coalesced waiter, but
|
|
42
|
+
* the next `get` retries instead of replaying the cached failure.
|
|
43
|
+
*
|
|
44
|
+
* `delete`/`clear` cover invalidation and the `_reset*` test hooks the donor
|
|
45
|
+
* repos (redfin, zola) exposed by hand.
|
|
46
|
+
*/
|
|
47
|
+
export declare function memoizeAsync<K, V>(loader: (key: K) => Promise<V>): AsyncMemo<K, V>;
|
|
48
|
+
//# sourceMappingURL=single-flight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-flight.d.ts","sourceRoot":"","sources":["../../src/concurrency/single-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAUtE;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,CAAC;IAC7B,yEAAyE;IACzE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,uDAAuD;IACvD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAC;IACd,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBlF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `singleFlight` / `memoizeAsync` — in-flight promise coalescing.
|
|
3
|
+
*
|
|
4
|
+
* The fleet hand-rolls this shape at least nine times: honeybook's
|
|
5
|
+
* `apiVersionPromise` (self-clearing memoized fetch), infinitecampus's
|
|
6
|
+
* `loginInFlight`, onehome's `capturePromise`, vibo's `loginInFlight` +
|
|
7
|
+
* `reauthInFlight`, alltrails's `ensureApiKey`/`bridgeReady`, tripadvisor's
|
|
8
|
+
* `bridgeReady`, artsonia's `ensureStarted`, and redfin's promise-caching
|
|
9
|
+
* `LocalityPoolCache`. Two primitives cover all of them:
|
|
10
|
+
*
|
|
11
|
+
* - {@link singleFlight} — one shared in-flight promise, cleared on settle
|
|
12
|
+
* (the login/refresh/bridge-ready guard).
|
|
13
|
+
* - {@link memoizeAsync} — a keyed promise cache that coalesces concurrent
|
|
14
|
+
* loads and evicts a rejected load so the next call retries (the keyed
|
|
15
|
+
* loader cache).
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Wrap an async `fn` so concurrent calls share ONE in-flight invocation. The
|
|
19
|
+
* in-flight promise is cleared once it settles, so the next call starts fresh
|
|
20
|
+
* and a rejection doesn't poison later callers (every waiter of the failed
|
|
21
|
+
* flight still sees the rejection).
|
|
22
|
+
*
|
|
23
|
+
* This is the guard `createOAuth2Refresher` embeds, exposed standalone for
|
|
24
|
+
* login flows, bridge-start, and API-version fetches.
|
|
25
|
+
*/
|
|
26
|
+
export function singleFlight(fn) {
|
|
27
|
+
let inFlight = null;
|
|
28
|
+
return function run() {
|
|
29
|
+
if (inFlight)
|
|
30
|
+
return inFlight;
|
|
31
|
+
const p = fn().finally(() => {
|
|
32
|
+
if (inFlight === p)
|
|
33
|
+
inFlight = null;
|
|
34
|
+
});
|
|
35
|
+
inFlight = p;
|
|
36
|
+
return p;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Memoize an async `loader` by key, caching the **promise** so concurrent
|
|
41
|
+
* `get`s of the same key coalesce onto one load. A load that REJECTS is
|
|
42
|
+
* evicted as it settles — the rejection reaches every coalesced waiter, but
|
|
43
|
+
* the next `get` retries instead of replaying the cached failure.
|
|
44
|
+
*
|
|
45
|
+
* `delete`/`clear` cover invalidation and the `_reset*` test hooks the donor
|
|
46
|
+
* repos (redfin, zola) exposed by hand.
|
|
47
|
+
*/
|
|
48
|
+
export function memoizeAsync(loader) {
|
|
49
|
+
const cache = new Map();
|
|
50
|
+
return {
|
|
51
|
+
get(key) {
|
|
52
|
+
const hit = cache.get(key);
|
|
53
|
+
if (hit)
|
|
54
|
+
return hit;
|
|
55
|
+
const p = loader(key);
|
|
56
|
+
cache.set(key, p);
|
|
57
|
+
// Evict a failed load so the next get() retries; guard against the slot
|
|
58
|
+
// having been deleted/replaced while this load was in flight.
|
|
59
|
+
p.catch(() => {
|
|
60
|
+
if (cache.get(key) === p)
|
|
61
|
+
cache.delete(key);
|
|
62
|
+
});
|
|
63
|
+
return p;
|
|
64
|
+
},
|
|
65
|
+
delete(key) {
|
|
66
|
+
cache.delete(key);
|
|
67
|
+
},
|
|
68
|
+
clear() {
|
|
69
|
+
cache.clear();
|
|
70
|
+
},
|
|
71
|
+
get size() {
|
|
72
|
+
return cache.size;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=single-flight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-flight.js","sourceRoot":"","sources":["../../src/concurrency/single-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAI,EAAoB;IAClD,IAAI,QAAQ,GAAsB,IAAI,CAAC;IACvC,OAAO,SAAS,GAAG;QACjB,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,QAAQ,KAAK,CAAC;gBAAE,QAAQ,GAAG,IAAI,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAcD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAO,MAA8B;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;IACvC,OAAO;QACL,GAAG,CAAC,GAAM;YACR,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;YACpB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClB,wEAAwE;YACxE,8DAA8D;YAC9D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACX,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,CAAC,GAAM;YACX,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,KAAK;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,IAAI;YACN,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
|