pipework 0.259.0 → 0.260.1
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/CHANGELOG.md +8 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/fetch/connect-retry.d.ts +14 -0
- package/dist/infra/fetch/connect-retry.d.ts.map +1 -1
- package/dist/infra/fetch/connect-retry.js +73 -0
- package/dist/infra/fetch/connect-retry.js.map +1 -1
- package/dist/infra/fetch/index.d.ts +1 -0
- package/dist/infra/fetch/index.d.ts.map +1 -1
- package/dist/infra/fetch/index.js +1 -0
- package/dist/infra/fetch/index.js.map +1 -1
- package/dist/infra/fetch/namespace.d.ts +22 -2
- package/dist/infra/fetch/namespace.d.ts.map +1 -1
- package/dist/infra/fetch/namespace.js +22 -2
- package/dist/infra/fetch/namespace.js.map +1 -1
- package/dist/request/context/guard.d.ts +1 -1
- package/dist/request/context/guard.d.ts.map +1 -1
- package/dist/request/context/guard.js +4 -2
- package/dist/request/context/guard.js.map +1 -1
- package/dist/request/context/run-in-transaction.d.ts +3 -0
- package/dist/request/context/run-in-transaction.d.ts.map +1 -1
- package/dist/request/context/run-in-transaction.js +10 -3
- package/dist/request/context/run-in-transaction.js.map +1 -1
- package/dist/request/context/types.d.ts +2 -0
- package/dist/request/context/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/infra/fetch/connect-retry.ts +72 -0
- package/src/infra/fetch/index.ts +1 -0
- package/src/infra/fetch/namespace.ts +23 -2
- package/src/request/context/guard.ts +5 -1
- package/src/request/context/run-in-transaction.ts +10 -3
- package/src/request/context/types.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.260.1
|
|
4
|
+
|
|
5
|
+
- **Fixed: an aborted `executeInTransaction` no longer commits when its transaction was idle at the abort** (#914). Aborting only cancelled a running query, so a handler awaiting a timer or an HTTP call resumed and committed. Now, when the run returns after its signal aborted, every transaction rolls back and the run rejects with `signal.reason`; `pipe()` refuses a statement on the aborted transaction with the same reason. Covers `jobs.execute(…, { signal })` and `checkpoint`.
|
|
6
|
+
|
|
7
|
+
## 0.260.0
|
|
8
|
+
|
|
9
|
+
- **Added: `idempotentRetry` retries transient socket faults on reads** (#912). `idempotentRetry.fetch(input, init, opts)` (GET, HEAD, OPTIONS only) retries the connect faults plus `UND_ERR_SOCKET` / `SocketError` ("other side closed"), `ECONNRESET`, `EPIPE` and `ETIMEDOUT`, three tries (250 ms, then 1 s); the body is read inside each try and returned buffered, so a fault mid-body is retried too. `idempotentRetry.call(send)` applies the same rule to any read the caller declares idempotent; `isTransientFault(err)` exposes the test. Never retried: a response of any status, a decode error, the caller's abort or timeout; the last fault is thrown unchanged. `connectRetry` is unchanged.
|
|
10
|
+
|
|
3
11
|
## 0.259.0
|
|
4
12
|
|
|
5
13
|
- **Fixed: an alert delivery that gives up is no longer lost silently** (#910). When a delivery to a sink reaches `failed_at`, the alerts handle raises `pipework.alerts.undeliverable:<sink>` (error; context `{ sink, alertKey, kind, attempts, error }`; resolves after an hour quiet), sent through every other sink and never to the failed one. Fix the sink, then `requeueFailed({ sink, by })`. With a single sink the alert is recorded with no delivery.
|
package/dist/index.d.ts
CHANGED
|
@@ -103,7 +103,7 @@ export type { Support, SupportConfig, TicketApi as SupportTicketApi, Ticket as S
|
|
|
103
103
|
export type { Sink, SinkDelivery } from './infra/outbox/core.js';
|
|
104
104
|
export { storage } from './infra/storage/namespace.js';
|
|
105
105
|
export type { Storage, StorageConfig, StoredFile, PutOptions as StoragePutOptions, FindOptions as StorageFindOptions, SignedUrlOptions as StorageSignedUrlOptions, SweepOptions as StorageSweepOptions, SweepResult as StorageSweepResult, StorageBackend, S3Config, S3Encryption, LocalConfig as StorageLocalConfig } from './infra/storage/index.js';
|
|
106
|
-
export { untrustedFetch, connectRetry } from './infra/fetch/namespace.js';
|
|
106
|
+
export { untrustedFetch, connectRetry, idempotentRetry } from './infra/fetch/namespace.js';
|
|
107
107
|
export type { ConnectRetryOptions, UntrustedFetchOptions, UntrustedPostOptions, UntrustedFetchResult, FetchHead, FetchTarget, FetchRefusal } from './infra/fetch/index.js';
|
|
108
108
|
export { crawl } from './infra/crawl/namespace.js';
|
|
109
109
|
export type { CrawlConfig, CrawlSite, CrawlStartOptions, CrawlLimits, CrawlScope, CrawlState, CrawlStoppedBy, CrawlStatus, CrawlCounts, CrawlResource, CrawlRefusal, CrawlPage } from './infra/crawl/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAExI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACvF,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACnF,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACtG,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACxF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACtG,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC/E,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAK3D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC1E,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAE5F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EACvI,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAC9E,oBAAoB,EAAE,wBAAwB,EAAE,aAAa,EAAE,iBAAiB,EAChF,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EACxF,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EACpD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvM,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAEtL,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnS,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3G,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAExF,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACxF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EACrE,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAC7F,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAChG,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE5E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC5F,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACzF,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClF,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAChH,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACtG,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC/F,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAChE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAErH,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEjG,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,EACtE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEpG,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAClF,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAClF,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EACtF,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EACzL,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAC/G,cAAc,EAAE,cAAc,IAAI,kBAAkB,EAAE,aAAa,IAAI,iBAAiB,EAAE,WAAW,IAAI,eAAe,EACxH,UAAU,IAAI,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,IAAI,aAAa,EAAE,OAAO,IAAI,WAAW,EAAE,SAAS,IAAI,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,aAAa,IAAI,iBAAiB,EAC1O,gBAAgB,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,gBAAgB,IAAI,oBAAoB,EACtG,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAC/E,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EACpF,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,sBAAsB,EACvE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEvI,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EACnF,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAC/D,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EACtE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAC9C,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EACrE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAC5F,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EACtE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEzG,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACxD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EACzE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAClF,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,qBAAqB,EAC1E,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EACnE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEjI,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACtF,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAC1E,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EACxE,aAAa,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC9E,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EACnG,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAC1E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,aAAa,EAAE,kBAAkB,EAC9H,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE7G,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAC5G,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACtI,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAC7G,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EACpG,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACxH,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC3I,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AACpD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,IAAI,iBAAiB,EAAE,WAAW,IAAI,gBAAgB,EACxI,UAAU,IAAI,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAC/J,cAAc,EAAE,WAAW,EAAE,SAAS,IAAI,cAAc,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,WAAW,EAAE,cAAc,IAAI,mBAAmB,EAChJ,cAAc,IAAI,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAC7E,WAAW,IAAI,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxI,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,IAAI,aAAa,EAAE,aAAa,IAAI,cAAc,EAC3H,UAAU,IAAI,WAAW,EAAE,YAAY,IAAI,mBAAmB,EAAE,WAAW,IAAI,kBAAkB,EAAE,WAAW,IAAI,kBAAkB,EACpI,QAAQ,IAAI,eAAe,EAAE,UAAU,IAAI,iBAAiB,EAAE,aAAa,IAAI,oBAAoB,EAAE,YAAY,IAAI,mBAAmB,EACxI,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC9I,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,IAAI,iBAAiB,EAAE,WAAW,IAAI,kBAAkB,EAAE,gBAAgB,IAAI,uBAAuB,EAC/J,YAAY,IAAI,mBAAmB,EAAE,WAAW,IAAI,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAC9G,WAAW,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC1F,YAAY,EACV,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC9J,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EACV,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EACxH,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EACrI,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAChF,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAChG,UAAU,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,IAAI,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAE/J,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAC5F,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EACjD,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAC9E,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAC9G,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhK,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,SAAS,EAAE,cAAc,EAC9F,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAC7E,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC9E,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChF,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAElH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC1F,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -46,7 +46,7 @@ export { alerts } from './infra/alerts/namespace.js';
|
|
|
46
46
|
export { support } from './infra/support/namespace.js';
|
|
47
47
|
export { DraftStateError } from './infra/support/index.js';
|
|
48
48
|
export { storage } from './infra/storage/namespace.js';
|
|
49
|
-
export { untrustedFetch, connectRetry } from './infra/fetch/namespace.js';
|
|
49
|
+
export { untrustedFetch, connectRetry, idempotentRetry } from './infra/fetch/namespace.js';
|
|
50
50
|
export { crawl } from './infra/crawl/namespace.js';
|
|
51
51
|
export { CrawlNotEnabledError, CrawlSeedError } from './infra/crawl/index.js';
|
|
52
52
|
export { accessLinks } from './infra/access-links/namespace.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA8C,MAAM,4BAA4B,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAIxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAQ/D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAG/E,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAWvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAMnD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AASxF,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAW/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAKhE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAMlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAKxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAI1D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAKtF,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAM9E,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAI7D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAMpD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAO1D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAItD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAG1F,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAM/D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAMrD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAC9G,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhK,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -21,4 +21,18 @@ export declare function retryUnsent<R>(send: () => Promise<R>, opts?: ConnectRet
|
|
|
21
21
|
export declare function fetchRetryingUnsent(input: string | URL | Request, init?: RequestInit, opts?: ConnectRetryOptions & {
|
|
22
22
|
fetch?: typeof fetch;
|
|
23
23
|
}): Promise<Response>;
|
|
24
|
+
/** True when the fault is a transport fault that may clear on its own (a connect fault, a closed or reset socket, a timed-out connection) and not the caller's abort or timeout. */
|
|
25
|
+
export declare function isTransientFault(err: unknown): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Runs `send`, and sends again after a wait when it failed with a transient transport fault. Any other fault is thrown at once.
|
|
28
|
+
* Only for reads that are safe to repeat. When the tries run out, or `signal` aborts, the last fault is thrown unchanged.
|
|
29
|
+
*/
|
|
30
|
+
export declare function retryTransient<R>(send: () => Promise<R>, opts?: ConnectRetryOptions): Promise<R>;
|
|
31
|
+
/**
|
|
32
|
+
* `fetch` for GET, HEAD and OPTIONS that is tried again on a transient transport fault, including one while the body is read.
|
|
33
|
+
* The body is read whole inside each try and returned buffered. A response of any status is returned.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchRetryingTransient(input: string | URL | Request, init?: RequestInit, opts?: ConnectRetryOptions & {
|
|
36
|
+
fetch?: typeof fetch;
|
|
37
|
+
}): Promise<Response>;
|
|
24
38
|
//# sourceMappingURL=connect-retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-retry.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/connect-retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,2GAA2G;IAC3G,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,yFAAyF;IACzF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAC/E;AA4BD,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAaD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC,CAevG;AAED,oHAAoH;AACpH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,EAClB,IAAI,GAAE,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACxD,OAAO,CAAC,QAAQ,CAAC,CAOnB"}
|
|
1
|
+
{"version":3,"file":"connect-retry.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/connect-retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,2GAA2G;IAC3G,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,yFAAyF;IACzF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAC/E;AA4BD,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAaD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC,CAevG;AAED,oHAAoH;AACpH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,EAClB,IAAI,GAAE,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACxD,OAAO,CAAC,QAAQ,CAAC,CAOnB;AA0BD,oLAAoL;AACpL,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC,CAe1G;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,EAClB,IAAI,GAAE,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACxD,OAAO,CAAC,QAAQ,CAAC,CAYnB"}
|
|
@@ -73,4 +73,77 @@ export function fetchRetryingUnsent(input, init, opts = {}) {
|
|
|
73
73
|
const signal = opts.signal ?? init?.signal ?? undefined;
|
|
74
74
|
return retryUnsent(() => doFetch(input instanceof Request ? input.clone() : input, init), { ...opts, ...(signal !== undefined ? { signal } : {}) });
|
|
75
75
|
}
|
|
76
|
+
const TRANSIENT_CODES = new Set([...UNSENT_CODES, 'UND_ERR_SOCKET', 'ECONNRESET', 'EPIPE', 'ETIMEDOUT']);
|
|
77
|
+
const TRANSIENT_DELAYS = [250, 1_000];
|
|
78
|
+
const BODILESS_STATUSES = new Set([204, 205, 304]);
|
|
79
|
+
const READ_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
|
|
80
|
+
/** The first transient transport code in the error's chain ('SocketError' when only the name shows it), or null for the caller's abort or timeout and anything else. */
|
|
81
|
+
function transientCode(err) {
|
|
82
|
+
const state = { found: null, socket: false, stopped: false };
|
|
83
|
+
const seen = new Set();
|
|
84
|
+
const walk = (node, depth) => {
|
|
85
|
+
if (typeof node !== 'object' || node === null || depth > MAX_DEPTH || seen.has(node))
|
|
86
|
+
return;
|
|
87
|
+
seen.add(node);
|
|
88
|
+
const { code, name, cause, errors } = node;
|
|
89
|
+
if (name === 'AbortError' || name === 'TimeoutError')
|
|
90
|
+
state.stopped = true;
|
|
91
|
+
if (name === 'SocketError')
|
|
92
|
+
state.socket = true;
|
|
93
|
+
if (typeof code === 'string' && TRANSIENT_CODES.has(code) && state.found === null)
|
|
94
|
+
state.found = code;
|
|
95
|
+
walk(cause, depth + 1);
|
|
96
|
+
if (Array.isArray(errors))
|
|
97
|
+
for (const e of errors)
|
|
98
|
+
walk(e, depth + 1);
|
|
99
|
+
};
|
|
100
|
+
walk(err, 0);
|
|
101
|
+
if (state.stopped)
|
|
102
|
+
return null;
|
|
103
|
+
return state.found ?? (state.socket ? 'SocketError' : null);
|
|
104
|
+
}
|
|
105
|
+
/** True when the fault is a transport fault that may clear on its own (a connect fault, a closed or reset socket, a timed-out connection) and not the caller's abort or timeout. */
|
|
106
|
+
export function isTransientFault(err) {
|
|
107
|
+
return transientCode(err) !== null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Runs `send`, and sends again after a wait when it failed with a transient transport fault. Any other fault is thrown at once.
|
|
111
|
+
* Only for reads that are safe to repeat. When the tries run out, or `signal` aborts, the last fault is thrown unchanged.
|
|
112
|
+
*/
|
|
113
|
+
export async function retryTransient(send, opts = {}) {
|
|
114
|
+
const delays = opts.delaysMs ?? TRANSIENT_DELAYS;
|
|
115
|
+
for (let attempt = 1;; attempt++) {
|
|
116
|
+
try {
|
|
117
|
+
return await send();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const code = transientCode(error);
|
|
121
|
+
const delayMs = delays[attempt - 1];
|
|
122
|
+
if (code === null || delayMs === undefined || aborted(opts.signal))
|
|
123
|
+
throw error;
|
|
124
|
+
getBaseLogger().warn({ code, attempt, delayMs }, 'transport fault on an idempotent read; trying again');
|
|
125
|
+
opts.onRetry?.({ error, attempt, delayMs });
|
|
126
|
+
await wait(delayMs, opts.signal);
|
|
127
|
+
if (aborted(opts.signal))
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* `fetch` for GET, HEAD and OPTIONS that is tried again on a transient transport fault, including one while the body is read.
|
|
134
|
+
* The body is read whole inside each try and returned buffered. A response of any status is returned.
|
|
135
|
+
*/
|
|
136
|
+
export function fetchRetryingTransient(input, init, opts = {}) {
|
|
137
|
+
const method = (init?.method ?? (input instanceof Request ? input.method : 'GET')).toUpperCase();
|
|
138
|
+
if (!READ_METHODS.has(method)) {
|
|
139
|
+
return Promise.reject(new TypeError(`idempotentRetry.fetch retries only GET, HEAD and OPTIONS, not ${method}; use idempotentRetry.call for another idempotent read`));
|
|
140
|
+
}
|
|
141
|
+
const doFetch = opts.fetch ?? fetch;
|
|
142
|
+
const signal = opts.signal ?? init?.signal ?? undefined;
|
|
143
|
+
return retryTransient(async () => {
|
|
144
|
+
const res = await doFetch(input instanceof Request ? input.clone() : input, init);
|
|
145
|
+
const body = method === 'HEAD' || BODILESS_STATUSES.has(res.status) ? null : await res.arrayBuffer();
|
|
146
|
+
return new Response(body, { status: res.status, statusText: res.statusText, headers: res.headers });
|
|
147
|
+
}, { ...opts, ...(signal !== undefined ? { signal } : {}) });
|
|
148
|
+
}
|
|
76
149
|
//# sourceMappingURL=connect-retry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-retry.js","sourceRoot":"","sources":["../../../src/infra/fetch/connect-retry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connect-retry.js","sourceRoot":"","sources":["../../../src/infra/fetch/connect-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,6 @@ export { untrustedGet, untrustedPost } from './handle.js';
|
|
|
2
2
|
export { isPublicAddress } from './address.js';
|
|
3
3
|
export type { UntrustedFetchOptions, UntrustedPostOptions, UntrustedFetchResult, FetchHead, FetchTarget, FetchRefusal, } from './handle.js';
|
|
4
4
|
export { isUnsentFault, retryUnsent, fetchRetryingUnsent } from './connect-retry.js';
|
|
5
|
+
export { isTransientFault, retryTransient, fetchRetryingTransient } from './connect-retry.js';
|
|
5
6
|
export type { ConnectRetryOptions } from './connect-retry.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EACV,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,GACxG,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpF,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EACV,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,GACxG,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC7F,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { untrustedGet, untrustedPost } from './handle.js';
|
|
2
2
|
export { isPublicAddress } from './address.js';
|
|
3
3
|
export { isUnsentFault, retryUnsent, fetchRetryingUnsent } from './connect-retry.js';
|
|
4
|
+
export { isTransientFault, retryTransient, fetchRetryingTransient } from './connect-retry.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAI9C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAI9C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { untrustedGet, untrustedPost } from './handle.js';
|
|
2
|
-
import { retryUnsent, fetchRetryingUnsent, isUnsentFault } from './connect-retry.js';
|
|
2
|
+
import { retryUnsent, fetchRetryingUnsent, isUnsentFault, retryTransient, fetchRetryingTransient, isTransientFault } from './connect-retry.js';
|
|
3
3
|
/** Untrusted fetch — fetch one URL a stranger gave without letting them reach the app's private network. */
|
|
4
4
|
export declare const untrustedFetch: {
|
|
5
5
|
/**
|
|
@@ -53,7 +53,7 @@ export declare const connectRetry: {
|
|
|
53
53
|
* `fetch(input, init, opts)` that retries a fault in the connect phase (undici `UND_ERR_CONNECT_TIMEOUT`, `EAI_AGAIN`,
|
|
54
54
|
* `ENOTFOUND`, `ECONNREFUSED`, `ENETUNREACH`, `EHOSTUNREACH`), waiting `delaysMs` between tries (default 5 s, 15 s, 40 s: four
|
|
55
55
|
* tries over about a minute), then throws the last fault with its cause chain. A fault after the request was written
|
|
56
|
-
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect.
|
|
56
|
+
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect. For reads, use `idempotentRetry`.
|
|
57
57
|
* `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
58
58
|
*
|
|
59
59
|
* ```ts
|
|
@@ -66,4 +66,24 @@ export declare const connectRetry: {
|
|
|
66
66
|
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a connect-phase fault and no sent-phase one. */
|
|
67
67
|
readonly isUnsentFault: typeof isUnsentFault;
|
|
68
68
|
};
|
|
69
|
+
/** Idempotent retry — send a read again after a transport fault, because repeating it changes nothing. */
|
|
70
|
+
export declare const idempotentRetry: {
|
|
71
|
+
/**
|
|
72
|
+
* `fetch(input, init, opts)` for GET, HEAD and OPTIONS (any other method throws a `TypeError` before anything is sent) that retries
|
|
73
|
+
* the connect codes plus `UND_ERR_SOCKET` / `SocketError` ("other side closed"), `ECONNRESET`, `EPIPE` and `ETIMEDOUT`, waiting `delaysMs`
|
|
74
|
+
* between tries (default 250 ms, then 1 s: three tries). The body is read together with the request and returned buffered, so a fault
|
|
75
|
+
* while it streams is retried too. Never retried: a response of any status, a decode error, the caller's abort or timeout.
|
|
76
|
+
* The last fault is thrown unchanged. `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
77
|
+
*
|
|
78
|
+
* ```ts
|
|
79
|
+
* const res = await idempotentRetry.fetch('https://api.github.com/repos/o/r/issues')
|
|
80
|
+
* const issues = await res.json()
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
readonly fetch: typeof fetchRetryingTransient;
|
|
84
|
+
/** Runs any read the caller declares idempotent with the same rule; `send()` should do the request and the body read. The last fault is thrown unchanged. */
|
|
85
|
+
readonly call: typeof retryTransient;
|
|
86
|
+
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a transient transport fault and no abort or timeout. */
|
|
87
|
+
readonly isTransientFault: typeof isTransientFault;
|
|
88
|
+
};
|
|
69
89
|
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/infra/fetch/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE9I,4GAA4G;AAC5G,eAAO,MAAM,cAAc;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;;IAEH;;;;;;;;;;;;;OAaG;;CAEK,CAAA;AAEV,4GAA4G;AAC5G,eAAO,MAAM,YAAY;IACvB;;;;;;;;;;OAUG;;IAEH,0HAA0H;;IAE1H,+HAA+H;;CAEvH,CAAA;AAEV,0GAA0G;AAC1G,eAAO,MAAM,eAAe;IAC1B;;;;;;;;;;;OAWG;;IAEH,6JAA6J;;IAE7J,uIAAuI;;CAE/H,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { untrustedGet, untrustedPost } from './handle.js';
|
|
2
|
-
import { retryUnsent, fetchRetryingUnsent, isUnsentFault } from './connect-retry.js';
|
|
2
|
+
import { retryUnsent, fetchRetryingUnsent, isUnsentFault, retryTransient, fetchRetryingTransient, isTransientFault } from './connect-retry.js';
|
|
3
3
|
/** Untrusted fetch — fetch one URL a stranger gave without letting them reach the app's private network. */
|
|
4
4
|
export const untrustedFetch = {
|
|
5
5
|
/**
|
|
@@ -53,7 +53,7 @@ export const connectRetry = {
|
|
|
53
53
|
* `fetch(input, init, opts)` that retries a fault in the connect phase (undici `UND_ERR_CONNECT_TIMEOUT`, `EAI_AGAIN`,
|
|
54
54
|
* `ENOTFOUND`, `ECONNREFUSED`, `ENETUNREACH`, `EHOSTUNREACH`), waiting `delaysMs` between tries (default 5 s, 15 s, 40 s: four
|
|
55
55
|
* tries over about a minute), then throws the last fault with its cause chain. A fault after the request was written
|
|
56
|
-
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect.
|
|
56
|
+
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect. For reads, use `idempotentRetry`.
|
|
57
57
|
* `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
58
58
|
*
|
|
59
59
|
* ```ts
|
|
@@ -66,4 +66,24 @@ export const connectRetry = {
|
|
|
66
66
|
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a connect-phase fault and no sent-phase one. */
|
|
67
67
|
isUnsentFault,
|
|
68
68
|
};
|
|
69
|
+
/** Idempotent retry — send a read again after a transport fault, because repeating it changes nothing. */
|
|
70
|
+
export const idempotentRetry = {
|
|
71
|
+
/**
|
|
72
|
+
* `fetch(input, init, opts)` for GET, HEAD and OPTIONS (any other method throws a `TypeError` before anything is sent) that retries
|
|
73
|
+
* the connect codes plus `UND_ERR_SOCKET` / `SocketError` ("other side closed"), `ECONNRESET`, `EPIPE` and `ETIMEDOUT`, waiting `delaysMs`
|
|
74
|
+
* between tries (default 250 ms, then 1 s: three tries). The body is read together with the request and returned buffered, so a fault
|
|
75
|
+
* while it streams is retried too. Never retried: a response of any status, a decode error, the caller's abort or timeout.
|
|
76
|
+
* The last fault is thrown unchanged. `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
77
|
+
*
|
|
78
|
+
* ```ts
|
|
79
|
+
* const res = await idempotentRetry.fetch('https://api.github.com/repos/o/r/issues')
|
|
80
|
+
* const issues = await res.json()
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
fetch: fetchRetryingTransient,
|
|
84
|
+
/** Runs any read the caller declares idempotent with the same rule; `send()` should do the request and the body read. The last fault is thrown unchanged. */
|
|
85
|
+
call: retryTransient,
|
|
86
|
+
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a transient transport fault and no abort or timeout. */
|
|
87
|
+
isTransientFault,
|
|
88
|
+
};
|
|
69
89
|
//# sourceMappingURL=namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/infra/fetch/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/infra/fetch/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE9I,4GAA4G;AAC5G,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,GAAG,EAAE,YAAY;IACjB;;;;;;;;;;;;;OAaG;IACH,IAAI,EAAE,aAAa;CACX,CAAA;AAEV,4GAA4G;AAC5G,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;;;;;;;;;;OAUG;IACH,KAAK,EAAE,mBAAmB;IAC1B,0HAA0H;IAC1H,IAAI,EAAE,WAAW;IACjB,+HAA+H;IAC/H,aAAa;CACL,CAAA;AAEV,0GAA0G;AAC1G,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;;;;;;;;;;OAWG;IACH,KAAK,EAAE,sBAAsB;IAC7B,6JAA6J;IAC7J,IAAI,EAAE,cAAc;IACpB,uIAAuI;IACvI,gBAAgB;CACR,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Flow, BoundTransaction } from './types.js';
|
|
2
2
|
import type { DB } from '../../data/db/index.js';
|
|
3
3
|
export declare function verifyTransactionBinding(ctx: Flow, bound: BoundTransaction, dbName: string): void;
|
|
4
|
-
export declare function bindTransaction(ctx: Flow, dbName: string, drizzle: DB): BoundTransaction;
|
|
4
|
+
export declare function bindTransaction(ctx: Flow, dbName: string, drizzle: DB, signal?: AbortSignal): BoundTransaction;
|
|
5
5
|
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/request/context/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAGhD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,GACb,IAAI,
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/request/context/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAGhD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,GACb,IAAI,CAkCN;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,EAAE,EACX,MAAM,CAAC,EAAE,WAAW,GACnB,gBAAgB,CAGlB"}
|
|
@@ -28,8 +28,10 @@ export function verifyTransactionBinding(ctx, bound, dbName) {
|
|
|
28
28
|
requestId: ctx.requestId,
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
bound.signal?.throwIfAborted();
|
|
31
32
|
}
|
|
32
|
-
export function bindTransaction(ctx, dbName, drizzle) {
|
|
33
|
-
|
|
33
|
+
export function bindTransaction(ctx, dbName, drizzle, signal) {
|
|
34
|
+
const bound = { drizzle, nonce: ctx._nonce, tenant: ctx.tenant };
|
|
35
|
+
return signal === undefined ? bound : { ...bound, signal };
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/request/context/guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,UAAU,wBAAwB,CACtC,GAAS,EACT,KAAuB,EACvB,MAAc;IAEd,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE;YACrD,OAAO,EACL,iCAAiC,MAAM,iDAAiD;gBACxF,2FAA2F;gBAC3F,uFAAuF;YACzF,gBAAgB,EAAE,KAAK,CAAC,KAAK;YAC7B,YAAY,EAAE,GAAG,CAAC,MAAM;YACxB,QAAQ,EAAE,MAAM;YAChB,aAAa,EAAE,GAAG,CAAC,MAAM;YACzB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,EAAE;YACtD,OAAO,EACL,iCAAiC,MAAM,6BAA6B,KAAK,CAAC,MAAM,IAAI;gBACpF,uCAAuC,GAAG,CAAC,MAAM,yCAAyC;gBAC1F,qEAAqE;gBACrE,yEAAyE;gBACzE,4DAA4D;gBAC5D,kFAAkF;gBAClF,uDAAuD;gBACvD,QAAQ;YACV,iBAAiB,EAAE,KAAK,CAAC,MAAM;YAC/B,aAAa,EAAE,GAAG,CAAC,MAAM;YACzB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/request/context/guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,UAAU,wBAAwB,CACtC,GAAS,EACT,KAAuB,EACvB,MAAc;IAEd,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE;YACrD,OAAO,EACL,iCAAiC,MAAM,iDAAiD;gBACxF,2FAA2F;gBAC3F,uFAAuF;YACzF,gBAAgB,EAAE,KAAK,CAAC,KAAK;YAC7B,YAAY,EAAE,GAAG,CAAC,MAAM;YACxB,QAAQ,EAAE,MAAM;YAChB,aAAa,EAAE,GAAG,CAAC,MAAM;YACzB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,EAAE;YACtD,OAAO,EACL,iCAAiC,MAAM,6BAA6B,KAAK,CAAC,MAAM,IAAI;gBACpF,uCAAuC,GAAG,CAAC,MAAM,yCAAyC;gBAC1F,qEAAqE;gBACrE,yEAAyE;gBACzE,4DAA4D;gBAC5D,kFAAkF;gBAClF,uDAAuD;gBACvD,QAAQ;YACV,iBAAiB,EAAE,KAAK,CAAC,MAAM;YAC/B,aAAa,EAAE,GAAG,CAAC,MAAM;YACzB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAS,EACT,MAAc,EACd,OAAW,EACX,MAAoB;IAEpB,MAAM,KAAK,GAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IAClF,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAA;AAC5D,CAAC"}
|
|
@@ -15,6 +15,9 @@ import type { TenantConfig } from '../../auth/tenant/types.js';
|
|
|
15
15
|
* With a `signal`, aborting cancels each transaction's in-flight query on the
|
|
16
16
|
* server (`pg_cancel_backend`), so the query fails, the transaction rolls back
|
|
17
17
|
* and the connection returns to the pool instead of being held to completion.
|
|
18
|
+
* Aborting also rolls back a transaction that was idle at the abort: the run
|
|
19
|
+
* rejects with `signal.reason` instead of committing, and `pipe()` refuses the
|
|
20
|
+
* aborted transaction.
|
|
18
21
|
*/
|
|
19
22
|
export declare function executeInTransaction<T>(ctx: Flow, databases: readonly string[], tenant: TenantConfig | null, timeoutMs: number, run: () => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
20
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-in-transaction.d.ts","sourceRoot":"","sources":["../../../src/request/context/run-in-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,EAAE,EAAqB,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,4BAA4B,CAAA;AAM7E
|
|
1
|
+
{"version":3,"file":"run-in-transaction.d.ts","sourceRoot":"","sources":["../../../src/request/context/run-in-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,EAAE,EAAqB,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,4BAA4B,CAAA;AAM7E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAyGZ;AAoCD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,YAAY,GAAG,IAAI,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -16,6 +16,9 @@ import { runInContext } from './store.js';
|
|
|
16
16
|
* With a `signal`, aborting cancels each transaction's in-flight query on the
|
|
17
17
|
* server (`pg_cancel_backend`), so the query fails, the transaction rolls back
|
|
18
18
|
* and the connection returns to the pool instead of being held to completion.
|
|
19
|
+
* Aborting also rolls back a transaction that was idle at the abort: the run
|
|
20
|
+
* rejects with `signal.reason` instead of committing, and `pipe()` refuses the
|
|
21
|
+
* aborted transaction.
|
|
19
22
|
*/
|
|
20
23
|
export async function executeInTransaction(ctx, databases, tenant, timeoutMs, run, signal) {
|
|
21
24
|
const instance = ctx.instance;
|
|
@@ -28,11 +31,14 @@ export async function executeInTransaction(ctx, databases, tenant, timeoutMs, ru
|
|
|
28
31
|
...ctx,
|
|
29
32
|
transactions: new Map(ctx.transactions),
|
|
30
33
|
};
|
|
31
|
-
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx));
|
|
34
|
+
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx, signal));
|
|
32
35
|
await propagateLocals(tx, ctx, tenant);
|
|
33
36
|
const disarm = await armCancellation(conn, tx, signal);
|
|
34
37
|
try {
|
|
35
|
-
|
|
38
|
+
const result = await runInContext(childCtx, run);
|
|
39
|
+
// Idle at the abort, nothing failed: throwing here rolls back instead of committing.
|
|
40
|
+
signal?.throwIfAborted();
|
|
41
|
+
return result;
|
|
36
42
|
}
|
|
37
43
|
finally {
|
|
38
44
|
disarm();
|
|
@@ -61,7 +67,7 @@ export async function executeInTransaction(ctx, databases, tenant, timeoutMs, ru
|
|
|
61
67
|
let signalReady;
|
|
62
68
|
readyPromises.push(new Promise(r => { signalReady = r; }));
|
|
63
69
|
txPromises.push(conn.drizzle.transaction(async (tx) => {
|
|
64
|
-
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx));
|
|
70
|
+
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx, signal));
|
|
65
71
|
await propagateLocals(tx, ctx, tenant);
|
|
66
72
|
disarms.push(await armCancellation(conn, tx, signal));
|
|
67
73
|
readyDatabases.add(dbName);
|
|
@@ -93,6 +99,7 @@ export async function executeInTransaction(ctx, databases, tenant, timeoutMs, ru
|
|
|
93
99
|
}
|
|
94
100
|
try {
|
|
95
101
|
const result = await runInContext(childCtx, run);
|
|
102
|
+
signal?.throwIfAborted();
|
|
96
103
|
releaseAll();
|
|
97
104
|
await Promise.all(txPromises);
|
|
98
105
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-in-transaction.js","sourceRoot":"","sources":["../../../src/request/context/run-in-transaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC
|
|
1
|
+
{"version":3,"file":"run-in-transaction.js","sourceRoot":"","sources":["../../../src/request/context/run-in-transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ export interface BoundTransaction {
|
|
|
7
7
|
readonly drizzle: DB;
|
|
8
8
|
readonly nonce: string;
|
|
9
9
|
readonly tenant: string | null;
|
|
10
|
+
/** Aborts the transaction: `pipe()` refuses it once aborted. */
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
10
12
|
}
|
|
11
13
|
/** The AsyncLocalStorage context — carries requestId, auth, tenant, active transactions, and a nonce for integrity checks. */
|
|
12
14
|
export interface Flow<TAuth = unknown> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/request/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtE,+GAA+G;AAC/G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/request/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtE,+GAA+G;AAC/G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B;AAED,8HAA8H;AAC9H,MAAM,WAAW,IAAI,CAAC,KAAK,GAAG,OAAO;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,sHAAsH;IACtH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,0HAA0H;IAC1H,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IAC1C,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACpD,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CACpC;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -184,7 +184,7 @@ export { storage } from './infra/storage/namespace.js'
|
|
|
184
184
|
export type { Storage, StorageConfig, StoredFile, PutOptions as StoragePutOptions, FindOptions as StorageFindOptions, SignedUrlOptions as StorageSignedUrlOptions,
|
|
185
185
|
SweepOptions as StorageSweepOptions, SweepResult as StorageSweepResult, StorageBackend, S3Config, S3Encryption,
|
|
186
186
|
LocalConfig as StorageLocalConfig } from './infra/storage/index.js'
|
|
187
|
-
export { untrustedFetch, connectRetry } from './infra/fetch/namespace.js'
|
|
187
|
+
export { untrustedFetch, connectRetry, idempotentRetry } from './infra/fetch/namespace.js'
|
|
188
188
|
export type {
|
|
189
189
|
ConnectRetryOptions, UntrustedFetchOptions, UntrustedPostOptions, UntrustedFetchResult, FetchHead, FetchTarget, FetchRefusal } from './infra/fetch/index.js'
|
|
190
190
|
export { crawl } from './infra/crawl/namespace.js'
|
|
@@ -85,3 +85,75 @@ export function fetchRetryingUnsent(
|
|
|
85
85
|
{ ...opts, ...(signal !== undefined ? { signal } : {}) },
|
|
86
86
|
)
|
|
87
87
|
}
|
|
88
|
+
|
|
89
|
+
const TRANSIENT_CODES = new Set([...UNSENT_CODES, 'UND_ERR_SOCKET', 'ECONNRESET', 'EPIPE', 'ETIMEDOUT'])
|
|
90
|
+
const TRANSIENT_DELAYS: readonly number[] = [250, 1_000]
|
|
91
|
+
const BODILESS_STATUSES = new Set([204, 205, 304])
|
|
92
|
+
const READ_METHODS = new Set(['GET', 'HEAD', 'OPTIONS'])
|
|
93
|
+
|
|
94
|
+
/** The first transient transport code in the error's chain ('SocketError' when only the name shows it), or null for the caller's abort or timeout and anything else. */
|
|
95
|
+
function transientCode(err: unknown): string | null {
|
|
96
|
+
const state: { found: string | null; socket: boolean; stopped: boolean } = { found: null, socket: false, stopped: false }
|
|
97
|
+
const seen = new Set<unknown>()
|
|
98
|
+
const walk = (node: unknown, depth: number): void => {
|
|
99
|
+
if (typeof node !== 'object' || node === null || depth > MAX_DEPTH || seen.has(node)) return
|
|
100
|
+
seen.add(node)
|
|
101
|
+
const { code, name, cause, errors } = node as { code?: unknown; name?: unknown; cause?: unknown; errors?: unknown }
|
|
102
|
+
if (name === 'AbortError' || name === 'TimeoutError') state.stopped = true
|
|
103
|
+
if (name === 'SocketError') state.socket = true
|
|
104
|
+
if (typeof code === 'string' && TRANSIENT_CODES.has(code) && state.found === null) state.found = code
|
|
105
|
+
walk(cause, depth + 1)
|
|
106
|
+
if (Array.isArray(errors)) for (const e of errors) walk(e, depth + 1)
|
|
107
|
+
}
|
|
108
|
+
walk(err, 0)
|
|
109
|
+
if (state.stopped) return null
|
|
110
|
+
return state.found ?? (state.socket ? 'SocketError' : null)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** True when the fault is a transport fault that may clear on its own (a connect fault, a closed or reset socket, a timed-out connection) and not the caller's abort or timeout. */
|
|
114
|
+
export function isTransientFault(err: unknown): boolean {
|
|
115
|
+
return transientCode(err) !== null
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Runs `send`, and sends again after a wait when it failed with a transient transport fault. Any other fault is thrown at once.
|
|
120
|
+
* Only for reads that are safe to repeat. When the tries run out, or `signal` aborts, the last fault is thrown unchanged.
|
|
121
|
+
*/
|
|
122
|
+
export async function retryTransient<R>(send: () => Promise<R>, opts: ConnectRetryOptions = {}): Promise<R> {
|
|
123
|
+
const delays = opts.delaysMs ?? TRANSIENT_DELAYS
|
|
124
|
+
for (let attempt = 1; ; attempt++) {
|
|
125
|
+
try {
|
|
126
|
+
return await send()
|
|
127
|
+
} catch (error) {
|
|
128
|
+
const code = transientCode(error)
|
|
129
|
+
const delayMs = delays[attempt - 1]
|
|
130
|
+
if (code === null || delayMs === undefined || aborted(opts.signal)) throw error
|
|
131
|
+
getBaseLogger().warn({ code, attempt, delayMs }, 'transport fault on an idempotent read; trying again')
|
|
132
|
+
opts.onRetry?.({ error, attempt, delayMs })
|
|
133
|
+
await wait(delayMs, opts.signal)
|
|
134
|
+
if (aborted(opts.signal)) throw error
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* `fetch` for GET, HEAD and OPTIONS that is tried again on a transient transport fault, including one while the body is read.
|
|
141
|
+
* The body is read whole inside each try and returned buffered. A response of any status is returned.
|
|
142
|
+
*/
|
|
143
|
+
export function fetchRetryingTransient(
|
|
144
|
+
input: string | URL | Request,
|
|
145
|
+
init?: RequestInit,
|
|
146
|
+
opts: ConnectRetryOptions & { fetch?: typeof fetch } = {},
|
|
147
|
+
): Promise<Response> {
|
|
148
|
+
const method = (init?.method ?? (input instanceof Request ? input.method : 'GET')).toUpperCase()
|
|
149
|
+
if (!READ_METHODS.has(method)) {
|
|
150
|
+
return Promise.reject(new TypeError(`idempotentRetry.fetch retries only GET, HEAD and OPTIONS, not ${method}; use idempotentRetry.call for another idempotent read`))
|
|
151
|
+
}
|
|
152
|
+
const doFetch = opts.fetch ?? fetch
|
|
153
|
+
const signal = opts.signal ?? init?.signal ?? undefined
|
|
154
|
+
return retryTransient(async () => {
|
|
155
|
+
const res = await doFetch(input instanceof Request ? input.clone() : input, init)
|
|
156
|
+
const body = method === 'HEAD' || BODILESS_STATUSES.has(res.status) ? null : await res.arrayBuffer()
|
|
157
|
+
return new Response(body, { status: res.status, statusText: res.statusText, headers: res.headers })
|
|
158
|
+
}, { ...opts, ...(signal !== undefined ? { signal } : {}) })
|
|
159
|
+
}
|
package/src/infra/fetch/index.ts
CHANGED
|
@@ -4,4 +4,5 @@ export type {
|
|
|
4
4
|
UntrustedFetchOptions, UntrustedPostOptions, UntrustedFetchResult, FetchHead, FetchTarget, FetchRefusal,
|
|
5
5
|
} from './handle.js'
|
|
6
6
|
export { isUnsentFault, retryUnsent, fetchRetryingUnsent } from './connect-retry.js'
|
|
7
|
+
export { isTransientFault, retryTransient, fetchRetryingTransient } from './connect-retry.js'
|
|
7
8
|
export type { ConnectRetryOptions } from './connect-retry.js'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { untrustedGet, untrustedPost } from './handle.js'
|
|
2
|
-
import { retryUnsent, fetchRetryingUnsent, isUnsentFault } from './connect-retry.js'
|
|
2
|
+
import { retryUnsent, fetchRetryingUnsent, isUnsentFault, retryTransient, fetchRetryingTransient, isTransientFault } from './connect-retry.js'
|
|
3
3
|
|
|
4
4
|
/** Untrusted fetch — fetch one URL a stranger gave without letting them reach the app's private network. */
|
|
5
5
|
export const untrustedFetch = {
|
|
@@ -55,7 +55,7 @@ export const connectRetry = {
|
|
|
55
55
|
* `fetch(input, init, opts)` that retries a fault in the connect phase (undici `UND_ERR_CONNECT_TIMEOUT`, `EAI_AGAIN`,
|
|
56
56
|
* `ENOTFOUND`, `ECONNREFUSED`, `ENETUNREACH`, `EHOSTUNREACH`), waiting `delaysMs` between tries (default 5 s, 15 s, 40 s: four
|
|
57
57
|
* tries over about a minute), then throws the last fault with its cause chain. A fault after the request was written
|
|
58
|
-
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect.
|
|
58
|
+
* (`ECONNRESET`, `UND_ERR_SOCKET`, a timeout, an abort) and a response of any status are never retried, because a POST may have taken effect. For reads, use `idempotentRetry`.
|
|
59
59
|
* `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
60
60
|
*
|
|
61
61
|
* ```ts
|
|
@@ -68,3 +68,24 @@ export const connectRetry = {
|
|
|
68
68
|
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a connect-phase fault and no sent-phase one. */
|
|
69
69
|
isUnsentFault,
|
|
70
70
|
} as const
|
|
71
|
+
|
|
72
|
+
/** Idempotent retry — send a read again after a transport fault, because repeating it changes nothing. */
|
|
73
|
+
export const idempotentRetry = {
|
|
74
|
+
/**
|
|
75
|
+
* `fetch(input, init, opts)` for GET, HEAD and OPTIONS (any other method throws a `TypeError` before anything is sent) that retries
|
|
76
|
+
* the connect codes plus `UND_ERR_SOCKET` / `SocketError` ("other side closed"), `ECONNRESET`, `EPIPE` and `ETIMEDOUT`, waiting `delaysMs`
|
|
77
|
+
* between tries (default 250 ms, then 1 s: three tries). The body is read together with the request and returned buffered, so a fault
|
|
78
|
+
* while it streams is retried too. Never retried: a response of any status, a decode error, the caller's abort or timeout.
|
|
79
|
+
* The last fault is thrown unchanged. `signal` ends the waiting; `onRetry({ error, attempt, delayMs })` is called before each wait; `fetch` replaces the global fetch.
|
|
80
|
+
*
|
|
81
|
+
* ```ts
|
|
82
|
+
* const res = await idempotentRetry.fetch('https://api.github.com/repos/o/r/issues')
|
|
83
|
+
* const issues = await res.json()
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
fetch: fetchRetryingTransient,
|
|
87
|
+
/** Runs any read the caller declares idempotent with the same rule; `send()` should do the request and the body read. The last fault is thrown unchanged. */
|
|
88
|
+
call: retryTransient,
|
|
89
|
+
/** True when the error, its `cause` chain or an `AggregateError`'s errors show a transient transport fault and no abort or timeout. */
|
|
90
|
+
isTransientFault,
|
|
91
|
+
} as const
|
|
@@ -38,12 +38,16 @@ export function verifyTransactionBinding(
|
|
|
38
38
|
requestId: ctx.requestId,
|
|
39
39
|
})
|
|
40
40
|
}
|
|
41
|
+
|
|
42
|
+
bound.signal?.throwIfAborted()
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export function bindTransaction(
|
|
44
46
|
ctx: Flow,
|
|
45
47
|
dbName: string,
|
|
46
48
|
drizzle: DB,
|
|
49
|
+
signal?: AbortSignal,
|
|
47
50
|
): BoundTransaction {
|
|
48
|
-
|
|
51
|
+
const bound: BoundTransaction = { drizzle, nonce: ctx._nonce, tenant: ctx.tenant }
|
|
52
|
+
return signal === undefined ? bound : { ...bound, signal }
|
|
49
53
|
}
|
|
@@ -20,6 +20,9 @@ import { runInContext } from './store.js'
|
|
|
20
20
|
* With a `signal`, aborting cancels each transaction's in-flight query on the
|
|
21
21
|
* server (`pg_cancel_backend`), so the query fails, the transaction rolls back
|
|
22
22
|
* and the connection returns to the pool instead of being held to completion.
|
|
23
|
+
* Aborting also rolls back a transaction that was idle at the abort: the run
|
|
24
|
+
* rejects with `signal.reason` instead of committing, and `pipe()` refuses the
|
|
25
|
+
* aborted transaction.
|
|
23
26
|
*/
|
|
24
27
|
export async function executeInTransaction<T>(
|
|
25
28
|
ctx: Flow,
|
|
@@ -41,13 +44,16 @@ export async function executeInTransaction<T>(
|
|
|
41
44
|
...ctx,
|
|
42
45
|
transactions: new Map(ctx.transactions),
|
|
43
46
|
}
|
|
44
|
-
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx))
|
|
47
|
+
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx, signal))
|
|
45
48
|
|
|
46
49
|
await propagateLocals(tx, ctx, tenant)
|
|
47
50
|
|
|
48
51
|
const disarm = await armCancellation(conn, tx, signal)
|
|
49
52
|
try {
|
|
50
|
-
|
|
53
|
+
const result = await runInContext(childCtx, run)
|
|
54
|
+
// Idle at the abort, nothing failed: throwing here rolls back instead of committing.
|
|
55
|
+
signal?.throwIfAborted()
|
|
56
|
+
return result
|
|
51
57
|
} finally {
|
|
52
58
|
disarm()
|
|
53
59
|
}
|
|
@@ -82,7 +88,7 @@ export async function executeInTransaction<T>(
|
|
|
82
88
|
|
|
83
89
|
txPromises.push(
|
|
84
90
|
conn.drizzle.transaction(async (tx) => {
|
|
85
|
-
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx))
|
|
91
|
+
childCtx.transactions.set(dbName, bindTransaction(ctx, dbName, tx, signal))
|
|
86
92
|
await propagateLocals(tx, ctx, tenant)
|
|
87
93
|
disarms.push(await armCancellation(conn, tx, signal))
|
|
88
94
|
readyDatabases.add(dbName)
|
|
@@ -119,6 +125,7 @@ export async function executeInTransaction<T>(
|
|
|
119
125
|
|
|
120
126
|
try {
|
|
121
127
|
const result = await runInContext(childCtx, run)
|
|
128
|
+
signal?.throwIfAborted()
|
|
122
129
|
releaseAll()
|
|
123
130
|
await Promise.all(txPromises)
|
|
124
131
|
return result
|
|
@@ -8,6 +8,8 @@ export interface BoundTransaction {
|
|
|
8
8
|
readonly drizzle: DB
|
|
9
9
|
readonly nonce: string
|
|
10
10
|
readonly tenant: string | null
|
|
11
|
+
/** Aborts the transaction: `pipe()` refuses it once aborted. */
|
|
12
|
+
readonly signal?: AbortSignal
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
/** The AsyncLocalStorage context — carries requestId, auth, tenant, active transactions, and a nonce for integrity checks. */
|