@olane/o-node 0.7.12-alpha.41 → 0.7.12-alpha.43

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 (396) hide show
  1. package/dist/src/connection/o-node-connection.manager.d.ts.map +1 -1
  2. package/dist/src/connection/o-node-connection.manager.js +1 -0
  3. package/package.json +6 -6
  4. package/dist/o-core/src/connection/index.d.ts +0 -8
  5. package/dist/o-core/src/connection/index.d.ts.map +0 -1
  6. package/dist/o-core/src/connection/index.js +0 -7
  7. package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts +0 -15
  8. package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts.map +0 -1
  9. package/dist/o-core/src/connection/interfaces/connection-manager.config.js +0 -1
  10. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts +0 -9
  11. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts.map +0 -1
  12. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.js +0 -1
  13. package/dist/o-core/src/connection/interfaces/connection.config.d.ts +0 -20
  14. package/dist/o-core/src/connection/interfaces/connection.config.d.ts.map +0 -1
  15. package/dist/o-core/src/connection/interfaces/connection.config.js +0 -1
  16. package/dist/o-core/src/connection/interfaces/index.d.ts +0 -5
  17. package/dist/o-core/src/connection/interfaces/index.d.ts.map +0 -1
  18. package/dist/o-core/src/connection/interfaces/index.js +0 -4
  19. package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts +0 -7
  20. package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts.map +0 -1
  21. package/dist/o-core/src/connection/interfaces/request-state.enum.js +0 -7
  22. package/dist/o-core/src/connection/o-connection-manager.d.ts +0 -19
  23. package/dist/o-core/src/connection/o-connection-manager.d.ts.map +0 -1
  24. package/dist/o-core/src/connection/o-connection-manager.js +0 -27
  25. package/dist/o-core/src/connection/o-connection.d.ts +0 -26
  26. package/dist/o-core/src/connection/o-connection.d.ts.map +0 -1
  27. package/dist/o-core/src/connection/o-connection.js +0 -54
  28. package/dist/o-core/src/connection/o-request.d.ts +0 -23
  29. package/dist/o-core/src/connection/o-request.d.ts.map +0 -1
  30. package/dist/o-core/src/connection/o-request.js +0 -42
  31. package/dist/o-core/src/connection/o-response.d.ts +0 -13
  32. package/dist/o-core/src/connection/o-response.d.ts.map +0 -1
  33. package/dist/o-core/src/connection/o-response.js +0 -25
  34. package/dist/o-core/src/core/defaults/config.d.ts +0 -4
  35. package/dist/o-core/src/core/defaults/config.d.ts.map +0 -1
  36. package/dist/o-core/src/core/defaults/config.js +0 -5
  37. package/dist/o-core/src/core/defaults/index.d.ts +0 -2
  38. package/dist/o-core/src/core/defaults/index.d.ts.map +0 -1
  39. package/dist/o-core/src/core/defaults/index.js +0 -1
  40. package/dist/o-core/src/core/graceful-shutdown.d.ts +0 -25
  41. package/dist/o-core/src/core/graceful-shutdown.d.ts.map +0 -1
  42. package/dist/o-core/src/core/graceful-shutdown.js +0 -84
  43. package/dist/o-core/src/core/index.d.ts +0 -9
  44. package/dist/o-core/src/core/index.d.ts.map +0 -1
  45. package/dist/o-core/src/core/index.js +0 -8
  46. package/dist/o-core/src/core/interfaces/index.d.ts +0 -7
  47. package/dist/o-core/src/core/interfaces/index.d.ts.map +0 -1
  48. package/dist/o-core/src/core/interfaces/index.js +0 -6
  49. package/dist/o-core/src/core/interfaces/node-type.enum.d.ts +0 -10
  50. package/dist/o-core/src/core/interfaces/node-type.enum.d.ts.map +0 -1
  51. package/dist/o-core/src/core/interfaces/node-type.enum.js +0 -10
  52. package/dist/o-core/src/core/interfaces/o-core.config.d.ts +0 -23
  53. package/dist/o-core/src/core/interfaces/o-core.config.d.ts.map +0 -1
  54. package/dist/o-core/src/core/interfaces/o-core.config.js +0 -1
  55. package/dist/o-core/src/core/interfaces/o-core.interface.d.ts +0 -18
  56. package/dist/o-core/src/core/interfaces/o-core.interface.d.ts.map +0 -1
  57. package/dist/o-core/src/core/interfaces/o-core.interface.js +0 -1
  58. package/dist/o-core/src/core/interfaces/state.enum.d.ts +0 -8
  59. package/dist/o-core/src/core/interfaces/state.enum.d.ts.map +0 -1
  60. package/dist/o-core/src/core/interfaces/state.enum.js +0 -8
  61. package/dist/o-core/src/core/interfaces/use-options.interface.d.ts +0 -11
  62. package/dist/o-core/src/core/interfaces/use-options.interface.d.ts.map +0 -1
  63. package/dist/o-core/src/core/interfaces/use-options.interface.js +0 -1
  64. package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts +0 -4
  65. package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts.map +0 -1
  66. package/dist/o-core/src/core/interfaces/use-stream-options.interface.js +0 -1
  67. package/dist/o-core/src/core/lib/events/connection-events.d.ts +0 -31
  68. package/dist/o-core/src/core/lib/events/connection-events.d.ts.map +0 -1
  69. package/dist/o-core/src/core/lib/events/connection-events.js +0 -46
  70. package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts +0 -69
  71. package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts.map +0 -1
  72. package/dist/o-core/src/core/lib/events/hierarchy-events.js +0 -100
  73. package/dist/o-core/src/core/lib/events/index.d.ts +0 -6
  74. package/dist/o-core/src/core/lib/events/index.d.ts.map +0 -1
  75. package/dist/o-core/src/core/lib/events/index.js +0 -5
  76. package/dist/o-core/src/core/lib/events/node-events.d.ts +0 -40
  77. package/dist/o-core/src/core/lib/events/node-events.d.ts.map +0 -1
  78. package/dist/o-core/src/core/lib/events/node-events.js +0 -58
  79. package/dist/o-core/src/core/lib/events/o-notification-event.d.ts +0 -26
  80. package/dist/o-core/src/core/lib/events/o-notification-event.d.ts.map +0 -1
  81. package/dist/o-core/src/core/lib/events/o-notification-event.js +0 -30
  82. package/dist/o-core/src/core/lib/index.d.ts +0 -8
  83. package/dist/o-core/src/core/lib/index.d.ts.map +0 -1
  84. package/dist/o-core/src/core/lib/index.js +0 -7
  85. package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts +0 -49
  86. package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts.map +0 -1
  87. package/dist/o-core/src/core/lib/interfaces/notification-types.js +0 -1
  88. package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts +0 -24
  89. package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts.map +0 -1
  90. package/dist/o-core/src/core/lib/o-hierarchy.manager.js +0 -58
  91. package/dist/o-core/src/core/lib/o-metrics.d.ts +0 -5
  92. package/dist/o-core/src/core/lib/o-metrics.d.ts.map +0 -1
  93. package/dist/o-core/src/core/lib/o-metrics.js +0 -6
  94. package/dist/o-core/src/core/lib/o-notification.manager.d.ts +0 -58
  95. package/dist/o-core/src/core/lib/o-notification.manager.d.ts.map +0 -1
  96. package/dist/o-core/src/core/lib/o-notification.manager.js +0 -159
  97. package/dist/o-core/src/core/lib/o-request.manager.d.ts +0 -10
  98. package/dist/o-core/src/core/lib/o-request.manager.d.ts.map +0 -1
  99. package/dist/o-core/src/core/lib/o-request.manager.js +0 -18
  100. package/dist/o-core/src/core/lib/utils/event-filters.d.ts +0 -38
  101. package/dist/o-core/src/core/lib/utils/event-filters.d.ts.map +0 -1
  102. package/dist/o-core/src/core/lib/utils/event-filters.js +0 -159
  103. package/dist/o-core/src/core/o-core.d.ts +0 -240
  104. package/dist/o-core/src/core/o-core.d.ts.map +0 -1
  105. package/dist/o-core/src/core/o-core.js +0 -463
  106. package/dist/o-core/src/core/o-dependency.d.ts +0 -9
  107. package/dist/o-core/src/core/o-dependency.d.ts.map +0 -1
  108. package/dist/o-core/src/core/o-dependency.js +0 -15
  109. package/dist/o-core/src/core/o-object.d.ts +0 -7
  110. package/dist/o-core/src/core/o-object.d.ts.map +0 -1
  111. package/dist/o-core/src/core/o-object.js +0 -10
  112. package/dist/o-core/src/core/o-parameter.d.ts +0 -12
  113. package/dist/o-core/src/core/o-parameter.d.ts.map +0 -1
  114. package/dist/o-core/src/core/o-parameter.js +0 -21
  115. package/dist/o-core/src/error/enums/codes.error.d.ts +0 -20
  116. package/dist/o-core/src/error/enums/codes.error.d.ts.map +0 -1
  117. package/dist/o-core/src/error/enums/codes.error.js +0 -20
  118. package/dist/o-core/src/error/index.d.ts +0 -3
  119. package/dist/o-core/src/error/index.d.ts.map +0 -1
  120. package/dist/o-core/src/error/index.js +0 -2
  121. package/dist/o-core/src/error/interfaces/o-error.interface.d.ts +0 -6
  122. package/dist/o-core/src/error/interfaces/o-error.interface.d.ts.map +0 -1
  123. package/dist/o-core/src/error/interfaces/o-error.interface.js +0 -1
  124. package/dist/o-core/src/error/o-error.d.ts +0 -15
  125. package/dist/o-core/src/error/o-error.d.ts.map +0 -1
  126. package/dist/o-core/src/error/o-error.js +0 -27
  127. package/dist/o-core/src/index.d.ts +0 -8
  128. package/dist/o-core/src/index.d.ts.map +0 -1
  129. package/dist/o-core/src/index.js +0 -7
  130. package/dist/o-core/src/response/index.d.ts +0 -2
  131. package/dist/o-core/src/response/index.d.ts.map +0 -1
  132. package/dist/o-core/src/response/index.js +0 -1
  133. package/dist/o-core/src/response/response-builder.d.ts +0 -140
  134. package/dist/o-core/src/response/response-builder.d.ts.map +0 -1
  135. package/dist/o-core/src/response/response-builder.js +0 -190
  136. package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts +0 -8
  137. package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts.map +0 -1
  138. package/dist/o-core/src/router/enums/restricted-addresses.enum.js +0 -13
  139. package/dist/o-core/src/router/index.d.ts +0 -11
  140. package/dist/o-core/src/router/index.d.ts.map +0 -1
  141. package/dist/o-core/src/router/index.js +0 -10
  142. package/dist/o-core/src/router/interfaces/resolve.request.d.ts +0 -10
  143. package/dist/o-core/src/router/interfaces/resolve.request.d.ts.map +0 -1
  144. package/dist/o-core/src/router/interfaces/resolve.request.js +0 -1
  145. package/dist/o-core/src/router/interfaces/route.response.d.ts +0 -8
  146. package/dist/o-core/src/router/interfaces/route.response.d.ts.map +0 -1
  147. package/dist/o-core/src/router/interfaces/route.response.js +0 -1
  148. package/dist/o-core/src/router/o-address-resolver.d.ts +0 -14
  149. package/dist/o-core/src/router/o-address-resolver.d.ts.map +0 -1
  150. package/dist/o-core/src/router/o-address-resolver.js +0 -19
  151. package/dist/o-core/src/router/o-address.d.ts +0 -33
  152. package/dist/o-core/src/router/o-address.d.ts.map +0 -1
  153. package/dist/o-core/src/router/o-address.js +0 -114
  154. package/dist/o-core/src/router/o-request-preparation.d.ts +0 -37
  155. package/dist/o-core/src/router/o-request-preparation.d.ts.map +0 -1
  156. package/dist/o-core/src/router/o-request-preparation.js +0 -75
  157. package/dist/o-core/src/router/o-request.router.d.ts +0 -18
  158. package/dist/o-core/src/router/o-request.router.d.ts.map +0 -1
  159. package/dist/o-core/src/router/o-request.router.js +0 -12
  160. package/dist/o-core/src/router/o-resolver-chain.d.ts +0 -32
  161. package/dist/o-core/src/router/o-resolver-chain.d.ts.map +0 -1
  162. package/dist/o-core/src/router/o-resolver-chain.js +0 -62
  163. package/dist/o-core/src/router/o-router.d.ts +0 -19
  164. package/dist/o-core/src/router/o-router.d.ts.map +0 -1
  165. package/dist/o-core/src/router/o-router.js +0 -14
  166. package/dist/o-core/src/router/o-routing-policy.d.ts +0 -36
  167. package/dist/o-core/src/router/o-routing-policy.d.ts.map +0 -1
  168. package/dist/o-core/src/router/o-routing-policy.js +0 -19
  169. package/dist/o-core/src/streaming/index.d.ts +0 -11
  170. package/dist/o-core/src/streaming/index.d.ts.map +0 -1
  171. package/dist/o-core/src/streaming/index.js +0 -14
  172. package/dist/o-core/src/streaming/protocol-builder.d.ts +0 -62
  173. package/dist/o-core/src/streaming/protocol-builder.d.ts.map +0 -1
  174. package/dist/o-core/src/streaming/protocol-builder.js +0 -93
  175. package/dist/o-core/src/streaming/stream-config.d.ts +0 -36
  176. package/dist/o-core/src/streaming/stream-config.d.ts.map +0 -1
  177. package/dist/o-core/src/streaming/stream-config.js +0 -19
  178. package/dist/o-core/src/streaming/stream-handler.base.d.ts +0 -85
  179. package/dist/o-core/src/streaming/stream-handler.base.d.ts.map +0 -1
  180. package/dist/o-core/src/streaming/stream-handler.base.js +0 -112
  181. package/dist/o-core/src/streaming/stream-transport.interface.d.ts +0 -61
  182. package/dist/o-core/src/streaming/stream-transport.interface.d.ts.map +0 -1
  183. package/dist/o-core/src/streaming/stream-transport.interface.js +0 -10
  184. package/dist/o-core/src/transports/custom.transport.d.ts +0 -6
  185. package/dist/o-core/src/transports/custom.transport.d.ts.map +0 -1
  186. package/dist/o-core/src/transports/custom.transport.js +0 -10
  187. package/dist/o-core/src/transports/index.d.ts +0 -4
  188. package/dist/o-core/src/transports/index.d.ts.map +0 -1
  189. package/dist/o-core/src/transports/index.js +0 -3
  190. package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts +0 -5
  191. package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts.map +0 -1
  192. package/dist/o-core/src/transports/interfaces/transport-type.enum.js +0 -5
  193. package/dist/o-core/src/transports/o-transport.d.ts +0 -10
  194. package/dist/o-core/src/transports/o-transport.d.ts.map +0 -1
  195. package/dist/o-core/src/transports/o-transport.js +0 -16
  196. package/dist/o-core/src/utils/core.utils.d.ts +0 -34
  197. package/dist/o-core/src/utils/core.utils.d.ts.map +0 -1
  198. package/dist/o-core/src/utils/core.utils.js +0 -123
  199. package/dist/o-core/src/utils/index.d.ts +0 -6
  200. package/dist/o-core/src/utils/index.d.ts.map +0 -1
  201. package/dist/o-core/src/utils/index.js +0 -5
  202. package/dist/o-core/src/utils/logger.d.ts +0 -14
  203. package/dist/o-core/src/utils/logger.d.ts.map +0 -1
  204. package/dist/o-core/src/utils/logger.js +0 -31
  205. package/dist/o-core/src/utils/object.utils.d.ts +0 -5
  206. package/dist/o-core/src/utils/object.utils.d.ts.map +0 -1
  207. package/dist/o-core/src/utils/object.utils.js +0 -23
  208. package/dist/o-core/src/utils/regex.utils.d.ts +0 -4
  209. package/dist/o-core/src/utils/regex.utils.d.ts.map +0 -1
  210. package/dist/o-core/src/utils/regex.utils.js +0 -13
  211. package/dist/o-core/src/utils/remote.utils.d.ts +0 -4
  212. package/dist/o-core/src/utils/remote.utils.d.ts.map +0 -1
  213. package/dist/o-core/src/utils/remote.utils.js +0 -5
  214. package/dist/o-core/src/utils/streaming.utils.d.ts +0 -22
  215. package/dist/o-core/src/utils/streaming.utils.d.ts.map +0 -1
  216. package/dist/o-core/src/utils/streaming.utils.js +0 -45
  217. package/dist/o-node/src/connection/index.d.ts +0 -5
  218. package/dist/o-node/src/connection/index.d.ts.map +0 -1
  219. package/dist/o-node/src/connection/index.js +0 -4
  220. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts +0 -6
  221. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts.map +0 -1
  222. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.js +0 -1
  223. package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts +0 -6
  224. package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts.map +0 -1
  225. package/dist/o-node/src/connection/interfaces/o-node-connection.config.js +0 -1
  226. package/dist/o-node/src/connection/o-node-connection.d.ts +0 -13
  227. package/dist/o-node/src/connection/o-node-connection.d.ts.map +0 -1
  228. package/dist/o-node/src/connection/o-node-connection.js +0 -93
  229. package/dist/o-node/src/connection/o-node-connection.manager.d.ts +0 -19
  230. package/dist/o-node/src/connection/o-node-connection.manager.d.ts.map +0 -1
  231. package/dist/o-node/src/connection/o-node-connection.manager.js +0 -65
  232. package/dist/o-node/src/connection/o-stream.request.d.ts +0 -11
  233. package/dist/o-node/src/connection/o-stream.request.d.ts.map +0 -1
  234. package/dist/o-node/src/connection/o-stream.request.js +0 -7
  235. package/dist/o-node/src/index.d.ts +0 -12
  236. package/dist/o-node/src/index.d.ts.map +0 -1
  237. package/dist/o-node/src/index.js +0 -11
  238. package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts +0 -49
  239. package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts.map +0 -1
  240. package/dist/o-node/src/interfaces/i-heartbeatable-node.js +0 -1
  241. package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts +0 -46
  242. package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts.map +0 -1
  243. package/dist/o-node/src/interfaces/i-reconnectable-node.js +0 -1
  244. package/dist/o-node/src/interfaces/o-node.config.d.ts +0 -49
  245. package/dist/o-node/src/interfaces/o-node.config.d.ts.map +0 -1
  246. package/dist/o-node/src/interfaces/o-node.config.js +0 -1
  247. package/dist/o-node/src/interfaces/o-node.tool-config.d.ts +0 -4
  248. package/dist/o-node/src/interfaces/o-node.tool-config.d.ts.map +0 -1
  249. package/dist/o-node/src/interfaces/o-node.tool-config.js +0 -1
  250. package/dist/o-node/src/lib/network-activity.lib.d.ts +0 -1
  251. package/dist/o-node/src/lib/network-activity.lib.d.ts.map +0 -1
  252. package/dist/o-node/src/lib/network-activity.lib.js +0 -34
  253. package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts +0 -63
  254. package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts.map +0 -1
  255. package/dist/o-node/src/managers/o-connection-heartbeat.manager.js +0 -227
  256. package/dist/o-node/src/managers/o-reconnection.manager.d.ts +0 -51
  257. package/dist/o-node/src/managers/o-reconnection.manager.d.ts.map +0 -1
  258. package/dist/o-node/src/managers/o-reconnection.manager.js +0 -266
  259. package/dist/o-node/src/nodes/client.node.d.ts +0 -7
  260. package/dist/o-node/src/nodes/client.node.d.ts.map +0 -1
  261. package/dist/o-node/src/nodes/client.node.js +0 -16
  262. package/dist/o-node/src/nodes/index.d.ts +0 -4
  263. package/dist/o-node/src/nodes/index.d.ts.map +0 -1
  264. package/dist/o-node/src/nodes/index.js +0 -3
  265. package/dist/o-node/src/nodes/server.node.d.ts +0 -7
  266. package/dist/o-node/src/nodes/server.node.d.ts.map +0 -1
  267. package/dist/o-node/src/nodes/server.node.js +0 -20
  268. package/dist/o-node/src/nodes/websocket.node.d.ts +0 -7
  269. package/dist/o-node/src/nodes/websocket.node.d.ts.map +0 -1
  270. package/dist/o-node/src/nodes/websocket.node.js +0 -18
  271. package/dist/o-node/src/o-node.d.ts +0 -72
  272. package/dist/o-node/src/o-node.d.ts.map +0 -1
  273. package/dist/o-node/src/o-node.hierarchy-manager.d.ts +0 -15
  274. package/dist/o-node/src/o-node.hierarchy-manager.d.ts.map +0 -1
  275. package/dist/o-node/src/o-node.hierarchy-manager.js +0 -15
  276. package/dist/o-node/src/o-node.js +0 -493
  277. package/dist/o-node/src/o-node.notification-manager.d.ts +0 -52
  278. package/dist/o-node/src/o-node.notification-manager.d.ts.map +0 -1
  279. package/dist/o-node/src/o-node.notification-manager.js +0 -188
  280. package/dist/o-node/src/o-node.tool.d.ts +0 -18
  281. package/dist/o-node/src/o-node.tool.d.ts.map +0 -1
  282. package/dist/o-node/src/o-node.tool.js +0 -83
  283. package/dist/o-node/src/router/index.d.ts +0 -6
  284. package/dist/o-node/src/router/index.d.ts.map +0 -1
  285. package/dist/o-node/src/router/index.js +0 -5
  286. package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts +0 -3
  287. package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts.map +0 -1
  288. package/dist/o-node/src/router/interfaces/o-node-router.config.js +0 -1
  289. package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts +0 -8
  290. package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts.map +0 -1
  291. package/dist/o-node/src/router/interfaces/o-node-router.response.js +0 -1
  292. package/dist/o-node/src/router/o-node.address.d.ts +0 -18
  293. package/dist/o-node/src/router/o-node.address.d.ts.map +0 -1
  294. package/dist/o-node/src/router/o-node.address.js +0 -29
  295. package/dist/o-node/src/router/o-node.router.d.ts +0 -46
  296. package/dist/o-node/src/router/o-node.router.d.ts.map +0 -1
  297. package/dist/o-node/src/router/o-node.router.js +0 -181
  298. package/dist/o-node/src/router/o-node.routing-policy.d.ts +0 -30
  299. package/dist/o-node/src/router/o-node.routing-policy.d.ts.map +0 -1
  300. package/dist/o-node/src/router/o-node.routing-policy.js +0 -57
  301. package/dist/o-node/src/router/o-node.transport.d.ts +0 -11
  302. package/dist/o-node/src/router/o-node.transport.d.ts.map +0 -1
  303. package/dist/o-node/src/router/o-node.transport.js +0 -18
  304. package/dist/o-node/src/router/resolvers/index.d.ts +0 -4
  305. package/dist/o-node/src/router/resolvers/index.d.ts.map +0 -1
  306. package/dist/o-node/src/router/resolvers/index.js +0 -3
  307. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts +0 -8
  308. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts.map +0 -1
  309. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.js +0 -35
  310. package/dist/o-node/src/router/resolvers/o-node.resolver.d.ts +0 -11
  311. package/dist/o-node/src/router/resolvers/o-node.resolver.d.ts.map +0 -1
  312. package/dist/o-node/src/router/resolvers/o-node.resolver.js +0 -45
  313. package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts +0 -170
  314. package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts.map +0 -1
  315. package/dist/o-node/src/router/resolvers/o-node.search-resolver.js +0 -285
  316. package/dist/o-node/src/router/route.request.d.ts +0 -14
  317. package/dist/o-node/src/router/route.request.d.ts.map +0 -1
  318. package/dist/o-node/src/router/route.request.js +0 -1
  319. package/dist/o-node/src/streaming/index.d.ts +0 -10
  320. package/dist/o-node/src/streaming/index.d.ts.map +0 -1
  321. package/dist/o-node/src/streaming/index.js +0 -12
  322. package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts +0 -50
  323. package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts.map +0 -1
  324. package/dist/o-node/src/streaming/libp2p-stream-transport.js +0 -137
  325. package/dist/o-node/src/streaming/node-stream-handler.d.ts +0 -65
  326. package/dist/o-node/src/streaming/node-stream-handler.d.ts.map +0 -1
  327. package/dist/o-node/src/streaming/node-stream-handler.js +0 -101
  328. package/dist/o-node/src/ui/index.d.ts +0 -3
  329. package/dist/o-node/src/ui/index.d.ts.map +0 -1
  330. package/dist/o-node/src/ui/index.js +0 -2
  331. package/dist/o-node/src/ui/types.d.ts +0 -110
  332. package/dist/o-node/src/ui/types.d.ts.map +0 -1
  333. package/dist/o-node/src/ui/types.js +0 -17
  334. package/dist/o-node/src/ui/ui-graph.manager.d.ts +0 -70
  335. package/dist/o-node/src/ui/ui-graph.manager.d.ts.map +0 -1
  336. package/dist/o-node/src/ui/ui-graph.manager.js +0 -274
  337. package/dist/o-node/src/utils/circuit-breaker.d.ts +0 -107
  338. package/dist/o-node/src/utils/circuit-breaker.d.ts.map +0 -1
  339. package/dist/o-node/src/utils/circuit-breaker.js +0 -175
  340. package/dist/o-node/src/utils/index.d.ts +0 -3
  341. package/dist/o-node/src/utils/index.d.ts.map +0 -1
  342. package/dist/o-node/src/utils/index.js +0 -2
  343. package/dist/o-node/src/utils/leader-request-wrapper.d.ts +0 -66
  344. package/dist/o-node/src/utils/leader-request-wrapper.d.ts.map +0 -1
  345. package/dist/o-node/src/utils/leader-request-wrapper.js +0 -160
  346. package/dist/o-node/src/utils/network.utils.d.ts +0 -20
  347. package/dist/o-node/src/utils/network.utils.d.ts.map +0 -1
  348. package/dist/o-node/src/utils/network.utils.js +0 -74
  349. package/dist/o-node/src/utils/stream.utils.d.ts +0 -6
  350. package/dist/o-node/src/utils/stream.utils.d.ts.map +0 -1
  351. package/dist/o-node/src/utils/stream.utils.js +0 -31
  352. package/dist/o-node/test/circuit-breaker.test.d.ts +0 -2
  353. package/dist/o-node/test/circuit-breaker.test.d.ts.map +0 -1
  354. package/dist/o-node/test/circuit-breaker.test.js +0 -262
  355. package/dist/o-node/test/helpers/test-node.tool.d.ts +0 -15
  356. package/dist/o-node/test/helpers/test-node.tool.d.ts.map +0 -1
  357. package/dist/o-node/test/helpers/test-node.tool.js +0 -27
  358. package/dist/o-node/test/leader-request-wrapper.test.d.ts +0 -1
  359. package/dist/o-node/test/leader-request-wrapper.test.d.ts.map +0 -1
  360. package/dist/o-node/test/leader-request-wrapper.test.js +0 -246
  361. package/dist/o-node/test/o-node.spec.d.ts +0 -2
  362. package/dist/o-node/test/o-node.spec.d.ts.map +0 -1
  363. package/dist/o-node/test/o-node.spec.js +0 -20
  364. package/dist/o-node/test/search-resolver.spec.d.ts +0 -2
  365. package/dist/o-node/test/search-resolver.spec.d.ts.map +0 -1
  366. package/dist/o-node/test/search-resolver.spec.js +0 -693
  367. package/dist/src/streaming/index.d.ts +0 -10
  368. package/dist/src/streaming/index.d.ts.map +0 -1
  369. package/dist/src/streaming/index.js +0 -12
  370. package/dist/src/streaming/libp2p-stream-transport.d.ts +0 -50
  371. package/dist/src/streaming/libp2p-stream-transport.d.ts.map +0 -1
  372. package/dist/src/streaming/libp2p-stream-transport.js +0 -137
  373. package/dist/src/streaming/node-stream-handler.d.ts +0 -65
  374. package/dist/src/streaming/node-stream-handler.d.ts.map +0 -1
  375. package/dist/src/streaming/node-stream-handler.js +0 -101
  376. package/dist/src/streaming/o-node-streaming-client.d.ts +0 -33
  377. package/dist/src/streaming/o-node-streaming-client.d.ts.map +0 -1
  378. package/dist/src/streaming/o-node-streaming-client.js +0 -130
  379. package/dist/src/utils/circuit-breaker.d.ts +0 -107
  380. package/dist/src/utils/circuit-breaker.d.ts.map +0 -1
  381. package/dist/src/utils/circuit-breaker.js +0 -175
  382. package/dist/src/utils/circuit-breaker.test.d.ts +0 -2
  383. package/dist/src/utils/circuit-breaker.test.d.ts.map +0 -1
  384. package/dist/src/utils/circuit-breaker.test.js +0 -262
  385. package/dist/src/utils/leader-request-wrapper.d.ts +0 -66
  386. package/dist/src/utils/leader-request-wrapper.d.ts.map +0 -1
  387. package/dist/src/utils/leader-request-wrapper.js +0 -160
  388. package/dist/src/utils/leader-request-wrapper.test.d.ts +0 -1
  389. package/dist/src/utils/leader-request-wrapper.test.d.ts.map +0 -1
  390. package/dist/src/utils/leader-request-wrapper.test.js +0 -246
  391. package/dist/test/circuit-breaker.test.d.ts +0 -2
  392. package/dist/test/circuit-breaker.test.d.ts.map +0 -1
  393. package/dist/test/circuit-breaker.test.js +0 -262
  394. package/dist/test/leader-request-wrapper.test.d.ts +0 -1
  395. package/dist/test/leader-request-wrapper.test.d.ts.map +0 -1
  396. package/dist/test/leader-request-wrapper.test.js +0 -246
@@ -1,175 +0,0 @@
1
- import { oObject } from '@olane/o-core';
2
- export var CircuitState;
3
- (function (CircuitState) {
4
- CircuitState["CLOSED"] = "CLOSED";
5
- CircuitState["OPEN"] = "OPEN";
6
- CircuitState["HALF_OPEN"] = "HALF_OPEN";
7
- })(CircuitState || (CircuitState = {}));
8
- /**
9
- * Circuit Breaker Pattern Implementation
10
- *
11
- * Prevents cascading failures by "breaking the circuit" when a service
12
- * experiences persistent failures. This allows the system to fail fast
13
- * rather than wasting resources on retries that are likely to fail.
14
- *
15
- * States:
16
- * - CLOSED: Normal operation, all requests pass through
17
- * - OPEN: Circuit broken due to failures, requests fail immediately
18
- * - HALF_OPEN: Testing recovery, limited requests allowed
19
- *
20
- * Flow:
21
- * 1. CLOSED -> OPEN: After N consecutive failures
22
- * 2. OPEN -> HALF_OPEN: After timeout period
23
- * 3. HALF_OPEN -> CLOSED: After successful request
24
- * 4. HALF_OPEN -> OPEN: After failure in recovery
25
- *
26
- * @example
27
- * ```typescript
28
- * const breaker = new CircuitBreaker('registry', {
29
- * failureThreshold: 3,
30
- * openTimeoutMs: 30000,
31
- * halfOpenMaxAttempts: 1,
32
- * enabled: true,
33
- * });
34
- *
35
- * // Before making request
36
- * if (!breaker.shouldAllowRequest()) {
37
- * throw new Error('Circuit breaker is open');
38
- * }
39
- *
40
- * try {
41
- * const result = await makeRequest();
42
- * breaker.recordSuccess();
43
- * return result;
44
- * } catch (error) {
45
- * breaker.recordFailure();
46
- * throw error;
47
- * }
48
- * ```
49
- */
50
- export class CircuitBreaker extends oObject {
51
- constructor(serviceName, config) {
52
- super();
53
- this.serviceName = serviceName;
54
- this.config = config;
55
- this.state = CircuitState.CLOSED;
56
- this.consecutiveFailures = 0;
57
- this.totalFailures = 0;
58
- this.totalSuccesses = 0;
59
- this.halfOpenAttempts = 0;
60
- this.logger.debug(`Circuit breaker initialized for ${serviceName}:`, `threshold=${config.failureThreshold},`, `timeout=${config.openTimeoutMs}ms,`, `enabled=${config.enabled}`);
61
- }
62
- /**
63
- * Check if a request should be allowed through the circuit breaker
64
- * @returns true if request should proceed, false if should fast-fail
65
- */
66
- shouldAllowRequest() {
67
- if (!this.config.enabled) {
68
- return true;
69
- }
70
- const now = Date.now();
71
- switch (this.state) {
72
- case CircuitState.CLOSED:
73
- return true;
74
- case CircuitState.OPEN:
75
- // Check if timeout period has elapsed
76
- if (this.openedAt &&
77
- now - this.openedAt >= this.config.openTimeoutMs) {
78
- this.logger.info(`Circuit breaker for ${this.serviceName} entering HALF_OPEN state`);
79
- this.transitionTo(CircuitState.HALF_OPEN);
80
- this.halfOpenAttempts = 0;
81
- return true;
82
- }
83
- // Circuit still open, fast-fail
84
- this.logger.debug(`Circuit breaker for ${this.serviceName} is OPEN, rejecting request`);
85
- return false;
86
- case CircuitState.HALF_OPEN:
87
- // Allow limited attempts in HALF_OPEN state
88
- if (this.halfOpenAttempts < this.config.halfOpenMaxAttempts) {
89
- this.halfOpenAttempts++;
90
- return true;
91
- }
92
- this.logger.debug(`Circuit breaker for ${this.serviceName} HALF_OPEN max attempts reached`);
93
- return false;
94
- }
95
- }
96
- /**
97
- * Record a successful request
98
- */
99
- recordSuccess() {
100
- if (!this.config.enabled) {
101
- return;
102
- }
103
- this.totalSuccesses++;
104
- this.lastSuccessTime = Date.now();
105
- this.consecutiveFailures = 0;
106
- if (this.state === CircuitState.HALF_OPEN) {
107
- this.logger.info(`Circuit breaker for ${this.serviceName} recovered, closing circuit`);
108
- this.transitionTo(CircuitState.CLOSED);
109
- this.halfOpenAttempts = 0;
110
- }
111
- }
112
- /**
113
- * Record a failed request
114
- */
115
- recordFailure() {
116
- if (!this.config.enabled) {
117
- return;
118
- }
119
- this.totalFailures++;
120
- this.consecutiveFailures++;
121
- this.lastFailureTime = Date.now();
122
- if (this.state === CircuitState.HALF_OPEN) {
123
- this.logger.warn(`Circuit breaker for ${this.serviceName} failed in HALF_OPEN, reopening circuit`);
124
- this.transitionTo(CircuitState.OPEN);
125
- this.openedAt = Date.now();
126
- this.halfOpenAttempts = 0;
127
- return;
128
- }
129
- if (this.state === CircuitState.CLOSED &&
130
- this.consecutiveFailures >= this.config.failureThreshold) {
131
- this.logger.error(`Circuit breaker for ${this.serviceName} opening after ${this.consecutiveFailures} consecutive failures`);
132
- this.transitionTo(CircuitState.OPEN);
133
- this.openedAt = Date.now();
134
- }
135
- }
136
- /**
137
- * Get current statistics
138
- */
139
- getStats() {
140
- return {
141
- state: this.state,
142
- consecutiveFailures: this.consecutiveFailures,
143
- totalFailures: this.totalFailures,
144
- totalSuccesses: this.totalSuccesses,
145
- lastFailureTime: this.lastFailureTime,
146
- lastSuccessTime: this.lastSuccessTime,
147
- openedAt: this.openedAt,
148
- };
149
- }
150
- /**
151
- * Get current circuit state
152
- */
153
- getState() {
154
- return this.state;
155
- }
156
- /**
157
- * Force reset the circuit breaker to CLOSED state
158
- * Use with caution - mainly for testing or manual recovery
159
- */
160
- reset() {
161
- this.logger.info(`Circuit breaker for ${this.serviceName} manually reset`);
162
- this.transitionTo(CircuitState.CLOSED);
163
- this.consecutiveFailures = 0;
164
- this.halfOpenAttempts = 0;
165
- this.openedAt = undefined;
166
- }
167
- /**
168
- * Transition to a new state
169
- */
170
- transitionTo(newState) {
171
- const oldState = this.state;
172
- this.state = newState;
173
- this.logger.debug(`Circuit breaker for ${this.serviceName}: ${oldState} -> ${newState}`);
174
- }
175
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=circuit-breaker.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circuit-breaker.test.d.ts","sourceRoot":"","sources":["../../../src/utils/circuit-breaker.test.ts"],"names":[],"mappings":""}
@@ -1,262 +0,0 @@
1
- import { expect } from 'chai';
2
- import { CircuitBreaker, CircuitState } from './circuit-breaker.js';
3
- describe('CircuitBreaker', () => {
4
- let breaker;
5
- beforeEach(() => {
6
- breaker = new CircuitBreaker('test-service', {
7
- enabled: true,
8
- failureThreshold: 3,
9
- openTimeoutMs: 1000,
10
- halfOpenMaxAttempts: 1,
11
- });
12
- });
13
- describe('State Transitions', () => {
14
- it('should start in CLOSED state', () => {
15
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
16
- expect(breaker.shouldAllowRequest()).to.equal(true);
17
- });
18
- it('should transition to OPEN after threshold failures', () => {
19
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
20
- // Record failures up to threshold
21
- breaker.recordFailure();
22
- breaker.recordFailure();
23
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
24
- // Third failure should open circuit
25
- breaker.recordFailure();
26
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
27
- expect(breaker.shouldAllowRequest()).to.equal(false);
28
- });
29
- it('should transition to HALF_OPEN after timeout', async () => {
30
- // Open the circuit
31
- breaker.recordFailure();
32
- breaker.recordFailure();
33
- breaker.recordFailure();
34
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
35
- // Wait for timeout
36
- await new Promise((resolve) => setTimeout(resolve, 1100));
37
- // Next request should transition to HALF_OPEN
38
- expect(breaker.shouldAllowRequest()).to.equal(true);
39
- expect(breaker.getState()).to.equal(CircuitState.HALF_OPEN);
40
- });
41
- it('should transition from HALF_OPEN to CLOSED on success', async () => {
42
- // Open the circuit
43
- breaker.recordFailure();
44
- breaker.recordFailure();
45
- breaker.recordFailure();
46
- // Wait and transition to HALF_OPEN
47
- await new Promise((resolve) => setTimeout(resolve, 1100));
48
- breaker.shouldAllowRequest();
49
- // Success should close circuit
50
- breaker.recordSuccess();
51
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
52
- });
53
- it('should transition from HALF_OPEN to OPEN on failure', async () => {
54
- // Open the circuit
55
- breaker.recordFailure();
56
- breaker.recordFailure();
57
- breaker.recordFailure();
58
- // Wait and transition to HALF_OPEN
59
- await new Promise((resolve) => setTimeout(resolve, 1100));
60
- breaker.shouldAllowRequest();
61
- expect(breaker.getState()).to.equal(CircuitState.HALF_OPEN);
62
- // Failure should reopen circuit
63
- breaker.recordFailure();
64
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
65
- });
66
- });
67
- describe('Request Gating', () => {
68
- it('should allow all requests in CLOSED state', () => {
69
- expect(breaker.shouldAllowRequest()).to.equal(true);
70
- expect(breaker.shouldAllowRequest()).to.equal(true);
71
- });
72
- it('should block all requests in OPEN state', () => {
73
- // Open the circuit
74
- breaker.recordFailure();
75
- breaker.recordFailure();
76
- breaker.recordFailure();
77
- expect(breaker.shouldAllowRequest()).to.equal(false);
78
- });
79
- it('should limit requests in HALF_OPEN state', async () => {
80
- // Open the circuit
81
- breaker.recordFailure();
82
- breaker.recordFailure();
83
- breaker.recordFailure();
84
- // Wait and transition to HALF_OPEN
85
- await new Promise((resolve) => setTimeout(resolve, 1100));
86
- // First request allowed
87
- expect(breaker.shouldAllowRequest()).to.equal(true);
88
- expect(breaker.getState()).to.equal(CircuitState.HALF_OPEN);
89
- // Subsequent requests blocked until result recorded
90
- expect(breaker.shouldAllowRequest()).to.equal(false);
91
- });
92
- });
93
- describe('Failure Tracking', () => {
94
- it('should track consecutive failures', () => {
95
- breaker.recordFailure();
96
- expect(breaker.getStats().consecutiveFailures).to.equal(1);
97
- breaker.recordFailure();
98
- expect(breaker.getStats().consecutiveFailures).to.equal(2);
99
- breaker.recordFailure();
100
- expect(breaker.getStats().consecutiveFailures).to.equal(3);
101
- });
102
- it('should reset consecutive failures on success', () => {
103
- breaker.recordFailure();
104
- breaker.recordFailure();
105
- expect(breaker.getStats().consecutiveFailures).to.equal(2);
106
- breaker.recordSuccess();
107
- expect(breaker.getStats().consecutiveFailures).to.equal(0);
108
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
109
- });
110
- it('should track total failures and successes', () => {
111
- breaker.recordFailure();
112
- breaker.recordSuccess();
113
- breaker.recordFailure();
114
- breaker.recordSuccess();
115
- const stats = breaker.getStats();
116
- expect(stats.totalFailures).to.equal(2);
117
- expect(stats.totalSuccesses).to.equal(2);
118
- });
119
- it('should track timestamps', () => {
120
- const beforeFailure = Date.now();
121
- breaker.recordFailure();
122
- const afterFailure = Date.now();
123
- const stats = breaker.getStats();
124
- expect(stats.lastFailureTime).greaterThanOrEqual(beforeFailure);
125
- expect(stats.lastFailureTime).lessThanOrEqual(afterFailure);
126
- const beforeSuccess = Date.now();
127
- breaker.recordSuccess();
128
- const afterSuccess = Date.now();
129
- const stats2 = breaker.getStats();
130
- expect(stats2.lastSuccessTime).greaterThanOrEqual(beforeSuccess);
131
- expect(stats2.lastSuccessTime).lessThanOrEqual(afterSuccess);
132
- });
133
- });
134
- describe('Configuration', () => {
135
- it('should respect custom failure threshold', () => {
136
- const customBreaker = new CircuitBreaker('test', {
137
- enabled: true,
138
- failureThreshold: 5,
139
- openTimeoutMs: 1000,
140
- halfOpenMaxAttempts: 1,
141
- });
142
- // Should not open before threshold
143
- customBreaker.recordFailure();
144
- customBreaker.recordFailure();
145
- customBreaker.recordFailure();
146
- customBreaker.recordFailure();
147
- expect(customBreaker.getState()).to.equal(CircuitState.CLOSED);
148
- // Should open at threshold
149
- customBreaker.recordFailure();
150
- expect(customBreaker.getState()).to.equal(CircuitState.OPEN);
151
- });
152
- it('should respect custom half-open attempts', async () => {
153
- const customBreaker = new CircuitBreaker('test', {
154
- enabled: true,
155
- failureThreshold: 2,
156
- openTimeoutMs: 100,
157
- halfOpenMaxAttempts: 3,
158
- });
159
- // Open circuit
160
- customBreaker.recordFailure();
161
- customBreaker.recordFailure();
162
- // Wait for timeout
163
- await new Promise((resolve) => setTimeout(resolve, 150));
164
- // Should allow 3 attempts in HALF_OPEN
165
- expect(customBreaker.shouldAllowRequest()).to.equal(true);
166
- expect(customBreaker.shouldAllowRequest()).to.equal(true);
167
- expect(customBreaker.shouldAllowRequest()).to.equal(true);
168
- expect(customBreaker.shouldAllowRequest()).to.equal(false);
169
- });
170
- it('should bypass all logic when disabled', () => {
171
- const disabledBreaker = new CircuitBreaker('test', {
172
- enabled: false,
173
- failureThreshold: 1,
174
- openTimeoutMs: 1000,
175
- halfOpenMaxAttempts: 1,
176
- });
177
- // Record many failures
178
- disabledBreaker.recordFailure();
179
- disabledBreaker.recordFailure();
180
- disabledBreaker.recordFailure();
181
- // Should still allow requests
182
- expect(disabledBreaker.shouldAllowRequest()).to.equal(true);
183
- expect(disabledBreaker.getState()).to.equal(CircuitState.CLOSED);
184
- });
185
- });
186
- describe('Manual Control', () => {
187
- it('should reset to CLOSED state', () => {
188
- // Open circuit
189
- breaker.recordFailure();
190
- breaker.recordFailure();
191
- breaker.recordFailure();
192
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
193
- // Reset
194
- breaker.reset();
195
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
196
- expect(breaker.getStats().consecutiveFailures).to.equal(0);
197
- expect(breaker.shouldAllowRequest()).to.equal(true);
198
- });
199
- });
200
- describe('Statistics', () => {
201
- it('should provide comprehensive stats', () => {
202
- breaker.recordFailure();
203
- breaker.recordFailure();
204
- breaker.recordSuccess();
205
- const stats = breaker.getStats();
206
- expect(stats).to.have.property('state');
207
- expect(stats).to.have.property('consecutiveFailures');
208
- expect(stats).to.have.property('totalFailures');
209
- expect(stats).to.have.property('totalSuccesses');
210
- expect(stats).to.have.property('lastFailureTime');
211
- expect(stats).to.have.property('lastSuccessTime');
212
- expect(stats).to.have.property('openedAt');
213
- expect(stats.state).to.equal(CircuitState.CLOSED);
214
- expect(stats.consecutiveFailures).to.equal(0);
215
- expect(stats.totalFailures).to.equal(2);
216
- expect(stats.totalSuccesses).to.equal(1);
217
- });
218
- it('should track openedAt timestamp', () => {
219
- const before = Date.now();
220
- breaker.recordFailure();
221
- breaker.recordFailure();
222
- breaker.recordFailure();
223
- const after = Date.now();
224
- const stats = breaker.getStats();
225
- expect(stats.openedAt).greaterThanOrEqual(before);
226
- expect(stats.openedAt).lessThanOrEqual(after);
227
- });
228
- });
229
- describe('Edge Cases', () => {
230
- it('should handle rapid state transitions', async () => {
231
- // Open
232
- breaker.recordFailure();
233
- breaker.recordFailure();
234
- breaker.recordFailure();
235
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
236
- // Wait for HALF_OPEN
237
- await new Promise((resolve) => setTimeout(resolve, 1100));
238
- breaker.shouldAllowRequest();
239
- expect(breaker.getState()).to.equal(CircuitState.HALF_OPEN);
240
- // Close
241
- breaker.recordSuccess();
242
- expect(breaker.getState()).to.equal(CircuitState.CLOSED);
243
- // Open again
244
- breaker.recordFailure();
245
- breaker.recordFailure();
246
- breaker.recordFailure();
247
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
248
- });
249
- it('should not open before timeout expires in OPEN state', async () => {
250
- // Open circuit
251
- breaker.recordFailure();
252
- breaker.recordFailure();
253
- breaker.recordFailure();
254
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
255
- // Wait less than timeout
256
- await new Promise((resolve) => setTimeout(resolve, 500));
257
- // Should still be closed
258
- expect(breaker.shouldAllowRequest()).to.equal(false);
259
- expect(breaker.getState()).to.equal(CircuitState.OPEN);
260
- });
261
- });
262
- });
@@ -1,66 +0,0 @@
1
- import { oObject, oAddress } from '@olane/o-core';
2
- import { CircuitBreakerConfig } from './circuit-breaker.js';
3
- export interface LeaderRetryConfig {
4
- enabled: boolean;
5
- maxAttempts: number;
6
- baseDelayMs: number;
7
- maxDelayMs: number;
8
- timeoutMs: number;
9
- circuitBreaker?: CircuitBreakerConfig;
10
- }
11
- /**
12
- * Leader Request Wrapper
13
- *
14
- * Wraps requests to leader/registry with retry logic and circuit breaker.
15
- * Used when leader may be temporarily unavailable (healing, maintenance).
16
- *
17
- * Strategy:
18
- * 1. Detect if request is to leader or registry
19
- * 2. Check circuit breaker state (fast-fail if open)
20
- * 3. Apply retry logic with exponential backoff
21
- * 4. Timeout individual attempts
22
- * 5. Record success/failure in circuit breaker
23
- * 6. Log retries for observability
24
- */
25
- export declare class LeaderRequestWrapper extends oObject {
26
- private config;
27
- private leaderCircuitBreaker;
28
- private registryCircuitBreaker;
29
- constructor(config: LeaderRetryConfig);
30
- /**
31
- * Check if address is a leader-related address that needs retry
32
- */
33
- private isLeaderAddress;
34
- /**
35
- * Get the appropriate circuit breaker for the address
36
- */
37
- private getCircuitBreaker;
38
- /**
39
- * Execute request with retry logic and circuit breaker
40
- */
41
- execute<T>(requestFn: () => Promise<T>, address: oAddress, context?: string): Promise<T>;
42
- /**
43
- * Calculate exponential backoff delay
44
- */
45
- private calculateBackoffDelay;
46
- /**
47
- * Sleep utility
48
- */
49
- private sleep;
50
- /**
51
- * Get current configuration
52
- */
53
- getConfig(): LeaderRetryConfig;
54
- /**
55
- * Get circuit breaker statistics for observability
56
- */
57
- getCircuitBreakerStats(): {
58
- leader: import("./circuit-breaker.js").CircuitStats;
59
- registry: import("./circuit-breaker.js").CircuitStats;
60
- };
61
- /**
62
- * Reset circuit breakers (for testing or manual recovery)
63
- */
64
- resetCircuitBreakers(): void;
65
- }
66
- //# sourceMappingURL=leader-request-wrapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"leader-request-wrapper.d.ts","sourceRoot":"","sources":["../../../src/utils/leader-request-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAC;AACvE,OAAO,EAEL,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,OAAO;IAInC,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,oBAAoB,CAAiB;IAC7C,OAAO,CAAC,sBAAsB,CAAiB;gBAE3B,MAAM,EAAE,iBAAiB;IAuB7C;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,QAAQ,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;IA2Gb;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;OAEG;IACH,sBAAsB;;;;IAOtB;;OAEG;IACH,oBAAoB,IAAI,IAAI;CAI7B"}
@@ -1,160 +0,0 @@
1
- import { oObject } from '@olane/o-core';
2
- import { CircuitBreaker, CircuitState, } from './circuit-breaker.js';
3
- /**
4
- * Leader Request Wrapper
5
- *
6
- * Wraps requests to leader/registry with retry logic and circuit breaker.
7
- * Used when leader may be temporarily unavailable (healing, maintenance).
8
- *
9
- * Strategy:
10
- * 1. Detect if request is to leader or registry
11
- * 2. Check circuit breaker state (fast-fail if open)
12
- * 3. Apply retry logic with exponential backoff
13
- * 4. Timeout individual attempts
14
- * 5. Record success/failure in circuit breaker
15
- * 6. Log retries for observability
16
- */
17
- export class LeaderRequestWrapper extends oObject {
18
- constructor(config) {
19
- super();
20
- this.config = config;
21
- // Initialize circuit breakers with defaults if not provided
22
- const defaultCircuitBreakerConfig = {
23
- failureThreshold: 3,
24
- openTimeoutMs: 30000, // 30 seconds
25
- halfOpenMaxAttempts: 1,
26
- enabled: true,
27
- };
28
- const circuitConfig = {
29
- ...defaultCircuitBreakerConfig,
30
- ...(config.circuitBreaker || {}),
31
- };
32
- this.leaderCircuitBreaker = new CircuitBreaker('leader', circuitConfig);
33
- this.registryCircuitBreaker = new CircuitBreaker('registry', circuitConfig);
34
- }
35
- /**
36
- * Check if address is a leader-related address that needs retry
37
- */
38
- isLeaderAddress(address) {
39
- const addressStr = address.toString();
40
- return addressStr === 'o://leader' || addressStr === 'o://registry';
41
- }
42
- /**
43
- * Get the appropriate circuit breaker for the address
44
- */
45
- getCircuitBreaker(address) {
46
- const addressStr = address.toString();
47
- if (addressStr === 'o://leader') {
48
- return this.leaderCircuitBreaker;
49
- }
50
- if (addressStr === 'o://registry') {
51
- return this.registryCircuitBreaker;
52
- }
53
- return null;
54
- }
55
- /**
56
- * Execute request with retry logic and circuit breaker
57
- */
58
- async execute(requestFn, address, context) {
59
- // If retry disabled or not a leader address, execute directly
60
- if (!this.config.enabled || !this.isLeaderAddress(address)) {
61
- return await requestFn();
62
- }
63
- const circuitBreaker = this.getCircuitBreaker(address);
64
- // Check circuit breaker state before attempting
65
- if (circuitBreaker && !circuitBreaker.shouldAllowRequest()) {
66
- const stats = circuitBreaker.getStats();
67
- const error = new Error(`Circuit breaker is ${stats.state} for ${address.toString()}. ` +
68
- `Consecutive failures: ${stats.consecutiveFailures}. ` +
69
- `Fast-failing to prevent cascading failures.`);
70
- this.logger.warn(`Circuit breaker blocked request to ${address.toString()}` +
71
- (context ? ` (${context})` : ''));
72
- throw error;
73
- }
74
- let attempt = 0;
75
- let lastError;
76
- while (attempt < this.config.maxAttempts) {
77
- attempt++;
78
- try {
79
- if (attempt > 5) {
80
- this.logger.debug(`Retrying... Leader request attempt ${attempt}/${this.config.maxAttempts}` +
81
- (context ? ` (${context})` : ''));
82
- }
83
- // Create timeout promise
84
- const timeoutPromise = new Promise((_, reject) => {
85
- setTimeout(() => reject(new Error(`Leader request timeout after ${this.config.timeoutMs}ms`)), this.config.timeoutMs);
86
- });
87
- // Race between request and timeout
88
- const result = await Promise.race([requestFn(), timeoutPromise]);
89
- // Success! Record in circuit breaker
90
- if (circuitBreaker) {
91
- circuitBreaker.recordSuccess();
92
- }
93
- if (attempt > 1) {
94
- this.logger.info(`Leader request succeeded after ${attempt} attempts` +
95
- (context ? ` (${context})` : ''));
96
- }
97
- return result;
98
- }
99
- catch (error) {
100
- lastError = error instanceof Error ? error : new Error(String(error));
101
- // Record failure in circuit breaker
102
- if (circuitBreaker) {
103
- circuitBreaker.recordFailure();
104
- }
105
- this.logger.warn(`Leader request attempt ${attempt} failed: ${lastError.message}` +
106
- (context ? ` (${context})` : ''));
107
- // Check if circuit breaker has opened during retries
108
- if (circuitBreaker && circuitBreaker.getState() === CircuitState.OPEN) {
109
- this.logger.error(`Circuit breaker opened during retries for ${address.toString()}, stopping retry attempts` +
110
- (context ? ` (${context})` : ''));
111
- throw new Error(`Circuit breaker opened after ${attempt} attempts: ${lastError.message}`);
112
- }
113
- if (attempt < this.config.maxAttempts) {
114
- const delay = this.calculateBackoffDelay(attempt);
115
- this.logger.debug(`Waiting ${delay}ms before next attempt...`);
116
- await this.sleep(delay);
117
- }
118
- }
119
- }
120
- // All attempts failed
121
- this.logger.error(`Leader request failed after ${this.config.maxAttempts} attempts` +
122
- (context ? ` (${context})` : ''));
123
- throw lastError || new Error('Leader request failed');
124
- }
125
- /**
126
- * Calculate exponential backoff delay
127
- */
128
- calculateBackoffDelay(attempt) {
129
- const delay = this.config.baseDelayMs * Math.pow(2, attempt - 1);
130
- return Math.min(delay, this.config.maxDelayMs);
131
- }
132
- /**
133
- * Sleep utility
134
- */
135
- sleep(ms) {
136
- return new Promise((resolve) => setTimeout(resolve, ms));
137
- }
138
- /**
139
- * Get current configuration
140
- */
141
- getConfig() {
142
- return { ...this.config };
143
- }
144
- /**
145
- * Get circuit breaker statistics for observability
146
- */
147
- getCircuitBreakerStats() {
148
- return {
149
- leader: this.leaderCircuitBreaker.getStats(),
150
- registry: this.registryCircuitBreaker.getStats(),
151
- };
152
- }
153
- /**
154
- * Reset circuit breakers (for testing or manual recovery)
155
- */
156
- resetCircuitBreakers() {
157
- this.leaderCircuitBreaker.reset();
158
- this.registryCircuitBreaker.reset();
159
- }
160
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=leader-request-wrapper.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"leader-request-wrapper.test.d.ts","sourceRoot":"","sources":["../../../src/utils/leader-request-wrapper.test.ts"],"names":[],"mappings":""}