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

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 (448) hide show
  1. package/dist/o-core/src/connection/index.d.ts +8 -0
  2. package/dist/o-core/src/connection/index.d.ts.map +1 -0
  3. package/dist/o-core/src/connection/index.js +7 -0
  4. package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts +15 -0
  5. package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts.map +1 -0
  6. package/dist/o-core/src/connection/interfaces/connection-manager.config.js +1 -0
  7. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts +9 -0
  8. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts.map +1 -0
  9. package/dist/o-core/src/connection/interfaces/connection-send-params.interface.js +1 -0
  10. package/dist/o-core/src/connection/interfaces/connection.config.d.ts +20 -0
  11. package/dist/o-core/src/connection/interfaces/connection.config.d.ts.map +1 -0
  12. package/dist/o-core/src/connection/interfaces/connection.config.js +1 -0
  13. package/dist/o-core/src/connection/interfaces/index.d.ts +5 -0
  14. package/dist/o-core/src/connection/interfaces/index.d.ts.map +1 -0
  15. package/dist/o-core/src/connection/interfaces/index.js +4 -0
  16. package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts +7 -0
  17. package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts.map +1 -0
  18. package/dist/o-core/src/connection/interfaces/request-state.enum.js +7 -0
  19. package/dist/o-core/src/connection/o-connection-manager.d.ts +19 -0
  20. package/dist/o-core/src/connection/o-connection-manager.d.ts.map +1 -0
  21. package/dist/o-core/src/connection/o-connection-manager.js +27 -0
  22. package/dist/o-core/src/connection/o-connection.d.ts +26 -0
  23. package/dist/o-core/src/connection/o-connection.d.ts.map +1 -0
  24. package/dist/o-core/src/connection/o-connection.js +54 -0
  25. package/dist/o-core/src/connection/o-request.d.ts +23 -0
  26. package/dist/o-core/src/connection/o-request.d.ts.map +1 -0
  27. package/dist/o-core/src/connection/o-request.js +42 -0
  28. package/dist/o-core/src/connection/o-response.d.ts +13 -0
  29. package/dist/o-core/src/connection/o-response.d.ts.map +1 -0
  30. package/dist/o-core/src/connection/o-response.js +25 -0
  31. package/dist/o-core/src/core/defaults/config.d.ts +4 -0
  32. package/dist/o-core/src/core/defaults/config.d.ts.map +1 -0
  33. package/dist/o-core/src/core/defaults/config.js +5 -0
  34. package/dist/o-core/src/core/defaults/index.d.ts +2 -0
  35. package/dist/o-core/src/core/defaults/index.d.ts.map +1 -0
  36. package/dist/o-core/src/core/defaults/index.js +1 -0
  37. package/dist/o-core/src/core/graceful-shutdown.d.ts +25 -0
  38. package/dist/o-core/src/core/graceful-shutdown.d.ts.map +1 -0
  39. package/dist/o-core/src/core/graceful-shutdown.js +84 -0
  40. package/dist/o-core/src/core/index.d.ts +9 -0
  41. package/dist/o-core/src/core/index.d.ts.map +1 -0
  42. package/dist/o-core/src/core/index.js +8 -0
  43. package/dist/o-core/src/core/interfaces/index.d.ts +7 -0
  44. package/dist/o-core/src/core/interfaces/index.d.ts.map +1 -0
  45. package/dist/o-core/src/core/interfaces/index.js +6 -0
  46. package/dist/o-core/src/core/interfaces/node-type.enum.d.ts +10 -0
  47. package/dist/o-core/src/core/interfaces/node-type.enum.d.ts.map +1 -0
  48. package/dist/o-core/src/core/interfaces/node-type.enum.js +10 -0
  49. package/dist/o-core/src/core/interfaces/o-core.config.d.ts +23 -0
  50. package/dist/o-core/src/core/interfaces/o-core.config.d.ts.map +1 -0
  51. package/dist/o-core/src/core/interfaces/o-core.config.js +1 -0
  52. package/dist/o-core/src/core/interfaces/o-core.interface.d.ts +18 -0
  53. package/dist/o-core/src/core/interfaces/o-core.interface.d.ts.map +1 -0
  54. package/dist/o-core/src/core/interfaces/o-core.interface.js +1 -0
  55. package/dist/o-core/src/core/interfaces/state.enum.d.ts +8 -0
  56. package/dist/o-core/src/core/interfaces/state.enum.d.ts.map +1 -0
  57. package/dist/o-core/src/core/interfaces/state.enum.js +8 -0
  58. package/dist/o-core/src/core/interfaces/use-options.interface.d.ts +11 -0
  59. package/dist/o-core/src/core/interfaces/use-options.interface.d.ts.map +1 -0
  60. package/dist/o-core/src/core/interfaces/use-options.interface.js +1 -0
  61. package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts +4 -0
  62. package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts.map +1 -0
  63. package/dist/o-core/src/core/interfaces/use-stream-options.interface.js +1 -0
  64. package/dist/o-core/src/core/lib/events/connection-events.d.ts +31 -0
  65. package/dist/o-core/src/core/lib/events/connection-events.d.ts.map +1 -0
  66. package/dist/o-core/src/core/lib/events/connection-events.js +46 -0
  67. package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts +69 -0
  68. package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts.map +1 -0
  69. package/dist/o-core/src/core/lib/events/hierarchy-events.js +100 -0
  70. package/dist/o-core/src/core/lib/events/index.d.ts +6 -0
  71. package/dist/o-core/src/core/lib/events/index.d.ts.map +1 -0
  72. package/dist/o-core/src/core/lib/events/index.js +5 -0
  73. package/dist/o-core/src/core/lib/events/node-events.d.ts +40 -0
  74. package/dist/o-core/src/core/lib/events/node-events.d.ts.map +1 -0
  75. package/dist/o-core/src/core/lib/events/node-events.js +58 -0
  76. package/dist/o-core/src/core/lib/events/o-notification-event.d.ts +26 -0
  77. package/dist/o-core/src/core/lib/events/o-notification-event.d.ts.map +1 -0
  78. package/dist/o-core/src/core/lib/events/o-notification-event.js +30 -0
  79. package/dist/o-core/src/core/lib/index.d.ts +8 -0
  80. package/dist/o-core/src/core/lib/index.d.ts.map +1 -0
  81. package/dist/o-core/src/core/lib/index.js +7 -0
  82. package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts +49 -0
  83. package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts.map +1 -0
  84. package/dist/o-core/src/core/lib/interfaces/notification-types.js +1 -0
  85. package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts +24 -0
  86. package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts.map +1 -0
  87. package/dist/o-core/src/core/lib/o-hierarchy.manager.js +58 -0
  88. package/dist/o-core/src/core/lib/o-metrics.d.ts +5 -0
  89. package/dist/o-core/src/core/lib/o-metrics.d.ts.map +1 -0
  90. package/dist/o-core/src/core/lib/o-metrics.js +6 -0
  91. package/dist/o-core/src/core/lib/o-notification.manager.d.ts +58 -0
  92. package/dist/o-core/src/core/lib/o-notification.manager.d.ts.map +1 -0
  93. package/dist/o-core/src/core/lib/o-notification.manager.js +159 -0
  94. package/dist/o-core/src/core/lib/o-request.manager.d.ts +10 -0
  95. package/dist/o-core/src/core/lib/o-request.manager.d.ts.map +1 -0
  96. package/dist/o-core/src/core/lib/o-request.manager.js +18 -0
  97. package/dist/o-core/src/core/lib/utils/event-filters.d.ts +38 -0
  98. package/dist/o-core/src/core/lib/utils/event-filters.d.ts.map +1 -0
  99. package/dist/o-core/src/core/lib/utils/event-filters.js +159 -0
  100. package/dist/o-core/src/core/o-core.d.ts +240 -0
  101. package/dist/o-core/src/core/o-core.d.ts.map +1 -0
  102. package/dist/o-core/src/core/o-core.js +463 -0
  103. package/dist/o-core/src/core/o-dependency.d.ts +9 -0
  104. package/dist/o-core/src/core/o-dependency.d.ts.map +1 -0
  105. package/dist/o-core/src/core/o-dependency.js +15 -0
  106. package/dist/o-core/src/core/o-object.d.ts +7 -0
  107. package/dist/o-core/src/core/o-object.d.ts.map +1 -0
  108. package/dist/o-core/src/core/o-object.js +10 -0
  109. package/dist/o-core/src/core/o-parameter.d.ts +12 -0
  110. package/dist/o-core/src/core/o-parameter.d.ts.map +1 -0
  111. package/dist/o-core/src/core/o-parameter.js +21 -0
  112. package/dist/o-core/src/error/enums/codes.error.d.ts +20 -0
  113. package/dist/o-core/src/error/enums/codes.error.d.ts.map +1 -0
  114. package/dist/o-core/src/error/enums/codes.error.js +20 -0
  115. package/dist/o-core/src/error/index.d.ts +3 -0
  116. package/dist/o-core/src/error/index.d.ts.map +1 -0
  117. package/dist/o-core/src/error/index.js +2 -0
  118. package/dist/o-core/src/error/interfaces/o-error.interface.d.ts +6 -0
  119. package/dist/o-core/src/error/interfaces/o-error.interface.d.ts.map +1 -0
  120. package/dist/o-core/src/error/interfaces/o-error.interface.js +1 -0
  121. package/dist/o-core/src/error/o-error.d.ts +15 -0
  122. package/dist/o-core/src/error/o-error.d.ts.map +1 -0
  123. package/dist/o-core/src/error/o-error.js +27 -0
  124. package/dist/o-core/src/index.d.ts +8 -0
  125. package/dist/o-core/src/index.d.ts.map +1 -0
  126. package/dist/o-core/src/index.js +7 -0
  127. package/dist/o-core/src/response/index.d.ts +2 -0
  128. package/dist/o-core/src/response/index.d.ts.map +1 -0
  129. package/dist/o-core/src/response/index.js +1 -0
  130. package/dist/o-core/src/response/response-builder.d.ts +140 -0
  131. package/dist/o-core/src/response/response-builder.d.ts.map +1 -0
  132. package/dist/o-core/src/response/response-builder.js +190 -0
  133. package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts +8 -0
  134. package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts.map +1 -0
  135. package/dist/o-core/src/router/enums/restricted-addresses.enum.js +13 -0
  136. package/dist/o-core/src/router/index.d.ts +11 -0
  137. package/dist/o-core/src/router/index.d.ts.map +1 -0
  138. package/dist/o-core/src/router/index.js +10 -0
  139. package/dist/o-core/src/router/interfaces/resolve.request.d.ts +10 -0
  140. package/dist/o-core/src/router/interfaces/resolve.request.d.ts.map +1 -0
  141. package/dist/o-core/src/router/interfaces/resolve.request.js +1 -0
  142. package/dist/o-core/src/router/interfaces/route.response.d.ts +8 -0
  143. package/dist/o-core/src/router/interfaces/route.response.d.ts.map +1 -0
  144. package/dist/o-core/src/router/interfaces/route.response.js +1 -0
  145. package/dist/o-core/src/router/o-address-resolver.d.ts +14 -0
  146. package/dist/o-core/src/router/o-address-resolver.d.ts.map +1 -0
  147. package/dist/o-core/src/router/o-address-resolver.js +19 -0
  148. package/dist/o-core/src/router/o-address.d.ts +33 -0
  149. package/dist/o-core/src/router/o-address.d.ts.map +1 -0
  150. package/dist/o-core/src/router/o-address.js +114 -0
  151. package/dist/o-core/src/router/o-request-preparation.d.ts +37 -0
  152. package/dist/o-core/src/router/o-request-preparation.d.ts.map +1 -0
  153. package/dist/o-core/src/router/o-request-preparation.js +75 -0
  154. package/dist/o-core/src/router/o-request.router.d.ts +18 -0
  155. package/dist/o-core/src/router/o-request.router.d.ts.map +1 -0
  156. package/dist/o-core/src/router/o-request.router.js +12 -0
  157. package/dist/o-core/src/router/o-resolver-chain.d.ts +32 -0
  158. package/dist/o-core/src/router/o-resolver-chain.d.ts.map +1 -0
  159. package/dist/o-core/src/router/o-resolver-chain.js +62 -0
  160. package/dist/o-core/src/router/o-router.d.ts +19 -0
  161. package/dist/o-core/src/router/o-router.d.ts.map +1 -0
  162. package/dist/o-core/src/router/o-router.js +14 -0
  163. package/dist/o-core/src/router/o-routing-policy.d.ts +36 -0
  164. package/dist/o-core/src/router/o-routing-policy.d.ts.map +1 -0
  165. package/dist/o-core/src/router/o-routing-policy.js +19 -0
  166. package/dist/o-core/src/streaming/index.d.ts +11 -0
  167. package/dist/o-core/src/streaming/index.d.ts.map +1 -0
  168. package/dist/o-core/src/streaming/index.js +14 -0
  169. package/dist/o-core/src/streaming/protocol-builder.d.ts +62 -0
  170. package/dist/o-core/src/streaming/protocol-builder.d.ts.map +1 -0
  171. package/dist/o-core/src/streaming/protocol-builder.js +93 -0
  172. package/dist/o-core/src/streaming/stream-config.d.ts +36 -0
  173. package/dist/o-core/src/streaming/stream-config.d.ts.map +1 -0
  174. package/dist/o-core/src/streaming/stream-config.js +19 -0
  175. package/dist/o-core/src/streaming/stream-handler.base.d.ts +85 -0
  176. package/dist/o-core/src/streaming/stream-handler.base.d.ts.map +1 -0
  177. package/dist/o-core/src/streaming/stream-handler.base.js +112 -0
  178. package/dist/o-core/src/streaming/stream-transport.interface.d.ts +61 -0
  179. package/dist/o-core/src/streaming/stream-transport.interface.d.ts.map +1 -0
  180. package/dist/o-core/src/streaming/stream-transport.interface.js +10 -0
  181. package/dist/o-core/src/transports/custom.transport.d.ts +6 -0
  182. package/dist/o-core/src/transports/custom.transport.d.ts.map +1 -0
  183. package/dist/o-core/src/transports/custom.transport.js +10 -0
  184. package/dist/o-core/src/transports/index.d.ts +4 -0
  185. package/dist/o-core/src/transports/index.d.ts.map +1 -0
  186. package/dist/o-core/src/transports/index.js +3 -0
  187. package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts +5 -0
  188. package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts.map +1 -0
  189. package/dist/o-core/src/transports/interfaces/transport-type.enum.js +5 -0
  190. package/dist/o-core/src/transports/o-transport.d.ts +10 -0
  191. package/dist/o-core/src/transports/o-transport.d.ts.map +1 -0
  192. package/dist/o-core/src/transports/o-transport.js +16 -0
  193. package/dist/o-core/src/utils/core.utils.d.ts +34 -0
  194. package/dist/o-core/src/utils/core.utils.d.ts.map +1 -0
  195. package/dist/o-core/src/utils/core.utils.js +123 -0
  196. package/dist/o-core/src/utils/index.d.ts +6 -0
  197. package/dist/o-core/src/utils/index.d.ts.map +1 -0
  198. package/dist/o-core/src/utils/index.js +5 -0
  199. package/dist/o-core/src/utils/logger.d.ts +14 -0
  200. package/dist/o-core/src/utils/logger.d.ts.map +1 -0
  201. package/dist/o-core/src/utils/logger.js +31 -0
  202. package/dist/o-core/src/utils/object.utils.d.ts +5 -0
  203. package/dist/o-core/src/utils/object.utils.d.ts.map +1 -0
  204. package/dist/o-core/src/utils/object.utils.js +23 -0
  205. package/dist/o-core/src/utils/regex.utils.d.ts +4 -0
  206. package/dist/o-core/src/utils/regex.utils.d.ts.map +1 -0
  207. package/dist/o-core/src/utils/regex.utils.js +13 -0
  208. package/dist/o-core/src/utils/remote.utils.d.ts +4 -0
  209. package/dist/o-core/src/utils/remote.utils.d.ts.map +1 -0
  210. package/dist/o-core/src/utils/remote.utils.js +5 -0
  211. package/dist/o-core/src/utils/streaming.utils.d.ts +22 -0
  212. package/dist/o-core/src/utils/streaming.utils.d.ts.map +1 -0
  213. package/dist/o-core/src/utils/streaming.utils.js +45 -0
  214. package/dist/o-node/src/connection/index.d.ts +5 -0
  215. package/dist/o-node/src/connection/index.d.ts.map +1 -0
  216. package/dist/o-node/src/connection/index.js +4 -0
  217. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts +6 -0
  218. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts.map +1 -0
  219. package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.js +1 -0
  220. package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts +6 -0
  221. package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts.map +1 -0
  222. package/dist/o-node/src/connection/interfaces/o-node-connection.config.js +1 -0
  223. package/dist/o-node/src/connection/o-node-connection.d.ts +13 -0
  224. package/dist/o-node/src/connection/o-node-connection.d.ts.map +1 -0
  225. package/dist/o-node/src/connection/o-node-connection.js +93 -0
  226. package/dist/o-node/src/connection/o-node-connection.manager.d.ts +19 -0
  227. package/dist/o-node/src/connection/o-node-connection.manager.d.ts.map +1 -0
  228. package/dist/o-node/src/connection/o-node-connection.manager.js +65 -0
  229. package/dist/o-node/src/connection/o-stream.request.d.ts +11 -0
  230. package/dist/o-node/src/connection/o-stream.request.d.ts.map +1 -0
  231. package/dist/o-node/src/connection/o-stream.request.js +7 -0
  232. package/dist/o-node/src/index.d.ts +12 -0
  233. package/dist/o-node/src/index.d.ts.map +1 -0
  234. package/dist/o-node/src/index.js +11 -0
  235. package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts +49 -0
  236. package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts.map +1 -0
  237. package/dist/o-node/src/interfaces/i-heartbeatable-node.js +1 -0
  238. package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts +46 -0
  239. package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts.map +1 -0
  240. package/dist/o-node/src/interfaces/i-reconnectable-node.js +1 -0
  241. package/dist/o-node/src/interfaces/o-node.config.d.ts +49 -0
  242. package/dist/o-node/src/interfaces/o-node.config.d.ts.map +1 -0
  243. package/dist/o-node/src/interfaces/o-node.config.js +1 -0
  244. package/dist/o-node/src/interfaces/o-node.tool-config.d.ts +4 -0
  245. package/dist/o-node/src/interfaces/o-node.tool-config.d.ts.map +1 -0
  246. package/dist/o-node/src/interfaces/o-node.tool-config.js +1 -0
  247. package/dist/o-node/src/lib/network-activity.lib.d.ts +1 -0
  248. package/dist/o-node/src/lib/network-activity.lib.d.ts.map +1 -0
  249. package/dist/o-node/src/lib/network-activity.lib.js +34 -0
  250. package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts +63 -0
  251. package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts.map +1 -0
  252. package/dist/o-node/src/managers/o-connection-heartbeat.manager.js +227 -0
  253. package/dist/o-node/src/managers/o-reconnection.manager.d.ts +51 -0
  254. package/dist/o-node/src/managers/o-reconnection.manager.d.ts.map +1 -0
  255. package/dist/o-node/src/managers/o-reconnection.manager.js +266 -0
  256. package/dist/o-node/src/nodes/client.node.d.ts +7 -0
  257. package/dist/o-node/src/nodes/client.node.d.ts.map +1 -0
  258. package/dist/o-node/src/nodes/client.node.js +16 -0
  259. package/dist/o-node/src/nodes/index.d.ts +4 -0
  260. package/dist/o-node/src/nodes/index.d.ts.map +1 -0
  261. package/dist/o-node/src/nodes/index.js +3 -0
  262. package/dist/o-node/src/nodes/server.node.d.ts +7 -0
  263. package/dist/o-node/src/nodes/server.node.d.ts.map +1 -0
  264. package/dist/o-node/src/nodes/server.node.js +20 -0
  265. package/dist/o-node/src/nodes/websocket.node.d.ts +7 -0
  266. package/dist/o-node/src/nodes/websocket.node.d.ts.map +1 -0
  267. package/dist/o-node/src/nodes/websocket.node.js +18 -0
  268. package/dist/o-node/src/o-node.d.ts +72 -0
  269. package/dist/o-node/src/o-node.d.ts.map +1 -0
  270. package/dist/o-node/src/o-node.hierarchy-manager.d.ts +15 -0
  271. package/dist/o-node/src/o-node.hierarchy-manager.d.ts.map +1 -0
  272. package/dist/o-node/src/o-node.hierarchy-manager.js +15 -0
  273. package/dist/o-node/src/o-node.js +493 -0
  274. package/dist/o-node/src/o-node.notification-manager.d.ts +52 -0
  275. package/dist/o-node/src/o-node.notification-manager.d.ts.map +1 -0
  276. package/dist/o-node/src/o-node.notification-manager.js +188 -0
  277. package/dist/o-node/src/o-node.tool.d.ts +18 -0
  278. package/dist/o-node/src/o-node.tool.d.ts.map +1 -0
  279. package/dist/o-node/src/o-node.tool.js +83 -0
  280. package/dist/o-node/src/router/index.d.ts +6 -0
  281. package/dist/o-node/src/router/index.d.ts.map +1 -0
  282. package/dist/o-node/src/router/index.js +5 -0
  283. package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts +3 -0
  284. package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts.map +1 -0
  285. package/dist/o-node/src/router/interfaces/o-node-router.config.js +1 -0
  286. package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts +8 -0
  287. package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts.map +1 -0
  288. package/dist/o-node/src/router/interfaces/o-node-router.response.js +1 -0
  289. package/dist/o-node/src/router/o-node.address.d.ts +18 -0
  290. package/dist/o-node/src/router/o-node.address.d.ts.map +1 -0
  291. package/dist/o-node/src/router/o-node.address.js +29 -0
  292. package/dist/o-node/src/router/o-node.router.d.ts +46 -0
  293. package/dist/o-node/src/router/o-node.router.d.ts.map +1 -0
  294. package/dist/o-node/src/router/o-node.router.js +181 -0
  295. package/dist/o-node/src/router/o-node.routing-policy.d.ts +30 -0
  296. package/dist/o-node/src/router/o-node.routing-policy.d.ts.map +1 -0
  297. package/dist/o-node/src/router/o-node.routing-policy.js +57 -0
  298. package/dist/o-node/src/router/o-node.transport.d.ts +11 -0
  299. package/dist/o-node/src/router/o-node.transport.d.ts.map +1 -0
  300. package/dist/o-node/src/router/o-node.transport.js +18 -0
  301. package/dist/o-node/src/router/resolvers/index.d.ts +4 -0
  302. package/dist/o-node/src/router/resolvers/index.d.ts.map +1 -0
  303. package/dist/o-node/src/router/resolvers/index.js +3 -0
  304. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts +8 -0
  305. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts.map +1 -0
  306. package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.js +35 -0
  307. package/dist/{src/router/resolvers/o-node.child-resolver.d.ts → o-node/src/router/resolvers/o-node.resolver.d.ts} +2 -2
  308. package/dist/o-node/src/router/resolvers/o-node.resolver.d.ts.map +1 -0
  309. package/dist/o-node/src/router/resolvers/o-node.resolver.js +45 -0
  310. package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts +170 -0
  311. package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts.map +1 -0
  312. package/dist/o-node/src/router/resolvers/o-node.search-resolver.js +285 -0
  313. package/dist/o-node/src/router/route.request.d.ts +14 -0
  314. package/dist/o-node/src/router/route.request.d.ts.map +1 -0
  315. package/dist/o-node/src/router/route.request.js +1 -0
  316. package/dist/o-node/src/streaming/index.d.ts +10 -0
  317. package/dist/o-node/src/streaming/index.d.ts.map +1 -0
  318. package/dist/o-node/src/streaming/index.js +12 -0
  319. package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts +50 -0
  320. package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts.map +1 -0
  321. package/dist/o-node/src/streaming/libp2p-stream-transport.js +137 -0
  322. package/dist/o-node/src/streaming/node-stream-handler.d.ts +65 -0
  323. package/dist/o-node/src/streaming/node-stream-handler.d.ts.map +1 -0
  324. package/dist/o-node/src/streaming/node-stream-handler.js +101 -0
  325. package/dist/o-node/src/ui/index.d.ts +3 -0
  326. package/dist/o-node/src/ui/index.d.ts.map +1 -0
  327. package/dist/o-node/src/ui/index.js +2 -0
  328. package/dist/o-node/src/ui/types.d.ts +110 -0
  329. package/dist/o-node/src/ui/types.d.ts.map +1 -0
  330. package/dist/o-node/src/ui/types.js +17 -0
  331. package/dist/o-node/src/ui/ui-graph.manager.d.ts +70 -0
  332. package/dist/o-node/src/ui/ui-graph.manager.d.ts.map +1 -0
  333. package/dist/o-node/src/ui/ui-graph.manager.js +274 -0
  334. package/dist/o-node/src/utils/circuit-breaker.d.ts +107 -0
  335. package/dist/o-node/src/utils/circuit-breaker.d.ts.map +1 -0
  336. package/dist/o-node/src/utils/circuit-breaker.js +175 -0
  337. package/dist/o-node/src/utils/index.d.ts +3 -0
  338. package/dist/o-node/src/utils/index.d.ts.map +1 -0
  339. package/dist/o-node/src/utils/index.js +2 -0
  340. package/dist/o-node/src/utils/leader-request-wrapper.d.ts +66 -0
  341. package/dist/o-node/src/utils/leader-request-wrapper.d.ts.map +1 -0
  342. package/dist/o-node/src/utils/leader-request-wrapper.js +160 -0
  343. package/dist/o-node/src/utils/network.utils.d.ts +20 -0
  344. package/dist/o-node/src/utils/network.utils.d.ts.map +1 -0
  345. package/dist/o-node/src/utils/network.utils.js +74 -0
  346. package/dist/o-node/src/utils/stream.utils.d.ts +6 -0
  347. package/dist/o-node/src/utils/stream.utils.d.ts.map +1 -0
  348. package/dist/o-node/src/utils/stream.utils.js +31 -0
  349. package/dist/o-node/test/circuit-breaker.test.d.ts +2 -0
  350. package/dist/o-node/test/circuit-breaker.test.d.ts.map +1 -0
  351. package/dist/o-node/test/circuit-breaker.test.js +262 -0
  352. package/dist/o-node/test/helpers/test-node.tool.d.ts +15 -0
  353. package/dist/o-node/test/helpers/test-node.tool.d.ts.map +1 -0
  354. package/dist/o-node/test/helpers/test-node.tool.js +27 -0
  355. package/dist/o-node/test/leader-request-wrapper.test.d.ts +1 -0
  356. package/dist/o-node/test/leader-request-wrapper.test.d.ts.map +1 -0
  357. package/dist/o-node/test/leader-request-wrapper.test.js +246 -0
  358. package/dist/o-node/test/o-node.spec.d.ts +2 -0
  359. package/dist/o-node/test/o-node.spec.d.ts.map +1 -0
  360. package/dist/o-node/test/o-node.spec.js +20 -0
  361. package/dist/o-node/test/search-resolver.spec.d.ts +2 -0
  362. package/dist/o-node/test/search-resolver.spec.d.ts.map +1 -0
  363. package/dist/o-node/test/search-resolver.spec.js +693 -0
  364. package/dist/src/connection/o-node-connection.d.ts +2 -2
  365. package/dist/src/connection/o-node-connection.d.ts.map +1 -1
  366. package/dist/src/connection/o-node-connection.js +54 -19
  367. package/dist/src/connection/o-node-connection.manager.d.ts +16 -4
  368. package/dist/src/connection/o-node-connection.manager.d.ts.map +1 -1
  369. package/dist/src/connection/o-node-connection.manager.js +73 -44
  370. package/dist/src/connection/o-stream.request.d.ts +11 -0
  371. package/dist/src/connection/o-stream.request.d.ts.map +1 -0
  372. package/dist/src/connection/o-stream.request.js +7 -0
  373. package/dist/src/index.d.ts +2 -1
  374. package/dist/src/index.d.ts.map +1 -1
  375. package/dist/src/index.js +2 -1
  376. package/dist/src/interfaces/i-heartbeatable-node.d.ts +49 -0
  377. package/dist/src/interfaces/i-heartbeatable-node.d.ts.map +1 -0
  378. package/dist/src/interfaces/i-heartbeatable-node.js +1 -0
  379. package/dist/src/interfaces/i-reconnectable-node.d.ts +46 -0
  380. package/dist/src/interfaces/i-reconnectable-node.d.ts.map +1 -0
  381. package/dist/src/interfaces/i-reconnectable-node.js +1 -0
  382. package/dist/src/interfaces/o-node.config.d.ts +42 -0
  383. package/dist/src/interfaces/o-node.config.d.ts.map +1 -1
  384. package/dist/src/managers/o-connection-heartbeat.manager.d.ts +63 -0
  385. package/dist/src/managers/o-connection-heartbeat.manager.d.ts.map +1 -0
  386. package/dist/src/managers/o-connection-heartbeat.manager.js +227 -0
  387. package/dist/src/managers/o-reconnection.manager.d.ts +51 -0
  388. package/dist/src/managers/o-reconnection.manager.d.ts.map +1 -0
  389. package/dist/src/managers/o-reconnection.manager.js +266 -0
  390. package/dist/src/o-node.d.ts +30 -2
  391. package/dist/src/o-node.d.ts.map +1 -1
  392. package/dist/src/o-node.js +244 -33
  393. package/dist/src/o-node.notification-manager.d.ts +52 -0
  394. package/dist/src/o-node.notification-manager.d.ts.map +1 -0
  395. package/dist/src/o-node.notification-manager.js +188 -0
  396. package/dist/src/o-node.tool.d.ts.map +1 -1
  397. package/dist/src/o-node.tool.js +33 -24
  398. package/dist/src/router/o-node.router.d.ts +1 -0
  399. package/dist/src/router/o-node.router.d.ts.map +1 -1
  400. package/dist/src/router/o-node.router.js +61 -5
  401. package/dist/src/router/o-node.routing-policy.d.ts.map +1 -1
  402. package/dist/src/router/o-node.routing-policy.js +7 -2
  403. package/dist/src/router/resolvers/o-node.resolver.d.ts.map +1 -1
  404. package/dist/src/router/resolvers/o-node.resolver.js +5 -1
  405. package/dist/src/router/resolvers/o-node.search-resolver.d.ts.map +1 -1
  406. package/dist/src/router/resolvers/o-node.search-resolver.js +34 -9
  407. package/dist/src/streaming/index.d.ts +10 -0
  408. package/dist/src/streaming/index.d.ts.map +1 -0
  409. package/dist/src/streaming/index.js +12 -0
  410. package/dist/src/streaming/libp2p-stream-transport.d.ts +50 -0
  411. package/dist/src/streaming/libp2p-stream-transport.d.ts.map +1 -0
  412. package/dist/src/streaming/libp2p-stream-transport.js +137 -0
  413. package/dist/src/streaming/node-stream-handler.d.ts +65 -0
  414. package/dist/src/streaming/node-stream-handler.d.ts.map +1 -0
  415. package/dist/src/streaming/node-stream-handler.js +101 -0
  416. package/dist/src/streaming/o-node-streaming-client.d.ts +33 -0
  417. package/dist/src/streaming/o-node-streaming-client.d.ts.map +1 -0
  418. package/dist/src/streaming/o-node-streaming-client.js +130 -0
  419. package/dist/src/utils/circuit-breaker.d.ts +107 -0
  420. package/dist/src/utils/circuit-breaker.d.ts.map +1 -0
  421. package/dist/src/utils/circuit-breaker.js +175 -0
  422. package/dist/src/utils/circuit-breaker.test.d.ts +2 -0
  423. package/dist/src/utils/circuit-breaker.test.d.ts.map +1 -0
  424. package/dist/src/utils/circuit-breaker.test.js +262 -0
  425. package/dist/src/utils/index.d.ts +3 -0
  426. package/dist/src/utils/index.d.ts.map +1 -0
  427. package/dist/src/utils/index.js +2 -0
  428. package/dist/src/utils/leader-request-wrapper.d.ts +66 -0
  429. package/dist/src/utils/leader-request-wrapper.d.ts.map +1 -0
  430. package/dist/src/utils/leader-request-wrapper.js +160 -0
  431. package/dist/src/utils/leader-request-wrapper.test.d.ts +1 -0
  432. package/dist/src/utils/leader-request-wrapper.test.d.ts.map +1 -0
  433. package/dist/src/utils/leader-request-wrapper.test.js +246 -0
  434. package/dist/src/utils/stream.utils.d.ts +6 -0
  435. package/dist/src/utils/stream.utils.d.ts.map +1 -0
  436. package/dist/src/utils/stream.utils.js +31 -0
  437. package/dist/test/circuit-breaker.test.d.ts +2 -0
  438. package/dist/test/circuit-breaker.test.d.ts.map +1 -0
  439. package/dist/test/circuit-breaker.test.js +262 -0
  440. package/dist/test/helpers/test-node.tool.d.ts +15 -0
  441. package/dist/test/helpers/test-node.tool.d.ts.map +1 -0
  442. package/dist/test/helpers/test-node.tool.js +27 -0
  443. package/dist/test/leader-request-wrapper.test.d.ts +1 -0
  444. package/dist/test/leader-request-wrapper.test.d.ts.map +1 -0
  445. package/dist/test/leader-request-wrapper.test.js +246 -0
  446. package/package.json +6 -6
  447. package/dist/src/router/resolvers/o-node.child-resolver.d.ts.map +0 -1
  448. package/dist/src/router/resolvers/o-node.child-resolver.js +0 -58
@@ -9,6 +9,9 @@ import { oNodeConnectionManager } from './connection/o-node-connection.manager.j
9
9
  import { oNodeResolver } from './router/resolvers/o-node.resolver.js';
10
10
  import { oMethodResolver, oToolBase } from '@olane/o-tool';
11
11
  import { oLeaderResolverFallback } from './router/index.js';
12
+ import { oNodeNotificationManager } from './o-node.notification-manager.js';
13
+ import { oConnectionHeartbeatManager } from './managers/o-connection-heartbeat.manager.js';
14
+ import { oReconnectionManager } from './managers/o-reconnection.manager.js';
12
15
  export class oNode extends oToolBase {
13
16
  constructor(config) {
14
17
  super(config);
@@ -43,6 +46,9 @@ export class oNode extends oToolBase {
43
46
  });
44
47
  this.router = new oNodeRouter();
45
48
  }
49
+ createNotificationManager() {
50
+ return new oNodeNotificationManager(this.p2pNode, this.hierarchyManager, this.address);
51
+ }
46
52
  get staticAddress() {
47
53
  return this.config.address;
48
54
  }
@@ -60,6 +66,30 @@ export class oNode extends oToolBase {
60
66
  this.logger.debug('Skipping unregistration, node is leader');
61
67
  return;
62
68
  }
69
+ // Notify parent we're stopping (best-effort, 2s timeout)
70
+ if (this.config.parent) {
71
+ try {
72
+ await Promise.race([
73
+ this.use(this.config.parent, {
74
+ method: 'notify',
75
+ params: {
76
+ eventType: 'node:stopping',
77
+ eventData: {
78
+ address: this.address.toString(),
79
+ reason: 'graceful_shutdown',
80
+ expectedDowntime: null,
81
+ },
82
+ source: this.address.toString(),
83
+ },
84
+ }),
85
+ new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 2000)),
86
+ ]);
87
+ this.logger.debug('Notified parent of shutdown');
88
+ }
89
+ catch (error) {
90
+ this.logger.warn('Failed to notify parent (will be detected by heartbeat):', error instanceof Error ? error.message : error);
91
+ }
92
+ }
63
93
  if (!this.config.leader) {
64
94
  this.logger.debug('No leader found, skipping unregistration');
65
95
  return;
@@ -72,18 +102,30 @@ export class oNode extends oToolBase {
72
102
  peerId: this.peerId.toString(),
73
103
  },
74
104
  };
75
- await this.use(address, params);
105
+ this.use(address, params).catch((error) => {
106
+ this.logger.error('Failed to unregister from network:', error);
107
+ });
76
108
  }
77
109
  async registerParent() {
78
110
  if (this.type === NodeType.LEADER) {
79
111
  this.logger.debug('Skipping parent registration, node is leader');
80
112
  return;
81
113
  }
114
+ if (!this.parent?.libp2pTransports?.length) {
115
+ this.logger.debug('Parent has no transports, waiting for reconnection & leader ack');
116
+ if (this.parent?.toString() === oAddress.leader().toString()) {
117
+ this.parent.setTransports(this.leader?.libp2pTransports || []);
118
+ }
119
+ else {
120
+ this.logger.debug('Waiting for parent and reconnecting...');
121
+ await this.reconnectionManager?.waitForParentAndReconnect();
122
+ }
123
+ }
82
124
  // if no parent transports, register with the parent to get them
83
125
  // TODO: should we remove the transports check to make this more consistent?
84
- if (this.config.parent && this.config.parent.transports.length === 0) {
85
- this.logger.debug('Registering node with parent...', this.config.parent);
86
- const parentRegistration = await this.use(this.config.parent, {
126
+ if (this.config.parent) {
127
+ this.logger.debug('Registering node with parent...', this.config.parent?.toString());
128
+ await this.use(this.config.parent, {
87
129
  method: 'child_register',
88
130
  params: {
89
131
  address: this.address.toString(),
@@ -92,11 +134,22 @@ export class oNode extends oToolBase {
92
134
  _token: this.config.joinToken,
93
135
  },
94
136
  });
95
- const { parentTransports } = parentRegistration.result.data;
96
- // update the parent transports
97
- this.config.parent.setTransports(parentTransports.map((t) => new oNodeTransport(t)));
98
137
  }
99
138
  }
139
+ async registerLeader() {
140
+ const address = oAddress.registry();
141
+ const params = {
142
+ method: 'commit',
143
+ params: {
144
+ peerId: this.peerId.toString(),
145
+ address: this.address.toString(),
146
+ protocols: this.p2pNode.getProtocols(),
147
+ transports: this.transports,
148
+ staticAddress: this.staticAddress.toString(),
149
+ },
150
+ };
151
+ await this.use(address, params);
152
+ }
100
153
  async register() {
101
154
  if (this.type === NodeType.LEADER) {
102
155
  this.logger.debug('Skipping registration, node is leader');
@@ -117,18 +170,7 @@ export class oNode extends oToolBase {
117
170
  this.logger.debug('Registering node with leader...');
118
171
  }
119
172
  await this.registerParent();
120
- const address = oAddress.registry();
121
- const params = {
122
- method: 'commit',
123
- params: {
124
- peerId: this.peerId.toString(),
125
- address: this.address.toString(),
126
- protocols: this.p2pNode.getProtocols(),
127
- transports: this.transports,
128
- staticAddress: this.staticAddress.toString(),
129
- },
130
- };
131
- await this.use(address, params);
173
+ await this.registerLeader();
132
174
  this.logger.debug('Registration successful');
133
175
  }
134
176
  extractMethod(address) {
@@ -136,11 +178,10 @@ export class oNode extends oToolBase {
136
178
  }
137
179
  async start() {
138
180
  await super.start();
139
- // await NetworkUtils.advertiseToNetwork(
140
- // this.address,
141
- // this.staticAddress,
142
- // this.p2pNode,
143
- // );
181
+ // Start heartbeat after node is running
182
+ if (this.connectionHeartbeatManager) {
183
+ await this.connectionHeartbeatManager.start();
184
+ }
144
185
  }
145
186
  async validateJoinRequest(request) {
146
187
  return true;
@@ -190,12 +231,32 @@ export class oNode extends oToolBase {
190
231
  // ];
191
232
  // // let's make sure we only allow communication through the parent transports
192
233
  params.connectionGater = {
234
+ denyDialPeer: (peerId) => {
235
+ // we can call the leader
236
+ if (this.config.leader?.libp2pTransports.some((t) => t.toPeerId() === peerId.toString())) {
237
+ return false;
238
+ }
239
+ // we can call our parent
240
+ if (this.parentPeerId === peerId.toString()) {
241
+ return false;
242
+ }
243
+ // we can call our children
244
+ if (this.hierarchyManager.children.some((c) => c.libp2pTransports.some((t) => t.toPeerId() === peerId.toString()))) {
245
+ return false;
246
+ }
247
+ // check for standalone node
248
+ if (!this.config.parent && !this.config.leader) {
249
+ return false;
250
+ }
251
+ return true;
252
+ },
193
253
  // who can call us?
194
254
  denyInboundEncryptedConnection: (peerId, maConn) => {
195
255
  // deny all inbound connections unless they are from a parent transport
196
256
  if (this.parentPeerId === peerId.toString()) {
197
257
  return false;
198
258
  }
259
+ // allow connections from children (for ping)
199
260
  if (this.hierarchyManager.children.some((c) => c.libp2pTransports.some((t) => t.toPeerId() === peerId.toString()))) {
200
261
  return false;
201
262
  }
@@ -223,17 +284,13 @@ export class oNode extends oToolBase {
223
284
  this.p2pNode = await createNode(params);
224
285
  return this.p2pNode;
225
286
  }
226
- async connect(nextHopAddress, targetAddress) {
287
+ async connect(config) {
227
288
  if (!this.connectionManager) {
228
289
  this.logger.error('Connection manager not initialized');
229
290
  throw new Error('Node is not ready to connect to other nodes');
230
291
  }
231
292
  const connection = await this.connectionManager
232
- .connect({
233
- address: targetAddress,
234
- nextHopAddress,
235
- callerAddress: this.address,
236
- })
293
+ .connect(config)
237
294
  .catch((error) => {
238
295
  // TODO: we need to handle this better and document
239
296
  if (error.message === 'Can not dial self') {
@@ -246,6 +303,42 @@ export class oNode extends oToolBase {
246
303
  }
247
304
  return connection;
248
305
  }
306
+ async initConnectionManager() {
307
+ this.connectionManager = new oNodeConnectionManager({
308
+ p2pNode: this.p2pNode,
309
+ defaultReadTimeoutMs: this.config.connectionTimeouts?.readTimeoutMs,
310
+ defaultDrainTimeoutMs: this.config.connectionTimeouts?.drainTimeoutMs,
311
+ });
312
+ }
313
+ async initReconnectionManager() {
314
+ // Initialize reconnection manager
315
+ if (this.config.reconnection?.enabled !== false) {
316
+ this.reconnectionManager = new oReconnectionManager(this, {
317
+ enabled: true,
318
+ maxAttempts: this.config.reconnection?.maxAttempts ?? 10,
319
+ baseDelayMs: this.config.reconnection?.baseDelayMs ?? 5000,
320
+ maxDelayMs: this.config.reconnection?.maxDelayMs ?? 60000,
321
+ useLeaderFallback: this.config.reconnection?.useLeaderFallback ?? true,
322
+ parentDiscoveryIntervalMs: this.config.reconnection?.parentDiscoveryIntervalMs ?? 10000,
323
+ parentDiscoveryMaxDelayMs: this.config.reconnection?.parentDiscoveryMaxDelayMs ?? 60000,
324
+ });
325
+ }
326
+ }
327
+ async hookInitializeFinished() { }
328
+ async hookStartFinished() {
329
+ // Initialize connection heartbeat manager
330
+ this.connectionHeartbeatManager = new oConnectionHeartbeatManager(this, {
331
+ enabled: this.config.connectionHeartbeat?.enabled ?? true,
332
+ intervalMs: this.config.connectionHeartbeat?.intervalMs ?? 15000,
333
+ timeoutMs: this.config.connectionHeartbeat?.timeoutMs ?? 15000,
334
+ failureThreshold: this.config.connectionHeartbeat?.failureThreshold ?? 3,
335
+ checkChildren: this.config.connectionHeartbeat?.checkChildren ?? false,
336
+ checkParent: this.config.connectionHeartbeat?.checkParent ?? true,
337
+ checkLeader: true,
338
+ });
339
+ this.logger.info(`Connection heartbeat config: leader=${this.connectionHeartbeatManager.getConfig().checkLeader}, ` +
340
+ `parent=${this.connectionHeartbeatManager.getConfig().checkParent}`);
341
+ }
249
342
  async initialize() {
250
343
  this.logger.debug('Initializing node...');
251
344
  if (this.p2pNode && this.state !== NodeState.STOPPED) {
@@ -256,13 +349,13 @@ export class oNode extends oToolBase {
256
349
  }
257
350
  await this.createNode();
258
351
  await this.initializeRouter();
352
+ // need to wait until our libpp2 node is initialized before calling super.initialize
353
+ await super.initialize();
259
354
  this.logger.debug('Node initialized!', this.transports.map((t) => t.toString()));
260
355
  this.address.setTransports(this.transports);
261
356
  this.peerId = this.p2pNode.peerId;
262
357
  // initialize connection manager
263
- this.connectionManager = new oNodeConnectionManager({
264
- p2pNode: this.p2pNode,
265
- });
358
+ await this.initConnectionManager();
266
359
  // initialize address resolution
267
360
  this.router.addResolver(new oMethodResolver(this.address));
268
361
  this.router.addResolver(new oNodeResolver(this.address));
@@ -271,12 +364,130 @@ export class oNode extends oToolBase {
271
364
  this.logger.debug('Adding leader resolver fallback...');
272
365
  this.router.addResolver(new oLeaderResolverFallback(this.address));
273
366
  }
367
+ // initialize reconnection manager
368
+ await this.initReconnectionManager();
369
+ await this.hookInitializeFinished();
274
370
  }
371
+ /**
372
+ * Override use() to wrap leader/registry requests with retry logic
373
+ */
374
+ // async use(
375
+ // address: oAddress,
376
+ // data?: {
377
+ // method?: string;
378
+ // params?: { [key: string]: any };
379
+ // id?: string;
380
+ // },
381
+ // options?: UseOptions,
382
+ // ): Promise<any> {
383
+ // // Wrap leader/registry requests with retry logic
384
+ // return super.use(address, data, options),
385
+ // address,
386
+ // data?.method,
387
+ // }
275
388
  async teardown() {
389
+ // Stop heartbeat before parent teardown
390
+ if (this.connectionHeartbeatManager) {
391
+ await this.connectionHeartbeatManager.stop();
392
+ }
276
393
  await this.unregister();
277
394
  await super.teardown();
278
395
  if (this.p2pNode) {
279
396
  await this.p2pNode.stop();
280
397
  }
281
398
  }
399
+ // IHeartbeatableNode interface methods
400
+ getLeaders() {
401
+ return [this.leader];
402
+ }
403
+ getParents() {
404
+ return this.hierarchyManager.getParents();
405
+ }
406
+ getChildren() {
407
+ return this.hierarchyManager.getChildren();
408
+ }
409
+ removeChild(childAddress) {
410
+ this.hierarchyManager.removeChild(childAddress);
411
+ }
412
+ /**
413
+ * Get the total number of active streams across all connections
414
+ * @returns Total count of active streams
415
+ */
416
+ getStreamCount() {
417
+ if (!this.p2pNode) {
418
+ return 0;
419
+ }
420
+ const connections = this.p2pNode.getConnections();
421
+ return connections.reduce((count, conn) => {
422
+ return count + (conn.streams?.length || 0);
423
+ }, 0);
424
+ }
425
+ /**
426
+ * Get libp2p metrics for this node
427
+ * Tool method that can be called remotely by monitoring systems
428
+ */
429
+ async _tool_get_libp2p_metrics(request) {
430
+ if (!this.p2pNode) {
431
+ return {
432
+ error: 'libp2p node not available',
433
+ available: false,
434
+ };
435
+ }
436
+ try {
437
+ // Get basic connection stats
438
+ const connections = this.p2pNode.getConnections();
439
+ const peers = await this.p2pNode.peerStore.all();
440
+ const inbound = connections.filter((c) => c.direction === 'inbound').length;
441
+ const outbound = connections.filter((c) => c.direction === 'outbound').length;
442
+ // Get DHT info if available
443
+ const services = this.p2pNode.services;
444
+ const dht = services?.dht;
445
+ const routingTable = dht?.routingTable;
446
+ const kBuckets = routingTable?.kb || null;
447
+ let routingTableSize = 0;
448
+ if (kBuckets) {
449
+ // Handle both array and object-like structures
450
+ if (Array.isArray(kBuckets)) {
451
+ for (const bucket of kBuckets) {
452
+ routingTableSize += bucket.peers?.length || 0;
453
+ }
454
+ }
455
+ else if (typeof kBuckets === 'object') {
456
+ // If it's an object, iterate over its values
457
+ for (const bucket of Object.values(kBuckets)) {
458
+ routingTableSize += bucket?.peers?.length || 0;
459
+ }
460
+ }
461
+ }
462
+ // Calculate total stream count across all connections
463
+ const streamCount = connections.reduce((count, conn) => {
464
+ return count + (conn.streams?.length || 0);
465
+ }, 0);
466
+ return {
467
+ available: true,
468
+ timestamp: Date.now(),
469
+ nodeAddress: this.address.toString(),
470
+ peerCount: peers.length,
471
+ connectionCount: connections.length,
472
+ inboundConnections: inbound,
473
+ outboundConnections: outbound,
474
+ streamCount,
475
+ dhtEnabled: !!dht,
476
+ dhtMode: dht?.clientMode ? 'client' : 'server',
477
+ dhtRoutingTableSize: routingTableSize,
478
+ protocols: Array.from(this.p2pNode.getProtocols()),
479
+ selfPeerId: this.p2pNode.peerId.toString(),
480
+ multiaddrs: this.p2pNode
481
+ .getMultiaddrs()
482
+ .map((ma) => ma.toString()),
483
+ };
484
+ }
485
+ catch (error) {
486
+ return {
487
+ error: `Failed to collect libp2p metrics: ${error.message}`,
488
+ available: false,
489
+ nodeAddress: this.address.toString(),
490
+ };
491
+ }
492
+ }
282
493
  }
@@ -0,0 +1,52 @@
1
+ import { Libp2p } from '@olane/o-config';
2
+ import { oNotificationManager } from '@olane/o-core';
3
+ import { oNodeAddress } from './router/o-node.address.js';
4
+ import { oNodeHierarchyManager } from './o-node.hierarchy-manager.js';
5
+ /**
6
+ * libp2p-specific implementation of oNotificationManager
7
+ * Wraps libp2p events and enriches them with Olane context
8
+ */
9
+ export declare class oNodeNotificationManager extends oNotificationManager {
10
+ private p2pNode;
11
+ private hierarchyManager;
12
+ private address;
13
+ constructor(p2pNode: Libp2p, hierarchyManager: oNodeHierarchyManager, address: oNodeAddress);
14
+ /**
15
+ * Wire up libp2p event listeners
16
+ */
17
+ protected setupListeners(): void;
18
+ /**
19
+ * Handle peer connect event from libp2p
20
+ */
21
+ private handlePeerConnect;
22
+ /**
23
+ * Handle peer disconnect event from libp2p
24
+ */
25
+ private handlePeerDisconnect;
26
+ /**
27
+ * Handle peer discovery event from libp2p
28
+ */
29
+ private handlePeerDiscovery;
30
+ /**
31
+ * Handle connection open event from libp2p
32
+ */
33
+ private handleConnectionOpen;
34
+ /**
35
+ * Handle connection close event from libp2p
36
+ */
37
+ private handleConnectionClose;
38
+ /**
39
+ * Try to resolve a libp2p peer ID to an Olane address
40
+ * Checks hierarchy manager for known peers
41
+ */
42
+ private peerIdToAddress;
43
+ /**
44
+ * Check if an address is a direct child
45
+ */
46
+ private isChild;
47
+ /**
48
+ * Check if an address is a parent
49
+ */
50
+ private isParent;
51
+ }
52
+ //# sourceMappingURL=o-node.notification-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"o-node.notification-manager.d.ts","sourceRoot":"","sources":["../../src/o-node.notification-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACL,oBAAoB,EAQrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,oBAAoB;IAE9D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,OAAO;gBAFP,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,qBAAqB,EACvC,OAAO,EAAE,YAAY;IAK/B;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAgChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoD5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,OAAO,CAAC,QAAQ;CAKjB"}
@@ -0,0 +1,188 @@
1
+ import { oNotificationManager, NodeConnectedEvent, NodeDisconnectedEvent, NodeDiscoveredEvent, ChildJoinedEvent, ChildLeftEvent, ParentConnectedEvent, ParentDisconnectedEvent, } from '@olane/o-core';
2
+ /**
3
+ * libp2p-specific implementation of oNotificationManager
4
+ * Wraps libp2p events and enriches them with Olane context
5
+ */
6
+ export class oNodeNotificationManager extends oNotificationManager {
7
+ constructor(p2pNode, hierarchyManager, address) {
8
+ super();
9
+ this.p2pNode = p2pNode;
10
+ this.hierarchyManager = hierarchyManager;
11
+ this.address = address;
12
+ }
13
+ /**
14
+ * Wire up libp2p event listeners
15
+ */
16
+ setupListeners() {
17
+ this.logger.debug('Setting up libp2p event listeners...');
18
+ // Peer connection events
19
+ this.p2pNode.addEventListener('peer:connect', this.handlePeerConnect.bind(this));
20
+ // this.p2pNode.addEventListener(
21
+ // 'peer:disconnect',
22
+ // this.handlePeerDisconnect.bind(this),
23
+ // );
24
+ // Peer discovery events
25
+ this.p2pNode.addEventListener('peer:discovery', this.handlePeerDiscovery.bind(this));
26
+ // Connection events
27
+ this.p2pNode.addEventListener('connection:open', this.handleConnectionOpen.bind(this));
28
+ this.p2pNode.addEventListener('connection:close', this.handleConnectionClose.bind(this));
29
+ this.logger.debug('libp2p event listeners configured');
30
+ }
31
+ /**
32
+ * Handle peer connect event from libp2p
33
+ */
34
+ handlePeerConnect(evt) {
35
+ const peerId = evt.detail;
36
+ // this.logger.debug(`Peer connected: ${peerId.toString()}`);
37
+ // Try to resolve peer ID to Olane address
38
+ const nodeAddress = this.peerIdToAddress(peerId.toString());
39
+ if (!nodeAddress) {
40
+ // this.logger.debug(
41
+ // `Could not resolve peer ID ${peerId.toString()} to address`,
42
+ // );
43
+ return;
44
+ }
45
+ // Emit generic node connected event
46
+ this.emit(new NodeConnectedEvent({
47
+ source: this.address,
48
+ nodeAddress,
49
+ connectionMetadata: {
50
+ peerId: peerId.toString(),
51
+ transport: 'libp2p',
52
+ },
53
+ }));
54
+ // Check if this is a child node
55
+ if (this.isChild(nodeAddress)) {
56
+ // this.logger.debug(`Child node connected: ${nodeAddress.toString()}`);
57
+ this.emit(new ChildJoinedEvent({
58
+ source: this.address,
59
+ childAddress: nodeAddress,
60
+ parentAddress: this.address,
61
+ }));
62
+ }
63
+ // Check if this is a parent node
64
+ if (this.isParent(nodeAddress)) {
65
+ // this.logger.debug(`Parent node connected: ${nodeAddress.toString()}`);
66
+ this.emit(new ParentConnectedEvent({
67
+ source: this.address,
68
+ parentAddress: nodeAddress,
69
+ }));
70
+ }
71
+ }
72
+ /**
73
+ * Handle peer disconnect event from libp2p
74
+ */
75
+ handlePeerDisconnect(evt) {
76
+ const peerId = evt.detail;
77
+ // this.logger.debug(`Peer disconnected: ${peerId.toString()}`);
78
+ // Try to resolve peer ID to Olane address
79
+ const nodeAddress = this.peerIdToAddress(peerId.toString());
80
+ if (!nodeAddress) {
81
+ // this.logger.debug(
82
+ // `Could not resolve peer ID ${peerId.toString()} to address`,
83
+ // );
84
+ return;
85
+ }
86
+ // Emit generic node disconnected event
87
+ this.emit(new NodeDisconnectedEvent({
88
+ source: this.address,
89
+ nodeAddress,
90
+ reason: 'peer_disconnected',
91
+ }));
92
+ // Check if this is a child node
93
+ if (this.isChild(nodeAddress)) {
94
+ this.logger.debug(`Child node disconnected: ${nodeAddress.toString()}`);
95
+ this.emit(new ChildLeftEvent({
96
+ source: this.address,
97
+ childAddress: nodeAddress,
98
+ parentAddress: this.address,
99
+ reason: 'peer_disconnected',
100
+ }));
101
+ // Optionally remove from hierarchy (auto-cleanup)
102
+ // this.hierarchyManager.removeChild(nodeAddress);
103
+ }
104
+ // Check if this is a parent node
105
+ if (this.isParent(nodeAddress)) {
106
+ this.logger.debug(`Parent node disconnected: ${nodeAddress.toString()}`);
107
+ this.emit(new ParentDisconnectedEvent({
108
+ source: this.address,
109
+ parentAddress: nodeAddress,
110
+ reason: 'peer_disconnected',
111
+ }));
112
+ }
113
+ }
114
+ /**
115
+ * Handle peer discovery event from libp2p
116
+ */
117
+ handlePeerDiscovery(evt) {
118
+ const peerInfo = evt.detail;
119
+ // this.logger.debug(`Peer discovered: ${peerInfo.id.toString()}`);
120
+ // Try to resolve peer ID to Olane address
121
+ const nodeAddress = this.peerIdToAddress(peerInfo.id.toString());
122
+ if (!nodeAddress) {
123
+ return;
124
+ }
125
+ this.emit(new NodeDiscoveredEvent({
126
+ source: this.address,
127
+ nodeAddress,
128
+ }));
129
+ }
130
+ /**
131
+ * Handle connection open event from libp2p
132
+ */
133
+ handleConnectionOpen(evt) {
134
+ // do nothing for now
135
+ }
136
+ /**
137
+ * Handle connection close event from libp2p
138
+ */
139
+ handleConnectionClose(evt) {
140
+ // do nothing for now
141
+ }
142
+ /**
143
+ * Try to resolve a libp2p peer ID to an Olane address
144
+ * Checks hierarchy manager for known peers
145
+ */
146
+ peerIdToAddress(peerId) {
147
+ // Check children
148
+ for (const child of this.hierarchyManager.children) {
149
+ const childTransports = child.transports;
150
+ for (const transport of childTransports) {
151
+ if (transport.toString().includes(peerId)) {
152
+ return child;
153
+ }
154
+ }
155
+ }
156
+ // Check parents
157
+ for (const parent of this.hierarchyManager.parents) {
158
+ const parentTransports = parent.transports;
159
+ for (const transport of parentTransports) {
160
+ if (transport.toString().includes(peerId)) {
161
+ return parent;
162
+ }
163
+ }
164
+ }
165
+ // Check leaders
166
+ for (const leader of this.hierarchyManager.leaders) {
167
+ const leaderTransports = leader.transports;
168
+ for (const transport of leaderTransports) {
169
+ if (transport.toString().includes(peerId)) {
170
+ return leader;
171
+ }
172
+ }
173
+ }
174
+ return null;
175
+ }
176
+ /**
177
+ * Check if an address is a direct child
178
+ */
179
+ isChild(address) {
180
+ return this.hierarchyManager.children.some((child) => child.toString() === address.toString());
181
+ }
182
+ /**
183
+ * Check if an address is a parent
184
+ */
185
+ isParent(address) {
186
+ return this.hierarchyManager.parents.some((parent) => parent.toString() === address.toString());
187
+ }
188
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"o-node.tool.d.ts","sourceRoot":"","sources":["../../src/o-node.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,QAAQ,EAET,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;;AAGrD;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAAkB;IACzC,cAAc,CAAC,OAAO,EAAE,QAAQ;IAQhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CnE,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAQ9B,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAa5D"}
1
+ {"version":3,"file":"o-node.tool.d.ts","sourceRoot":"","sources":["../../src/o-node.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,QAAQ,EAIT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;;AAIrD;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAAkB;IACzC,cAAc,CAAC,OAAO,EAAE,QAAQ;IAUhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCnE,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAQ9B,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CA2B5D"}