@chrischall/mcp-utils 0.10.4 → 0.11.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 +123 -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 +26 -1
- package/dist/fetchproxy/index.d.ts.map +1 -1
- package/dist/fetchproxy/index.js +38 -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 +58 -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 +460 -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 +1 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ 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`) |
|
|
@@ -69,7 +69,13 @@ the server instance without connecting a transport.
|
|
|
69
69
|
### `response` — tool-result formatting
|
|
70
70
|
|
|
71
71
|
`textResult` / `jsonResult` (alias), `rawTextResult`, `imageResult`,
|
|
72
|
-
`errorResult`, `flattenJsonApi`, `deepMapStringField
|
|
72
|
+
`errorResult`, `flattenJsonApi`, `deepMapStringField`, `pruneUndefined`,
|
|
73
|
+
`toArray`.
|
|
74
|
+
|
|
75
|
+
`pruneUndefined(obj)` shallow-copies an object dropping `undefined`-valued keys
|
|
76
|
+
(the compact-projection idiom: skylight's `compact`, viator/alltrails' `prune`);
|
|
77
|
+
`toArray(v)` coerces `T | T[] | null | undefined` to `T[]` (the XML→JSON
|
|
78
|
+
single-item guard from canvas-parent / infinitecampus).
|
|
73
79
|
|
|
74
80
|
```ts
|
|
75
81
|
import { textResult, errorResult, flattenJsonApi, deepMapStringField } from '@chrischall/mcp-utils';
|
|
@@ -87,7 +93,10 @@ deepMapStringField(payload, 'eventDate', dmyToIso);
|
|
|
87
93
|
`McpToolError` and its subclasses (`SessionNotAuthenticatedError`,
|
|
88
94
|
`BotWallError`, `RateLimitError`, `UnreachableError`, `ModeMismatchError`),
|
|
89
95
|
plus `createHelpfulError`, `wrapToolError`, `truncateErrorMessage`,
|
|
90
|
-
`redactSecrets`, and `messageOf`. `
|
|
96
|
+
`redactSecrets`, `maskSecret`, and `messageOf`. `BotWallError` takes an optional
|
|
97
|
+
`{ vendor }` (e.g. `'DataDome'`) woven into the message and exposed as a field;
|
|
98
|
+
`maskSecret(value)` renders a `first8…last4` fingerprint for set-credential
|
|
99
|
+
confirmations (short values are fully hidden). `redactSecrets` scrubs `Bearer`/`Basic` auth
|
|
91
100
|
headers, `Cookie`/`Set-Cookie` values (cookie names stay visible), JWTs,
|
|
92
101
|
well-known API-key shapes (`sk-…`, `ghp_…`, `xox?-…`, `AIza…`, `AKIA…`,
|
|
93
102
|
`whsec_…`), and secret-bearing URL query params; `truncateErrorMessage` applies
|
|
@@ -113,8 +122,13 @@ tool surface can show the user.
|
|
|
113
122
|
|
|
114
123
|
### `config` — hardened env/config
|
|
115
124
|
|
|
116
|
-
`readEnvVar`, `requireEnvVar`, `parseBoolEnv`, `readPortEnv`, `
|
|
117
|
-
`loadDotenvSafely`, `createCachedJsonArrayLoader`.
|
|
125
|
+
`readEnvVar`, `requireEnvVar`, `parseBoolEnv`, `readPortEnv`, `readIntEnv`,
|
|
126
|
+
`readTtlMsEnv`, `expandPath`, `loadDotenvSafely`, `createCachedJsonArrayLoader`.
|
|
127
|
+
|
|
128
|
+
`readIntEnv` is the general hardened integer reader (strict parse + optional
|
|
129
|
+
`min`/`max`); `readTtlMsEnv(key, defaultMs)` reads a TTL in **seconds** and
|
|
130
|
+
returns **milliseconds**, honoring an explicit `0` as "disabled" — the
|
|
131
|
+
`<SVC>_CACHE_TTL` reader shared by the response-cache consumers.
|
|
118
132
|
|
|
119
133
|
```ts
|
|
120
134
|
import { requireEnvVar, parseBoolEnv, readPortEnv, expandPath } from '@chrischall/mcp-utils';
|
|
@@ -153,9 +167,17 @@ A successful parse is cached; a missing/unreadable file, invalid JSON, or a
|
|
|
153
167
|
non-string-array logs one stderr warning and negative-caches (returns defaults
|
|
154
168
|
without re-reading). Pass `readFile` to inject a reader in tests.
|
|
155
169
|
|
|
156
|
-
### `fs` — streaming file helpers (uploads)
|
|
170
|
+
### `fs` — streaming file helpers (uploads) & binary output
|
|
171
|
+
|
|
172
|
+
`fileBlob`, `readFileHead`, `resolveOutputDir`, `uniquePath`,
|
|
173
|
+
`writeBinaryOutput`, `sniffMimeBytes`.
|
|
157
174
|
|
|
158
|
-
|
|
175
|
+
The binary-output kit (hoisted from gemini + flightaware) is the fleet
|
|
176
|
+
convention for tools that generate bytes: `resolveOutputDir(perCall,
|
|
177
|
+
'<SVC>_OUTPUT_DIR')` resolves arg → env → cwd (creating the dir),
|
|
178
|
+
`writeBinaryOutput({ dir, baseName, base64, mimeType })` writes to a
|
|
179
|
+
**non-overwriting** path (`name.png`, `name-2.png`, …) and returns it, and
|
|
180
|
+
`sniffMimeBytes` magic-byte-detects PNG/JPEG/WebP/GIF.
|
|
159
181
|
|
|
160
182
|
```ts
|
|
161
183
|
import { fileBlob, readFileHead } from '@chrischall/mcp-utils';
|
|
@@ -177,9 +199,11 @@ constant memory instead of a 20 MB Buffer.
|
|
|
177
199
|
|
|
178
200
|
`createApiClient` plus building blocks: `buildQueryString`, `buildOptionalBody`,
|
|
179
201
|
`formatApiError`, `parseLinkHeader`, `parseCookieJar`, `parseCookieHeader`,
|
|
180
|
-
`runBoundedBatch`,
|
|
181
|
-
`
|
|
182
|
-
`
|
|
202
|
+
`runBoundedBatch`, `createThrottle`, `createResponseCache`, `parseRetryAfterMs`,
|
|
203
|
+
`splitHost`, `buildUserAgent`, `parseContentDispositionFilename`, JWT helpers
|
|
204
|
+
(`decodeJwtExp`, `decodeJwtSessionId`, `decodeJwtClaim`, `validateJwtExpiry`),
|
|
205
|
+
and the `ApiError` / `UpstreamHttpError` / `UnauthorizedError` /
|
|
206
|
+
`RateLimitedError` / `RequestTimeoutError` classes.
|
|
183
207
|
|
|
184
208
|
`decodeJwtClaim(token, claim)` is the generic single-claim reader — returns the
|
|
185
209
|
raw claim value (`unknown`) or `undefined` for an undecodable token / absent
|
|
@@ -203,6 +227,23 @@ const data = await api.get('/v1/things', { query: { page: 2 } });
|
|
|
203
227
|
`RequestTimeoutError` instead of hanging the tool call. A 429 retry gets a fresh
|
|
204
228
|
timeout. Omit it to keep the previous unbounded behavior.
|
|
205
229
|
|
|
230
|
+
`retry` also accepts `statuses` (e.g. `[429, 503]`), `honorRetryAfter: true`
|
|
231
|
+
(sleep the response's `Retry-After` instead of the fixed `delayMs`, bounded by
|
|
232
|
+
`maxRetryAfterMs`, default 30 s — hoisted from getyourguide / musicbrainz /
|
|
233
|
+
viator / tripadvisor), and the standalone `parseRetryAfterMs(header)` for custom
|
|
234
|
+
clients.
|
|
235
|
+
|
|
236
|
+
`api.fetchRaw(method, path)` is the binary path `fetchJson` can't express —
|
|
237
|
+
returns `{ status, contentType, headers, bytes }` with the same 401/429/error
|
|
238
|
+
mapping (gzip sales reports, PNG maps, attachment downloads).
|
|
239
|
+
|
|
240
|
+
`createResponseCache({ ttlMs: { dynamic, static }, maxEntries })` is the bounded
|
|
241
|
+
tiered-TTL response cache for billed / rate-limited reads (flightaware / viator
|
|
242
|
+
/ tripadvisor): key on the request path (and body for POST-reads), route
|
|
243
|
+
reference data through the long `static` tier via
|
|
244
|
+
`fetchThrough(key, load, 'static')`, and pair the TTLs with `readTtlMsEnv`.
|
|
245
|
+
Writes are never cached.
|
|
246
|
+
|
|
206
247
|
`parseCookieHeader(header)` parses an inbound *request* `Cookie:` header
|
|
207
248
|
(`name=value; name2=value2`) into a `Record<string, string>` (first `=` splits,
|
|
208
249
|
so values may contain `=`; last value wins on a duplicate name). It's the
|
|
@@ -234,10 +275,18 @@ a single hung row can't wedge the call. It always returns a full-length,
|
|
|
234
275
|
input-ordered array. `setTimer`/`clearTimer` are injectable for tests. This
|
|
235
276
|
hoists zillow's bulk-tool deadline + `pending`-backfill primitive.
|
|
236
277
|
|
|
237
|
-
### `concurrency` — bounded async map
|
|
278
|
+
### `concurrency` — bounded async map & single-flight
|
|
238
279
|
|
|
239
|
-
`mapWithConcurrency` —
|
|
240
|
-
|
|
280
|
+
`mapWithConcurrency`, `singleFlight`, `memoizeAsync` — zero-dependency async
|
|
281
|
+
primitives.
|
|
282
|
+
|
|
283
|
+
`singleFlight(fn)` shares ONE in-flight invocation across concurrent callers
|
|
284
|
+
(cleared on settle; a rejection doesn't poison the next call) — the
|
|
285
|
+
login/refresh/bridge-ready guard hand-rolled in honeybook / infinitecampus /
|
|
286
|
+
onehome / vibo / alltrails / tripadvisor / artsonia. `memoizeAsync(loader)` is
|
|
287
|
+
the keyed variant: a promise cache that coalesces concurrent loads per key and
|
|
288
|
+
evicts rejected loads so the next `get` retries (redfin's `LocalityPoolCache`),
|
|
289
|
+
with `delete`/`clear` for invalidation and test hooks.
|
|
241
290
|
|
|
242
291
|
```ts
|
|
243
292
|
import { mapWithConcurrency } from '@chrischall/mcp-utils';
|
|
@@ -256,7 +305,8 @@ plus per-item backfill rather than a plain all-or-nothing map.
|
|
|
256
305
|
|
|
257
306
|
### `dates` — date-format converters
|
|
258
307
|
|
|
259
|
-
`isoToDmy`, `dmyToIso`, `isoToCompactTimestamp
|
|
308
|
+
`isoToDmy`, `dmyToIso`, `isoToCompactTimestamp`, `todayIso`, `toIsoDateUtc`,
|
|
309
|
+
`shiftIsoDate`, `ensureSeconds`. For upstreams that don't speak
|
|
260
310
|
ISO 8601, so a server can keep its surface ISO (`yyyy-MM-dd`) and translate at
|
|
261
311
|
the API boundary. Pair with `deepMapStringField` to normalize a date field
|
|
262
312
|
across a whole response.
|
|
@@ -268,13 +318,56 @@ const apiDate = isoToDmy('2025-08-28'); // '28-08-2025' (request
|
|
|
268
318
|
deepMapStringField(payload, 'eventDate', dmyToIso); // '28-08-2025' → '2025-08-28' (response)
|
|
269
319
|
```
|
|
270
320
|
|
|
321
|
+
### `scrape` — SSR JSON-store & page extraction (zero-dep)
|
|
322
|
+
|
|
323
|
+
`decodeHtmlEntities`, `stripHtml`, `sanitizeJsLiterals`, `matchBalanced`,
|
|
324
|
+
`extractJsonAfterMarker`, `extractJsonLdBlocks`, `findJsonLdEntity`,
|
|
325
|
+
`ogContent`, `findArrayByShape`, `deepCollectArrays`, `deepFindObject`,
|
|
326
|
+
`isCloudflareChallenge`, `stripJsonGuard`.
|
|
327
|
+
|
|
328
|
+
Pure string/JSON primitives for server-rendered pages — no `node-html-parser`
|
|
329
|
+
(DOM-level scraping stays in the [`/html`](#html) subpath). Consolidates the SSR
|
|
330
|
+
JSON-store stack re-implemented across musescore / tock / zillow / opentable /
|
|
331
|
+
tripadvisor / etix:
|
|
332
|
+
|
|
333
|
+
```ts
|
|
334
|
+
import {
|
|
335
|
+
extractJsonAfterMarker, findJsonLdEntity, ogContent,
|
|
336
|
+
findArrayByShape, isCloudflareChallenge, stripJsonGuard,
|
|
337
|
+
} from '@chrischall/mcp-utils';
|
|
338
|
+
|
|
339
|
+
// A redux/__NEXT_DATA__-style store (JS literals repaired via sanitize):
|
|
340
|
+
const store = extractJsonAfterMarker(html, ['window.$REDUX_STATE', '"appState"'], { sanitize: true });
|
|
341
|
+
|
|
342
|
+
// schema.org / OpenGraph readers:
|
|
343
|
+
const event = findJsonLdEntity(html, 'Event'); // checks blocks, @graph, mainEntity
|
|
344
|
+
const title = ogContent(html, 'og:title');
|
|
345
|
+
|
|
346
|
+
// Drift-tolerant array location + anti-XSSI guard stripping:
|
|
347
|
+
const homes = findArrayByShape(pageProps, ['savedHomesList'], (f) => !!f && typeof f === 'object');
|
|
348
|
+
const data = JSON.parse(stripJsonGuard(body)); // )]}' while(1); for(;;); {}&&
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
`isCloudflareChallenge` matches the DEFINITIVE interstitial markers only
|
|
352
|
+
(`_cf_chl_opt`, `<title>Just a moment`) — never `cdn-cgi/challenge-platform`,
|
|
353
|
+
which Cloudflare inlines on cleared pages too. `decodeHtmlEntities` decodes
|
|
354
|
+
`&` LAST so attribute-escaped JSON survives one level; `matchBalanced` is
|
|
355
|
+
the string/escape-aware bracket walker regex can't replace.
|
|
356
|
+
|
|
271
357
|
### `zod` — schema atoms
|
|
272
358
|
|
|
273
359
|
Reusable schemas (`PositiveInt`, `NonNegInt`, `NonEmptyString`, `IsoDate`,
|
|
274
360
|
`IsoTime`, `NumericIdString`, `SafePathSegment`, `schemaOrigin`,
|
|
275
361
|
`schemaConfirm`), pagination helpers
|
|
276
362
|
(`paginationSchema`, `pageSchema`, `calculateOffset`), tool-annotation builders
|
|
277
|
-
(`toolAnnotations`),
|
|
363
|
+
(`toolAnnotations`), time normalizers (`extractTime`, `normalizeTime`), and the
|
|
364
|
+
lenient response validator `parseLenient`.
|
|
365
|
+
|
|
366
|
+
`parseLenient(schema, raw, { label, context, mode? })` is the degrade-never-break
|
|
367
|
+
validator for reverse-engineered APIs (alltrails' `parseAllTrails`, ofw's
|
|
368
|
+
`parseOFW`, getyourguide's `parseGYG`): on success it returns the parsed data;
|
|
369
|
+
on drift it warns to **stderr** with the precise issue paths and returns the
|
|
370
|
+
RAW response (or throws an `McpToolError` in `mode: 'strict'` for write paths).
|
|
278
371
|
|
|
279
372
|
```ts
|
|
280
373
|
import { paginationSchema, calculateOffset, toolAnnotations } from '@chrischall/mcp-utils';
|
|
@@ -292,8 +385,15 @@ injection.
|
|
|
292
385
|
### `auth` — auth resolver skeletons
|
|
293
386
|
|
|
294
387
|
`createAuthResolver`, `resolveAuthPattern`, `sessionLoginFlow`,
|
|
295
|
-
`createOAuth2Refresher`, and the
|
|
296
|
-
`AuthPattern` types.
|
|
388
|
+
`createOAuth2Refresher`, `createCachedTokenSource`, `signEs256Jwt`, and the
|
|
389
|
+
supporting `FetchproxySession` / `AuthPattern` types.
|
|
390
|
+
|
|
391
|
+
`createCachedTokenSource({ mint, bufferMs })` caches any minted token until
|
|
392
|
+
shortly before expiry with a single-flight mint and an `invalidate()` hook for
|
|
393
|
+
401-replay — wrap it around `createOAuth2Refresher` (musicbrainz), an ES256
|
|
394
|
+
self-mint (app-store-connect), or a login exchange (zola). `signEs256Jwt(pem,
|
|
395
|
+
payload, { header: { kid } })` is the P-256/`ieee-p1363` JWS signer those
|
|
396
|
+
self-minted-JWT APIs need (the decode counterparts live in `http`).
|
|
297
397
|
|
|
298
398
|
```ts
|
|
299
399
|
import { createAuthResolver, createOAuth2Refresher } from '@chrischall/mcp-utils';
|
|
@@ -462,6 +562,12 @@ registerBridgeHealthcheckTool({
|
|
|
462
562
|
});
|
|
463
563
|
```
|
|
464
564
|
|
|
565
|
+
Two optional hooks absorb the site-specific healthchecks workday / zillow /
|
|
566
|
+
etix hand-rolled: `classifyThrown(err)` maps the probe's thrown error to a
|
|
567
|
+
custom `{ kind, hint }` (e.g. an SSO bounce → `session_expired` with re-sign-in
|
|
568
|
+
copy; its hint wins the result hint), and `hints` overrides the default copy
|
|
569
|
+
per ladder arm (`{ timeout: 'DataDome may be challenging the tab — …' }`).
|
|
570
|
+
|
|
465
571
|
### `html` — scraping helpers *(subpath, optional peer)*
|
|
466
572
|
|
|
467
573
|
```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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAY9E,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAExE,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,MAAM,EAAE,KAAK,GAAG,YAAY,CAAC;CAC9B;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,SAAS,EAAE,WAAW,CAAC;IACvB,kFAAkF;IAClF,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,GAAG,SAAS,CAAC;IAChE,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAuBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,GACxB,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAkEnC;AAMD,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAerF;AAMD,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA+D7B;AAMD,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,sBAAsB,GAC3B,MAAM,OAAO,CAAC,mBAAmB,CAAC,CA0EpC"}
|
|
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"}
|