@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.
- package/dist/o-core/src/connection/index.d.ts +8 -0
- package/dist/o-core/src/connection/index.d.ts.map +1 -0
- package/dist/o-core/src/connection/index.js +7 -0
- package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts +15 -0
- package/dist/o-core/src/connection/interfaces/connection-manager.config.d.ts.map +1 -0
- package/dist/o-core/src/connection/interfaces/connection-manager.config.js +1 -0
- package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts +9 -0
- package/dist/o-core/src/connection/interfaces/connection-send-params.interface.d.ts.map +1 -0
- package/dist/o-core/src/connection/interfaces/connection-send-params.interface.js +1 -0
- package/dist/o-core/src/connection/interfaces/connection.config.d.ts +20 -0
- package/dist/o-core/src/connection/interfaces/connection.config.d.ts.map +1 -0
- package/dist/o-core/src/connection/interfaces/connection.config.js +1 -0
- package/dist/o-core/src/connection/interfaces/index.d.ts +5 -0
- package/dist/o-core/src/connection/interfaces/index.d.ts.map +1 -0
- package/dist/o-core/src/connection/interfaces/index.js +4 -0
- package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts +7 -0
- package/dist/o-core/src/connection/interfaces/request-state.enum.d.ts.map +1 -0
- package/dist/o-core/src/connection/interfaces/request-state.enum.js +7 -0
- package/dist/o-core/src/connection/o-connection-manager.d.ts +19 -0
- package/dist/o-core/src/connection/o-connection-manager.d.ts.map +1 -0
- package/dist/o-core/src/connection/o-connection-manager.js +27 -0
- package/dist/o-core/src/connection/o-connection.d.ts +26 -0
- package/dist/o-core/src/connection/o-connection.d.ts.map +1 -0
- package/dist/o-core/src/connection/o-connection.js +54 -0
- package/dist/o-core/src/connection/o-request.d.ts +23 -0
- package/dist/o-core/src/connection/o-request.d.ts.map +1 -0
- package/dist/o-core/src/connection/o-request.js +42 -0
- package/dist/o-core/src/connection/o-response.d.ts +13 -0
- package/dist/o-core/src/connection/o-response.d.ts.map +1 -0
- package/dist/o-core/src/connection/o-response.js +25 -0
- package/dist/o-core/src/core/defaults/config.d.ts +4 -0
- package/dist/o-core/src/core/defaults/config.d.ts.map +1 -0
- package/dist/o-core/src/core/defaults/config.js +5 -0
- package/dist/o-core/src/core/defaults/index.d.ts +2 -0
- package/dist/o-core/src/core/defaults/index.d.ts.map +1 -0
- package/dist/o-core/src/core/defaults/index.js +1 -0
- package/dist/o-core/src/core/graceful-shutdown.d.ts +25 -0
- package/dist/o-core/src/core/graceful-shutdown.d.ts.map +1 -0
- package/dist/o-core/src/core/graceful-shutdown.js +84 -0
- package/dist/o-core/src/core/index.d.ts +9 -0
- package/dist/o-core/src/core/index.d.ts.map +1 -0
- package/dist/o-core/src/core/index.js +8 -0
- package/dist/o-core/src/core/interfaces/index.d.ts +7 -0
- package/dist/o-core/src/core/interfaces/index.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/index.js +6 -0
- package/dist/o-core/src/core/interfaces/node-type.enum.d.ts +10 -0
- package/dist/o-core/src/core/interfaces/node-type.enum.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/node-type.enum.js +10 -0
- package/dist/o-core/src/core/interfaces/o-core.config.d.ts +23 -0
- package/dist/o-core/src/core/interfaces/o-core.config.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/o-core.config.js +1 -0
- package/dist/o-core/src/core/interfaces/o-core.interface.d.ts +18 -0
- package/dist/o-core/src/core/interfaces/o-core.interface.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/o-core.interface.js +1 -0
- package/dist/o-core/src/core/interfaces/state.enum.d.ts +8 -0
- package/dist/o-core/src/core/interfaces/state.enum.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/state.enum.js +8 -0
- package/dist/o-core/src/core/interfaces/use-options.interface.d.ts +11 -0
- package/dist/o-core/src/core/interfaces/use-options.interface.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/use-options.interface.js +1 -0
- package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts +4 -0
- package/dist/o-core/src/core/interfaces/use-stream-options.interface.d.ts.map +1 -0
- package/dist/o-core/src/core/interfaces/use-stream-options.interface.js +1 -0
- package/dist/o-core/src/core/lib/events/connection-events.d.ts +31 -0
- package/dist/o-core/src/core/lib/events/connection-events.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/events/connection-events.js +46 -0
- package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts +69 -0
- package/dist/o-core/src/core/lib/events/hierarchy-events.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/events/hierarchy-events.js +100 -0
- package/dist/o-core/src/core/lib/events/index.d.ts +6 -0
- package/dist/o-core/src/core/lib/events/index.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/events/index.js +5 -0
- package/dist/o-core/src/core/lib/events/node-events.d.ts +40 -0
- package/dist/o-core/src/core/lib/events/node-events.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/events/node-events.js +58 -0
- package/dist/o-core/src/core/lib/events/o-notification-event.d.ts +26 -0
- package/dist/o-core/src/core/lib/events/o-notification-event.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/events/o-notification-event.js +30 -0
- package/dist/o-core/src/core/lib/index.d.ts +8 -0
- package/dist/o-core/src/core/lib/index.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/index.js +7 -0
- package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts +49 -0
- package/dist/o-core/src/core/lib/interfaces/notification-types.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/interfaces/notification-types.js +1 -0
- package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts +24 -0
- package/dist/o-core/src/core/lib/o-hierarchy.manager.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/o-hierarchy.manager.js +58 -0
- package/dist/o-core/src/core/lib/o-metrics.d.ts +5 -0
- package/dist/o-core/src/core/lib/o-metrics.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/o-metrics.js +6 -0
- package/dist/o-core/src/core/lib/o-notification.manager.d.ts +58 -0
- package/dist/o-core/src/core/lib/o-notification.manager.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/o-notification.manager.js +159 -0
- package/dist/o-core/src/core/lib/o-request.manager.d.ts +10 -0
- package/dist/o-core/src/core/lib/o-request.manager.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/o-request.manager.js +18 -0
- package/dist/o-core/src/core/lib/utils/event-filters.d.ts +38 -0
- package/dist/o-core/src/core/lib/utils/event-filters.d.ts.map +1 -0
- package/dist/o-core/src/core/lib/utils/event-filters.js +159 -0
- package/dist/o-core/src/core/o-core.d.ts +240 -0
- package/dist/o-core/src/core/o-core.d.ts.map +1 -0
- package/dist/o-core/src/core/o-core.js +463 -0
- package/dist/o-core/src/core/o-dependency.d.ts +9 -0
- package/dist/o-core/src/core/o-dependency.d.ts.map +1 -0
- package/dist/o-core/src/core/o-dependency.js +15 -0
- package/dist/o-core/src/core/o-object.d.ts +7 -0
- package/dist/o-core/src/core/o-object.d.ts.map +1 -0
- package/dist/o-core/src/core/o-object.js +10 -0
- package/dist/o-core/src/core/o-parameter.d.ts +12 -0
- package/dist/o-core/src/core/o-parameter.d.ts.map +1 -0
- package/dist/o-core/src/core/o-parameter.js +21 -0
- package/dist/o-core/src/error/enums/codes.error.d.ts +20 -0
- package/dist/o-core/src/error/enums/codes.error.d.ts.map +1 -0
- package/dist/o-core/src/error/enums/codes.error.js +20 -0
- package/dist/o-core/src/error/index.d.ts +3 -0
- package/dist/o-core/src/error/index.d.ts.map +1 -0
- package/dist/o-core/src/error/index.js +2 -0
- package/dist/o-core/src/error/interfaces/o-error.interface.d.ts +6 -0
- package/dist/o-core/src/error/interfaces/o-error.interface.d.ts.map +1 -0
- package/dist/o-core/src/error/interfaces/o-error.interface.js +1 -0
- package/dist/o-core/src/error/o-error.d.ts +15 -0
- package/dist/o-core/src/error/o-error.d.ts.map +1 -0
- package/dist/o-core/src/error/o-error.js +27 -0
- package/dist/o-core/src/index.d.ts +8 -0
- package/dist/o-core/src/index.d.ts.map +1 -0
- package/dist/o-core/src/index.js +7 -0
- package/dist/o-core/src/response/index.d.ts +2 -0
- package/dist/o-core/src/response/index.d.ts.map +1 -0
- package/dist/o-core/src/response/index.js +1 -0
- package/dist/o-core/src/response/response-builder.d.ts +140 -0
- package/dist/o-core/src/response/response-builder.d.ts.map +1 -0
- package/dist/o-core/src/response/response-builder.js +190 -0
- package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts +8 -0
- package/dist/o-core/src/router/enums/restricted-addresses.enum.d.ts.map +1 -0
- package/dist/o-core/src/router/enums/restricted-addresses.enum.js +13 -0
- package/dist/o-core/src/router/index.d.ts +11 -0
- package/dist/o-core/src/router/index.d.ts.map +1 -0
- package/dist/o-core/src/router/index.js +10 -0
- package/dist/o-core/src/router/interfaces/resolve.request.d.ts +10 -0
- package/dist/o-core/src/router/interfaces/resolve.request.d.ts.map +1 -0
- package/dist/o-core/src/router/interfaces/resolve.request.js +1 -0
- package/dist/o-core/src/router/interfaces/route.response.d.ts +8 -0
- package/dist/o-core/src/router/interfaces/route.response.d.ts.map +1 -0
- package/dist/o-core/src/router/interfaces/route.response.js +1 -0
- package/dist/o-core/src/router/o-address-resolver.d.ts +14 -0
- package/dist/o-core/src/router/o-address-resolver.d.ts.map +1 -0
- package/dist/o-core/src/router/o-address-resolver.js +19 -0
- package/dist/o-core/src/router/o-address.d.ts +33 -0
- package/dist/o-core/src/router/o-address.d.ts.map +1 -0
- package/dist/o-core/src/router/o-address.js +114 -0
- package/dist/o-core/src/router/o-request-preparation.d.ts +37 -0
- package/dist/o-core/src/router/o-request-preparation.d.ts.map +1 -0
- package/dist/o-core/src/router/o-request-preparation.js +75 -0
- package/dist/o-core/src/router/o-request.router.d.ts +18 -0
- package/dist/o-core/src/router/o-request.router.d.ts.map +1 -0
- package/dist/o-core/src/router/o-request.router.js +12 -0
- package/dist/o-core/src/router/o-resolver-chain.d.ts +32 -0
- package/dist/o-core/src/router/o-resolver-chain.d.ts.map +1 -0
- package/dist/o-core/src/router/o-resolver-chain.js +62 -0
- package/dist/o-core/src/router/o-router.d.ts +19 -0
- package/dist/o-core/src/router/o-router.d.ts.map +1 -0
- package/dist/o-core/src/router/o-router.js +14 -0
- package/dist/o-core/src/router/o-routing-policy.d.ts +36 -0
- package/dist/o-core/src/router/o-routing-policy.d.ts.map +1 -0
- package/dist/o-core/src/router/o-routing-policy.js +19 -0
- package/dist/o-core/src/streaming/index.d.ts +11 -0
- package/dist/o-core/src/streaming/index.d.ts.map +1 -0
- package/dist/o-core/src/streaming/index.js +14 -0
- package/dist/o-core/src/streaming/protocol-builder.d.ts +62 -0
- package/dist/o-core/src/streaming/protocol-builder.d.ts.map +1 -0
- package/dist/o-core/src/streaming/protocol-builder.js +93 -0
- package/dist/o-core/src/streaming/stream-config.d.ts +36 -0
- package/dist/o-core/src/streaming/stream-config.d.ts.map +1 -0
- package/dist/o-core/src/streaming/stream-config.js +19 -0
- package/dist/o-core/src/streaming/stream-handler.base.d.ts +85 -0
- package/dist/o-core/src/streaming/stream-handler.base.d.ts.map +1 -0
- package/dist/o-core/src/streaming/stream-handler.base.js +112 -0
- package/dist/o-core/src/streaming/stream-transport.interface.d.ts +61 -0
- package/dist/o-core/src/streaming/stream-transport.interface.d.ts.map +1 -0
- package/dist/o-core/src/streaming/stream-transport.interface.js +10 -0
- package/dist/o-core/src/transports/custom.transport.d.ts +6 -0
- package/dist/o-core/src/transports/custom.transport.d.ts.map +1 -0
- package/dist/o-core/src/transports/custom.transport.js +10 -0
- package/dist/o-core/src/transports/index.d.ts +4 -0
- package/dist/o-core/src/transports/index.d.ts.map +1 -0
- package/dist/o-core/src/transports/index.js +3 -0
- package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts +5 -0
- package/dist/o-core/src/transports/interfaces/transport-type.enum.d.ts.map +1 -0
- package/dist/o-core/src/transports/interfaces/transport-type.enum.js +5 -0
- package/dist/o-core/src/transports/o-transport.d.ts +10 -0
- package/dist/o-core/src/transports/o-transport.d.ts.map +1 -0
- package/dist/o-core/src/transports/o-transport.js +16 -0
- package/dist/o-core/src/utils/core.utils.d.ts +34 -0
- package/dist/o-core/src/utils/core.utils.d.ts.map +1 -0
- package/dist/o-core/src/utils/core.utils.js +123 -0
- package/dist/o-core/src/utils/index.d.ts +6 -0
- package/dist/o-core/src/utils/index.d.ts.map +1 -0
- package/dist/o-core/src/utils/index.js +5 -0
- package/dist/o-core/src/utils/logger.d.ts +14 -0
- package/dist/o-core/src/utils/logger.d.ts.map +1 -0
- package/dist/o-core/src/utils/logger.js +31 -0
- package/dist/o-core/src/utils/object.utils.d.ts +5 -0
- package/dist/o-core/src/utils/object.utils.d.ts.map +1 -0
- package/dist/o-core/src/utils/object.utils.js +23 -0
- package/dist/o-core/src/utils/regex.utils.d.ts +4 -0
- package/dist/o-core/src/utils/regex.utils.d.ts.map +1 -0
- package/dist/o-core/src/utils/regex.utils.js +13 -0
- package/dist/o-core/src/utils/remote.utils.d.ts +4 -0
- package/dist/o-core/src/utils/remote.utils.d.ts.map +1 -0
- package/dist/o-core/src/utils/remote.utils.js +5 -0
- package/dist/o-core/src/utils/streaming.utils.d.ts +22 -0
- package/dist/o-core/src/utils/streaming.utils.d.ts.map +1 -0
- package/dist/o-core/src/utils/streaming.utils.js +45 -0
- package/dist/o-node/src/connection/index.d.ts +5 -0
- package/dist/o-node/src/connection/index.d.ts.map +1 -0
- package/dist/o-node/src/connection/index.js +4 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts +6 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.d.ts.map +1 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection-manager.config.js +1 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts +6 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection.config.d.ts.map +1 -0
- package/dist/o-node/src/connection/interfaces/o-node-connection.config.js +1 -0
- package/dist/o-node/src/connection/o-node-connection.d.ts +13 -0
- package/dist/o-node/src/connection/o-node-connection.d.ts.map +1 -0
- package/dist/o-node/src/connection/o-node-connection.js +93 -0
- package/dist/o-node/src/connection/o-node-connection.manager.d.ts +19 -0
- package/dist/o-node/src/connection/o-node-connection.manager.d.ts.map +1 -0
- package/dist/o-node/src/connection/o-node-connection.manager.js +65 -0
- package/dist/o-node/src/connection/o-stream.request.d.ts +11 -0
- package/dist/o-node/src/connection/o-stream.request.d.ts.map +1 -0
- package/dist/o-node/src/connection/o-stream.request.js +7 -0
- package/dist/o-node/src/index.d.ts +12 -0
- package/dist/o-node/src/index.d.ts.map +1 -0
- package/dist/o-node/src/index.js +11 -0
- package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts +49 -0
- package/dist/o-node/src/interfaces/i-heartbeatable-node.d.ts.map +1 -0
- package/dist/o-node/src/interfaces/i-heartbeatable-node.js +1 -0
- package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts +46 -0
- package/dist/o-node/src/interfaces/i-reconnectable-node.d.ts.map +1 -0
- package/dist/o-node/src/interfaces/i-reconnectable-node.js +1 -0
- package/dist/o-node/src/interfaces/o-node.config.d.ts +49 -0
- package/dist/o-node/src/interfaces/o-node.config.d.ts.map +1 -0
- package/dist/o-node/src/interfaces/o-node.config.js +1 -0
- package/dist/o-node/src/interfaces/o-node.tool-config.d.ts +4 -0
- package/dist/o-node/src/interfaces/o-node.tool-config.d.ts.map +1 -0
- package/dist/o-node/src/interfaces/o-node.tool-config.js +1 -0
- package/dist/o-node/src/lib/network-activity.lib.d.ts +1 -0
- package/dist/o-node/src/lib/network-activity.lib.d.ts.map +1 -0
- package/dist/o-node/src/lib/network-activity.lib.js +34 -0
- package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts +63 -0
- package/dist/o-node/src/managers/o-connection-heartbeat.manager.d.ts.map +1 -0
- package/dist/o-node/src/managers/o-connection-heartbeat.manager.js +227 -0
- package/dist/o-node/src/managers/o-reconnection.manager.d.ts +51 -0
- package/dist/o-node/src/managers/o-reconnection.manager.d.ts.map +1 -0
- package/dist/o-node/src/managers/o-reconnection.manager.js +266 -0
- package/dist/o-node/src/nodes/client.node.d.ts +7 -0
- package/dist/o-node/src/nodes/client.node.d.ts.map +1 -0
- package/dist/o-node/src/nodes/client.node.js +16 -0
- package/dist/o-node/src/nodes/index.d.ts +4 -0
- package/dist/o-node/src/nodes/index.d.ts.map +1 -0
- package/dist/o-node/src/nodes/index.js +3 -0
- package/dist/o-node/src/nodes/server.node.d.ts +7 -0
- package/dist/o-node/src/nodes/server.node.d.ts.map +1 -0
- package/dist/o-node/src/nodes/server.node.js +20 -0
- package/dist/o-node/src/nodes/websocket.node.d.ts +7 -0
- package/dist/o-node/src/nodes/websocket.node.d.ts.map +1 -0
- package/dist/o-node/src/nodes/websocket.node.js +18 -0
- package/dist/o-node/src/o-node.d.ts +72 -0
- package/dist/o-node/src/o-node.d.ts.map +1 -0
- package/dist/o-node/src/o-node.hierarchy-manager.d.ts +15 -0
- package/dist/o-node/src/o-node.hierarchy-manager.d.ts.map +1 -0
- package/dist/o-node/src/o-node.hierarchy-manager.js +15 -0
- package/dist/o-node/src/o-node.js +493 -0
- package/dist/o-node/src/o-node.notification-manager.d.ts +52 -0
- package/dist/o-node/src/o-node.notification-manager.d.ts.map +1 -0
- package/dist/o-node/src/o-node.notification-manager.js +188 -0
- package/dist/o-node/src/o-node.tool.d.ts +18 -0
- package/dist/o-node/src/o-node.tool.d.ts.map +1 -0
- package/dist/o-node/src/o-node.tool.js +83 -0
- package/dist/o-node/src/router/index.d.ts +6 -0
- package/dist/o-node/src/router/index.d.ts.map +1 -0
- package/dist/o-node/src/router/index.js +5 -0
- package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts +3 -0
- package/dist/o-node/src/router/interfaces/o-node-router.config.d.ts.map +1 -0
- package/dist/o-node/src/router/interfaces/o-node-router.config.js +1 -0
- package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts +8 -0
- package/dist/o-node/src/router/interfaces/o-node-router.response.d.ts.map +1 -0
- package/dist/o-node/src/router/interfaces/o-node-router.response.js +1 -0
- package/dist/o-node/src/router/o-node.address.d.ts +18 -0
- package/dist/o-node/src/router/o-node.address.d.ts.map +1 -0
- package/dist/o-node/src/router/o-node.address.js +29 -0
- package/dist/o-node/src/router/o-node.router.d.ts +46 -0
- package/dist/o-node/src/router/o-node.router.d.ts.map +1 -0
- package/dist/o-node/src/router/o-node.router.js +181 -0
- package/dist/o-node/src/router/o-node.routing-policy.d.ts +30 -0
- package/dist/o-node/src/router/o-node.routing-policy.d.ts.map +1 -0
- package/dist/o-node/src/router/o-node.routing-policy.js +57 -0
- package/dist/o-node/src/router/o-node.transport.d.ts +11 -0
- package/dist/o-node/src/router/o-node.transport.d.ts.map +1 -0
- package/dist/o-node/src/router/o-node.transport.js +18 -0
- package/dist/o-node/src/router/resolvers/index.d.ts +4 -0
- package/dist/o-node/src/router/resolvers/index.d.ts.map +1 -0
- package/dist/o-node/src/router/resolvers/index.js +3 -0
- package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts +8 -0
- package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.d.ts.map +1 -0
- package/dist/o-node/src/router/resolvers/o-node.leader-resolver-fallback.js +35 -0
- package/dist/{src/router/resolvers/o-node.child-resolver.d.ts → o-node/src/router/resolvers/o-node.resolver.d.ts} +2 -2
- package/dist/o-node/src/router/resolvers/o-node.resolver.d.ts.map +1 -0
- package/dist/o-node/src/router/resolvers/o-node.resolver.js +45 -0
- package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts +170 -0
- package/dist/o-node/src/router/resolvers/o-node.search-resolver.d.ts.map +1 -0
- package/dist/o-node/src/router/resolvers/o-node.search-resolver.js +285 -0
- package/dist/o-node/src/router/route.request.d.ts +14 -0
- package/dist/o-node/src/router/route.request.d.ts.map +1 -0
- package/dist/o-node/src/router/route.request.js +1 -0
- package/dist/o-node/src/streaming/index.d.ts +10 -0
- package/dist/o-node/src/streaming/index.d.ts.map +1 -0
- package/dist/o-node/src/streaming/index.js +12 -0
- package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts +50 -0
- package/dist/o-node/src/streaming/libp2p-stream-transport.d.ts.map +1 -0
- package/dist/o-node/src/streaming/libp2p-stream-transport.js +137 -0
- package/dist/o-node/src/streaming/node-stream-handler.d.ts +65 -0
- package/dist/o-node/src/streaming/node-stream-handler.d.ts.map +1 -0
- package/dist/o-node/src/streaming/node-stream-handler.js +101 -0
- package/dist/o-node/src/ui/index.d.ts +3 -0
- package/dist/o-node/src/ui/index.d.ts.map +1 -0
- package/dist/o-node/src/ui/index.js +2 -0
- package/dist/o-node/src/ui/types.d.ts +110 -0
- package/dist/o-node/src/ui/types.d.ts.map +1 -0
- package/dist/o-node/src/ui/types.js +17 -0
- package/dist/o-node/src/ui/ui-graph.manager.d.ts +70 -0
- package/dist/o-node/src/ui/ui-graph.manager.d.ts.map +1 -0
- package/dist/o-node/src/ui/ui-graph.manager.js +274 -0
- package/dist/o-node/src/utils/circuit-breaker.d.ts +107 -0
- package/dist/o-node/src/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/o-node/src/utils/circuit-breaker.js +175 -0
- package/dist/o-node/src/utils/index.d.ts +3 -0
- package/dist/o-node/src/utils/index.d.ts.map +1 -0
- package/dist/o-node/src/utils/index.js +2 -0
- package/dist/o-node/src/utils/leader-request-wrapper.d.ts +66 -0
- package/dist/o-node/src/utils/leader-request-wrapper.d.ts.map +1 -0
- package/dist/o-node/src/utils/leader-request-wrapper.js +160 -0
- package/dist/o-node/src/utils/network.utils.d.ts +20 -0
- package/dist/o-node/src/utils/network.utils.d.ts.map +1 -0
- package/dist/o-node/src/utils/network.utils.js +74 -0
- package/dist/o-node/src/utils/stream.utils.d.ts +6 -0
- package/dist/o-node/src/utils/stream.utils.d.ts.map +1 -0
- package/dist/o-node/src/utils/stream.utils.js +31 -0
- package/dist/o-node/test/circuit-breaker.test.d.ts +2 -0
- package/dist/o-node/test/circuit-breaker.test.d.ts.map +1 -0
- package/dist/o-node/test/circuit-breaker.test.js +262 -0
- package/dist/o-node/test/helpers/test-node.tool.d.ts +15 -0
- package/dist/o-node/test/helpers/test-node.tool.d.ts.map +1 -0
- package/dist/o-node/test/helpers/test-node.tool.js +27 -0
- package/dist/o-node/test/leader-request-wrapper.test.d.ts +1 -0
- package/dist/o-node/test/leader-request-wrapper.test.d.ts.map +1 -0
- package/dist/o-node/test/leader-request-wrapper.test.js +246 -0
- package/dist/o-node/test/o-node.spec.d.ts +2 -0
- package/dist/o-node/test/o-node.spec.d.ts.map +1 -0
- package/dist/o-node/test/o-node.spec.js +20 -0
- package/dist/o-node/test/search-resolver.spec.d.ts +2 -0
- package/dist/o-node/test/search-resolver.spec.d.ts.map +1 -0
- package/dist/o-node/test/search-resolver.spec.js +693 -0
- package/dist/src/connection/o-node-connection.d.ts +2 -2
- package/dist/src/connection/o-node-connection.d.ts.map +1 -1
- package/dist/src/connection/o-node-connection.js +54 -19
- package/dist/src/connection/o-node-connection.manager.d.ts +16 -4
- package/dist/src/connection/o-node-connection.manager.d.ts.map +1 -1
- package/dist/src/connection/o-node-connection.manager.js +73 -44
- package/dist/src/connection/o-stream.request.d.ts +11 -0
- package/dist/src/connection/o-stream.request.d.ts.map +1 -0
- package/dist/src/connection/o-stream.request.js +7 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/interfaces/i-heartbeatable-node.d.ts +49 -0
- package/dist/src/interfaces/i-heartbeatable-node.d.ts.map +1 -0
- package/dist/src/interfaces/i-heartbeatable-node.js +1 -0
- package/dist/src/interfaces/i-reconnectable-node.d.ts +46 -0
- package/dist/src/interfaces/i-reconnectable-node.d.ts.map +1 -0
- package/dist/src/interfaces/i-reconnectable-node.js +1 -0
- package/dist/src/interfaces/o-node.config.d.ts +42 -0
- package/dist/src/interfaces/o-node.config.d.ts.map +1 -1
- package/dist/src/managers/o-connection-heartbeat.manager.d.ts +63 -0
- package/dist/src/managers/o-connection-heartbeat.manager.d.ts.map +1 -0
- package/dist/src/managers/o-connection-heartbeat.manager.js +227 -0
- package/dist/src/managers/o-reconnection.manager.d.ts +51 -0
- package/dist/src/managers/o-reconnection.manager.d.ts.map +1 -0
- package/dist/src/managers/o-reconnection.manager.js +266 -0
- package/dist/src/o-node.d.ts +30 -2
- package/dist/src/o-node.d.ts.map +1 -1
- package/dist/src/o-node.js +244 -33
- package/dist/src/o-node.notification-manager.d.ts +52 -0
- package/dist/src/o-node.notification-manager.d.ts.map +1 -0
- package/dist/src/o-node.notification-manager.js +188 -0
- package/dist/src/o-node.tool.d.ts.map +1 -1
- package/dist/src/o-node.tool.js +33 -24
- package/dist/src/router/o-node.router.d.ts +1 -0
- package/dist/src/router/o-node.router.d.ts.map +1 -1
- package/dist/src/router/o-node.router.js +61 -5
- package/dist/src/router/o-node.routing-policy.d.ts.map +1 -1
- package/dist/src/router/o-node.routing-policy.js +7 -2
- package/dist/src/router/resolvers/o-node.resolver.d.ts.map +1 -1
- package/dist/src/router/resolvers/o-node.resolver.js +5 -1
- package/dist/src/router/resolvers/o-node.search-resolver.d.ts.map +1 -1
- package/dist/src/router/resolvers/o-node.search-resolver.js +34 -9
- package/dist/src/streaming/index.d.ts +10 -0
- package/dist/src/streaming/index.d.ts.map +1 -0
- package/dist/src/streaming/index.js +12 -0
- package/dist/src/streaming/libp2p-stream-transport.d.ts +50 -0
- package/dist/src/streaming/libp2p-stream-transport.d.ts.map +1 -0
- package/dist/src/streaming/libp2p-stream-transport.js +137 -0
- package/dist/src/streaming/node-stream-handler.d.ts +65 -0
- package/dist/src/streaming/node-stream-handler.d.ts.map +1 -0
- package/dist/src/streaming/node-stream-handler.js +101 -0
- package/dist/src/streaming/o-node-streaming-client.d.ts +33 -0
- package/dist/src/streaming/o-node-streaming-client.d.ts.map +1 -0
- package/dist/src/streaming/o-node-streaming-client.js +130 -0
- package/dist/src/utils/circuit-breaker.d.ts +107 -0
- package/dist/src/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/src/utils/circuit-breaker.js +175 -0
- package/dist/src/utils/circuit-breaker.test.d.ts +2 -0
- package/dist/src/utils/circuit-breaker.test.d.ts.map +1 -0
- package/dist/src/utils/circuit-breaker.test.js +262 -0
- package/dist/src/utils/index.d.ts +3 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/leader-request-wrapper.d.ts +66 -0
- package/dist/src/utils/leader-request-wrapper.d.ts.map +1 -0
- package/dist/src/utils/leader-request-wrapper.js +160 -0
- package/dist/src/utils/leader-request-wrapper.test.d.ts +1 -0
- package/dist/src/utils/leader-request-wrapper.test.d.ts.map +1 -0
- package/dist/src/utils/leader-request-wrapper.test.js +246 -0
- package/dist/src/utils/stream.utils.d.ts +6 -0
- package/dist/src/utils/stream.utils.d.ts.map +1 -0
- package/dist/src/utils/stream.utils.js +31 -0
- package/dist/test/circuit-breaker.test.d.ts +2 -0
- package/dist/test/circuit-breaker.test.d.ts.map +1 -0
- package/dist/test/circuit-breaker.test.js +262 -0
- package/dist/test/helpers/test-node.tool.d.ts +15 -0
- package/dist/test/helpers/test-node.tool.d.ts.map +1 -0
- package/dist/test/helpers/test-node.tool.js +27 -0
- package/dist/test/leader-request-wrapper.test.d.ts +1 -0
- package/dist/test/leader-request-wrapper.test.d.ts.map +1 -0
- package/dist/test/leader-request-wrapper.test.js +246 -0
- package/package.json +6 -6
- package/dist/src/router/resolvers/o-node.child-resolver.d.ts.map +0 -1
- package/dist/src/router/resolvers/o-node.child-resolver.js +0 -58
package/dist/src/o-node.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
85
|
-
this.logger.debug('Registering node with parent...', this.config.parent);
|
|
86
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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(
|
|
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.
|
|
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,
|
|
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"}
|