@rotorsoft/act-ops 0.0.1 → 0.2.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 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, // dedup window (default: 24h)
32
- maxEntries: 50_000, // memory bound (default: 100_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
- ## API
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`** — TypeScript type for the constructor's options bag.
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","../src/receiver/port.ts","../src/receiver/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,74,138,146,150,153,155,156,157,169],[66,67,68,74,138,146,150,153,155,156,157,169],[74,138,146,150,153,155,156,157,169],[70,74,138,146,150,153,155,156,157,169],[67,74,138,146,150,153,155,156,157,169],[74,138,146,150,153,155,156,157,169,225,226],[74,135,136,138,146,150,153,155,156,157,169],[74,137,138,146,150,153,155,156,157,169],[138,146,150,153,155,156,157,169],[74,138,146,150,153,155,156,157,169,178],[74,138,139,144,146,149,150,153,155,156,157,159,169,174,187],[74,138,139,140,146,149,150,153,155,156,157,169],[74,138,141,146,150,153,155,156,157,169,188],[74,138,142,143,146,150,153,155,156,157,160,169],[74,138,143,146,150,153,155,156,157,169,174,184],[74,138,144,146,149,150,153,155,156,157,159,169],[74,137,138,145,146,150,153,155,156,157,169],[74,138,146,147,150,153,155,156,157,169],[74,138,146,148,149,150,153,155,156,157,169],[74,137,138,146,149,150,153,155,156,157,169],[74,138,146,149,150,151,153,155,156,157,169,174,187],[74,138,146,149,150,151,153,155,156,157,169,174,176,178],[74,125,138,146,149,150,152,153,155,156,157,159,169,174,187],[74,138,146,149,150,152,153,155,156,157,159,169,174,184,187],[74,138,146,150,152,153,154,155,156,157,169,174,184,187],[72,73,74,75,76,77,78,79,80,81,82,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,194,195],[74,138,146,149,150,153,155,156,157,169],[74,138,146,150,153,155,157,169],[74,138,146,150,153,155,156,157,158,169,187],[74,138,146,149,150,153,155,156,157,159,169,174],[74,138,146,150,153,155,156,157,160,169],[74,138,146,150,153,155,156,157,161,169],[74,138,146,149,150,153,155,156,157,164,169],[74,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,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],[74,138,146,150,153,155,156,157,166,169],[74,138,146,150,153,155,156,157,167,169],[74,138,143,146,150,153,155,156,157,159,169,178],[74,138,146,149,150,153,155,156,157,169,170],[74,138,146,150,153,155,156,157,169,171,188,191],[74,138,146,149,150,153,155,156,157,169,174,177,178],[74,138,146,150,153,155,156,157,169,175,178],[74,138,146,150,153,155,156,157,169,176],[74,138,146,150,153,155,156,157,169,178,188],[74,138,146,150,153,155,156,157,169,179],[74,135,138,146,150,153,155,156,157,169,174,181,187],[74,138,146,150,153,155,156,157,169,174,180],[74,138,146,149,150,153,155,156,157,169,182,183],[74,138,146,150,153,155,156,157,169,182,183],[74,138,143,146,150,153,155,156,157,159,169,174,184],[74,138,146,150,153,155,156,157,169,185],[74,138,146,150,153,155,156,157,159,169,186],[74,138,146,150,152,153,155,156,157,167,169,187],[74,138,146,150,153,155,156,157,169,188,189],[74,138,143,146,150,153,155,156,157,169,189],[74,138,146,150,153,155,156,157,169,174,190],[74,138,146,150,153,155,156,157,158,169,191],[74,138,146,150,153,155,156,157,169,192],[74,138,141,146,150,153,155,156,157,169],[74,138,143,146,150,153,155,156,157,169],[74,138,146,150,153,155,156,157,169,188],[74,125,138,146,150,153,155,156,157,169],[74,138,146,150,153,155,156,157,169,187],[74,138,146,150,153,155,156,157,169,193],[74,138,146,150,153,155,156,157,164,169],[74,138,146,150,153,155,156,157,169,183],[74,125,138,146,149,150,151,153,155,156,157,164,169,174,178,187,190,191,193],[74,138,146,150,153,155,156,157,169,174,194],[74,138,146,150,153,155,156,157,169,176,195],[74,138,146,150,153,155,156,157,169,198,204,222,223,224,227],[74,138,146,150,153,155,156,157,169,234],[74,138,146,150,153,155,156,157,169,234,235],[74,138,146,150,153,155,156,157,169,202,204,205],[74,138,146,150,153,155,156,157,169,202,204],[74,138,146,150,153,155,156,157,169,202],[74,138,146,150,153,155,156,157,169,197,202,213,214],[74,138,146,150,153,155,156,157,169,197,202,213],[74,138,146,150,153,155,156,157,169,221],[74,138,146,150,153,155,156,157,169,197,203],[74,138,146,150,153,155,156,157,169,197],[74,138,146,150,153,155,156,157,169,199],[74,138,146,150,153,155,156,157,169,197,198,199,200,201],[74,138,146,150,153,155,156,157,169,240,241],[74,138,146,150,153,155,156,157,169,240,241,242,243],[74,138,146,150,153,155,156,157,169,240,242],[74,138,146,150,153,155,156,157,169,240],[74,89,92,95,96,138,146,150,153,155,156,157,169,187],[74,92,138,146,150,153,155,156,157,169,174,187],[74,92,96,138,146,150,153,155,156,157,169,187],[74,138,146,150,153,155,156,157,169,174],[74,86,138,146,150,153,155,156,157,169],[74,90,138,146,150,153,155,156,157,169],[74,88,89,92,138,146,150,153,155,156,157,169,187],[74,138,146,150,153,155,156,157,159,169,184],[74,138,146,150,153,155,156,157,169,196],[74,86,138,146,150,153,155,156,157,169,196],[74,88,92,138,146,150,153,155,156,157,159,169,187],[74,83,84,85,87,91,138,146,149,150,153,155,156,157,169,174,187],[74,92,101,109,138,146,150,153,155,156,157,169],[74,84,90,138,146,150,153,155,156,157,169],[74,92,119,120,138,146,150,153,155,156,157,169],[74,84,87,92,138,146,150,153,155,156,157,169,178,187,196],[74,92,138,146,150,153,155,156,157,169],[74,88,92,138,146,150,153,155,156,157,169,187],[74,83,138,146,150,153,155,156,157,169],[74,86,87,88,90,91,92,93,94,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,138,146,150,153,155,156,157,169],[74,92,112,115,138,146,150,153,155,156,157,169],[74,92,101,102,103,138,146,150,153,155,156,157,169],[74,90,92,102,104,138,146,150,153,155,156,157,169],[74,91,138,146,150,153,155,156,157,169],[74,84,86,92,138,146,150,153,155,156,157,169],[74,92,96,102,104,138,146,150,153,155,156,157,169],[74,96,138,146,150,153,155,156,157,169],[74,90,92,95,138,146,150,153,155,156,157,169,187],[74,84,88,92,101,138,146,150,153,155,156,157,169],[74,92,112,138,146,150,153,155,156,157,169],[74,104,138,146,150,153,155,156,157,169],[74,84,88,92,96,138,146,150,153,155,156,157,169],[74,86,92,119,138,146,150,153,155,156,157,169,178,193,196],[74,138,146,150,153,155,156,157,169,208],[74,138,146,150,153,155,156,157,169,208,209,210,211],[74,138,146,150,153,155,156,157,169,210],[74,138,146,150,153,155,156,157,169,206,229,230,232],[74,138,146,150,153,155,156,157,169,206,207,219,232],[74,138,146,150,153,155,156,157,169,197,204,206,207,215,232],[74,138,146,150,153,155,156,157,169,212],[74,138,146,150,153,155,156,157,169,197,206,207,215,228,231,232],[74,138,146,150,153,155,156,157,169,206,207,212,215,232],[74,138,146,150,153,155,156,157,169,206,229,230,231,232],[74,138,146,150,153,155,156,157,169,206,212,216,217,218,232],[74,138,146,150,153,155,156,157,169,197,202,204,206,207,212,215,216,217,218,219,220,222,228,229,230,231,232,233,236,237,238,239,244],[74,138,146,150,153,155,156,157,169,197,204,206,207,215,216,229,230,231,232,237],[74,138,146,150,153,155,156,157,169,245]],"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":"b9db56126353bc2fd69a9235b60e2278603daeaa0d43821ac00980b01c333679","signature":"7d302ca88c301b0bb2ec4bb2a6e354bf49887cd0743bfbefb68acf098e0b4a43","impliedFormat":99},{"version":"4b42c09f20ea9d0c7aa887436258d109b397e21312c3c92b63d24263afd0c4e1","signature":"5d534f682dabebb325a6dbbf9da9af3ecaf890ddbcf69e6624df052534278236","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,71]],"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],[71,4],[70,5],[224,3],[227,6],[225,3],[135,7],[136,7],[137,8],[74,9],[138,10],[139,11],[140,12],[72,3],[141,13],[142,14],[143,15],[144,16],[145,17],[146,18],[147,18],[148,19],[149,20],[150,21],[151,22],[75,3],[73,3],[152,23],[153,24],[154,25],[196,26],[155,27],[156,28],[157,27],[158,29],[159,30],[160,31],[161,32],[162,32],[163,32],[164,33],[165,34],[166,35],[167,36],[168,37],[169,38],[170,38],[171,39],[172,3],[173,3],[174,40],[175,41],[176,42],[177,40],[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],[191,56],[192,57],[76,27],[77,3],[78,58],[79,59],[80,3],[81,60],[82,3],[126,61],[127,62],[128,63],[129,63],[130,64],[131,3],[132,10],[133,65],[134,62],[193,66],[194,67],[195,68],[228,69],[235,70],[236,71],[234,3],[197,3],[206,72],[205,73],[229,72],[213,74],[215,75],[214,76],[222,77],[221,3],[204,78],[198,79],[200,80],[202,81],[201,3],[203,79],[199,3],[226,3],[242,82],[244,83],[243,84],[241,85],[240,3],[230,3],[223,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],[101,86],[114,87],[98,88],[115,89],[124,90],[89,91],[90,92],[88,93],[123,94],[118,95],[122,96],[92,97],[111,98],[91,99],[121,100],[86,101],[87,95],[93,102],[94,3],[100,103],[97,102],[84,104],[125,105],[116,106],[104,107],[103,102],[105,108],[108,109],[102,110],[106,111],[119,94],[95,112],[96,113],[109,114],[85,89],[113,115],[112,102],[99,113],[107,116],[110,117],[117,3],[83,3],[120,118],[209,119],[212,120],[210,119],[208,3],[211,121],[231,122],[220,123],[216,124],[217,74],[238,125],[232,126],[218,127],[237,128],[207,3],[219,129],[245,130],[239,131],[246,132],[233,3]],"latestChangedDtsFile":"./@types/receiver/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}. Both defaults are sized
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 `maxMs: 30_000`,
6
- * `maxRetries: 5`); larger envelopes should bump `ttlMs` accordingly
7
- * (see `computeMinSafeTtl` once #747 ships).
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
- /** Dedup window. Default: 24 hours. */
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, dev
18
- * loops). Multi-process receivers should swap for a durable adapter
19
- * (Postgres unique index, Redis `SET NX`) — the {@link IdempotencyStore}
20
- * contract stays the same so the call site doesn't change.
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;;;;;;GAMG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;GAaG;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;IAKrD,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"}
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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * @module act-ops/receiver
4
+ *
5
+ * Generic inbound-receiver port. Transport-agnostic — the same
6
+ * `Receiver` interface fits HTTP webhooks (shipped today), bus
7
+ * consumers (Kafka/SQS/NATS/RabbitMQ — future tickets), CDC streams,
8
+ * WebSocket subscribers, scheduled pollers, and any other "external
9
+ * events arrive into this Act app" pattern.
10
+ *
11
+ * Operators who pick act-ops get the opinionated path: pick a
12
+ * transport adapter (today: `@rotorsoft/act-http/receiver` for HTTP
13
+ * webhooks), register typed handlers fluently with Zod schemas,
14
+ * `.build()` to finalize, then `.listen()` (Node server) or
15
+ * `.fetch(request)` (Lambda / edge).
16
+ *
17
+ * ```ts
18
+ * import { webhookReceiver } from "@rotorsoft/act-http/receiver";
19
+ * import { InMemoryIdempotencyStore } from "@rotorsoft/act-ops/idempotency";
20
+ * import { z } from "zod";
21
+ *
22
+ * const receiver = webhookReceiver({
23
+ * port: 4001,
24
+ * store: new InMemoryIdempotencyStore(),
25
+ * secret: process.env.WEBHOOK_SECRET,
26
+ * })
27
+ * .on("OrderConfirmed", z.object({ orderId: z.string() }), async (event, ctx) => {
28
+ * // event is typed; ctx.key is the dedup key
29
+ * })
30
+ * .build();
31
+ *
32
+ * await receiver.listen();
33
+ * ```
34
+ *
35
+ * Matches Act's builder pattern: the factory returns a
36
+ * {@link ReceiverBuilder} that collects handlers; `.build()`
37
+ * finalizes and produces an immutable {@link Receiver} with only
38
+ * runtime methods. You can't accidentally register a handler on a
39
+ * running receiver — the lifecycle phases are split at the type
40
+ * level.
41
+ *
42
+ * For operators who want fine control — custom path routing, auth
43
+ * middleware composition, non-standard HTTP server lifecycle — the
44
+ * lower-level `webhookMiddleware` factory in
45
+ * `@rotorsoft/act-http/receiver/<framework>` stays available as the
46
+ * escape hatch.
47
+ */
48
+ export type { Receiver, ReceiverBuilder, ReceiverContext, ReceiverOptions, Validator, } from "./port.js";
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/receiver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,YAAY,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,GACV,MAAM,WAAW,CAAC"}
@@ -0,0 +1,122 @@
1
+ import type { IdempotencyStore } from "../idempotency/port.js";
2
+ /**
3
+ * Context passed to every handler after the receiver has verified
4
+ * the inbound request (when configured) and claimed the
5
+ * `Idempotency-Key` (or the transport's native message identifier)
6
+ * on the configured store.
7
+ */
8
+ export type ReceiverContext = {
9
+ /** The deduplicated identity of the inbound event. */
10
+ readonly key: string;
11
+ };
12
+ /**
13
+ * Zod-compatible schema shape, typed structurally so this package
14
+ * doesn't import Zod directly. Any `z.object(...)` (or anything with
15
+ * a `parse(input): T` method) satisfies the shape.
16
+ */
17
+ export type Validator<T> = {
18
+ parse(input: unknown): T;
19
+ };
20
+ /**
21
+ * Generic inbound-receiver port — the runtime artifact produced by
22
+ * {@link ReceiverBuilder.build}. Transport-agnostic: the same shape
23
+ * fits HTTP webhooks, message-bus consumers (Kafka/SQS/NATS/Rabbit),
24
+ * CDC streams, WebSocket subscribers, scheduled pollers, and any
25
+ * other "external events arrive into this Act app" pattern.
26
+ *
27
+ * Adapters in `@rotorsoft/act-http/receiver` implement the HTTP
28
+ * flavor today; bus consumers and other transport adapters
29
+ * implement the same port in their own packages without redesigning
30
+ * the contract.
31
+ *
32
+ * Two deployment modes:
33
+ *
34
+ * - **Long-running server** — {@link listen} binds to a port (HTTP),
35
+ * a topic (bus), a path (WebSocket), etc.
36
+ * - **Request-response (Lambda / edge / serverless)** —
37
+ * {@link fetch} handles one request and returns the response.
38
+ * Available on the HTTP adapter; bus consumers and other
39
+ * non-fetch transports throw.
40
+ */
41
+ export type Receiver = {
42
+ /**
43
+ * Bind and start accepting inbound events. Resolves once the
44
+ * transport is ready (server listening, consumer subscribed, etc.).
45
+ */
46
+ listen(): Promise<void>;
47
+ /**
48
+ * Stop gracefully. Resolves when the transport has shut down.
49
+ * No-op if never started.
50
+ */
51
+ close(): Promise<void>;
52
+ /**
53
+ * Handle a single fetch-shaped request. Available on the HTTP
54
+ * adapter for Lambda / Cloudflare Workers / Vercel Edge / Bun /
55
+ * Deno. Bus consumers and other non-fetch transports throw.
56
+ */
57
+ fetch(request: Request): Promise<Response>;
58
+ };
59
+ /**
60
+ * Fluent builder for a {@link Receiver}. Matches Act's builder
61
+ * pattern: factories return a builder, builder methods register
62
+ * configuration, `.build()` finalizes and produces the immutable
63
+ * runtime artifact.
64
+ *
65
+ * The type-level split between builder (`on`, `build`) and receiver
66
+ * (`listen`, `close`, `fetch`) means operators can't accidentally
67
+ * call `.on()` on a running receiver — registration and runtime
68
+ * are different lifecycle phases enforced at compile time.
69
+ */
70
+ export type ReceiverBuilder = {
71
+ /**
72
+ * Register a typed handler for a named event. The receiver
73
+ * validates the inbound body (or the transport's payload shape)
74
+ * with `schema` before calling `handler` — so the handler sees a
75
+ * fully-typed event, never raw bytes. Returns `this` for fluent
76
+ * chaining.
77
+ *
78
+ * For the HTTP adapter, handlers are mounted at `POST /<name>`.
79
+ * Bus adapters dispatch based on a topic-encoded name; the
80
+ * convention is per-transport.
81
+ */
82
+ on<T>(name: string, schema: Validator<T>, handler: (event: T, ctx: ReceiverContext) => Promise<void>): ReceiverBuilder;
83
+ /**
84
+ * Finalize the configuration and produce the runtime
85
+ * {@link Receiver}. After `.build()`, no more handlers can be
86
+ * registered.
87
+ */
88
+ build(): Receiver;
89
+ };
90
+ /**
91
+ * Options for HTTP {@link Receiver} adapters. Transport-specific
92
+ * adapters (bus consumers, WebSocket subscribers) define their own
93
+ * options types — only the {@link Receiver} port and the
94
+ * {@link ReceiverBuilder} contract stay the same across transports.
95
+ */
96
+ export type ReceiverOptions = {
97
+ /**
98
+ * Port to bind when calling {@link Receiver.listen}. Ignored when
99
+ * the receiver is used in fetch-style mode (Lambda / edge).
100
+ */
101
+ readonly port: number;
102
+ /**
103
+ * Idempotency store the receiver claims keys on. Match the
104
+ * sender's retry envelope when sizing.
105
+ * `InMemoryIdempotencyStore` from
106
+ * `@rotorsoft/act-ops/idempotency` is the default single-process
107
+ * choice.
108
+ */
109
+ readonly store: IdempotencyStore;
110
+ /**
111
+ * HMAC-SHA256 shared secret. When set, the HTTP adapter verifies
112
+ * the `X-Webhook-Signature` and `X-Webhook-Timestamp` headers
113
+ * against the raw request body. Pair with `webhook({ secret })`
114
+ * on the sender side. When undefined, signature verification is
115
+ * skipped.
116
+ *
117
+ * Transport-specific adapters interpret this field according to
118
+ * their own authentication model.
119
+ */
120
+ readonly secret?: string;
121
+ };
122
+ //# sourceMappingURL=port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/receiver/port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;;;;OAUG;IACH,EAAE,CAAC,CAAC,EACF,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GACzD,eAAe,CAAC;IACnB;;;;OAIG;IACH,KAAK,IAAI,QAAQ,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -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 index_exports = {};
22
- __export(index_exports, {
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(index_exports);
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":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/receiver/index.ts
17
+ var receiver_exports = {};
18
+ module.exports = __toCommonJS(receiver_exports);
19
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/receiver/index.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module act-ops/receiver\n *\n * Generic inbound-receiver port. Transport-agnostic — the same\n * `Receiver` interface fits HTTP webhooks (shipped today), bus\n * consumers (Kafka/SQS/NATS/RabbitMQ — future tickets), CDC streams,\n * WebSocket subscribers, scheduled pollers, and any other \"external\n * events arrive into this Act app\" pattern.\n *\n * Operators who pick act-ops get the opinionated path: pick a\n * transport adapter (today: `@rotorsoft/act-http/receiver` for HTTP\n * webhooks), register typed handlers fluently with Zod schemas,\n * `.build()` to finalize, then `.listen()` (Node server) or\n * `.fetch(request)` (Lambda / edge).\n *\n * ```ts\n * import { webhookReceiver } from \"@rotorsoft/act-http/receiver\";\n * import { InMemoryIdempotencyStore } from \"@rotorsoft/act-ops/idempotency\";\n * import { z } from \"zod\";\n *\n * const receiver = webhookReceiver({\n * port: 4001,\n * store: new InMemoryIdempotencyStore(),\n * secret: process.env.WEBHOOK_SECRET,\n * })\n * .on(\"OrderConfirmed\", z.object({ orderId: z.string() }), async (event, ctx) => {\n * // event is typed; ctx.key is the dedup key\n * })\n * .build();\n *\n * await receiver.listen();\n * ```\n *\n * Matches Act's builder pattern: the factory returns a\n * {@link ReceiverBuilder} that collects handlers; `.build()`\n * finalizes and produces an immutable {@link Receiver} with only\n * runtime methods. You can't accidentally register a handler on a\n * running receiver — the lifecycle phases are split at the type\n * level.\n *\n * For operators who want fine control — custom path routing, auth\n * middleware composition, non-standard HTTP server lifecycle — the\n * lower-level `webhookMiddleware` factory in\n * `@rotorsoft/act-http/receiver/<framework>` stays available as the\n * escape hatch.\n */\n\nexport type {\n Receiver,\n ReceiverBuilder,\n ReceiverContext,\n ReceiverOptions,\n Validator,\n} from \"./port.js\";\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","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.1",
4
+ "version": "0.2.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,16 @@
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"
33
+ },
34
+ "./receiver": {
35
+ "types": "./dist/@types/receiver/index.d.ts",
36
+ "import": "./dist/receiver/index.js",
37
+ "require": "./dist/receiver/index.cjs"
36
38
  }
37
39
  },
38
40
  "sideEffects": false,
@@ -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"}
@@ -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":[]}