@rotorsoft/act-ops 0.0.1 → 0.1.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 +26 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/idempotency/in-memory.d.ts +27 -9
- package/dist/@types/idempotency/in-memory.d.ts.map +1 -1
- package/dist/@types/idempotency/index.d.ts +32 -0
- package/dist/@types/idempotency/index.d.ts.map +1 -0
- package/dist/@types/idempotency/min-safe-ttl.d.ts +59 -0
- package/dist/@types/idempotency/min-safe-ttl.d.ts.map +1 -0
- package/dist/{index.cjs → idempotency/index.cjs} +37 -7
- package/dist/idempotency/index.cjs.map +1 -0
- package/dist/idempotency/index.js +68 -0
- package/dist/idempotency/index.js.map +1 -0
- package/package.json +5 -8
- package/dist/@types/index.d.ts +0 -23
- package/dist/@types/index.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js +0 -39
- package/dist/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -25,11 +25,24 @@ No peer dependencies. Drop it next to whatever framework — or no framework at
|
|
|
25
25
|
## Quick start
|
|
26
26
|
|
|
27
27
|
```ts
|
|
28
|
-
import { InMemoryIdempotencyStore } from "@rotorsoft/act-ops";
|
|
28
|
+
import { InMemoryIdempotencyStore } from "@rotorsoft/act-ops/idempotency";
|
|
29
29
|
|
|
30
|
+
// Either set ttlMs explicitly…
|
|
30
31
|
const dedup = new InMemoryIdempotencyStore({
|
|
31
|
-
ttlMs: 24 * 60 * 60 * 1000, //
|
|
32
|
-
maxEntries: 50_000,
|
|
32
|
+
ttlMs: 24 * 60 * 60 * 1000, // 24h covers any reasonable retry envelope
|
|
33
|
+
maxEntries: 50_000,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// …or describe the sender's retry profile and let the store size
|
|
37
|
+
// the dedup window correctly (per-retry backoff + per-attempt
|
|
38
|
+
// timeouts × default 4× safety factor; jitter honored).
|
|
39
|
+
const sized = new InMemoryIdempotencyStore({
|
|
40
|
+
retryProfile: {
|
|
41
|
+
maxRetries: 5,
|
|
42
|
+
backoff: { strategy: "exponential", baseMs: 200, maxMs: 30_000 },
|
|
43
|
+
timeoutMs: 2_000,
|
|
44
|
+
},
|
|
45
|
+
maxEntries: 50_000,
|
|
33
46
|
});
|
|
34
47
|
|
|
35
48
|
// In any receiver — tRPC, Express, Fastify, Hono, a Kafka consumer, …
|
|
@@ -43,11 +56,19 @@ await applyEventToAggregate(event);
|
|
|
43
56
|
|
|
44
57
|
The in-memory implementation is sync; durable adapters (Postgres, Redis) return a `Promise<boolean>` — the port's union return type covers both, so the call site is identical.
|
|
45
58
|
|
|
46
|
-
|
|
59
|
+
The `retryProfile` option captures the math that every receiver otherwise computes by hand and many get wrong — the dedup window has to outlast the sender's full retry envelope, otherwise a key expires before the sender finishes retrying and the side effect runs twice. Pass the sender's `{ maxRetries, backoff?, timeoutMs }` and the store sizes the window for you. The full math (per-retry sums per strategy, jitter worst-case 1.5×, default 4× safety factor) is documented inline on `RetryProfile` and worked through in the [external integration guide](https://rotorsoft.github.io/act-root/docs/guides/external-integration#ttl-sizing).
|
|
60
|
+
|
|
61
|
+
## Subpath layout
|
|
62
|
+
|
|
63
|
+
The package follows a subpath-export-per-domain shape, matching `@rotorsoft/act-http`. All idempotency primitives ship from `@rotorsoft/act-ops/idempotency`; future domains (poison-message classifiers, retry-budget helpers, …) will land on their own subpaths (`@rotorsoft/act-ops/poison`, `@rotorsoft/act-ops/retry`). Each subpath is its own ESM/CJS entry — pay for what you import.
|
|
64
|
+
|
|
65
|
+
## API — `@rotorsoft/act-ops/idempotency`
|
|
47
66
|
|
|
48
67
|
- **`IdempotencyStore`** — the contract. One method, `claim(key, now?): boolean | Promise<boolean>`. Returns `true` when the key was fresh (and is now recorded), `false` when it was already present. Implementations should preserve records for at least the sender's full retry envelope.
|
|
49
68
|
- **`InMemoryIdempotencyStore`** — bounded LRU + TTL reference implementation. Single-process only; for multi-process receivers swap for a durable adapter (Postgres unique index, Redis `SET NX`, …) without changing the call site.
|
|
50
|
-
- **`InMemoryIdempotencyStoreOptions`** —
|
|
69
|
+
- **`InMemoryIdempotencyStoreOptions`** — `{ ttlMs?, retryProfile?, maxEntries? }`. Set `ttlMs` directly, or pass `retryProfile` and the store derives the safe window. When both are supplied, `ttlMs` wins.
|
|
70
|
+
- **`RetryProfile`** — `{ maxRetries, backoff?, timeoutMs, safetyFactor? }`. The sender's retry shape, used by `InMemoryIdempotencyStore` to derive its window. The `backoff` field is typed structurally inline so it accepts the framework's `BackoffOptions` without a cast — but this package doesn't reinvent or re-export the type, preserving the zero-act-dep property.
|
|
71
|
+
- **`minSafeTtl(profile): number`** — the derivation the in-memory store uses internally, exported for **adapter authors**. Durable adapters (e.g. the future `PostgresIdempotencyStore`) import this from `@rotorsoft/act-ops/idempotency` so every adapter applies the same math when given a `retryProfile` option. Application developers don't typically call this directly — they pass `retryProfile` to the store and let the store call it.
|
|
51
72
|
|
|
52
73
|
## Why a Store and not a Cache
|
|
53
74
|
|
package/dist/.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.full.d.ts","../src/idempotency/port.ts","../src/idempotency/in-memory.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.7/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.7/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.7/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.7/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/globals.d.ts"],"fileIdsList":[[66,71,135,143,147,150,152,153,154,166],[71,135,143,147,150,152,153,154,166],[66,67,71,135,143,147,150,152,153,154,166],[71,135,143,147,150,152,153,154,166,222,223],[71,132,133,135,143,147,150,152,153,154,166],[71,134,135,143,147,150,152,153,154,166],[135,143,147,150,152,153,154,166],[71,135,143,147,150,152,153,154,166,175],[71,135,136,141,143,146,147,150,152,153,154,156,166,171,184],[71,135,136,137,143,146,147,150,152,153,154,166],[71,135,138,143,147,150,152,153,154,166,185],[71,135,139,140,143,147,150,152,153,154,157,166],[71,135,140,143,147,150,152,153,154,166,171,181],[71,135,141,143,146,147,150,152,153,154,156,166],[71,134,135,142,143,147,150,152,153,154,166],[71,135,143,144,147,150,152,153,154,166],[71,135,143,145,146,147,150,152,153,154,166],[71,134,135,143,146,147,150,152,153,154,166],[71,135,143,146,147,148,150,152,153,154,166,171,184],[71,135,143,146,147,148,150,152,153,154,166,171,173,175],[71,122,135,143,146,147,149,150,152,153,154,156,166,171,184],[71,135,143,146,147,149,150,152,153,154,156,166,171,181,184],[71,135,143,147,149,150,151,152,153,154,166,171,181,184],[69,70,71,72,73,74,75,76,77,78,79,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[71,135,143,146,147,150,152,153,154,166],[71,135,143,147,150,152,154,166],[71,135,143,147,150,152,153,154,155,166,184],[71,135,143,146,147,150,152,153,154,156,166,171],[71,135,143,147,150,152,153,154,157,166],[71,135,143,147,150,152,153,154,158,166],[71,135,143,146,147,150,152,153,154,161,166],[71,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191],[71,135,143,147,150,152,153,154,163,166],[71,135,143,147,150,152,153,154,164,166],[71,135,140,143,147,150,152,153,154,156,166,175],[71,135,143,146,147,150,152,153,154,166,167],[71,135,143,147,150,152,153,154,166,168,185,188],[71,135,143,146,147,150,152,153,154,166,171,174,175],[71,135,143,147,150,152,153,154,166,172,175],[71,135,143,147,150,152,153,154,166,173],[71,135,143,147,150,152,153,154,166,175,185],[71,135,143,147,150,152,153,154,166,176],[71,132,135,143,147,150,152,153,154,166,171,178,184],[71,135,143,147,150,152,153,154,166,171,177],[71,135,143,146,147,150,152,153,154,166,179,180],[71,135,143,147,150,152,153,154,166,179,180],[71,135,140,143,147,150,152,153,154,156,166,171,181],[71,135,143,147,150,152,153,154,166,182],[71,135,143,147,150,152,153,154,156,166,183],[71,135,143,147,149,150,152,153,154,164,166,184],[71,135,143,147,150,152,153,154,166,185,186],[71,135,140,143,147,150,152,153,154,166,186],[71,135,143,147,150,152,153,154,166,171,187],[71,135,143,147,150,152,153,154,155,166,188],[71,135,143,147,150,152,153,154,166,189],[71,135,138,143,147,150,152,153,154,166],[71,135,140,143,147,150,152,153,154,166],[71,135,143,147,150,152,153,154,166,185],[71,122,135,143,147,150,152,153,154,166],[71,135,143,147,150,152,153,154,166,184],[71,135,143,147,150,152,153,154,166,190],[71,135,143,147,150,152,153,154,161,166],[71,135,143,147,150,152,153,154,166,180],[71,122,135,143,146,147,148,150,152,153,154,161,166,171,175,184,187,188,190],[71,135,143,147,150,152,153,154,166,171,191],[71,135,143,147,150,152,153,154,166,173,192],[71,135,143,147,150,152,153,154,166,195,201,219,220,221,224],[71,135,143,147,150,152,153,154,166,231],[71,135,143,147,150,152,153,154,166,231,232],[71,135,143,147,150,152,153,154,166,199,201,202],[71,135,143,147,150,152,153,154,166,199,201],[71,135,143,147,150,152,153,154,166,199],[71,135,143,147,150,152,153,154,166,194,199,210,211],[71,135,143,147,150,152,153,154,166,194,199,210],[71,135,143,147,150,152,153,154,166,218],[71,135,143,147,150,152,153,154,166,194,200],[71,135,143,147,150,152,153,154,166,194],[71,135,143,147,150,152,153,154,166,196],[71,135,143,147,150,152,153,154,166,194,195,196,197,198],[71,135,143,147,150,152,153,154,166,237,238],[71,135,143,147,150,152,153,154,166,237,238,239,240],[71,135,143,147,150,152,153,154,166,237,239],[71,135,143,147,150,152,153,154,166,237],[71,86,89,92,93,135,143,147,150,152,153,154,166,184],[71,89,135,143,147,150,152,153,154,166,171,184],[71,89,93,135,143,147,150,152,153,154,166,184],[71,135,143,147,150,152,153,154,166,171],[71,83,135,143,147,150,152,153,154,166],[71,87,135,143,147,150,152,153,154,166],[71,85,86,89,135,143,147,150,152,153,154,166,184],[71,135,143,147,150,152,153,154,156,166,181],[71,135,143,147,150,152,153,154,166,193],[71,83,135,143,147,150,152,153,154,166,193],[71,85,89,135,143,147,150,152,153,154,156,166,184],[71,80,81,82,84,88,135,143,146,147,150,152,153,154,166,171,184],[71,89,98,106,135,143,147,150,152,153,154,166],[71,81,87,135,143,147,150,152,153,154,166],[71,89,116,117,135,143,147,150,152,153,154,166],[71,81,84,89,135,143,147,150,152,153,154,166,175,184,193],[71,89,135,143,147,150,152,153,154,166],[71,85,89,135,143,147,150,152,153,154,166,184],[71,80,135,143,147,150,152,153,154,166],[71,83,84,85,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,135,143,147,150,152,153,154,166],[71,89,109,112,135,143,147,150,152,153,154,166],[71,89,98,99,100,135,143,147,150,152,153,154,166],[71,87,89,99,101,135,143,147,150,152,153,154,166],[71,88,135,143,147,150,152,153,154,166],[71,81,83,89,135,143,147,150,152,153,154,166],[71,89,93,99,101,135,143,147,150,152,153,154,166],[71,93,135,143,147,150,152,153,154,166],[71,87,89,92,135,143,147,150,152,153,154,166,184],[71,81,85,89,98,135,143,147,150,152,153,154,166],[71,89,109,135,143,147,150,152,153,154,166],[71,101,135,143,147,150,152,153,154,166],[71,81,85,89,93,135,143,147,150,152,153,154,166],[71,83,89,116,135,143,147,150,152,153,154,166,175,190,193],[71,135,143,147,150,152,153,154,166,205],[71,135,143,147,150,152,153,154,166,205,206,207,208],[71,135,143,147,150,152,153,154,166,207],[71,135,143,147,150,152,153,154,166,203,226,227,229],[71,135,143,147,150,152,153,154,166,203,204,216,229],[71,135,143,147,150,152,153,154,166,194,201,203,204,212,229],[71,135,143,147,150,152,153,154,166,209],[71,135,143,147,150,152,153,154,166,194,203,204,212,225,228,229],[71,135,143,147,150,152,153,154,166,203,204,209,212,229],[71,135,143,147,150,152,153,154,166,203,226,227,228,229],[71,135,143,147,150,152,153,154,166,203,209,213,214,215,229],[71,135,143,147,150,152,153,154,166,194,199,201,203,204,209,212,213,214,215,216,217,219,225,226,227,228,229,230,233,234,235,236,241],[71,135,143,147,150,152,153,154,166,194,201,203,204,212,213,226,227,228,229,234],[71,135,143,147,150,152,153,154,166,242]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"01a30f9e8582b369075c0808df71121e6855cb06fd8d3d39511d9ebb66405205","impliedFormat":1},{"version":"94f0fe7b5d334d6bb93ab88c1aeb6275782b75f3d8031071bdf7688ceff0b1e2","signature":"a9f7f2a340ef8d7b5982af1776cf0ac233504d970272ffd48b4b2e7d81b3d907","impliedFormat":99},{"version":"4095ec2ee880e89502eead2ba600b147e60b9f39aec7f7b50780d40db2d68e96","signature":"8ede654e7ac539c84b8addce8a998474f54a8113f79704f2f617c999a2845b9c","impliedFormat":99},{"version":"bc8bcdda5836c6ea4d226d6f6c94a704cfe17d7b90fe88022b6a4322d6475435","signature":"29d177a509be7acb00c1c00e644f2a29d74ced6a365f15f16066a117793a871b","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"719412f054e6ecc35489462c9a21bab0323d173a7d04e55b0ace4b5d86fbeb07","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"fac3e88881b35d3a757ed891ac912b2674792c25e2a1a74e1f5fbc72d19a9792","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"5e66972e83eb4dc7123939bf816e6cbd9ad81af5552db1cab84e6bd9c64d2ecc","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[66,68]],"options":{"composite":true,"declaration":true,"declarationDir":"./@types","declarationMap":true,"emitDeclarationOnly":true,"erasableSyntaxOnly":true,"esModuleInterop":true,"module":199,"noUncheckedSideEffectImports":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[67,1],[66,2],[68,3],[221,2],[224,4],[222,2],[132,5],[133,5],[134,6],[71,7],[135,8],[136,9],[137,10],[69,2],[138,11],[139,12],[140,13],[141,14],[142,15],[143,16],[144,16],[145,17],[146,18],[147,19],[148,20],[72,2],[70,2],[149,21],[150,22],[151,23],[193,24],[152,25],[153,26],[154,25],[155,27],[156,28],[157,29],[158,30],[159,30],[160,30],[161,31],[162,32],[163,33],[164,34],[165,35],[166,36],[167,36],[168,37],[169,2],[170,2],[171,38],[172,39],[173,40],[174,38],[175,41],[176,42],[177,43],[178,44],[179,45],[180,46],[181,47],[182,48],[183,49],[184,50],[185,51],[186,52],[187,53],[188,54],[189,55],[73,25],[74,2],[75,56],[76,57],[77,2],[78,58],[79,2],[123,59],[124,60],[125,61],[126,61],[127,62],[128,2],[129,8],[130,63],[131,60],[190,64],[191,65],[192,66],[225,67],[232,68],[233,69],[231,2],[194,2],[203,70],[202,71],[226,70],[210,72],[212,73],[211,74],[219,75],[218,2],[201,76],[195,77],[197,78],[199,79],[198,2],[200,77],[196,2],[223,2],[239,80],[241,81],[240,82],[238,83],[237,2],[227,2],[220,2],[63,2],[64,2],[12,2],[10,2],[11,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[65,2],[57,2],[58,2],[60,2],[59,2],[61,2],[1,2],[62,2],[14,2],[13,2],[98,84],[111,85],[95,86],[112,87],[121,88],[86,89],[87,90],[85,91],[120,92],[115,93],[119,94],[89,95],[108,96],[88,97],[118,98],[83,99],[84,93],[90,100],[91,2],[97,101],[94,100],[81,102],[122,103],[113,104],[101,105],[100,100],[102,106],[105,107],[99,108],[103,109],[116,92],[92,110],[93,111],[106,112],[82,87],[110,113],[109,100],[96,111],[104,114],[107,115],[114,2],[80,2],[117,116],[206,117],[209,118],[207,117],[205,2],[208,119],[228,120],[217,121],[213,122],[214,72],[235,123],[229,124],[215,125],[234,126],[204,2],[216,127],[242,128],[236,129],[243,130],[230,2]],"latestChangedDtsFile":"./@types/index.d.ts","version":"6.0.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.full.d.ts","../src/idempotency/min-safe-ttl.ts","../src/idempotency/port.ts","../src/idempotency/in-memory.ts","../src/idempotency/index.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.1/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.7/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.7/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.7/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.7/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.7/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.7/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.7/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.7_vite@8.0.14_@types+node@25.9.1_esbuild@0.27.2_jiti@2.6.1_terser@5.46.1_tsx@4.22.3_yaml@2.9.0_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.7_@types+node@25.9.1_@vitest+coverage-v8@4.1.7_vite@8.0.14_@types+node@25.9._80d5839fc632fdcd9de039dffc6761e7/node_modules/vitest/globals.d.ts"],"fileIdsList":[[66,67,72,136,144,148,151,153,154,155,167],[66,67,68,72,136,144,148,151,153,154,155,167],[72,136,144,148,151,153,154,155,167],[72,136,144,148,151,153,154,155,167,223,224],[72,133,134,136,144,148,151,153,154,155,167],[72,135,136,144,148,151,153,154,155,167],[136,144,148,151,153,154,155,167],[72,136,144,148,151,153,154,155,167,176],[72,136,137,142,144,147,148,151,153,154,155,157,167,172,185],[72,136,137,138,144,147,148,151,153,154,155,167],[72,136,139,144,148,151,153,154,155,167,186],[72,136,140,141,144,148,151,153,154,155,158,167],[72,136,141,144,148,151,153,154,155,167,172,182],[72,136,142,144,147,148,151,153,154,155,157,167],[72,135,136,143,144,148,151,153,154,155,167],[72,136,144,145,148,151,153,154,155,167],[72,136,144,146,147,148,151,153,154,155,167],[72,135,136,144,147,148,151,153,154,155,167],[72,136,144,147,148,149,151,153,154,155,167,172,185],[72,136,144,147,148,149,151,153,154,155,167,172,174,176],[72,123,136,144,147,148,150,151,153,154,155,157,167,172,185],[72,136,144,147,148,150,151,153,154,155,157,167,172,182,185],[72,136,144,148,150,151,152,153,154,155,167,172,182,185],[70,71,72,73,74,75,76,77,78,79,80,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],[72,136,144,147,148,151,153,154,155,167],[72,136,144,148,151,153,155,167],[72,136,144,148,151,153,154,155,156,167,185],[72,136,144,147,148,151,153,154,155,157,167,172],[72,136,144,148,151,153,154,155,158,167],[72,136,144,148,151,153,154,155,159,167],[72,136,144,147,148,151,153,154,155,162,167],[72,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[72,136,144,148,151,153,154,155,164,167],[72,136,144,148,151,153,154,155,165,167],[72,136,141,144,148,151,153,154,155,157,167,176],[72,136,144,147,148,151,153,154,155,167,168],[72,136,144,148,151,153,154,155,167,169,186,189],[72,136,144,147,148,151,153,154,155,167,172,175,176],[72,136,144,148,151,153,154,155,167,173,176],[72,136,144,148,151,153,154,155,167,174],[72,136,144,148,151,153,154,155,167,176,186],[72,136,144,148,151,153,154,155,167,177],[72,133,136,144,148,151,153,154,155,167,172,179,185],[72,136,144,148,151,153,154,155,167,172,178],[72,136,144,147,148,151,153,154,155,167,180,181],[72,136,144,148,151,153,154,155,167,180,181],[72,136,141,144,148,151,153,154,155,157,167,172,182],[72,136,144,148,151,153,154,155,167,183],[72,136,144,148,151,153,154,155,157,167,184],[72,136,144,148,150,151,153,154,155,165,167,185],[72,136,144,148,151,153,154,155,167,186,187],[72,136,141,144,148,151,153,154,155,167,187],[72,136,144,148,151,153,154,155,167,172,188],[72,136,144,148,151,153,154,155,156,167,189],[72,136,144,148,151,153,154,155,167,190],[72,136,139,144,148,151,153,154,155,167],[72,136,141,144,148,151,153,154,155,167],[72,136,144,148,151,153,154,155,167,186],[72,123,136,144,148,151,153,154,155,167],[72,136,144,148,151,153,154,155,167,185],[72,136,144,148,151,153,154,155,167,191],[72,136,144,148,151,153,154,155,162,167],[72,136,144,148,151,153,154,155,167,181],[72,123,136,144,147,148,149,151,153,154,155,162,167,172,176,185,188,189,191],[72,136,144,148,151,153,154,155,167,172,192],[72,136,144,148,151,153,154,155,167,174,193],[72,136,144,148,151,153,154,155,167,196,202,220,221,222,225],[72,136,144,148,151,153,154,155,167,232],[72,136,144,148,151,153,154,155,167,232,233],[72,136,144,148,151,153,154,155,167,200,202,203],[72,136,144,148,151,153,154,155,167,200,202],[72,136,144,148,151,153,154,155,167,200],[72,136,144,148,151,153,154,155,167,195,200,211,212],[72,136,144,148,151,153,154,155,167,195,200,211],[72,136,144,148,151,153,154,155,167,219],[72,136,144,148,151,153,154,155,167,195,201],[72,136,144,148,151,153,154,155,167,195],[72,136,144,148,151,153,154,155,167,197],[72,136,144,148,151,153,154,155,167,195,196,197,198,199],[72,136,144,148,151,153,154,155,167,238,239],[72,136,144,148,151,153,154,155,167,238,239,240,241],[72,136,144,148,151,153,154,155,167,238,240],[72,136,144,148,151,153,154,155,167,238],[72,87,90,93,94,136,144,148,151,153,154,155,167,185],[72,90,136,144,148,151,153,154,155,167,172,185],[72,90,94,136,144,148,151,153,154,155,167,185],[72,136,144,148,151,153,154,155,167,172],[72,84,136,144,148,151,153,154,155,167],[72,88,136,144,148,151,153,154,155,167],[72,86,87,90,136,144,148,151,153,154,155,167,185],[72,136,144,148,151,153,154,155,157,167,182],[72,136,144,148,151,153,154,155,167,194],[72,84,136,144,148,151,153,154,155,167,194],[72,86,90,136,144,148,151,153,154,155,157,167,185],[72,81,82,83,85,89,136,144,147,148,151,153,154,155,167,172,185],[72,90,99,107,136,144,148,151,153,154,155,167],[72,82,88,136,144,148,151,153,154,155,167],[72,90,117,118,136,144,148,151,153,154,155,167],[72,82,85,90,136,144,148,151,153,154,155,167,176,185,194],[72,90,136,144,148,151,153,154,155,167],[72,86,90,136,144,148,151,153,154,155,167,185],[72,81,136,144,148,151,153,154,155,167],[72,84,85,86,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,136,144,148,151,153,154,155,167],[72,90,110,113,136,144,148,151,153,154,155,167],[72,90,99,100,101,136,144,148,151,153,154,155,167],[72,88,90,100,102,136,144,148,151,153,154,155,167],[72,89,136,144,148,151,153,154,155,167],[72,82,84,90,136,144,148,151,153,154,155,167],[72,90,94,100,102,136,144,148,151,153,154,155,167],[72,94,136,144,148,151,153,154,155,167],[72,88,90,93,136,144,148,151,153,154,155,167,185],[72,82,86,90,99,136,144,148,151,153,154,155,167],[72,90,110,136,144,148,151,153,154,155,167],[72,102,136,144,148,151,153,154,155,167],[72,82,86,90,94,136,144,148,151,153,154,155,167],[72,84,90,117,136,144,148,151,153,154,155,167,176,191,194],[72,136,144,148,151,153,154,155,167,206],[72,136,144,148,151,153,154,155,167,206,207,208,209],[72,136,144,148,151,153,154,155,167,208],[72,136,144,148,151,153,154,155,167,204,227,228,230],[72,136,144,148,151,153,154,155,167,204,205,217,230],[72,136,144,148,151,153,154,155,167,195,202,204,205,213,230],[72,136,144,148,151,153,154,155,167,210],[72,136,144,148,151,153,154,155,167,195,204,205,213,226,229,230],[72,136,144,148,151,153,154,155,167,204,205,210,213,230],[72,136,144,148,151,153,154,155,167,204,227,228,229,230],[72,136,144,148,151,153,154,155,167,204,210,214,215,216,230],[72,136,144,148,151,153,154,155,167,195,200,202,204,205,210,213,214,215,216,217,218,220,226,227,228,229,230,231,234,235,236,237,242],[72,136,144,148,151,153,154,155,167,195,202,204,205,213,214,227,228,229,230,235],[72,136,144,148,151,153,154,155,167,243]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"01a30f9e8582b369075c0808df71121e6855cb06fd8d3d39511d9ebb66405205","impliedFormat":1},{"version":"b46a75de449d307dbb4fbeb52cada176d092377489ff8fee064e7d523a4f5edf","signature":"c1fd36502ba4ba795867599039a526f9d6f2d8ee4c4eb7a6415add6328f36965","impliedFormat":99},{"version":"94f0fe7b5d334d6bb93ab88c1aeb6275782b75f3d8031071bdf7688ceff0b1e2","signature":"a9f7f2a340ef8d7b5982af1776cf0ac233504d970272ffd48b4b2e7d81b3d907","impliedFormat":99},{"version":"f34fcd685b918fd7e9d306aae9f7d94efac2bd41c323b0cf8a98ddd3f1a08906","signature":"66afb5ec408f758e329718dad7bdfcebe480c6249f6c2883676a39f0f8ffb0c6","impliedFormat":99},{"version":"1dda96b4029f6e7615ee44b40145588dd6f98a4cfa6943a0ac4f504cf9b5e1d8","signature":"c650bc675cf9a7ef004e2aac9a62ac241445c93ad529044491b7a095c1b522e9","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"719412f054e6ecc35489462c9a21bab0323d173a7d04e55b0ace4b5d86fbeb07","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"fac3e88881b35d3a757ed891ac912b2674792c25e2a1a74e1f5fbc72d19a9792","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"5e66972e83eb4dc7123939bf816e6cbd9ad81af5552db1cab84e6bd9c64d2ecc","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[66,69]],"options":{"composite":true,"declaration":true,"declarationDir":"./@types","declarationMap":true,"emitDeclarationOnly":true,"erasableSyntaxOnly":true,"esModuleInterop":true,"module":199,"noUncheckedSideEffectImports":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[68,1],[69,2],[66,3],[67,3],[222,3],[225,4],[223,3],[133,5],[134,5],[135,6],[72,7],[136,8],[137,9],[138,10],[70,3],[139,11],[140,12],[141,13],[142,14],[143,15],[144,16],[145,16],[146,17],[147,18],[148,19],[149,20],[73,3],[71,3],[150,21],[151,22],[152,23],[194,24],[153,25],[154,26],[155,25],[156,27],[157,28],[158,29],[159,30],[160,30],[161,30],[162,31],[163,32],[164,33],[165,34],[166,35],[167,36],[168,36],[169,37],[170,3],[171,3],[172,38],[173,39],[174,40],[175,38],[176,41],[177,42],[178,43],[179,44],[180,45],[181,46],[182,47],[183,48],[184,49],[185,50],[186,51],[187,52],[188,53],[189,54],[190,55],[74,25],[75,3],[76,56],[77,57],[78,3],[79,58],[80,3],[124,59],[125,60],[126,61],[127,61],[128,62],[129,3],[130,8],[131,63],[132,60],[191,64],[192,65],[193,66],[226,67],[233,68],[234,69],[232,3],[195,3],[204,70],[203,71],[227,70],[211,72],[213,73],[212,74],[220,75],[219,3],[202,76],[196,77],[198,78],[200,79],[199,3],[201,77],[197,3],[224,3],[240,80],[242,81],[241,82],[239,83],[238,3],[228,3],[221,3],[63,3],[64,3],[12,3],[10,3],[11,3],[16,3],[15,3],[2,3],[17,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[24,3],[3,3],[25,3],[26,3],[4,3],[27,3],[31,3],[28,3],[29,3],[30,3],[32,3],[33,3],[34,3],[5,3],[35,3],[36,3],[37,3],[38,3],[6,3],[42,3],[39,3],[40,3],[41,3],[43,3],[7,3],[44,3],[49,3],[50,3],[45,3],[46,3],[47,3],[48,3],[8,3],[54,3],[51,3],[52,3],[53,3],[55,3],[9,3],[56,3],[65,3],[57,3],[58,3],[60,3],[59,3],[61,3],[1,3],[62,3],[14,3],[13,3],[99,84],[112,85],[96,86],[113,87],[122,88],[87,89],[88,90],[86,91],[121,92],[116,93],[120,94],[90,95],[109,96],[89,97],[119,98],[84,99],[85,93],[91,100],[92,3],[98,101],[95,100],[82,102],[123,103],[114,104],[102,105],[101,100],[103,106],[106,107],[100,108],[104,109],[117,92],[93,110],[94,111],[107,112],[83,87],[111,113],[110,100],[97,111],[105,114],[108,115],[115,3],[81,3],[118,116],[207,117],[210,118],[208,117],[206,3],[209,119],[229,120],[218,121],[214,122],[215,72],[236,123],[230,124],[216,125],[235,126],[205,3],[217,127],[243,128],[237,129],[244,130],[231,3]],"latestChangedDtsFile":"./@types/idempotency/index.d.ts","version":"6.0.3"}
|
|
@@ -1,23 +1,41 @@
|
|
|
1
|
+
import { type RetryProfile } from "./min-safe-ttl.js";
|
|
1
2
|
import type { IdempotencyStore } from "./port.js";
|
|
2
3
|
/**
|
|
3
|
-
* Options for {@link InMemoryIdempotencyStore}.
|
|
4
|
+
* Options for {@link InMemoryIdempotencyStore}. Defaults are sized
|
|
4
5
|
* for a single-process receiver paired with a sender using the
|
|
5
|
-
* standard `webhook` backoff envelope (`exponential` up to
|
|
6
|
-
* `maxRetries: 5`)
|
|
7
|
-
*
|
|
6
|
+
* standard `webhook` backoff envelope (`exponential` up to
|
|
7
|
+
* `maxMs: 30_000`, `maxRetries: 5`).
|
|
8
|
+
*
|
|
9
|
+
* The dedup window is set in one of two ways:
|
|
10
|
+
*
|
|
11
|
+
* - {@link ttlMs} — pass a number directly when you've already
|
|
12
|
+
* computed the window, or just want the 24-hour default that
|
|
13
|
+
* covers any reasonable sender retry envelope.
|
|
14
|
+
* - {@link retryProfile} — pass the sender's retry profile and the
|
|
15
|
+
* store derives the minimum safe window for you. The math
|
|
16
|
+
* (per-retry backoff sums, per-attempt timeouts, jitter
|
|
17
|
+
* worst-case 1.5×, default 4× safety factor) is hidden inside the
|
|
18
|
+
* store — see [external integration](https://rotorsoft.github.io/act-root/docs/guides/external-integration#ttl-sizing)
|
|
19
|
+
* for the math explained.
|
|
20
|
+
*
|
|
21
|
+
* When both are supplied, {@link ttlMs} wins — an explicit number
|
|
22
|
+
* overrides a derived one.
|
|
8
23
|
*/
|
|
9
24
|
export type InMemoryIdempotencyStoreOptions = {
|
|
10
|
-
/**
|
|
25
|
+
/** Direct dedup window. Default: 24 hours. */
|
|
11
26
|
ttlMs?: number;
|
|
27
|
+
/** Sender's retry profile — used to derive `ttlMs` when not supplied. */
|
|
28
|
+
retryProfile?: RetryProfile;
|
|
12
29
|
/** Memory bound — oldest entries are evicted past this size. Default: 100,000. */
|
|
13
30
|
maxEntries?: number;
|
|
14
31
|
};
|
|
15
32
|
/**
|
|
16
33
|
* Bounded LRU + TTL implementation of {@link IdempotencyStore} for
|
|
17
|
-
* single-process receivers (the wolfdesk demo, integration tests,
|
|
18
|
-
* loops). Multi-process receivers should swap for a durable
|
|
19
|
-
* (Postgres unique index, Redis `SET NX`) — the
|
|
20
|
-
* contract stays the same so the call site
|
|
34
|
+
* single-process receivers (the wolfdesk demo, integration tests,
|
|
35
|
+
* dev loops). Multi-process receivers should swap for a durable
|
|
36
|
+
* adapter (Postgres unique index, Redis `SET NX`) — the
|
|
37
|
+
* {@link IdempotencyStore} contract stays the same so the call site
|
|
38
|
+
* doesn't change.
|
|
21
39
|
*
|
|
22
40
|
* Map iteration is insertion-ordered, so:
|
|
23
41
|
* - The oldest entry sits at `keys().next().value` (cheapest to evict).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/idempotency/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/idempotency/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,CAAC,EAAE,+BAA+B;IASrD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO;IAarD,kEAAkE;IAClE,IAAI,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM;IAKtC,oCAAoC;IACpC,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,GAAG;CAMZ"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* @module act-ops/idempotency
|
|
4
|
+
*
|
|
5
|
+
* Receiver-side idempotency primitives.
|
|
6
|
+
*
|
|
7
|
+
* - {@link IdempotencyStore} — port: atomically claim a key, report
|
|
8
|
+
* whether the caller is processing a fresh request or a duplicate.
|
|
9
|
+
* - {@link InMemoryIdempotencyStore} — bounded LRU + TTL reference
|
|
10
|
+
* implementation. Swap for a durable adapter (Postgres unique
|
|
11
|
+
* index, Redis `SET NX`) in multi-process receivers without
|
|
12
|
+
* changing the call site.
|
|
13
|
+
* - {@link minSafeTtl} — derives the minimum safe dedup window from
|
|
14
|
+
* the sender's retry profile. The math durable adapters and
|
|
15
|
+
* `InMemoryIdempotencyStore`'s `retryProfile` option both call.
|
|
16
|
+
* - {@link RetryProfile} — the sender's retry shape, used as input
|
|
17
|
+
* to `minSafeTtl` and as the `retryProfile` option on the store.
|
|
18
|
+
*
|
|
19
|
+
* Sibling subpaths (e.g. `@rotorsoft/act-ops/poison`,
|
|
20
|
+
* `@rotorsoft/act-ops/retry`) will host future operational primitives
|
|
21
|
+
* as they land. Each subpath is its own ESM/CJS entry — pay for what
|
|
22
|
+
* you import.
|
|
23
|
+
*
|
|
24
|
+
* The package has no runtime or peer dependency on `@rotorsoft/act`,
|
|
25
|
+
* so non-Act receivers (forwarded-bus consumers, framework-agnostic
|
|
26
|
+
* HTTP endpoints) can install `@rotorsoft/act-ops` and honor an
|
|
27
|
+
* `Idempotency-Key` without pulling in the orchestrator.
|
|
28
|
+
*/
|
|
29
|
+
export { InMemoryIdempotencyStore, type InMemoryIdempotencyStoreOptions, } from "./in-memory.js";
|
|
30
|
+
export { minSafeTtl, type RetryProfile } from "./min-safe-ttl.js";
|
|
31
|
+
export type { IdempotencyStore } from "./port.js";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/idempotency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module act-ops/idempotency/min-safe-ttl
|
|
3
|
+
*
|
|
4
|
+
* Internal math for sizing the dedup window of an
|
|
5
|
+
* {@link IdempotencyStore} from a sender's retry profile.
|
|
6
|
+
*
|
|
7
|
+
* **Not re-exported from the package root** by design — the math is
|
|
8
|
+
* an implementation detail of {@link InMemoryIdempotencyStore} (and
|
|
9
|
+
* any future durable adapter). Operators configure dedup windows
|
|
10
|
+
* through the store's `retryProfile` option, not by calling this
|
|
11
|
+
* function directly. Tests import it from this path; external
|
|
12
|
+
* consumers can't reach it.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* A sender's retry behaviour, described in enough detail to size a
|
|
16
|
+
* receiver-side dedup window correctly. The `backoff` shape is typed
|
|
17
|
+
* inline structurally so it's assignable from `@rotorsoft/act`'s
|
|
18
|
+
* `BackoffOptions` without this package importing the framework
|
|
19
|
+
* (the zero-act-dep load-bearing constraint of `@rotorsoft/act-ops`).
|
|
20
|
+
* A caller holding `act.BackoffOptions` can pass it as `backoff`
|
|
21
|
+
* with no cast — TypeScript treats the two shapes as equivalent.
|
|
22
|
+
*
|
|
23
|
+
* @property maxRetries - Retries after the first attempt fails
|
|
24
|
+
* @property backoff - Optional backoff strategy. When omitted,
|
|
25
|
+
* retries fire back-to-back with only the per-attempt timeout
|
|
26
|
+
* between them
|
|
27
|
+
* @property timeoutMs - Per-attempt timeout (the sender's `fetch`
|
|
28
|
+
* timeout, or the equivalent for whatever transport)
|
|
29
|
+
* @property safetyFactor - Multiplier applied to the bare envelope.
|
|
30
|
+
* Default 4
|
|
31
|
+
*/
|
|
32
|
+
export type RetryProfile = {
|
|
33
|
+
readonly maxRetries: number;
|
|
34
|
+
readonly backoff?: {
|
|
35
|
+
readonly strategy: "fixed" | "linear" | "exponential";
|
|
36
|
+
readonly baseMs: number;
|
|
37
|
+
readonly maxMs?: number;
|
|
38
|
+
readonly jitter?: boolean;
|
|
39
|
+
};
|
|
40
|
+
readonly timeoutMs: number;
|
|
41
|
+
readonly safetyFactor?: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Minimum safe TTL in milliseconds for a receiver-side
|
|
45
|
+
* {@link IdempotencyStore} window, given the sender's retry profile.
|
|
46
|
+
*
|
|
47
|
+
* The envelope is:
|
|
48
|
+
*
|
|
49
|
+
* ttl = (backoffSum + (maxRetries + 1) * timeoutMs) * safetyFactor
|
|
50
|
+
*
|
|
51
|
+
* where `backoffSum` is the sum of per-retry delays from the chosen
|
|
52
|
+
* `strategy`, multiplied by 1.5 if `jitter` is enabled (the
|
|
53
|
+
* worst-case multiplier in `[0.5, 1.5)`). `safetyFactor` defaults
|
|
54
|
+
* to 4 because operators almost always want headroom over the bare
|
|
55
|
+
* envelope — slow networks, clock skew, and incident-window retries
|
|
56
|
+
* stretch the real-world maximum past the computed one.
|
|
57
|
+
*/
|
|
58
|
+
export declare function minSafeTtl(profile: RetryProfile): number;
|
|
59
|
+
//# sourceMappingURL=min-safe-ttl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"min-safe-ttl.d.ts","sourceRoot":"","sources":["../../../src/idempotency/min-safe-ttl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;QACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAKxD"}
|
|
@@ -17,12 +17,41 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
23
|
-
InMemoryIdempotencyStore: () => InMemoryIdempotencyStore
|
|
20
|
+
// src/idempotency/index.ts
|
|
21
|
+
var idempotency_exports = {};
|
|
22
|
+
__export(idempotency_exports, {
|
|
23
|
+
InMemoryIdempotencyStore: () => InMemoryIdempotencyStore,
|
|
24
|
+
minSafeTtl: () => minSafeTtl
|
|
24
25
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
26
|
+
module.exports = __toCommonJS(idempotency_exports);
|
|
27
|
+
|
|
28
|
+
// src/idempotency/min-safe-ttl.ts
|
|
29
|
+
function minSafeTtl(profile) {
|
|
30
|
+
const safetyFactor = profile.safetyFactor ?? 4;
|
|
31
|
+
const backoffSum = sumBackoff(profile.maxRetries, profile.backoff);
|
|
32
|
+
const timeoutSum = (profile.maxRetries + 1) * profile.timeoutMs;
|
|
33
|
+
return (backoffSum + timeoutSum) * safetyFactor;
|
|
34
|
+
}
|
|
35
|
+
function sumBackoff(maxRetries, backoff) {
|
|
36
|
+
if (!backoff) return 0;
|
|
37
|
+
let sum = 0;
|
|
38
|
+
for (let retry = 0; retry < maxRetries; retry++) {
|
|
39
|
+
sum += delayFor(retry, backoff);
|
|
40
|
+
}
|
|
41
|
+
return backoff.jitter ? sum * 1.5 : sum;
|
|
42
|
+
}
|
|
43
|
+
function delayFor(retry, backoff) {
|
|
44
|
+
switch (backoff.strategy) {
|
|
45
|
+
case "fixed":
|
|
46
|
+
return backoff.baseMs;
|
|
47
|
+
case "linear":
|
|
48
|
+
return backoff.baseMs * (retry + 1);
|
|
49
|
+
case "exponential": {
|
|
50
|
+
const raw = backoff.baseMs * 2 ** retry;
|
|
51
|
+
return backoff.maxMs !== void 0 ? Math.min(raw, backoff.maxMs) : raw;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
26
55
|
|
|
27
56
|
// src/idempotency/in-memory.ts
|
|
28
57
|
var InMemoryIdempotencyStore = class {
|
|
@@ -30,7 +59,7 @@ var InMemoryIdempotencyStore = class {
|
|
|
30
59
|
_ttl_ms;
|
|
31
60
|
_max_entries;
|
|
32
61
|
constructor(options) {
|
|
33
|
-
this._ttl_ms = options?.ttlMs ?? 24 * 60 * 60 * 1e3;
|
|
62
|
+
this._ttl_ms = options?.ttlMs ?? (options?.retryProfile !== void 0 ? minSafeTtl(options.retryProfile) : 24 * 60 * 60 * 1e3);
|
|
34
63
|
this._max_entries = options?.maxEntries ?? 1e5;
|
|
35
64
|
}
|
|
36
65
|
claim(key, now = Date.now()) {
|
|
@@ -61,6 +90,7 @@ var InMemoryIdempotencyStore = class {
|
|
|
61
90
|
};
|
|
62
91
|
// Annotate the CommonJS export names for ESM import in node:
|
|
63
92
|
0 && (module.exports = {
|
|
64
|
-
InMemoryIdempotencyStore
|
|
93
|
+
InMemoryIdempotencyStore,
|
|
94
|
+
minSafeTtl
|
|
65
95
|
});
|
|
66
96
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/idempotency/index.ts","../../src/idempotency/min-safe-ttl.ts","../../src/idempotency/in-memory.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module act-ops/idempotency\n *\n * Receiver-side idempotency primitives.\n *\n * - {@link IdempotencyStore} — port: atomically claim a key, report\n * whether the caller is processing a fresh request or a duplicate.\n * - {@link InMemoryIdempotencyStore} — bounded LRU + TTL reference\n * implementation. Swap for a durable adapter (Postgres unique\n * index, Redis `SET NX`) in multi-process receivers without\n * changing the call site.\n * - {@link minSafeTtl} — derives the minimum safe dedup window from\n * the sender's retry profile. The math durable adapters and\n * `InMemoryIdempotencyStore`'s `retryProfile` option both call.\n * - {@link RetryProfile} — the sender's retry shape, used as input\n * to `minSafeTtl` and as the `retryProfile` option on the store.\n *\n * Sibling subpaths (e.g. `@rotorsoft/act-ops/poison`,\n * `@rotorsoft/act-ops/retry`) will host future operational primitives\n * as they land. Each subpath is its own ESM/CJS entry — pay for what\n * you import.\n *\n * The package has no runtime or peer dependency on `@rotorsoft/act`,\n * so non-Act receivers (forwarded-bus consumers, framework-agnostic\n * HTTP endpoints) can install `@rotorsoft/act-ops` and honor an\n * `Idempotency-Key` without pulling in the orchestrator.\n */\n\nexport {\n InMemoryIdempotencyStore,\n type InMemoryIdempotencyStoreOptions,\n} from \"./in-memory.js\";\nexport { minSafeTtl, type RetryProfile } from \"./min-safe-ttl.js\";\nexport type { IdempotencyStore } from \"./port.js\";\n","/**\n * @module act-ops/idempotency/min-safe-ttl\n *\n * Internal math for sizing the dedup window of an\n * {@link IdempotencyStore} from a sender's retry profile.\n *\n * **Not re-exported from the package root** by design — the math is\n * an implementation detail of {@link InMemoryIdempotencyStore} (and\n * any future durable adapter). Operators configure dedup windows\n * through the store's `retryProfile` option, not by calling this\n * function directly. Tests import it from this path; external\n * consumers can't reach it.\n */\n\n/**\n * A sender's retry behaviour, described in enough detail to size a\n * receiver-side dedup window correctly. The `backoff` shape is typed\n * inline structurally so it's assignable from `@rotorsoft/act`'s\n * `BackoffOptions` without this package importing the framework\n * (the zero-act-dep load-bearing constraint of `@rotorsoft/act-ops`).\n * A caller holding `act.BackoffOptions` can pass it as `backoff`\n * with no cast — TypeScript treats the two shapes as equivalent.\n *\n * @property maxRetries - Retries after the first attempt fails\n * @property backoff - Optional backoff strategy. When omitted,\n * retries fire back-to-back with only the per-attempt timeout\n * between them\n * @property timeoutMs - Per-attempt timeout (the sender's `fetch`\n * timeout, or the equivalent for whatever transport)\n * @property safetyFactor - Multiplier applied to the bare envelope.\n * Default 4\n */\nexport type RetryProfile = {\n readonly maxRetries: number;\n readonly backoff?: {\n readonly strategy: \"fixed\" | \"linear\" | \"exponential\";\n readonly baseMs: number;\n readonly maxMs?: number;\n readonly jitter?: boolean;\n };\n readonly timeoutMs: number;\n readonly safetyFactor?: number;\n};\n\n/**\n * Minimum safe TTL in milliseconds for a receiver-side\n * {@link IdempotencyStore} window, given the sender's retry profile.\n *\n * The envelope is:\n *\n * ttl = (backoffSum + (maxRetries + 1) * timeoutMs) * safetyFactor\n *\n * where `backoffSum` is the sum of per-retry delays from the chosen\n * `strategy`, multiplied by 1.5 if `jitter` is enabled (the\n * worst-case multiplier in `[0.5, 1.5)`). `safetyFactor` defaults\n * to 4 because operators almost always want headroom over the bare\n * envelope — slow networks, clock skew, and incident-window retries\n * stretch the real-world maximum past the computed one.\n */\nexport function minSafeTtl(profile: RetryProfile): number {\n const safetyFactor = profile.safetyFactor ?? 4;\n const backoffSum = sumBackoff(profile.maxRetries, profile.backoff);\n const timeoutSum = (profile.maxRetries + 1) * profile.timeoutMs;\n return (backoffSum + timeoutSum) * safetyFactor;\n}\n\nfunction sumBackoff(\n maxRetries: number,\n backoff: RetryProfile[\"backoff\"]\n): number {\n if (!backoff) return 0;\n let sum = 0;\n for (let retry = 0; retry < maxRetries; retry++) {\n sum += delayFor(retry, backoff);\n }\n return backoff.jitter ? sum * 1.5 : sum;\n}\n\nfunction delayFor(\n retry: number,\n backoff: NonNullable<RetryProfile[\"backoff\"]>\n): number {\n switch (backoff.strategy) {\n case \"fixed\":\n return backoff.baseMs;\n case \"linear\":\n return backoff.baseMs * (retry + 1);\n case \"exponential\": {\n const raw = backoff.baseMs * 2 ** retry;\n return backoff.maxMs !== undefined ? Math.min(raw, backoff.maxMs) : raw;\n }\n }\n}\n","import { minSafeTtl, type RetryProfile } from \"./min-safe-ttl.js\";\nimport type { IdempotencyStore } from \"./port.js\";\n\n/**\n * Options for {@link InMemoryIdempotencyStore}. Defaults are sized\n * for a single-process receiver paired with a sender using the\n * standard `webhook` backoff envelope (`exponential` up to\n * `maxMs: 30_000`, `maxRetries: 5`).\n *\n * The dedup window is set in one of two ways:\n *\n * - {@link ttlMs} — pass a number directly when you've already\n * computed the window, or just want the 24-hour default that\n * covers any reasonable sender retry envelope.\n * - {@link retryProfile} — pass the sender's retry profile and the\n * store derives the minimum safe window for you. The math\n * (per-retry backoff sums, per-attempt timeouts, jitter\n * worst-case 1.5×, default 4× safety factor) is hidden inside the\n * store — see [external integration](https://rotorsoft.github.io/act-root/docs/guides/external-integration#ttl-sizing)\n * for the math explained.\n *\n * When both are supplied, {@link ttlMs} wins — an explicit number\n * overrides a derived one.\n */\nexport type InMemoryIdempotencyStoreOptions = {\n /** Direct dedup window. Default: 24 hours. */\n ttlMs?: number;\n /** Sender's retry profile — used to derive `ttlMs` when not supplied. */\n retryProfile?: RetryProfile;\n /** Memory bound — oldest entries are evicted past this size. Default: 100,000. */\n maxEntries?: number;\n};\n\n/**\n * Bounded LRU + TTL implementation of {@link IdempotencyStore} for\n * single-process receivers (the wolfdesk demo, integration tests,\n * dev loops). Multi-process receivers should swap for a durable\n * adapter (Postgres unique index, Redis `SET NX`) — the\n * {@link IdempotencyStore} contract stays the same so the call site\n * doesn't change.\n *\n * Map iteration is insertion-ordered, so:\n * - The oldest entry sits at `keys().next().value` (cheapest to evict).\n * - GC walks until the first non-expired entry and stops.\n *\n * `claim` is sync; durable adapters return a `Promise<boolean>` —\n * both satisfy the union return type in the port.\n */\nexport class InMemoryIdempotencyStore implements IdempotencyStore {\n private readonly _seen = new Map<string, number>();\n private readonly _ttl_ms: number;\n private readonly _max_entries: number;\n\n constructor(options?: InMemoryIdempotencyStoreOptions) {\n this._ttl_ms =\n options?.ttlMs ??\n (options?.retryProfile !== undefined\n ? minSafeTtl(options.retryProfile)\n : 24 * 60 * 60 * 1000);\n this._max_entries = options?.maxEntries ?? 100_000;\n }\n\n claim(key: string, now: number = Date.now()): boolean {\n this._gc(now);\n if (this._seen.has(key)) return false;\n this._seen.set(key, now + this._ttl_ms);\n if (this._seen.size > this._max_entries) {\n // Safe by construction: `_seen.size > _max_entries >= 0` implies at\n // least one entry, so `.next().value` resolves to a string key.\n const oldest = this._seen.keys().next().value as string;\n this._seen.delete(oldest);\n }\n return true;\n }\n\n /** Number of entries currently tracked (post-GC at call time). */\n size(now: number = Date.now()): number {\n this._gc(now);\n return this._seen.size;\n }\n\n /** Drop every entry — test hook. */\n clear(): void {\n this._seen.clear();\n }\n\n private _gc(now: number): void {\n for (const [key, expiresAt] of this._seen) {\n if (expiresAt > now) break;\n this._seen.delete(key);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC2DO,SAAS,WAAW,SAA+B;AACxD,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,aAAa,WAAW,QAAQ,YAAY,QAAQ,OAAO;AACjE,QAAM,cAAc,QAAQ,aAAa,KAAK,QAAQ;AACtD,UAAQ,aAAa,cAAc;AACrC;AAEA,SAAS,WACP,YACA,SACQ;AACR,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,MAAM;AACV,WAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAC/C,WAAO,SAAS,OAAO,OAAO;AAAA,EAChC;AACA,SAAO,QAAQ,SAAS,MAAM,MAAM;AACtC;AAEA,SAAS,SACP,OACA,SACQ;AACR,UAAQ,QAAQ,UAAU;AAAA,IACxB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ,UAAU,QAAQ;AAAA,IACnC,KAAK,eAAe;AAClB,YAAM,MAAM,QAAQ,SAAS,KAAK;AAClC,aAAO,QAAQ,UAAU,SAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI;AAAA,IACtE;AAAA,EACF;AACF;;;AC5CO,IAAM,2BAAN,MAA2D;AAAA,EAC/C,QAAQ,oBAAI,IAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EAEjB,YAAY,SAA2C;AACrD,SAAK,UACH,SAAS,UACR,SAAS,iBAAiB,SACvB,WAAW,QAAQ,YAAY,IAC/B,KAAK,KAAK,KAAK;AACrB,SAAK,eAAe,SAAS,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAa,MAAc,KAAK,IAAI,GAAY;AACpD,SAAK,IAAI,GAAG;AACZ,QAAI,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AAChC,SAAK,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO;AACtC,QAAI,KAAK,MAAM,OAAO,KAAK,cAAc;AAGvC,YAAM,SAAS,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AACxC,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,MAAc,KAAK,IAAI,GAAW;AACrC,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEQ,IAAI,KAAmB;AAC7B,eAAW,CAAC,KAAK,SAAS,KAAK,KAAK,OAAO;AACzC,UAAI,YAAY,IAAK;AACrB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// src/idempotency/min-safe-ttl.ts
|
|
2
|
+
function minSafeTtl(profile) {
|
|
3
|
+
const safetyFactor = profile.safetyFactor ?? 4;
|
|
4
|
+
const backoffSum = sumBackoff(profile.maxRetries, profile.backoff);
|
|
5
|
+
const timeoutSum = (profile.maxRetries + 1) * profile.timeoutMs;
|
|
6
|
+
return (backoffSum + timeoutSum) * safetyFactor;
|
|
7
|
+
}
|
|
8
|
+
function sumBackoff(maxRetries, backoff) {
|
|
9
|
+
if (!backoff) return 0;
|
|
10
|
+
let sum = 0;
|
|
11
|
+
for (let retry = 0; retry < maxRetries; retry++) {
|
|
12
|
+
sum += delayFor(retry, backoff);
|
|
13
|
+
}
|
|
14
|
+
return backoff.jitter ? sum * 1.5 : sum;
|
|
15
|
+
}
|
|
16
|
+
function delayFor(retry, backoff) {
|
|
17
|
+
switch (backoff.strategy) {
|
|
18
|
+
case "fixed":
|
|
19
|
+
return backoff.baseMs;
|
|
20
|
+
case "linear":
|
|
21
|
+
return backoff.baseMs * (retry + 1);
|
|
22
|
+
case "exponential": {
|
|
23
|
+
const raw = backoff.baseMs * 2 ** retry;
|
|
24
|
+
return backoff.maxMs !== void 0 ? Math.min(raw, backoff.maxMs) : raw;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// src/idempotency/in-memory.ts
|
|
30
|
+
var InMemoryIdempotencyStore = class {
|
|
31
|
+
_seen = /* @__PURE__ */ new Map();
|
|
32
|
+
_ttl_ms;
|
|
33
|
+
_max_entries;
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this._ttl_ms = options?.ttlMs ?? (options?.retryProfile !== void 0 ? minSafeTtl(options.retryProfile) : 24 * 60 * 60 * 1e3);
|
|
36
|
+
this._max_entries = options?.maxEntries ?? 1e5;
|
|
37
|
+
}
|
|
38
|
+
claim(key, now = Date.now()) {
|
|
39
|
+
this._gc(now);
|
|
40
|
+
if (this._seen.has(key)) return false;
|
|
41
|
+
this._seen.set(key, now + this._ttl_ms);
|
|
42
|
+
if (this._seen.size > this._max_entries) {
|
|
43
|
+
const oldest = this._seen.keys().next().value;
|
|
44
|
+
this._seen.delete(oldest);
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/** Number of entries currently tracked (post-GC at call time). */
|
|
49
|
+
size(now = Date.now()) {
|
|
50
|
+
this._gc(now);
|
|
51
|
+
return this._seen.size;
|
|
52
|
+
}
|
|
53
|
+
/** Drop every entry — test hook. */
|
|
54
|
+
clear() {
|
|
55
|
+
this._seen.clear();
|
|
56
|
+
}
|
|
57
|
+
_gc(now) {
|
|
58
|
+
for (const [key, expiresAt] of this._seen) {
|
|
59
|
+
if (expiresAt > now) break;
|
|
60
|
+
this._seen.delete(key);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
InMemoryIdempotencyStore,
|
|
66
|
+
minSafeTtl
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/idempotency/min-safe-ttl.ts","../../src/idempotency/in-memory.ts"],"sourcesContent":["/**\n * @module act-ops/idempotency/min-safe-ttl\n *\n * Internal math for sizing the dedup window of an\n * {@link IdempotencyStore} from a sender's retry profile.\n *\n * **Not re-exported from the package root** by design — the math is\n * an implementation detail of {@link InMemoryIdempotencyStore} (and\n * any future durable adapter). Operators configure dedup windows\n * through the store's `retryProfile` option, not by calling this\n * function directly. Tests import it from this path; external\n * consumers can't reach it.\n */\n\n/**\n * A sender's retry behaviour, described in enough detail to size a\n * receiver-side dedup window correctly. The `backoff` shape is typed\n * inline structurally so it's assignable from `@rotorsoft/act`'s\n * `BackoffOptions` without this package importing the framework\n * (the zero-act-dep load-bearing constraint of `@rotorsoft/act-ops`).\n * A caller holding `act.BackoffOptions` can pass it as `backoff`\n * with no cast — TypeScript treats the two shapes as equivalent.\n *\n * @property maxRetries - Retries after the first attempt fails\n * @property backoff - Optional backoff strategy. When omitted,\n * retries fire back-to-back with only the per-attempt timeout\n * between them\n * @property timeoutMs - Per-attempt timeout (the sender's `fetch`\n * timeout, or the equivalent for whatever transport)\n * @property safetyFactor - Multiplier applied to the bare envelope.\n * Default 4\n */\nexport type RetryProfile = {\n readonly maxRetries: number;\n readonly backoff?: {\n readonly strategy: \"fixed\" | \"linear\" | \"exponential\";\n readonly baseMs: number;\n readonly maxMs?: number;\n readonly jitter?: boolean;\n };\n readonly timeoutMs: number;\n readonly safetyFactor?: number;\n};\n\n/**\n * Minimum safe TTL in milliseconds for a receiver-side\n * {@link IdempotencyStore} window, given the sender's retry profile.\n *\n * The envelope is:\n *\n * ttl = (backoffSum + (maxRetries + 1) * timeoutMs) * safetyFactor\n *\n * where `backoffSum` is the sum of per-retry delays from the chosen\n * `strategy`, multiplied by 1.5 if `jitter` is enabled (the\n * worst-case multiplier in `[0.5, 1.5)`). `safetyFactor` defaults\n * to 4 because operators almost always want headroom over the bare\n * envelope — slow networks, clock skew, and incident-window retries\n * stretch the real-world maximum past the computed one.\n */\nexport function minSafeTtl(profile: RetryProfile): number {\n const safetyFactor = profile.safetyFactor ?? 4;\n const backoffSum = sumBackoff(profile.maxRetries, profile.backoff);\n const timeoutSum = (profile.maxRetries + 1) * profile.timeoutMs;\n return (backoffSum + timeoutSum) * safetyFactor;\n}\n\nfunction sumBackoff(\n maxRetries: number,\n backoff: RetryProfile[\"backoff\"]\n): number {\n if (!backoff) return 0;\n let sum = 0;\n for (let retry = 0; retry < maxRetries; retry++) {\n sum += delayFor(retry, backoff);\n }\n return backoff.jitter ? sum * 1.5 : sum;\n}\n\nfunction delayFor(\n retry: number,\n backoff: NonNullable<RetryProfile[\"backoff\"]>\n): number {\n switch (backoff.strategy) {\n case \"fixed\":\n return backoff.baseMs;\n case \"linear\":\n return backoff.baseMs * (retry + 1);\n case \"exponential\": {\n const raw = backoff.baseMs * 2 ** retry;\n return backoff.maxMs !== undefined ? Math.min(raw, backoff.maxMs) : raw;\n }\n }\n}\n","import { minSafeTtl, type RetryProfile } from \"./min-safe-ttl.js\";\nimport type { IdempotencyStore } from \"./port.js\";\n\n/**\n * Options for {@link InMemoryIdempotencyStore}. Defaults are sized\n * for a single-process receiver paired with a sender using the\n * standard `webhook` backoff envelope (`exponential` up to\n * `maxMs: 30_000`, `maxRetries: 5`).\n *\n * The dedup window is set in one of two ways:\n *\n * - {@link ttlMs} — pass a number directly when you've already\n * computed the window, or just want the 24-hour default that\n * covers any reasonable sender retry envelope.\n * - {@link retryProfile} — pass the sender's retry profile and the\n * store derives the minimum safe window for you. The math\n * (per-retry backoff sums, per-attempt timeouts, jitter\n * worst-case 1.5×, default 4× safety factor) is hidden inside the\n * store — see [external integration](https://rotorsoft.github.io/act-root/docs/guides/external-integration#ttl-sizing)\n * for the math explained.\n *\n * When both are supplied, {@link ttlMs} wins — an explicit number\n * overrides a derived one.\n */\nexport type InMemoryIdempotencyStoreOptions = {\n /** Direct dedup window. Default: 24 hours. */\n ttlMs?: number;\n /** Sender's retry profile — used to derive `ttlMs` when not supplied. */\n retryProfile?: RetryProfile;\n /** Memory bound — oldest entries are evicted past this size. Default: 100,000. */\n maxEntries?: number;\n};\n\n/**\n * Bounded LRU + TTL implementation of {@link IdempotencyStore} for\n * single-process receivers (the wolfdesk demo, integration tests,\n * dev loops). Multi-process receivers should swap for a durable\n * adapter (Postgres unique index, Redis `SET NX`) — the\n * {@link IdempotencyStore} contract stays the same so the call site\n * doesn't change.\n *\n * Map iteration is insertion-ordered, so:\n * - The oldest entry sits at `keys().next().value` (cheapest to evict).\n * - GC walks until the first non-expired entry and stops.\n *\n * `claim` is sync; durable adapters return a `Promise<boolean>` —\n * both satisfy the union return type in the port.\n */\nexport class InMemoryIdempotencyStore implements IdempotencyStore {\n private readonly _seen = new Map<string, number>();\n private readonly _ttl_ms: number;\n private readonly _max_entries: number;\n\n constructor(options?: InMemoryIdempotencyStoreOptions) {\n this._ttl_ms =\n options?.ttlMs ??\n (options?.retryProfile !== undefined\n ? minSafeTtl(options.retryProfile)\n : 24 * 60 * 60 * 1000);\n this._max_entries = options?.maxEntries ?? 100_000;\n }\n\n claim(key: string, now: number = Date.now()): boolean {\n this._gc(now);\n if (this._seen.has(key)) return false;\n this._seen.set(key, now + this._ttl_ms);\n if (this._seen.size > this._max_entries) {\n // Safe by construction: `_seen.size > _max_entries >= 0` implies at\n // least one entry, so `.next().value` resolves to a string key.\n const oldest = this._seen.keys().next().value as string;\n this._seen.delete(oldest);\n }\n return true;\n }\n\n /** Number of entries currently tracked (post-GC at call time). */\n size(now: number = Date.now()): number {\n this._gc(now);\n return this._seen.size;\n }\n\n /** Drop every entry — test hook. */\n clear(): void {\n this._seen.clear();\n }\n\n private _gc(now: number): void {\n for (const [key, expiresAt] of this._seen) {\n if (expiresAt > now) break;\n this._seen.delete(key);\n }\n }\n}\n"],"mappings":";AA2DO,SAAS,WAAW,SAA+B;AACxD,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,aAAa,WAAW,QAAQ,YAAY,QAAQ,OAAO;AACjE,QAAM,cAAc,QAAQ,aAAa,KAAK,QAAQ;AACtD,UAAQ,aAAa,cAAc;AACrC;AAEA,SAAS,WACP,YACA,SACQ;AACR,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,MAAM;AACV,WAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAC/C,WAAO,SAAS,OAAO,OAAO;AAAA,EAChC;AACA,SAAO,QAAQ,SAAS,MAAM,MAAM;AACtC;AAEA,SAAS,SACP,OACA,SACQ;AACR,UAAQ,QAAQ,UAAU;AAAA,IACxB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ,UAAU,QAAQ;AAAA,IACnC,KAAK,eAAe;AAClB,YAAM,MAAM,QAAQ,SAAS,KAAK;AAClC,aAAO,QAAQ,UAAU,SAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI;AAAA,IACtE;AAAA,EACF;AACF;;;AC5CO,IAAM,2BAAN,MAA2D;AAAA,EAC/C,QAAQ,oBAAI,IAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EAEjB,YAAY,SAA2C;AACrD,SAAK,UACH,SAAS,UACR,SAAS,iBAAiB,SACvB,WAAW,QAAQ,YAAY,IAC/B,KAAK,KAAK,KAAK;AACrB,SAAK,eAAe,SAAS,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAa,MAAc,KAAK,IAAI,GAAY;AACpD,SAAK,IAAI,GAAG;AACZ,QAAI,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AAChC,SAAK,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO;AACtC,QAAI,KAAK,MAAM,OAAO,KAAK,cAAc;AAGvC,YAAM,SAAS,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AACxC,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,MAAc,KAAK,IAAI,GAAW;AACrC,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEQ,IAAI,KAAmB;AAC7B,eAAW,CAAC,KAAK,SAAS,KAAK,KAAK,OAAO;AACzC,UAAI,YAAY,IAAK;AACrB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rotorsoft/act-ops",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"description": "Operational primitives for act apps and act-independent receivers — idempotency, retry budgets, poison-message classifiers",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"typescript",
|
|
@@ -25,14 +25,11 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
|
-
"main": "./dist/index.cjs",
|
|
29
|
-
"module": "./dist/index.js",
|
|
30
|
-
"types": "./dist/@types/index.d.ts",
|
|
31
28
|
"exports": {
|
|
32
|
-
"
|
|
33
|
-
"types": "./dist/@types/index.d.ts",
|
|
34
|
-
"import": "./dist/index.js",
|
|
35
|
-
"require": "./dist/index.cjs"
|
|
29
|
+
"./idempotency": {
|
|
30
|
+
"types": "./dist/@types/idempotency/index.d.ts",
|
|
31
|
+
"import": "./dist/idempotency/index.js",
|
|
32
|
+
"require": "./dist/idempotency/index.cjs"
|
|
36
33
|
}
|
|
37
34
|
},
|
|
38
35
|
"sideEffects": false,
|
package/dist/@types/index.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @packageDocumentation
|
|
3
|
-
* @module act-ops
|
|
4
|
-
*
|
|
5
|
-
* Operational primitives for act apps and act-independent receivers.
|
|
6
|
-
*
|
|
7
|
-
* The package's first surface is the **receiver-side idempotency
|
|
8
|
-
* contract**: an {@link IdempotencyStore} port plus an
|
|
9
|
-
* {@link InMemoryIdempotencyStore} reference implementation. Both Act
|
|
10
|
-
* apps and non-Act receivers (forwarded-bus consumers, framework-
|
|
11
|
-
* agnostic HTTP endpoints) install `@rotorsoft/act-ops` to speak the
|
|
12
|
-
* dedup contract — the package has no runtime or peer dependency on
|
|
13
|
-
* `@rotorsoft/act`, so non-Act consumers don't pay for the orchestrator
|
|
14
|
-
* just to honor an `Idempotency-Key`.
|
|
15
|
-
*
|
|
16
|
-
* Durable adapters (Postgres, Redis) implement the same port in their
|
|
17
|
-
* own packages and slot in transparently. The framework-agnostic
|
|
18
|
-
* receiver middleware (`#744`) consumes the port from here without
|
|
19
|
-
* binding to a specific adapter.
|
|
20
|
-
*/
|
|
21
|
-
export { InMemoryIdempotencyStore, type InMemoryIdempotencyStoreOptions, } from "./idempotency/in-memory.js";
|
|
22
|
-
export type { IdempotencyStore } from "./idempotency/port.js";
|
|
23
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/idempotency/in-memory.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module act-ops\n *\n * Operational primitives for act apps and act-independent receivers.\n *\n * The package's first surface is the **receiver-side idempotency\n * contract**: an {@link IdempotencyStore} port plus an\n * {@link InMemoryIdempotencyStore} reference implementation. Both Act\n * apps and non-Act receivers (forwarded-bus consumers, framework-\n * agnostic HTTP endpoints) install `@rotorsoft/act-ops` to speak the\n * dedup contract — the package has no runtime or peer dependency on\n * `@rotorsoft/act`, so non-Act consumers don't pay for the orchestrator\n * just to honor an `Idempotency-Key`.\n *\n * Durable adapters (Postgres, Redis) implement the same port in their\n * own packages and slot in transparently. The framework-agnostic\n * receiver middleware (`#744`) consumes the port from here without\n * binding to a specific adapter.\n */\n\nexport {\n InMemoryIdempotencyStore,\n type InMemoryIdempotencyStoreOptions,\n} from \"./idempotency/in-memory.js\";\nexport type { IdempotencyStore } from \"./idempotency/port.js\";\n","import type { IdempotencyStore } from \"./port.js\";\n\n/**\n * Options for {@link InMemoryIdempotencyStore}. Both defaults are sized\n * for a single-process receiver paired with a sender using the\n * standard `webhook` backoff envelope (`exponential` up to `maxMs: 30_000`,\n * `maxRetries: 5`); larger envelopes should bump `ttlMs` accordingly\n * (see `computeMinSafeTtl` once #747 ships).\n */\nexport type InMemoryIdempotencyStoreOptions = {\n /** Dedup window. Default: 24 hours. */\n ttlMs?: number;\n /** Memory bound — oldest entries are evicted past this size. Default: 100,000. */\n maxEntries?: number;\n};\n\n/**\n * Bounded LRU + TTL implementation of {@link IdempotencyStore} for\n * single-process receivers (the wolfdesk demo, integration tests, dev\n * loops). Multi-process receivers should swap for a durable adapter\n * (Postgres unique index, Redis `SET NX`) — the {@link IdempotencyStore}\n * contract stays the same so the call site doesn't change.\n *\n * Map iteration is insertion-ordered, so:\n * - The oldest entry sits at `keys().next().value` (cheapest to evict).\n * - GC walks until the first non-expired entry and stops.\n *\n * `claim` is sync; durable adapters return a `Promise<boolean>` —\n * both satisfy the union return type in the port.\n */\nexport class InMemoryIdempotencyStore implements IdempotencyStore {\n private readonly _seen = new Map<string, number>();\n private readonly _ttl_ms: number;\n private readonly _max_entries: number;\n\n constructor(options?: InMemoryIdempotencyStoreOptions) {\n this._ttl_ms = options?.ttlMs ?? 24 * 60 * 60 * 1000;\n this._max_entries = options?.maxEntries ?? 100_000;\n }\n\n claim(key: string, now: number = Date.now()): boolean {\n this._gc(now);\n if (this._seen.has(key)) return false;\n this._seen.set(key, now + this._ttl_ms);\n if (this._seen.size > this._max_entries) {\n // Safe by construction: `_seen.size > _max_entries >= 0` implies at\n // least one entry, so `.next().value` resolves to a string key.\n const oldest = this._seen.keys().next().value as string;\n this._seen.delete(oldest);\n }\n return true;\n }\n\n /** Number of entries currently tracked (post-GC at call time). */\n size(now: number = Date.now()): number {\n this._gc(now);\n return this._seen.size;\n }\n\n /** Drop every entry — test hook. */\n clear(): void {\n this._seen.clear();\n }\n\n private _gc(now: number): void {\n for (const [key, expiresAt] of this._seen) {\n if (expiresAt > now) break;\n this._seen.delete(key);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC8BO,IAAM,2BAAN,MAA2D;AAAA,EAC/C,QAAQ,oBAAI,IAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EAEjB,YAAY,SAA2C;AACrD,SAAK,UAAU,SAAS,SAAS,KAAK,KAAK,KAAK;AAChD,SAAK,eAAe,SAAS,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAa,MAAc,KAAK,IAAI,GAAY;AACpD,SAAK,IAAI,GAAG;AACZ,QAAI,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AAChC,SAAK,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO;AACtC,QAAI,KAAK,MAAM,OAAO,KAAK,cAAc;AAGvC,YAAM,SAAS,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AACxC,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,MAAc,KAAK,IAAI,GAAW;AACrC,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEQ,IAAI,KAAmB;AAC7B,eAAW,CAAC,KAAK,SAAS,KAAK,KAAK,OAAO;AACzC,UAAI,YAAY,IAAK;AACrB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
|
package/dist/index.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// src/idempotency/in-memory.ts
|
|
2
|
-
var InMemoryIdempotencyStore = class {
|
|
3
|
-
_seen = /* @__PURE__ */ new Map();
|
|
4
|
-
_ttl_ms;
|
|
5
|
-
_max_entries;
|
|
6
|
-
constructor(options) {
|
|
7
|
-
this._ttl_ms = options?.ttlMs ?? 24 * 60 * 60 * 1e3;
|
|
8
|
-
this._max_entries = options?.maxEntries ?? 1e5;
|
|
9
|
-
}
|
|
10
|
-
claim(key, now = Date.now()) {
|
|
11
|
-
this._gc(now);
|
|
12
|
-
if (this._seen.has(key)) return false;
|
|
13
|
-
this._seen.set(key, now + this._ttl_ms);
|
|
14
|
-
if (this._seen.size > this._max_entries) {
|
|
15
|
-
const oldest = this._seen.keys().next().value;
|
|
16
|
-
this._seen.delete(oldest);
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
/** Number of entries currently tracked (post-GC at call time). */
|
|
21
|
-
size(now = Date.now()) {
|
|
22
|
-
this._gc(now);
|
|
23
|
-
return this._seen.size;
|
|
24
|
-
}
|
|
25
|
-
/** Drop every entry — test hook. */
|
|
26
|
-
clear() {
|
|
27
|
-
this._seen.clear();
|
|
28
|
-
}
|
|
29
|
-
_gc(now) {
|
|
30
|
-
for (const [key, expiresAt] of this._seen) {
|
|
31
|
-
if (expiresAt > now) break;
|
|
32
|
-
this._seen.delete(key);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
export {
|
|
37
|
-
InMemoryIdempotencyStore
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/idempotency/in-memory.ts"],"sourcesContent":["import type { IdempotencyStore } from \"./port.js\";\n\n/**\n * Options for {@link InMemoryIdempotencyStore}. Both defaults are sized\n * for a single-process receiver paired with a sender using the\n * standard `webhook` backoff envelope (`exponential` up to `maxMs: 30_000`,\n * `maxRetries: 5`); larger envelopes should bump `ttlMs` accordingly\n * (see `computeMinSafeTtl` once #747 ships).\n */\nexport type InMemoryIdempotencyStoreOptions = {\n /** Dedup window. Default: 24 hours. */\n ttlMs?: number;\n /** Memory bound — oldest entries are evicted past this size. Default: 100,000. */\n maxEntries?: number;\n};\n\n/**\n * Bounded LRU + TTL implementation of {@link IdempotencyStore} for\n * single-process receivers (the wolfdesk demo, integration tests, dev\n * loops). Multi-process receivers should swap for a durable adapter\n * (Postgres unique index, Redis `SET NX`) — the {@link IdempotencyStore}\n * contract stays the same so the call site doesn't change.\n *\n * Map iteration is insertion-ordered, so:\n * - The oldest entry sits at `keys().next().value` (cheapest to evict).\n * - GC walks until the first non-expired entry and stops.\n *\n * `claim` is sync; durable adapters return a `Promise<boolean>` —\n * both satisfy the union return type in the port.\n */\nexport class InMemoryIdempotencyStore implements IdempotencyStore {\n private readonly _seen = new Map<string, number>();\n private readonly _ttl_ms: number;\n private readonly _max_entries: number;\n\n constructor(options?: InMemoryIdempotencyStoreOptions) {\n this._ttl_ms = options?.ttlMs ?? 24 * 60 * 60 * 1000;\n this._max_entries = options?.maxEntries ?? 100_000;\n }\n\n claim(key: string, now: number = Date.now()): boolean {\n this._gc(now);\n if (this._seen.has(key)) return false;\n this._seen.set(key, now + this._ttl_ms);\n if (this._seen.size > this._max_entries) {\n // Safe by construction: `_seen.size > _max_entries >= 0` implies at\n // least one entry, so `.next().value` resolves to a string key.\n const oldest = this._seen.keys().next().value as string;\n this._seen.delete(oldest);\n }\n return true;\n }\n\n /** Number of entries currently tracked (post-GC at call time). */\n size(now: number = Date.now()): number {\n this._gc(now);\n return this._seen.size;\n }\n\n /** Drop every entry — test hook. */\n clear(): void {\n this._seen.clear();\n }\n\n private _gc(now: number): void {\n for (const [key, expiresAt] of this._seen) {\n if (expiresAt > now) break;\n this._seen.delete(key);\n }\n }\n}\n"],"mappings":";AA8BO,IAAM,2BAAN,MAA2D;AAAA,EAC/C,QAAQ,oBAAI,IAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EAEjB,YAAY,SAA2C;AACrD,SAAK,UAAU,SAAS,SAAS,KAAK,KAAK,KAAK;AAChD,SAAK,eAAe,SAAS,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAa,MAAc,KAAK,IAAI,GAAY;AACpD,SAAK,IAAI,GAAG;AACZ,QAAI,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AAChC,SAAK,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO;AACtC,QAAI,KAAK,MAAM,OAAO,KAAK,cAAc;AAGvC,YAAM,SAAS,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AACxC,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,MAAc,KAAK,IAAI,GAAW;AACrC,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEQ,IAAI,KAAmB;AAC7B,eAAW,CAAC,KAAK,SAAS,KAAK,KAAK,OAAO;AACzC,UAAI,YAAY,IAAK;AACrB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
|