@procedures/client 0.2.3 → 0.3.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.
Files changed (299) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +61 -38
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/adapters/http/client/transport.d.ts.map +1 -1
  5. package/dist/adapters/http/client/transport.js +35 -3
  6. package/dist/adapters/http/client/transport.js.map +1 -1
  7. package/dist/adapters/http/client/types.d.ts +3 -2
  8. package/dist/adapters/http/client/types.d.ts.map +1 -1
  9. package/dist/adapters/http/server/transport.d.ts +2 -2
  10. package/dist/adapters/http/server/transport.d.ts.map +1 -1
  11. package/dist/adapters/http/server/transport.js +53 -20
  12. package/dist/adapters/http/server/transport.js.map +1 -1
  13. package/dist/adapters/http/shared/headers.d.ts +1 -1
  14. package/dist/adapters/http/shared/headers.d.ts.map +1 -1
  15. package/dist/adapters/http/shared/headers.js +7 -6
  16. package/dist/adapters/http/shared/headers.js.map +1 -1
  17. package/dist/adapters/local/client/transport.d.ts +3 -0
  18. package/dist/adapters/local/client/transport.d.ts.map +1 -1
  19. package/dist/adapters/local/client/transport.js +63 -4
  20. package/dist/adapters/local/client/transport.js.map +1 -1
  21. package/dist/adapters/local/client/types.d.ts +15 -0
  22. package/dist/adapters/local/client/types.d.ts.map +1 -1
  23. package/dist/adapters/local/client/types.js.map +1 -1
  24. package/dist/adapters/mock/client/transport.d.ts +3 -2
  25. package/dist/adapters/mock/client/transport.d.ts.map +1 -1
  26. package/dist/adapters/mock/client/transport.js +8 -5
  27. package/dist/adapters/mock/client/transport.js.map +1 -1
  28. package/dist/adapters/mock/client/types.d.ts +7 -6
  29. package/dist/adapters/mock/client/types.d.ts.map +1 -1
  30. package/dist/adapters/port/transport.d.ts +62 -0
  31. package/dist/adapters/port/transport.d.ts.map +1 -0
  32. package/dist/adapters/port/transport.js +94 -0
  33. package/dist/adapters/port/transport.js.map +1 -0
  34. package/dist/adapters/websocket/client/index.d.ts +1 -1
  35. package/dist/adapters/websocket/client/index.d.ts.map +1 -1
  36. package/dist/adapters/websocket/client/index.js.map +1 -1
  37. package/dist/adapters/websocket/client/transport.d.ts +47 -7
  38. package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
  39. package/dist/adapters/websocket/client/transport.js +213 -67
  40. package/dist/adapters/websocket/client/transport.js.map +1 -1
  41. package/dist/adapters/websocket/client/types.d.ts +70 -21
  42. package/dist/adapters/websocket/client/types.d.ts.map +1 -1
  43. package/dist/adapters/websocket/client/types.js.map +1 -1
  44. package/dist/adapters/websocket/server/transport.d.ts +65 -24
  45. package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
  46. package/dist/adapters/websocket/server/transport.js +192 -263
  47. package/dist/adapters/websocket/server/transport.js.map +1 -1
  48. package/dist/adapters/websocket/server/types.d.ts +20 -1
  49. package/dist/adapters/websocket/server/types.d.ts.map +1 -1
  50. package/dist/adapters/websocket/shared/rpc.d.ts +129 -0
  51. package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -0
  52. package/dist/adapters/websocket/shared/rpc.js +425 -0
  53. package/dist/adapters/websocket/shared/rpc.js.map +1 -0
  54. package/dist/browser.d.ts +29 -7
  55. package/dist/browser.d.ts.map +1 -1
  56. package/dist/browser.js +26 -3
  57. package/dist/browser.js.map +1 -1
  58. package/dist/client/call-types.d.ts +10 -10
  59. package/dist/client/call-types.d.ts.map +1 -1
  60. package/dist/client/call-types.js +1 -6
  61. package/dist/client/call-types.js.map +1 -1
  62. package/dist/client/client.d.ts +6 -1
  63. package/dist/client/client.d.ts.map +1 -1
  64. package/dist/client/client.js +23 -9
  65. package/dist/client/client.js.map +1 -1
  66. package/dist/client/deadline.d.ts +38 -0
  67. package/dist/client/deadline.d.ts.map +1 -0
  68. package/dist/client/deadline.js +60 -0
  69. package/dist/client/deadline.js.map +1 -0
  70. package/dist/client/errors/factory.d.ts.map +1 -1
  71. package/dist/client/errors/factory.js +11 -7
  72. package/dist/client/errors/factory.js.map +1 -1
  73. package/dist/client/index.d.ts +9 -2
  74. package/dist/client/index.d.ts.map +1 -1
  75. package/dist/client/index.js +8 -2
  76. package/dist/client/index.js.map +1 -1
  77. package/dist/client/middleware/cache.d.ts +19 -5
  78. package/dist/client/middleware/cache.d.ts.map +1 -1
  79. package/dist/client/middleware/cache.js +106 -18
  80. package/dist/client/middleware/cache.js.map +1 -1
  81. package/dist/client/middleware/circuit-breaker.d.ts +28 -10
  82. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -1
  83. package/dist/client/middleware/circuit-breaker.js +35 -24
  84. package/dist/client/middleware/circuit-breaker.js.map +1 -1
  85. package/dist/client/middleware/contexts.d.ts +16 -10
  86. package/dist/client/middleware/contexts.d.ts.map +1 -1
  87. package/dist/client/middleware/contexts.js.map +1 -1
  88. package/dist/client/middleware/items.d.ts +31 -2
  89. package/dist/client/middleware/items.d.ts.map +1 -1
  90. package/dist/client/middleware/items.js +86 -6
  91. package/dist/client/middleware/items.js.map +1 -1
  92. package/dist/client/middleware/lru.d.ts +2 -0
  93. package/dist/client/middleware/lru.d.ts.map +1 -1
  94. package/dist/client/middleware/lru.js +11 -0
  95. package/dist/client/middleware/lru.js.map +1 -1
  96. package/dist/client/middleware/rate-limit.d.ts +7 -6
  97. package/dist/client/middleware/rate-limit.d.ts.map +1 -1
  98. package/dist/client/middleware/rate-limit.js +9 -6
  99. package/dist/client/middleware/rate-limit.js.map +1 -1
  100. package/dist/client/middleware/resilience.d.ts +61 -0
  101. package/dist/client/middleware/resilience.d.ts.map +1 -0
  102. package/dist/client/middleware/resilience.js +59 -0
  103. package/dist/client/middleware/resilience.js.map +1 -0
  104. package/dist/client/middleware/retry.d.ts +45 -11
  105. package/dist/client/middleware/retry.d.ts.map +1 -1
  106. package/dist/client/middleware/retry.js +102 -22
  107. package/dist/client/middleware/retry.js.map +1 -1
  108. package/dist/client/middleware/timeout.d.ts +15 -12
  109. package/dist/client/middleware/timeout.d.ts.map +1 -1
  110. package/dist/client/middleware/timeout.js +46 -37
  111. package/dist/client/middleware/timeout.js.map +1 -1
  112. package/dist/client/middleware/tracing.d.ts.map +1 -1
  113. package/dist/client/middleware/tracing.js +11 -3
  114. package/dist/client/middleware/tracing.js.map +1 -1
  115. package/dist/client/types.d.ts +9 -1
  116. package/dist/client/types.d.ts.map +1 -1
  117. package/dist/client/types.js.map +1 -1
  118. package/dist/clock.d.ts +19 -0
  119. package/dist/clock.d.ts.map +1 -0
  120. package/dist/clock.js +18 -0
  121. package/dist/clock.js.map +1 -0
  122. package/dist/duration.d.ts +37 -0
  123. package/dist/duration.d.ts.map +1 -0
  124. package/dist/duration.js +44 -0
  125. package/dist/duration.js.map +1 -0
  126. package/dist/machines.d.ts +90 -0
  127. package/dist/machines.d.ts.map +1 -0
  128. package/dist/machines.js +127 -0
  129. package/dist/machines.js.map +1 -0
  130. package/dist/procedures/capability.d.ts +3 -6
  131. package/dist/procedures/capability.d.ts.map +1 -1
  132. package/dist/procedures/capability.js +7 -8
  133. package/dist/procedures/capability.js.map +1 -1
  134. package/dist/procedures/collection/index.d.ts +3 -3
  135. package/dist/procedures/collection/index.d.ts.map +1 -1
  136. package/dist/procedures/collection/index.js +1 -1
  137. package/dist/procedures/collection/index.js.map +1 -1
  138. package/dist/procedures/collection/procedures.d.ts.map +1 -1
  139. package/dist/procedures/collection/procedures.js +49 -1
  140. package/dist/procedures/collection/procedures.js.map +1 -1
  141. package/dist/procedures/collection/schemas.d.ts +33 -0
  142. package/dist/procedures/collection/schemas.d.ts.map +1 -1
  143. package/dist/procedures/collection/schemas.js +68 -0
  144. package/dist/procedures/collection/schemas.js.map +1 -1
  145. package/dist/procedures/collection/storage.d.ts +37 -0
  146. package/dist/procedures/collection/storage.d.ts.map +1 -1
  147. package/dist/procedures/core/array.d.ts.map +1 -1
  148. package/dist/procedures/core/array.js +26 -15
  149. package/dist/procedures/core/array.js.map +1 -1
  150. package/dist/procedures/core/index.d.ts.map +1 -1
  151. package/dist/procedures/core/index.js +8 -0
  152. package/dist/procedures/core/index.js.map +1 -1
  153. package/dist/procedures/core/meta.d.ts.map +1 -1
  154. package/dist/procedures/core/meta.js +2 -1
  155. package/dist/procedures/core/meta.js.map +1 -1
  156. package/dist/procedures/core/object.d.ts.map +1 -1
  157. package/dist/procedures/core/object.js +42 -13
  158. package/dist/procedures/core/object.js.map +1 -1
  159. package/dist/procedures/core/operands.d.ts.map +1 -1
  160. package/dist/procedures/core/operands.js +6 -1
  161. package/dist/procedures/core/operands.js.map +1 -1
  162. package/dist/procedures/core/string.d.ts.map +1 -1
  163. package/dist/procedures/core/string.js +4 -2
  164. package/dist/procedures/core/string.js.map +1 -1
  165. package/dist/procedures/define-procedure.d.ts +19 -7
  166. package/dist/procedures/define-procedure.d.ts.map +1 -1
  167. package/dist/procedures/define-procedure.js +57 -17
  168. package/dist/procedures/define-procedure.js.map +1 -1
  169. package/dist/procedures/effects.d.ts +16 -0
  170. package/dist/procedures/effects.d.ts.map +1 -1
  171. package/dist/procedures/effects.js +33 -0
  172. package/dist/procedures/effects.js.map +1 -1
  173. package/dist/procedures/idempotency.d.ts +73 -0
  174. package/dist/procedures/idempotency.d.ts.map +1 -0
  175. package/dist/procedures/idempotency.js +131 -0
  176. package/dist/procedures/idempotency.js.map +1 -0
  177. package/dist/procedures/index.d.ts +7 -3
  178. package/dist/procedures/index.d.ts.map +1 -1
  179. package/dist/procedures/index.js +6 -2
  180. package/dist/procedures/index.js.map +1 -1
  181. package/dist/procedures/interceptors.d.ts +17 -4
  182. package/dist/procedures/interceptors.d.ts.map +1 -1
  183. package/dist/procedures/interceptors.js +18 -7
  184. package/dist/procedures/interceptors.js.map +1 -1
  185. package/dist/procedures/invoke.d.ts +15 -3
  186. package/dist/procedures/invoke.d.ts.map +1 -1
  187. package/dist/procedures/invoke.js +8 -3
  188. package/dist/procedures/invoke.js.map +1 -1
  189. package/dist/procedures/manifest.d.ts +83 -0
  190. package/dist/procedures/manifest.d.ts.map +1 -0
  191. package/dist/procedures/manifest.js +90 -0
  192. package/dist/procedures/manifest.js.map +1 -0
  193. package/dist/procedures/runtime-programs.d.ts +19 -0
  194. package/dist/procedures/runtime-programs.d.ts.map +1 -0
  195. package/dist/procedures/runtime-programs.js +24 -0
  196. package/dist/procedures/runtime-programs.js.map +1 -0
  197. package/dist/procedures/types.d.ts +16 -0
  198. package/dist/procedures/types.d.ts.map +1 -1
  199. package/dist/procedures/types.js.map +1 -1
  200. package/dist/protocol.d.ts +40 -0
  201. package/dist/protocol.d.ts.map +1 -0
  202. package/dist/protocol.js +58 -0
  203. package/dist/protocol.js.map +1 -0
  204. package/dist/server/host-policy.d.ts +4 -3
  205. package/dist/server/host-policy.d.ts.map +1 -1
  206. package/dist/server/host-policy.js +6 -3
  207. package/dist/server/host-policy.js.map +1 -1
  208. package/dist/server/host-procedures.d.ts +31 -0
  209. package/dist/server/host-procedures.d.ts.map +1 -0
  210. package/dist/server/host-procedures.js +75 -0
  211. package/dist/server/host-procedures.js.map +1 -0
  212. package/dist/server/index.d.ts +3 -3
  213. package/dist/server/index.d.ts.map +1 -1
  214. package/dist/server/index.js +1 -1
  215. package/dist/server/index.js.map +1 -1
  216. package/dist/server/procedure-server.d.ts +110 -4
  217. package/dist/server/procedure-server.d.ts.map +1 -1
  218. package/dist/server/procedure-server.js +269 -17
  219. package/dist/server/procedure-server.js.map +1 -1
  220. package/dist/server/request-auth.d.ts +19 -0
  221. package/dist/server/request-auth.d.ts.map +1 -0
  222. package/dist/server/request-auth.js +32 -0
  223. package/dist/server/request-auth.js.map +1 -0
  224. package/dist/server/types.d.ts +32 -0
  225. package/dist/server/types.d.ts.map +1 -1
  226. package/dist/server/types.js.map +1 -1
  227. package/dist/timers.d.ts +60 -0
  228. package/dist/timers.d.ts.map +1 -0
  229. package/dist/timers.js +33 -0
  230. package/dist/timers.js.map +1 -0
  231. package/dist/tracing/traceparent.d.ts +26 -0
  232. package/dist/tracing/traceparent.d.ts.map +1 -0
  233. package/dist/tracing/traceparent.js +53 -0
  234. package/dist/tracing/traceparent.js.map +1 -0
  235. package/package.json +7 -1
  236. package/src/adapters/http/client/transport.ts +31 -3
  237. package/src/adapters/http/client/types.ts +3 -2
  238. package/src/adapters/http/server/transport.ts +60 -24
  239. package/src/adapters/http/shared/headers.ts +7 -6
  240. package/src/adapters/local/client/transport.ts +70 -5
  241. package/src/adapters/local/client/types.ts +18 -0
  242. package/src/adapters/mock/client/transport.ts +9 -6
  243. package/src/adapters/mock/client/types.ts +7 -6
  244. package/src/adapters/port/transport.ts +124 -0
  245. package/src/adapters/websocket/client/index.ts +1 -0
  246. package/src/adapters/websocket/client/transport.ts +232 -73
  247. package/src/adapters/websocket/client/types.ts +80 -21
  248. package/src/adapters/websocket/server/transport.ts +199 -301
  249. package/src/adapters/websocket/server/types.ts +20 -1
  250. package/src/adapters/websocket/shared/rpc.ts +453 -0
  251. package/src/browser.ts +51 -3
  252. package/src/client/call-types.ts +10 -14
  253. package/src/client/client.ts +28 -9
  254. package/src/client/deadline.ts +64 -0
  255. package/src/client/errors/factory.ts +12 -8
  256. package/src/client/index.ts +21 -3
  257. package/src/client/middleware/cache.ts +120 -23
  258. package/src/client/middleware/circuit-breaker.ts +65 -35
  259. package/src/client/middleware/contexts.ts +17 -10
  260. package/src/client/middleware/items.ts +101 -6
  261. package/src/client/middleware/lru.ts +12 -0
  262. package/src/client/middleware/rate-limit.ts +9 -7
  263. package/src/client/middleware/resilience.ts +81 -0
  264. package/src/client/middleware/retry.ts +146 -34
  265. package/src/client/middleware/timeout.ts +55 -46
  266. package/src/client/middleware/tracing.ts +13 -4
  267. package/src/client/types.ts +9 -1
  268. package/src/clock.ts +21 -0
  269. package/src/duration.ts +56 -0
  270. package/src/machines.ts +186 -0
  271. package/src/procedures/capability.ts +7 -8
  272. package/src/procedures/collection/index.ts +9 -1
  273. package/src/procedures/collection/procedures.ts +57 -0
  274. package/src/procedures/collection/schemas.ts +110 -0
  275. package/src/procedures/collection/storage.ts +38 -0
  276. package/src/procedures/core/array.ts +27 -16
  277. package/src/procedures/core/index.ts +8 -0
  278. package/src/procedures/core/meta.ts +2 -1
  279. package/src/procedures/core/object.ts +48 -14
  280. package/src/procedures/core/operands.ts +7 -0
  281. package/src/procedures/core/string.ts +4 -2
  282. package/src/procedures/define-procedure.ts +73 -20
  283. package/src/procedures/effects.ts +35 -0
  284. package/src/procedures/idempotency.ts +152 -0
  285. package/src/procedures/index.ts +18 -2
  286. package/src/procedures/interceptors.ts +28 -11
  287. package/src/procedures/invoke.ts +19 -5
  288. package/src/procedures/manifest.ts +158 -0
  289. package/src/procedures/runtime-programs.ts +27 -0
  290. package/src/procedures/types.ts +16 -0
  291. package/src/protocol.ts +97 -0
  292. package/src/server/host-policy.ts +8 -5
  293. package/src/server/host-procedures.ts +102 -0
  294. package/src/server/index.ts +5 -2
  295. package/src/server/procedure-server.ts +324 -10
  296. package/src/server/request-auth.ts +35 -0
  297. package/src/server/types.ts +37 -0
  298. package/src/timers.ts +82 -0
  299. package/src/tracing/traceparent.ts +61 -0
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/client/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/client/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The resilience preset (roadmap R10): the timeouts, the cache, the retry, the circuit breaker and
3
+ * the rate limit of a client, in the one order that works.
4
+ *
5
+ * The first layer is the outermost one:
6
+ *
7
+ * 1. The overall timeout: it covers the whole call, retries included.
8
+ * 2. The cache: a hit makes no request, so no try and no slot of the rate limit.
9
+ * 3. The retry: it starts each try.
10
+ * 4. The circuit breaker: it counts each try, and an open breaker stops a retry loop.
11
+ * 5. The rate limit: each try takes a slot.
12
+ * 6. The timeout of one try: inside the retry, so the retry can start the next try.
13
+ *
14
+ * Each order pitfall of a hand-made stack is impossible here: an overall timeout inside the
15
+ * retry, a per-try timeout outside it, or a rate limit outside the retry. The deadline of the
16
+ * call goes to the server as `procedure-timeout` with each try (`client/deadline.ts`).
17
+ */
18
+ import type { TypedClientMiddleware } from "../types.js";
19
+ import type { CacheContext, CircuitBreakerContext, RateLimitContext, RetryContext, TimeoutContext } from "./contexts.js";
20
+ import { type CacheOptions } from "./cache.js";
21
+ import { type CircuitBreakerOptions } from "./circuit-breaker.js";
22
+ import { type RateLimitOptions } from "./rate-limit.js";
23
+ import { type RetryOptions } from "./retry.js";
24
+ import type { Duration } from "../../duration.js";
25
+ /** The parts of the preset. An absent part is not in the stack. */
26
+ export interface ResilienceOptions {
27
+ /** The time of the whole call, retries included. */
28
+ overall?: Duration | undefined;
29
+ /** The time of one try. It is at most the remaining time of the call. */
30
+ perAttempt?: Duration | undefined;
31
+ /** The retry. Its `idempotent` option decides which calls go again after an indeterminate try. */
32
+ retry?: RetryOptions | undefined;
33
+ /** The circuit breaker. */
34
+ breaker?: CircuitBreakerOptions | undefined;
35
+ /** The cache of the reads that opt in. */
36
+ cache?: CacheOptions | undefined;
37
+ /** The rate limit of the tries. */
38
+ rateLimit?: RateLimitOptions | undefined;
39
+ /** The message of a timeout error. */
40
+ message?: string | undefined;
41
+ }
42
+ /** The context that the preset gives: the context of each part that it can have. */
43
+ export type ResilienceContext = TimeoutContext & Partial<RetryContext & CacheContext & CircuitBreakerContext & RateLimitContext>;
44
+ /**
45
+ * This function gives one middleware with the parts of `options` in the correct order (see the
46
+ * file comment). Add it with one `use()`.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const client = new Client(transport).use(
51
+ * resilience({
52
+ * overall: seconds(10),
53
+ * perAttempt: seconds(3),
54
+ * retry: { maxRetries: 2, idempotent: idempotentIn(registry) },
55
+ * breaker: { failureThreshold: 5 },
56
+ * }),
57
+ * );
58
+ * ```
59
+ */
60
+ export declare function resilience(options: ResilienceOptions): TypedClientMiddleware<ResilienceContext, {}>;
61
+ //# sourceMappingURL=resilience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../../src/client/middleware/resilience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAkC,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzH,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,kGAAkG;IAClG,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5C,0CAA0C;IAC1C,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,mCAAmC;IACnC,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACzC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,oFAAoF;AACpF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,YAAY,GAAG,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;AAEjI;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAgBnG"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The resilience preset (roadmap R10): the timeouts, the cache, the retry, the circuit breaker and
3
+ * the rate limit of a client, in the one order that works.
4
+ *
5
+ * The first layer is the outermost one:
6
+ *
7
+ * 1. The overall timeout: it covers the whole call, retries included.
8
+ * 2. The cache: a hit makes no request, so no try and no slot of the rate limit.
9
+ * 3. The retry: it starts each try.
10
+ * 4. The circuit breaker: it counts each try, and an open breaker stops a retry loop.
11
+ * 5. The rate limit: each try takes a slot.
12
+ * 6. The timeout of one try: inside the retry, so the retry can start the next try.
13
+ *
14
+ * Each order pitfall of a hand-made stack is impossible here: an overall timeout inside the
15
+ * retry, a per-try timeout outside it, or a rate limit outside the retry. The deadline of the
16
+ * call goes to the server as `procedure-timeout` with each try (`client/deadline.ts`).
17
+ */
18
+ import { createCacheMiddleware } from "./cache.js";
19
+ import { createCircuitBreakerMiddleware } from "./circuit-breaker.js";
20
+ import { createRateLimitMiddleware } from "./rate-limit.js";
21
+ import { createRetryMiddleware } from "./retry.js";
22
+ import { createOverallTimeoutMiddleware, createTimeoutMiddleware } from "./timeout.js";
23
+ /**
24
+ * This function gives one middleware with the parts of `options` in the correct order (see the
25
+ * file comment). Add it with one `use()`.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const client = new Client(transport).use(
30
+ * resilience({
31
+ * overall: seconds(10),
32
+ * perAttempt: seconds(3),
33
+ * retry: { maxRetries: 2, idempotent: idempotentIn(registry) },
34
+ * breaker: { failureThreshold: 5 },
35
+ * }),
36
+ * );
37
+ * ```
38
+ */
39
+ export function resilience(options) {
40
+ const layers = [];
41
+ const message = options.message;
42
+ if (options.overall) {
43
+ layers.push(createOverallTimeoutMiddleware({ overall: options.overall, ...(message ? { message: `${message} (overall)` } : {}) }));
44
+ }
45
+ if (options.cache)
46
+ layers.push(createCacheMiddleware(options.cache));
47
+ if (options.retry)
48
+ layers.push(createRetryMiddleware(options.retry));
49
+ if (options.breaker)
50
+ layers.push(createCircuitBreakerMiddleware(options.breaker));
51
+ if (options.rateLimit)
52
+ layers.push(createRateLimitMiddleware(options.rateLimit));
53
+ if (options.perAttempt) {
54
+ layers.push(createTimeoutMiddleware({ perAttempt: options.perAttempt, ...(message ? { message: `${message} (per-attempt)` } : {}) }));
55
+ }
56
+ const composed = (next) => layers.reduceRight((inner, layer) => layer(inner), next);
57
+ return composed;
58
+ }
59
+ //# sourceMappingURL=resilience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../../src/client/middleware/resilience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,qBAAqB,EAAqB,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAA8B,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAyB,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAqB,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAwBvF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAqB,CAAC,CAAC;IACzJ,CAAC;IACD,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAqB,CAAC,CAAC;IACzF,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAqB,CAAC,CAAC;IACzF,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAqB,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,SAAS,CAAqB,CAAC,CAAC;IACrG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAqB,CAAC,CAAC;IAC5J,CAAC;IACD,MAAM,QAAQ,GAAG,CAAa,IAA8B,EAA4B,EAAE,CACxF,MAAM,CAAC,WAAW,CAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAE,KAAsC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IACvH,OAAO,QAAwD,CAAC;AAClE,CAAC"}
@@ -4,8 +4,10 @@
4
4
  * Protocol-agnostic retry with exponential backoff and jitter.
5
5
  * Works with any transport!
6
6
  */
7
- import type { ResponseItem, TypedClientMiddleware } from "../types.js";
7
+ import type { Method, ResponseItem, TypedClientMiddleware } from "../types.js";
8
8
  import type { RetryContext } from "./contexts.js";
9
+ import { type Clock } from "../../clock.js";
10
+ import { type Duration } from "../../duration.js";
9
11
  /**
10
12
  * Retry middleware options.
11
13
  */
@@ -16,30 +18,62 @@ export interface RetryOptions {
16
18
  */
17
19
  maxRetries?: number;
18
20
  /**
19
- * Base delay in milliseconds for exponential backoff.
21
+ * The clock of the backoff and of the budget (roadmap R35). The default is the clock of the
22
+ * platform. A test gives a fake clock.
23
+ */
24
+ clock?: Clock;
25
+ /**
26
+ * Base delay for exponential backoff, for example `ms(500)`.
20
27
  * Actual delay will be: baseDelay * 2^attempt + jitter
21
- * @default 1000
28
+ * @default 1 second
22
29
  */
23
- retryDelay?: number;
30
+ retryDelay?: Duration;
24
31
  /**
25
32
  * The factor of the delay from one attempt to the next.
26
33
  * @default 2
27
34
  */
28
35
  backoffMultiplier?: number;
29
36
  /**
30
- * The longest delay between two attempts, in milliseconds.
37
+ * The longest delay between two attempts.
31
38
  * @default no limit
32
39
  */
33
- maxDelay?: number;
40
+ maxDelay?: Duration;
34
41
  /**
35
- * Maximum jitter as a fraction of the delay (0-1).
36
- * Adds randomness to prevent thundering herd.
37
- * @default 0.1 (10% jitter)
42
+ * The random part of each delay, from 0 to 1. With 1 (full jitter), the delay is a random time
43
+ * from 0 to the backoff, so the clients that failed together do not retry together. 0 gives the
44
+ * backoff exactly.
45
+ * @default 1 (full jitter; roadmap R12: before, 0.1 gave a delay within 10 percent of the backoff)
38
46
  */
39
47
  jitter?: number;
48
+ /**
49
+ * The retry budget of this middleware: each call adds `ratio` of a retry to the budget, and each
50
+ * retry takes one. When the budget is empty, an error goes to the caller without a retry, so a
51
+ * failing service gets at most `ratio` more requests, not `maxRetries` times more. Besides the
52
+ * budget, `minPerSecond` retries a second are always allowed. `false` turns the budget off.
53
+ * @default { ratio: 0.2, minPerSecond: 10 }
54
+ */
55
+ budget?: {
56
+ ratio?: number;
57
+ minPerSecond?: number;
58
+ } | false;
59
+ /**
60
+ * The calls that the middleware can send again after a try with an indeterminate outcome: the
61
+ * request left, and no answer came (a reset, a closed connection, the timeout of one try). The
62
+ * server can have run such a call, so only an idempotent call goes again (roadmap R1).
63
+ *
64
+ * - a function: true for an idempotent method. `idempotentIn(registry)` reads the effects of
65
+ * the procedures that the client knows.
66
+ * - `true`: every call. Use it only with a server that removes duplicate calls by their
67
+ * idempotency key (`ProcedureServer` does).
68
+ * - absent: only a call with `retry: { idempotent: true }` in its context.
69
+ *
70
+ * A try that did not leave the client (a refused connection) and an error that the server
71
+ * marks retryable go again in each case.
72
+ */
73
+ idempotent?: boolean | ((method: Method) => boolean | undefined);
40
74
  /**
41
75
  * Custom function to determine if a request should be retried.
42
- * Takes precedence over Status.retryable flag.
76
+ * Takes precedence over Status.retryable flag. The rule of `idempotent` still applies.
43
77
  *
44
78
  * @param item - The response item
45
79
  * @param attempt - Current attempt number (0-indexed)
@@ -88,7 +122,7 @@ export interface RetryOptions {
88
122
  * @example
89
123
  * ```typescript
90
124
  * // Create middleware with defaults
91
- * client.use(createRetryMiddleware({ maxRetries: 3 }));
125
+ * client.use(createRetryMiddleware({ maxRetries: 3, retryDelay: ms(500) }));
92
126
  *
93
127
  * // Override per-call via context
94
128
  * await client.call(method, payload, {
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/client/middleware/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA+B,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAExE;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAC3B,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtG;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,YAAiB,GAAG,qBAAqB,CAAC,YAAY,EAAE,EAAE,CAAC,CAiIzG"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/client/middleware/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA+B,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG1E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;IAE3D;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC;IAEjE;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAExE;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAC3B,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtG;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,YAAiB,GAAG,qBAAqB,CAAC,YAAY,EAAE,EAAE,CAAC,CA4MzG"}
@@ -4,7 +4,12 @@
4
4
  * Protocol-agnostic retry with exponential backoff and jitter.
5
5
  * Works with any transport!
6
6
  */
7
- import { abortedItem, sleep, thrownItem } from "./items.js";
7
+ import { abortedItem, deliveryOf, retryAfterOf, sleep, thrownItem } from "./items.js";
8
+ import { realClock } from "../../clock.js";
9
+ import { backoffDelay } from "@mark1russell7/service/backoff";
10
+ import { IDEMPOTENCY_KEY_METADATA, idempotencyKeyOf, newIdempotencyKey } from "../../procedures/idempotency.js";
11
+ import { isDuration, optionalMs } from "../../duration.js";
12
+ import { TIMER_DEFAULTS } from "../../timers.js";
8
13
  /**
9
14
  * Create retry middleware with exponential backoff and jitter.
10
15
  *
@@ -24,7 +29,7 @@ import { abortedItem, sleep, thrownItem } from "./items.js";
24
29
  * @example
25
30
  * ```typescript
26
31
  * // Create middleware with defaults
27
- * client.use(createRetryMiddleware({ maxRetries: 3 }));
32
+ * client.use(createRetryMiddleware({ maxRetries: 3, retryDelay: ms(500) }));
28
33
  *
29
34
  * // Override per-call via context
30
35
  * await client.call(method, payload, {
@@ -33,45 +38,112 @@ import { abortedItem, sleep, thrownItem } from "./items.js";
33
38
  * ```
34
39
  */
35
40
  export function createRetryMiddleware(options = {}) {
36
- const { retryDelay: defaultRetryDelay = 1000, jitter: defaultJitter = 0.1, shouldRetry: customShouldRetry, onBeforeRetry, onAfterRetry, } = options;
37
- const defaultMaxRetries = options.maxRetries ?? 3;
38
- const defaultMultiplier = options.backoffMultiplier ?? 2;
39
- const defaultMaxDelay = options.maxDelay ?? Number.POSITIVE_INFINITY;
40
- /** The overrides of one call (`retry: { ... }` in its context). Before, only maxAttempts was read. */
41
+ const defaultRetryDelay = optionalMs(options.retryDelay, "retryDelay") ?? TIMER_DEFAULTS.retry.retryDelayMs;
42
+ const { jitter: defaultJitter = 1, shouldRetry: customShouldRetry, onBeforeRetry, onAfterRetry, idempotent: idempotentOption, } = options;
43
+ const defaultMaxRetries = options.maxRetries ?? TIMER_DEFAULTS.retry.maxRetries;
44
+ const defaultMultiplier = options.backoffMultiplier ?? TIMER_DEFAULTS.retry.backoffMultiplier;
45
+ const defaultMaxDelay = optionalMs(options.maxDelay, "maxDelay") ?? TIMER_DEFAULTS.retry.maxDelayMs;
46
+ /**
47
+ * The overrides of one call (`retry: { ... }` in its context), with the delays in milliseconds.
48
+ * Before, only maxAttempts was read.
49
+ */
41
50
  const overridesOf = (value) => {
42
51
  if (typeof value !== "object" || value === null)
43
52
  return {};
44
53
  const out = {};
45
- for (const key of ["maxAttempts", "delay", "backoffMultiplier", "maxDelay"]) {
54
+ for (const key of ["maxAttempts", "backoffMultiplier"]) {
46
55
  const field = value[key];
47
56
  if (typeof field === "number" && Number.isFinite(field) && field >= 0)
48
57
  out[key] = field;
49
58
  }
59
+ for (const key of ["delay", "maxDelay"]) {
60
+ const field = value[key];
61
+ if (field !== undefined) {
62
+ if (!isDuration(field))
63
+ throw new TypeError(`retry.${key} must be a duration such as ms(500) (roadmap R11)`);
64
+ out[key] = optionalMs(field, `retry.${key}`);
65
+ }
66
+ }
50
67
  return out;
51
68
  };
52
- /** The backoff delay of an attempt: exponential, with jitter, at most the maximum delay */
53
- const backoffDelay = (attempt, overrides) => {
54
- const baseDelay = (overrides.delay ?? defaultRetryDelay) * Math.pow(overrides.backoffMultiplier ?? defaultMultiplier, attempt);
55
- const jitterAmount = defaultJitter * baseDelay * (Math.random() * 2 - 1);
56
- return Math.max(0, Math.min(overrides.maxDelay ?? defaultMaxDelay, baseDelay + jitterAmount));
69
+ /**
70
+ * The backoff delay of an attempt (from 0): exponential, at most the maximum delay, with the
71
+ * random part of `jitter` (full jitter by default). The backoff is `backoffDelay` of
72
+ * `@mark1russell7/service/backoff` (roadmap R37), whose tries start at 1.
73
+ */
74
+ const retryDelayOf = (attempt, overrides) => backoffDelay({
75
+ base: overrides.delay ?? defaultRetryDelay,
76
+ factor: overrides.backoffMultiplier ?? defaultMultiplier,
77
+ cap: overrides.maxDelay ?? defaultMaxDelay,
78
+ jitter: { kind: "subtract", fraction: Math.min(1, Math.max(0, defaultJitter)) },
79
+ }, attempt + 1);
80
+ // The retry budget (R12): a balance of retries that each call fills by `ratio`
81
+ const budget = options.budget === false ? undefined : { ratio: options.budget?.ratio ?? 0.2, minPerSecond: options.budget?.minPerSecond ?? 10 };
82
+ const budgetCap = budget ? Math.max(1, budget.ratio * 100) : 0;
83
+ let balance = budgetCap;
84
+ const clock = options.clock ?? realClock;
85
+ let secondStart = clock.now();
86
+ let retriesThisSecond = 0;
87
+ /** This function takes one retry from the budget, or gives false when the budget is empty. */
88
+ const takeRetry = () => {
89
+ if (!budget)
90
+ return true;
91
+ if (balance >= 1) {
92
+ balance -= 1;
93
+ return true;
94
+ }
95
+ const now = clock.now();
96
+ if (now - secondStart >= 1000) {
97
+ secondStart = now;
98
+ retriesThisSecond = 0;
99
+ }
100
+ if (retriesThisSecond < budget.minPerSecond) {
101
+ retriesThisSecond++;
102
+ return true;
103
+ }
104
+ return false;
105
+ };
106
+ /** True when the call can go again after an indeterminate try: the call says so, or the option. */
107
+ const isIdempotent = (method, value) => {
108
+ const own = typeof value === "object" && value !== null ? value.idempotent : undefined;
109
+ if (typeof own === "boolean")
110
+ return own;
111
+ if (typeof idempotentOption === "function")
112
+ return idempotentOption(method) === true;
113
+ return idempotentOption === true;
57
114
  };
58
115
  return (next) => {
59
116
  return async function* (context) {
60
117
  // Read from metadata first (user-provided context), then fall back to options
61
- const overrides = overridesOf(context.message.metadata.retry);
62
- const maxRetries = overrides.maxAttempts ?? defaultMaxRetries;
63
- const shouldRetryItem = (item, attempt) => customShouldRetry
64
- ? customShouldRetry(item, attempt)
65
- : item.status.type === "error" && item.status.retryable;
118
+ const given = context.message.metadata.retry;
119
+ const overrides = overridesOf(given);
120
+ // maxAttempts counts the attempts: the first try and the retries (R12: before, the override
121
+ // was used as the number of retries, against its name and its documentation)
122
+ const maxRetries = overrides.maxAttempts !== undefined ? Math.max(0, overrides.maxAttempts - 1) : defaultMaxRetries;
123
+ if (budget)
124
+ balance = Math.min(budgetCap, balance + budget.ratio);
125
+ const idempotent = isIdempotent(context.message.method, context.message.metadata.retry);
126
+ const shouldRetryItem = (item, attempt) => {
127
+ const wanted = customShouldRetry
128
+ ? customShouldRetry(item, attempt)
129
+ : item.status.type === "error" && item.status.retryable;
130
+ // A request that can have run goes again only when the call is idempotent (R1). Before,
131
+ // a reset or a timeout of one try sent a write again.
132
+ return wanted && (deliveryOf(item) !== "indeterminate" || idempotent);
133
+ };
66
134
  const signal = context.message.signal;
67
135
  const baseId = context.message.id;
136
+ // One key for all the tries of the call: a server that removes duplicates runs it one time
137
+ const idempotencyKey = idempotencyKeyOf(context.message.metadata) ?? newIdempotencyKey();
138
+ context.message.metadata[IDEMPOTENCY_KEY_METADATA] = idempotencyKey;
68
139
  let attempt = 0;
69
140
  for (;;) {
70
141
  // Update retry metadata with current state
71
142
  context.message.metadata.retry = {
72
- ...overrides,
143
+ ...(typeof given === "object" && given !== null ? given : {}),
73
144
  attempt,
74
- maxAttempts: maxRetries,
145
+ maxAttempts: maxRetries + 1,
146
+ idempotent,
75
147
  };
76
148
  // Each attempt gets its own request id. The id correlates the frames of one attempt
77
149
  // on the wire: a cancelled attempt can still answer under its id (deep dive TRN-8/9).
@@ -120,7 +192,15 @@ export function createRetryMiddleware(options = {}) {
120
192
  }
121
193
  return;
122
194
  }
123
- let delay = backoffDelay(attempt, overrides);
195
+ // The budget is empty: the error goes to the caller (R12)
196
+ if (!takeRetry()) {
197
+ yield retryItem;
198
+ if (onAfterRetry)
199
+ await onAfterRetry(false, attempt);
200
+ return;
201
+ }
202
+ // A server that asks for a wait (Retry-After) gets at least that wait (R12)
203
+ let delay = Math.max(retryDelayOf(attempt, overrides), retryAfterOf(retryItem) ?? 0);
124
204
  // Before retry hook
125
205
  if (onBeforeRetry) {
126
206
  const hookResult = await onBeforeRetry(retryItem, attempt);
@@ -138,7 +218,7 @@ export function createRetryMiddleware(options = {}) {
138
218
  }
139
219
  }
140
220
  // The backoff stops at once when the caller aborts (deep dive TRN-8)
141
- if (!(await sleep(delay, signal))) {
221
+ if (!(await sleep(delay, signal, clock))) {
142
222
  yield abortedItem(context.message.id);
143
223
  return;
144
224
  }
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/client/middleware/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAAiB,EAAE;IAC9D,MAAM,EACJ,UAAU,EAAE,iBAAiB,GAAG,IAAI,EACpC,MAAM,EAAE,aAAa,GAAG,GAAG,EAC3B,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,YAAY,GACb,GAAG,OAAO,CAAC;IACZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAErE,sGAAsG;IACtG,MAAM,WAAW,GAAG,CAAC,KAAc,EAAoG,EAAE;QACvI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAqG,EAAE,CAAC;QACjH,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,CAAU,EAAE,CAAC;YACrF,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1F,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,2FAA2F;IAC3F,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,SAAyC,EAAU,EAAE;QAC1F,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,IAAI,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC/H,MAAM,YAAY,GAAG,aAAa,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC;IAEF,OAAO,CAAa,IAA8B,EAA4B,EAAE;QAC9E,OAAO,KAAK,SAAS,CAAC,EAAE,OAA4B;YAClD,8EAA8E;YAC9E,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,IAAI,iBAAiB,CAAC;YAC9D,MAAM,eAAe,GAAG,CAAC,IAAwB,EAAE,OAAe,EAAW,EAAE,CAC7E,iBAAiB;gBACf,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC;gBAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAElC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,SAAS,CAAC;gBACR,2CAA2C;gBAC3C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG;oBAC/B,GAAG,SAAS;oBACZ,OAAO;oBACP,WAAW,EAAE,UAAU;iBACxB,CAAC;gBACF,oFAAoF;gBACpF,sFAAsF;gBACtF,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,OAAO,EAAE,CAAC;gBAE1E,oCAAoC;gBACpC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,WAAW,CAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBAED,iFAAiF;gBACjF,gFAAgF;gBAChF,iFAAiF;gBACjF,iEAAiE;gBACjE,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,QAAwC,CAAC;gBAC7C,IAAI,SAAyC,CAAC;gBAC9C,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvC,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,UAAU,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;4BACvE,SAAS,GAAG,IAAI,CAAC;4BACjB,MAAM;wBACR,CAAC;wBACD,OAAO,GAAG,IAAI,CAAC;wBACf,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,IAAI,CAAC;oBACb,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;oBAC7F,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;wBAClD,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,mFAAmF;oBACnF,+EAA+E;oBAC/E,mDAAmD;oBACnD,MAAM,IAAI,GAAG,UAAU,CAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACzD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;wBACpC,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;gBAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,sDAAsD;oBACtD,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,CAAC,CAAC;oBACnE,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAE7C,oBAAoB;gBACpB,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC3D,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;wBAC5B,yDAAyD;wBACzD,MAAM,SAAS,CAAC;wBAChB,IAAI,YAAY,EAAE,CAAC;4BACjB,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACrC,CAAC;wBACD,OAAO;oBACT,CAAC;oBAED,uCAAuC;oBACvC,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;wBACrC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBAED,qEAAqE;gBACrE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBAClC,MAAM,WAAW,CAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/client/middleware/retry.ts"],"names":[],"mappings":"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"}
@@ -6,21 +6,22 @@
6
6
  */
7
7
  import type { TypedClientMiddleware } from "../types.js";
8
8
  import type { TimeoutContext } from "./contexts.js";
9
+ import { type Duration } from "../../duration.js";
9
10
  /**
10
11
  * Timeout middleware options.
11
12
  */
12
13
  export interface TimeoutOptions {
13
14
  /**
14
- * Timeout in milliseconds for the entire request (including retries).
15
+ * The time of the entire request (including retries), for example `seconds(10)`.
15
16
  * @default undefined (no overall timeout)
16
17
  */
17
- overall?: number;
18
+ overall?: Duration | undefined;
18
19
  /**
19
- * Timeout in milliseconds for each individual attempt.
20
+ * The time of each individual attempt, for example `seconds(2)`.
20
21
  * Useful with retry middleware for per-attempt timeouts.
21
22
  * @default undefined (no per-attempt timeout)
22
23
  */
23
- perAttempt?: number;
24
+ perAttempt?: Duration | undefined;
24
25
  /**
25
26
  * Custom timeout error message.
26
27
  * @default "Request timeout"
@@ -41,11 +42,11 @@ export interface TimeoutOptions {
41
42
  * @example
42
43
  * ```typescript
43
44
  * // Create middleware with default timeout
44
- * client.use(createOverallTimeoutMiddleware({ overall: 5000 }));
45
+ * client.use(createOverallTimeoutMiddleware({ overall: seconds(5) }));
45
46
  *
46
47
  * // Override per-call via context
47
48
  * await client.call(method, payload, {
48
- * context: { timeout: { overall: 10000 } }
49
+ * context: { timeout: { overall: seconds(10) } }
49
50
  * });
50
51
  * ```
51
52
  */
@@ -64,11 +65,11 @@ export declare function createOverallTimeoutMiddleware(options: Pick<TimeoutOpti
64
65
  * @example
65
66
  * ```typescript
66
67
  * // Create middleware with default timeout
67
- * client.use(createTimeoutMiddleware({ perAttempt: 1000 }));
68
+ * client.use(createTimeoutMiddleware({ perAttempt: seconds(1) }));
68
69
  *
69
70
  * // Override per-call via context
70
71
  * await client.call(method, payload, {
71
- * context: { timeout: { perAttempt: 2000 } }
72
+ * context: { timeout: { perAttempt: seconds(2) } }
72
73
  * });
73
74
  * ```
74
75
  */
@@ -76,15 +77,17 @@ export declare function createTimeoutMiddleware(options: Pick<TimeoutOptions, "p
76
77
  /**
77
78
  * Create combined timeout middleware with both overall and per-attempt timeouts.
78
79
  *
80
+ * @deprecated Use `resilience({ overall, perAttempt, retry })`. This function puts the two
81
+ * timeouts in one slot, so a retry middleware that you add with another `use()` cannot sit
82
+ * between them: the retry is outside both, or inside both. `resilience` puts the retry between
83
+ * them (roadmap R10).
84
+ *
79
85
  * @param options - Timeout configuration
80
86
  * @returns Middleware function
81
87
  *
82
88
  * @example
83
89
  * ```typescript
84
- * client.use(createCombinedTimeoutMiddleware({
85
- * overall: 5000, // 5 seconds total
86
- * perAttempt: 1000 // 1 second per attempt
87
- * }));
90
+ * client.use(resilience({ overall: seconds(5), perAttempt: seconds(1), retry: { maxRetries: 2 } }));
88
91
  * ```
89
92
  */
90
93
  export declare function createCombinedTimeoutMiddleware(options: TimeoutOptions): TypedClientMiddleware<TimeoutContext, {}>;
@@ -1 +1 @@
1
- {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/client/middleware/timeout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA+D,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEtH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA2JD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAmB9I;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAmB1I;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAmBlH"}
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/client/middleware/timeout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA6C,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAE/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAElC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAqB9I;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAyB1I;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,qBAAqB,CAAC,cAAc,EAAE,EAAE,CAAC,CAGlH"}