reactor-effect-client 0.2.0 → 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 (219) hide show
  1. package/README.md +66 -6
  2. package/dist/FetchHttp.js +1 -1
  3. package/dist/FetchHttp.js.map +1 -1
  4. package/dist/PeerFactory.d.ts +13 -2
  5. package/dist/PeerFactory.d.ts.map +1 -1
  6. package/dist/PeerFactory.js.map +1 -1
  7. package/dist/PeerTypes.d.ts +2 -2
  8. package/dist/PeerTypes.d.ts.map +1 -1
  9. package/dist/Sequence.d.ts +18 -14
  10. package/dist/Sequence.d.ts.map +1 -1
  11. package/dist/Sequence.js +117 -122
  12. package/dist/Sequence.js.map +1 -1
  13. package/dist/SessionTypes.d.ts +172 -15
  14. package/dist/SessionTypes.d.ts.map +1 -1
  15. package/dist/SessionTypes.js +18 -1
  16. package/dist/SessionTypes.js.map +1 -1
  17. package/dist/bytes.js +3 -3
  18. package/dist/bytes.js.map +1 -1
  19. package/dist/contract.d.ts +120 -29
  20. package/dist/contract.d.ts.map +1 -1
  21. package/dist/contract.js +105 -73
  22. package/dist/contract.js.map +1 -1
  23. package/dist/coordinator/_internal/client.d.ts +111 -17
  24. package/dist/coordinator/_internal/client.d.ts.map +1 -1
  25. package/dist/coordinator/_internal/client.js +187 -74
  26. package/dist/coordinator/_internal/client.js.map +1 -1
  27. package/dist/coordinator/_internal/recording.d.ts +33 -0
  28. package/dist/coordinator/_internal/recording.d.ts.map +1 -0
  29. package/dist/coordinator/_internal/recording.js +123 -0
  30. package/dist/coordinator/_internal/recording.js.map +1 -0
  31. package/dist/coordinator/_internal/response.d.ts.map +1 -1
  32. package/dist/coordinator/_internal/response.js +5 -7
  33. package/dist/coordinator/_internal/response.js.map +1 -1
  34. package/dist/coordinator/_internal/schemas.d.ts +40 -6
  35. package/dist/coordinator/_internal/schemas.d.ts.map +1 -1
  36. package/dist/coordinator/_internal/schemas.js +94 -64
  37. package/dist/coordinator/_internal/schemas.js.map +1 -1
  38. package/dist/coordinator/index.d.ts +14 -2
  39. package/dist/coordinator/index.d.ts.map +1 -1
  40. package/dist/coordinator/index.js +14 -18
  41. package/dist/coordinator/index.js.map +1 -1
  42. package/dist/correlation.d.ts +15 -0
  43. package/dist/correlation.d.ts.map +1 -1
  44. package/dist/correlation.js +26 -8
  45. package/dist/correlation.js.map +1 -1
  46. package/dist/duration.d.ts +25 -0
  47. package/dist/duration.d.ts.map +1 -0
  48. package/dist/duration.js +47 -0
  49. package/dist/duration.js.map +1 -0
  50. package/dist/errors.d.ts +1264 -49
  51. package/dist/errors.d.ts.map +1 -1
  52. package/dist/errors.js +698 -46
  53. package/dist/errors.js.map +1 -1
  54. package/dist/h3/_internal/client.d.ts +2 -2
  55. package/dist/h3/_internal/client.d.ts.map +1 -1
  56. package/dist/h3/_internal/client.js +280 -146
  57. package/dist/h3/_internal/client.js.map +1 -1
  58. package/dist/h3/_internal/contracts.d.ts.map +1 -1
  59. package/dist/h3/_internal/contracts.js +2 -2
  60. package/dist/h3/_internal/contracts.js.map +1 -1
  61. package/dist/h3/_internal/deployment.d.ts.map +1 -1
  62. package/dist/h3/_internal/deployment.js +5 -4
  63. package/dist/h3/_internal/deployment.js.map +1 -1
  64. package/dist/h3/_internal/evidence.js +1 -1
  65. package/dist/h3/_internal/evidence.js.map +1 -1
  66. package/dist/h3/_internal/operations.d.ts +58 -0
  67. package/dist/h3/_internal/operations.d.ts.map +1 -0
  68. package/dist/h3/_internal/operations.js +268 -0
  69. package/dist/h3/_internal/operations.js.map +1 -0
  70. package/dist/h3/_internal/references.d.ts.map +1 -1
  71. package/dist/h3/_internal/references.js +3 -8
  72. package/dist/h3/_internal/references.js.map +1 -1
  73. package/dist/h3/_internal/request.js +1 -1
  74. package/dist/h3/_internal/request.js.map +1 -1
  75. package/dist/h3/_internal/retained.d.ts +22 -0
  76. package/dist/h3/_internal/retained.d.ts.map +1 -0
  77. package/dist/h3/_internal/retained.js +89 -0
  78. package/dist/h3/_internal/retained.js.map +1 -0
  79. package/dist/h3/_internal/state.d.ts +15 -1
  80. package/dist/h3/_internal/state.d.ts.map +1 -1
  81. package/dist/h3/_internal/state.js +69 -29
  82. package/dist/h3/_internal/state.js.map +1 -1
  83. package/dist/h3/index.d.ts +1 -1
  84. package/dist/h3/index.d.ts.map +1 -1
  85. package/dist/h3/messages.d.ts +118 -109
  86. package/dist/h3/messages.d.ts.map +1 -1
  87. package/dist/h3/messages.js +73 -51
  88. package/dist/h3/messages.js.map +1 -1
  89. package/dist/h3/types.d.ts +109 -13
  90. package/dist/h3/types.d.ts.map +1 -1
  91. package/dist/host.d.ts +6 -6
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +4 -5
  94. package/dist/host.js.map +1 -1
  95. package/dist/index.d.ts +11 -5
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +5 -1
  98. package/dist/index.js.map +1 -1
  99. package/dist/json.d.ts +13 -6
  100. package/dist/json.d.ts.map +1 -1
  101. package/dist/json.js +34 -14
  102. package/dist/json.js.map +1 -1
  103. package/dist/media-stream.d.ts.map +1 -1
  104. package/dist/media-stream.js +9 -11
  105. package/dist/media-stream.js.map +1 -1
  106. package/dist/observation.d.ts +9 -0
  107. package/dist/observation.d.ts.map +1 -1
  108. package/dist/observation.js +20 -18
  109. package/dist/observation.js.map +1 -1
  110. package/dist/orchestration/h3-source.d.ts +32 -4
  111. package/dist/orchestration/h3-source.d.ts.map +1 -1
  112. package/dist/orchestration/h3-source.js +47 -14
  113. package/dist/orchestration/h3-source.js.map +1 -1
  114. package/dist/orchestration/index.d.ts +9 -6
  115. package/dist/orchestration/index.d.ts.map +1 -1
  116. package/dist/orchestration/index.js +5 -3
  117. package/dist/orchestration/index.js.map +1 -1
  118. package/dist/orchestration/media-buffer.d.ts +12 -4
  119. package/dist/orchestration/media-buffer.d.ts.map +1 -1
  120. package/dist/orchestration/media-buffer.js +31 -11
  121. package/dist/orchestration/media-buffer.js.map +1 -1
  122. package/dist/orchestration/open-h3.d.ts +65 -0
  123. package/dist/orchestration/open-h3.d.ts.map +1 -0
  124. package/dist/orchestration/open-h3.js +65 -0
  125. package/dist/orchestration/open-h3.js.map +1 -0
  126. package/dist/orchestration/references.d.ts +5 -1
  127. package/dist/orchestration/references.d.ts.map +1 -1
  128. package/dist/orchestration/references.js +37 -34
  129. package/dist/orchestration/references.js.map +1 -1
  130. package/dist/orchestration/renewal-state.js +1 -1
  131. package/dist/orchestration/renewal-state.js.map +1 -1
  132. package/dist/orchestration/renewal.d.ts +64 -64
  133. package/dist/orchestration/renewal.d.ts.map +1 -1
  134. package/dist/orchestration/renewal.js +149 -88
  135. package/dist/orchestration/renewal.js.map +1 -1
  136. package/dist/orchestration/request.d.ts +11 -12
  137. package/dist/orchestration/request.d.ts.map +1 -1
  138. package/dist/orchestration/request.js +63 -66
  139. package/dist/orchestration/request.js.map +1 -1
  140. package/dist/orchestration/routing.d.ts.map +1 -1
  141. package/dist/orchestration/routing.js +17 -14
  142. package/dist/orchestration/routing.js.map +1 -1
  143. package/dist/orchestration/source-slot.d.ts +15 -5
  144. package/dist/orchestration/source-slot.d.ts.map +1 -1
  145. package/dist/orchestration/source-slot.js +40 -21
  146. package/dist/orchestration/source-slot.js.map +1 -1
  147. package/dist/orchestration/types.d.ts +594 -39
  148. package/dist/orchestration/types.d.ts.map +1 -1
  149. package/dist/orchestration/types.js +20 -0
  150. package/dist/orchestration/types.js.map +1 -1
  151. package/dist/protobuf.js +2 -2
  152. package/dist/protobuf.js.map +1 -1
  153. package/dist/session/_internal/acquire.d.ts +4 -6
  154. package/dist/session/_internal/acquire.d.ts.map +1 -1
  155. package/dist/session/_internal/acquire.js +40 -50
  156. package/dist/session/_internal/acquire.js.map +1 -1
  157. package/dist/session/_internal/cleanup.d.ts +2 -1
  158. package/dist/session/_internal/cleanup.d.ts.map +1 -1
  159. package/dist/session/_internal/cleanup.js +23 -15
  160. package/dist/session/_internal/cleanup.js.map +1 -1
  161. package/dist/session/_internal/lifecycle.d.ts +5 -0
  162. package/dist/session/_internal/lifecycle.d.ts.map +1 -1
  163. package/dist/session/_internal/lifecycle.js +16 -6
  164. package/dist/session/_internal/lifecycle.js.map +1 -1
  165. package/dist/session/_internal/remote.d.ts.map +1 -1
  166. package/dist/session/_internal/remote.js +16 -7
  167. package/dist/session/_internal/remote.js.map +1 -1
  168. package/dist/session/_internal/uploads.d.ts +4 -1
  169. package/dist/session/_internal/uploads.d.ts.map +1 -1
  170. package/dist/session/_internal/uploads.js +25 -27
  171. package/dist/session/_internal/uploads.js.map +1 -1
  172. package/dist/session/commands.d.ts +1 -21
  173. package/dist/session/commands.d.ts.map +1 -1
  174. package/dist/session/commands.js +1 -12
  175. package/dist/session/commands.js.map +1 -1
  176. package/dist/session/files.d.ts +10 -2
  177. package/dist/session/files.d.ts.map +1 -1
  178. package/dist/session/files.js +11 -16
  179. package/dist/session/files.js.map +1 -1
  180. package/dist/session/index.d.ts +6 -6
  181. package/dist/session/index.d.ts.map +1 -1
  182. package/dist/session/index.js.map +1 -1
  183. package/dist/session/media.d.ts +53 -6
  184. package/dist/session/media.d.ts.map +1 -1
  185. package/dist/session/recorder.d.ts +24 -0
  186. package/dist/session/recorder.d.ts.map +1 -0
  187. package/dist/session/recorder.js +19 -0
  188. package/dist/session/recorder.js.map +1 -0
  189. package/dist/session.d.ts +5 -4
  190. package/dist/session.d.ts.map +1 -1
  191. package/dist/session.js +213 -110
  192. package/dist/session.js.map +1 -1
  193. package/dist/simulation/_internal/source.d.ts.map +1 -1
  194. package/dist/simulation/_internal/source.js +57 -48
  195. package/dist/simulation/_internal/source.js.map +1 -1
  196. package/dist/simulation/index.d.ts +4 -5
  197. package/dist/simulation/index.d.ts.map +1 -1
  198. package/dist/simulation/index.js +3 -4
  199. package/dist/simulation/index.js.map +1 -1
  200. package/dist/simulation/types.d.ts +16 -2
  201. package/dist/simulation/types.d.ts.map +1 -1
  202. package/dist/stats.d.ts +19 -0
  203. package/dist/stats.d.ts.map +1 -1
  204. package/dist/stats.js +79 -8
  205. package/dist/stats.js.map +1 -1
  206. package/package.json +5 -4
  207. package/notices/owned-webrtc/Effect-MIT.txt +0 -21
  208. package/notices/owned-webrtc/IETF.txt +0 -43
  209. package/notices/owned-webrtc/LICENSE +0 -21
  210. package/notices/owned-webrtc/UPSTREAM.md +0 -20
  211. package/notices/owned-webrtc/VP8-ADAPTATION.md +0 -32
  212. package/notices/owned-webrtc/VP8-AUTHORS.txt +0 -42
  213. package/notices/owned-webrtc/VP8-LICENSE.txt +0 -25
  214. package/notices/owned-webrtc/VP8-PATENTS.txt +0 -21
  215. package/notices/owned-webrtc/Werift-MIT.txt +0 -21
  216. package/notices/owned-webrtc/libvpx-v1.12.0-LICENSE.txt +0 -28
  217. package/notices/owned-webrtc/libvpx-v1.12.0-PATENTS.txt +0 -22
  218. package/notices/owned-webrtc/rfc3711.txt +0 -3139
  219. package/notices/owned-webrtc/str0m-MIT.txt +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA4B/D,8FAA8F;AAC9F,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,aAAa,GAAkB,EAAE,EACqB,EAAE,CACxD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACvC,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE,CACR,IAAI,iBAAiB,CACnB;QACE,GAAG,aAAa;QAChB,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,yBAAyB;QACzD,UAAU,EACR,aAAa,CAAC,UAAU,KAAK,SAAS;YACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC;gBACT,GAAG,EAAE,GAAG,EAAE;oBACR,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;wBAClC,MAAM,IAAI,YAAY,CACpB,cAAc,EACd,yCAAyC,EACzC,EAAE,OAAO,EAAE,eAAe,EAAE,CAC7B,CAAC;oBACJ,OAAO,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;gBACD,KAAK,EAAE,OAAO;aACf,CAAC,CACH,CACF;KACR,EACD,IAAI,CACL;IACH,KAAK,EAAE,OAAO;CACf,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqCzD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,aAAa,GAAkB,EAAE,EACqB,EAAE,CACxD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACvC,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;IACE,GAAG,aAAa;IAChB,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,yBAAyB;IACzD,UAAU,EACR,aAAa,CAAC,UAAU,KAAK,SAAS;QACpC,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;gBAClC,MAAM,YAAY,CAAC,QAAQ,CACzB,cAAc,EACd,yCAAyC,EACzC,EAAE,OAAO,EAAE,eAAe,EAAE,CAC7B,CAAC;YACJ,OAAO,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CACH,CACF;CACR,EACD,IAAI,CACL,CACJ,CACF,CAAC"}
@@ -1,3 +1,18 @@
1
+ /**
2
+ * Request/reply correlation for the Reactor wire.
3
+ *
4
+ * Why not Effect's `RpcClient`: its semantics conflict with this wire. It
5
+ * speaks `RpcMessage` envelopes, which Reactor does not; it drops a late or
6
+ * second reply and deletes a request's entry when its caller is interrupted;
7
+ * its pending map is unbounded; and its error union is closed. Model commands
8
+ * are paid and have no cancel message, so a reply must stay attributable after
9
+ * the caller stops waiting. This correlator therefore keeps a bounded pending
10
+ * set registered before send, tells an acknowledgement from its body, labels
11
+ * late, duplicate, unsolicited and stale-generation replies instead of
12
+ * dropping them, and retires a generation's requests with their outcome
13
+ * preserved. Effect RPC fits only a boundary where both ends are ours, such
14
+ * as an isolated native host process.
15
+ */
1
16
  import * as Effect from "effect/Effect";
2
17
  import * as Deferred from "effect/Deferred";
3
18
  import { ReactorError } from "./errors.js";
@@ -1 +1 @@
1
- {"version":3,"file":"correlation.d.ts","sourceRoot":"","sources":["../src/correlation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACtD,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,MAAM,GACN,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,kBAAkB,CAAC;AAMvB,wFAAwF;AACxF,qBAAa,UAAU,CAAC,CAAC;IAKrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAChC,QAAQ,CAAC,KAAK;IACd,QAAQ,CAAC,SAAS;IANpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,YACW,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,KAAK,SAAM,EACX,SAAS,SAAK,EAGxB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAEhC;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAmB1D;IACD,OAAO,CAAC,QAAQ;IAOhB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,WAAW,CAE1F;IACD,2EAA2E;IAC3E,UAAU,CACR,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EACpE,KAAK,GAAE,cAAc,GAAG,SAAqB,GAC5C,WAAW,CAgCb;IACD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAKnC;IACD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAkB9D;CACF"}
1
+ {"version":3,"file":"correlation.d.ts","sourceRoot":"","sources":["../src/correlation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACtD,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,MAAM,GACN,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,kBAAkB,CAAC;AAMvB,wFAAwF;AACxF,qBAAa,UAAU,CAAC,CAAC;IAKrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAChC,QAAQ,CAAC,KAAK;IACd,QAAQ,CAAC,SAAS;IANpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,YACW,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,KAAK,SAAM,EACX,SAAS,SAAK,EAGxB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAEhC;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAmB1D;IACD,OAAO,CAAC,QAAQ;IAOhB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,WAAW,CAE1F;IACD,2EAA2E;IAC3E,UAAU,CACR,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EACpE,KAAK,GAAE,cAAc,GAAG,SAAqB,GAC5C,WAAW,CAgCb;IACD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAKnC;IACD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAqB9D;CACF"}
@@ -1,3 +1,18 @@
1
+ /**
2
+ * Request/reply correlation for the Reactor wire.
3
+ *
4
+ * Why not Effect's `RpcClient`: its semantics conflict with this wire. It
5
+ * speaks `RpcMessage` envelopes, which Reactor does not; it drops a late or
6
+ * second reply and deletes a request's entry when its caller is interrupted;
7
+ * its pending map is unbounded; and its error union is closed. Model commands
8
+ * are paid and have no cancel message, so a reply must stay attributable after
9
+ * the caller stops waiting. This correlator therefore keeps a bounded pending
10
+ * set registered before send, tells an acknowledgement from its body, labels
11
+ * late, duplicate, unsolicited and stale-generation replies instead of
12
+ * dropping them, and retires a generation's requests with their outcome
13
+ * preserved. Effect RPC fits only a boundary where both ends are ours, such
14
+ * as an isolated native host process.
15
+ */
1
16
  import * as Effect from "effect/Effect";
2
17
  import * as Deferred from "effect/Deferred";
3
18
  import { positiveLimit, ReactorError } from "./errors.js";
@@ -23,12 +38,12 @@ export class Correlator {
23
38
  }
24
39
  register(generation, operation) {
25
40
  if (this.pending.size >= this.limit)
26
- throw new ReactorError("Overflow", "pending request bound reached", {
41
+ throw ReactorError.fromCode("Overflow", "pending request bound reached", {
27
42
  operation,
28
43
  outcome: "not-submitted",
29
44
  });
30
45
  if (this.counter === 0xffffffffffffffffn)
31
- throw new ReactorError("Overflow", "request identity space exhausted");
46
+ throw ReactorError.fromCode("Overflow", "request identity space exhausted");
32
47
  const id = `${this.prefix}_${this.namespace ? `${this.namespace}_` : ""}${++this.counter}`;
33
48
  const pending = {
34
49
  id,
@@ -100,12 +115,15 @@ export class Correlator {
100
115
  continue;
101
116
  this.pending.delete(pending.id);
102
117
  this.remember(pending.id, generation, "cancelled");
103
- Deferred.doneUnsafe(pending.deferred, Effect.fail(new ReactorError(failure.code, failure.message, {
104
- ...failure.context,
105
- operation: pending.operation,
106
- requestId: pending.id,
107
- generation,
108
- outcome: pending.submitted ? "unknown" : "not-submitted",
118
+ Deferred.doneUnsafe(pending.deferred, Effect.fail(new ReactorError({
119
+ reason: failure.reason,
120
+ context: {
121
+ ...failure.context,
122
+ operation: pending.operation,
123
+ requestId: pending.id,
124
+ generation,
125
+ outcome: pending.submitted ? "unknown" : "not-submitted",
126
+ },
109
127
  })));
110
128
  }
111
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../src/correlation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../src/correlation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import * as Duration from "effect/Duration";
2
+ /**
3
+ * What one time option admits beyond a positive, finite duration no longer
4
+ * than `maximum`.
5
+ */
6
+ export interface DurationPolicy {
7
+ /** The longest accepted duration. Omitted, any finite duration is accepted. */
8
+ readonly maximum?: Duration.Input | undefined;
9
+ /** Accept zero. */
10
+ readonly allowZero?: boolean | undefined;
11
+ /** Accept an infinite duration (`"Infinity"`). */
12
+ readonly allowInfinite?: boolean | undefined;
13
+ /** Accept only a whole number of seconds, for a value the wire carries in seconds. */
14
+ readonly wholeSeconds?: boolean | undefined;
15
+ }
16
+ /**
17
+ * Decode a caller's time option, as `Duration.fromInput` does, and apply its
18
+ * policy. A bare number is milliseconds, as everywhere in Effect. Input that
19
+ * does not decode, NaN, a negative duration, and anything the policy excludes
20
+ * throw `InvalidInput`, not submitted; run it under `parsed` or `parsedInput`.
21
+ * NaN is rejected before decoding, because `Duration.fromInput` decodes it as
22
+ * zero.
23
+ */
24
+ export declare const duration: (input: Duration.Input, name: string, policy?: DurationPolicy) => Duration.Duration;
25
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAI5C;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;IAC9C,mBAAmB;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,kDAAkD;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7C,sFAAsF;IACtF,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7C;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,UACZ,QAAQ,CAAC,KAAK,QACf,MAAM,WACJ,cAAc,KACrB,QAAQ,CAAC,QAuBX,CAAC"}
@@ -0,0 +1,47 @@
1
+ import * as Duration from "effect/Duration";
2
+ import * as Option from "effect/Option";
3
+ import { ReactorError } from "./errors.js";
4
+ const containsNaN = (input) => {
5
+ if (typeof input === "number")
6
+ return Number.isNaN(input);
7
+ if (typeof input !== "object" || Duration.isDuration(input))
8
+ return false;
9
+ return Object.values(input).some((value) => typeof value === "number" && Number.isNaN(value));
10
+ };
11
+ /**
12
+ * Decode a caller's time option, as `Duration.fromInput` does, and apply its
13
+ * policy. A bare number is milliseconds, as everywhere in Effect. Input that
14
+ * does not decode, NaN, a negative duration, and anything the policy excludes
15
+ * throw `InvalidInput`, not submitted; run it under `parsed` or `parsedInput`.
16
+ * NaN is rejected before decoding, because `Duration.fromInput` decodes it as
17
+ * zero.
18
+ */
19
+ export const duration = (input, name, policy = {}) => {
20
+ const reject = (requirement) => {
21
+ throw ReactorError.fromCode("InvalidInput", `${name} ${requirement}`, {
22
+ outcome: "not-submitted",
23
+ });
24
+ };
25
+ const decoded = containsNaN(input) ? Option.none() : Duration.fromInput(input);
26
+ if (Option.isNone(decoded))
27
+ return reject("is not a duration");
28
+ const value = decoded.value;
29
+ if (Duration.isNegative(value))
30
+ return reject("must not be negative");
31
+ if (Duration.isZero(value) && policy.allowZero !== true)
32
+ return reject("must be positive");
33
+ if (!Duration.isFinite(value)) {
34
+ if (policy.allowInfinite === true)
35
+ return value;
36
+ return reject("must be finite");
37
+ }
38
+ if (policy.maximum !== undefined) {
39
+ const maximum = Duration.fromInputUnsafe(policy.maximum);
40
+ if (Duration.isGreaterThan(value, maximum))
41
+ return reject(`must be at most ${Duration.format(maximum)}`);
42
+ }
43
+ if (policy.wholeSeconds === true && Duration.toMillis(value) % 1000 !== 0)
44
+ return reject("must be a whole number of seconds");
45
+ return value;
46
+ };
47
+ //# sourceMappingURL=duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.js","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAW,EAAE;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAqB,EACrB,IAAY,EACZ,MAAM,GAAmB,EAAE,EACR,EAAE;IACrB,MAAM,MAAM,GAAG,CAAC,WAAmB,EAAS,EAAE;QAC5C,MAAM,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE,EAAE;YACpE,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3F,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChD,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;YACxC,OAAO,MAAM,CAAC,mBAAmB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QACvE,OAAO,MAAM,CAAC,mCAAmC,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}