@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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defaultLibp2pConfig } from '@olane/o-config';
|
|
2
|
+
import { oNode } from '../o-node.js';
|
|
3
|
+
export class oServerNode extends oNode {
|
|
4
|
+
constructor(config) {
|
|
5
|
+
super({
|
|
6
|
+
...config,
|
|
7
|
+
network: {
|
|
8
|
+
listeners: config.network?.listeners || [
|
|
9
|
+
'/ip4/0.0.0.0/tcp/0', // Plain TCP
|
|
10
|
+
'/ip4/0.0.0.0/tcp/0/ws', // WebSockets over TCP
|
|
11
|
+
'/ip6/::/tcp/0', // IPv6 TCP
|
|
12
|
+
'/ip6/::/tcp/0/ws', // IPv6 WebSockets
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
configureTransports() {
|
|
18
|
+
return [...(defaultLibp2pConfig.transports || [])];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { oNode } from '../o-node.js';
|
|
2
|
+
import { oNodeConfig } from '../interfaces/o-node.config.js';
|
|
3
|
+
export declare class oWebsocketNode extends oNode {
|
|
4
|
+
constructor(config: oNodeConfig);
|
|
5
|
+
configureTransports(): any[];
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=websocket.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.node.d.ts","sourceRoot":"","sources":["../../../../src/nodes/websocket.node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,MAAM,EAAE,WAAW;IAY/B,mBAAmB,IAAI,GAAG,EAAE;CAG7B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defaultLibp2pConfig } from '@olane/o-config';
|
|
2
|
+
import { oNode } from '../o-node.js';
|
|
3
|
+
export class oWebsocketNode extends oNode {
|
|
4
|
+
constructor(config) {
|
|
5
|
+
super({
|
|
6
|
+
...config,
|
|
7
|
+
network: {
|
|
8
|
+
listeners: config.network?.listeners || [
|
|
9
|
+
'/ip4/0.0.0.0/tcp/0/ws', // WebSockets over TCP
|
|
10
|
+
'/ip6/::/tcp/0/ws', // IPv6 WebSockets
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
configureTransports() {
|
|
16
|
+
return [...(defaultLibp2pConfig.transports || [])];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Libp2p, Libp2pConfig } from '@olane/o-config';
|
|
2
|
+
import { PeerId } from '@olane/o-config';
|
|
3
|
+
import { oNodeHierarchyManager } from './o-node.hierarchy-manager.js';
|
|
4
|
+
import { oNodeConfig } from './interfaces/o-node.config.js';
|
|
5
|
+
import { oNodeTransport } from './router/o-node.transport.js';
|
|
6
|
+
import { oRequest, oNotificationManager } from '@olane/o-core';
|
|
7
|
+
import { oNodeAddress } from './router/o-node.address.js';
|
|
8
|
+
import { oNodeConnection } from './connection/o-node-connection.js';
|
|
9
|
+
import { oNodeConnectionManager } from './connection/o-node-connection.manager.js';
|
|
10
|
+
import { oToolBase } from '@olane/o-tool';
|
|
11
|
+
import { oConnectionHeartbeatManager } from './managers/o-connection-heartbeat.manager.js';
|
|
12
|
+
import { oReconnectionManager } from './managers/o-reconnection.manager.js';
|
|
13
|
+
import { oNodeConnectionConfig } from './connection/index.js';
|
|
14
|
+
export declare class oNode extends oToolBase {
|
|
15
|
+
peerId: PeerId;
|
|
16
|
+
p2pNode: Libp2p;
|
|
17
|
+
address: oNodeAddress;
|
|
18
|
+
config: oNodeConfig;
|
|
19
|
+
connectionManager: oNodeConnectionManager;
|
|
20
|
+
hierarchyManager: oNodeHierarchyManager;
|
|
21
|
+
connectionHeartbeatManager?: oConnectionHeartbeatManager;
|
|
22
|
+
reconnectionManager?: oReconnectionManager;
|
|
23
|
+
protected didRegister: boolean;
|
|
24
|
+
constructor(config: oNodeConfig);
|
|
25
|
+
get leader(): oNodeAddress | null;
|
|
26
|
+
get networkConfig(): Libp2pConfig;
|
|
27
|
+
get parentPeerId(): string | null;
|
|
28
|
+
configureTransports(): any[];
|
|
29
|
+
initializeRouter(): Promise<void>;
|
|
30
|
+
protected createNotificationManager(): oNotificationManager;
|
|
31
|
+
get staticAddress(): oNodeAddress;
|
|
32
|
+
get parentTransports(): oNodeTransport[];
|
|
33
|
+
get transports(): oNodeTransport[];
|
|
34
|
+
unregister(): Promise<void>;
|
|
35
|
+
registerParent(): Promise<void>;
|
|
36
|
+
registerLeader(): Promise<void>;
|
|
37
|
+
register(): Promise<void>;
|
|
38
|
+
extractMethod(address: oNodeAddress): string;
|
|
39
|
+
start(): Promise<void>;
|
|
40
|
+
validateJoinRequest(request: oRequest): Promise<any>;
|
|
41
|
+
/**
|
|
42
|
+
* Configure the libp2p node
|
|
43
|
+
* @returns The libp2p config
|
|
44
|
+
*/
|
|
45
|
+
configure(): Promise<Libp2pConfig>;
|
|
46
|
+
protected createNode(): Promise<Libp2p>;
|
|
47
|
+
connect(config: oNodeConnectionConfig): Promise<oNodeConnection>;
|
|
48
|
+
initConnectionManager(): Promise<void>;
|
|
49
|
+
initReconnectionManager(): Promise<void>;
|
|
50
|
+
hookInitializeFinished(): Promise<void>;
|
|
51
|
+
hookStartFinished(): Promise<void>;
|
|
52
|
+
initialize(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Override use() to wrap leader/registry requests with retry logic
|
|
55
|
+
*/
|
|
56
|
+
teardown(): Promise<void>;
|
|
57
|
+
getLeaders(): oNodeAddress[];
|
|
58
|
+
getParents(): oNodeAddress[];
|
|
59
|
+
getChildren(): oNodeAddress[];
|
|
60
|
+
removeChild(childAddress: oNodeAddress): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get the total number of active streams across all connections
|
|
63
|
+
* @returns Total count of active streams
|
|
64
|
+
*/
|
|
65
|
+
getStreamCount(): number;
|
|
66
|
+
/**
|
|
67
|
+
* Get libp2p metrics for this node
|
|
68
|
+
* Tool method that can be called remotely by monitoring systems
|
|
69
|
+
*/
|
|
70
|
+
_tool_get_libp2p_metrics(request: oRequest): Promise<any>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=o-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"o-node.d.ts","sourceRoot":"","sources":["../../../src/o-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EACN,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAKL,QAAQ,EAER,oBAAoB,EAGrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,OAAO,EAAmB,SAAS,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,KAAM,SAAQ,SAAS;IAC3B,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAG,MAAM,CAAC;IACjB,OAAO,EAAG,YAAY,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,iBAAiB,EAAG,sBAAsB,CAAC;IAC3C,gBAAgB,EAAG,qBAAqB,CAAC;IACzC,0BAA0B,CAAC,EAAE,2BAA2B,CAAC;IACzD,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAClD,SAAS,CAAC,WAAW,EAAE,OAAO,CAAS;gBAE3B,MAAM,EAAE,WAAW;IAK/B,IAAI,MAAM,IAAI,YAAY,GAAG,IAAI,CAEhC;IAED,IAAI,aAAa,IAAI,YAAY,CAKhC;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAOhC;IAED,mBAAmB,IAAI,GAAG,EAAE;IAItB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC,SAAS,CAAC,yBAAyB,IAAI,oBAAoB;IAQ3D,IAAI,aAAa,IAAI,YAAY,CAEhC;IAED,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAEvC;IAED,IAAI,UAAU,IAAI,cAAc,EAAE,CAIjC;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD3B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC/B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B/B,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAG1D;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;cA0HxB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAMvC,OAAO,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsBhE,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBxC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IAiBG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B,UAAU,IAAI,YAAY,EAAE;IAI5B,UAAU,IAAI,YAAY,EAAE;IAI5B,WAAW,IAAI,YAAY,EAAE;IAI7B,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAI7C;;;OAGG;IACH,cAAc,IAAI,MAAM;IAUxB;;;OAGG;IACG,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CAwEhE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { oHierarchyManager, oHierarchyManagerConfig } from '@olane/o-core';
|
|
2
|
+
import { oNodeAddress } from './router/o-node.address.js';
|
|
3
|
+
export interface oNodeHierarchyManagerConfig extends oHierarchyManagerConfig {
|
|
4
|
+
leaders: oNodeAddress[];
|
|
5
|
+
children: oNodeAddress[];
|
|
6
|
+
parents: oNodeAddress[];
|
|
7
|
+
}
|
|
8
|
+
export declare class oNodeHierarchyManager extends oHierarchyManager {
|
|
9
|
+
leaders: oNodeAddress[];
|
|
10
|
+
children: oNodeAddress[];
|
|
11
|
+
parents: oNodeAddress[];
|
|
12
|
+
constructor(config: oNodeHierarchyManagerConfig);
|
|
13
|
+
get leader(): oNodeAddress | null;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=o-node.hierarchy-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"o-node.hierarchy-manager.d.ts","sourceRoot":"","sources":["../../../src/o-node.hierarchy-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,qBAAa,qBAAsB,SAAQ,iBAAiB;IACnD,OAAO,EAAE,YAAY,EAAE,CAAM;IAC7B,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAM;gBAExB,MAAM,EAAE,2BAA2B;IAO/C,IAAI,MAAM,IAAI,YAAY,GAAG,IAAI,CAEhC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { oHierarchyManager } from '@olane/o-core';
|
|
2
|
+
export class oNodeHierarchyManager extends oHierarchyManager {
|
|
3
|
+
constructor(config) {
|
|
4
|
+
super(config);
|
|
5
|
+
this.leaders = [];
|
|
6
|
+
this.children = [];
|
|
7
|
+
this.parents = [];
|
|
8
|
+
this.leaders = config.leaders || [];
|
|
9
|
+
this.children = config.children || [];
|
|
10
|
+
this.parents = config.parents || [];
|
|
11
|
+
}
|
|
12
|
+
get leader() {
|
|
13
|
+
return this.leaders.length > 0 ? this.leaders[0] : null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { createNode, defaultLibp2pConfig, } from '@olane/o-config';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { oNodeRouter } from './router/o-node.router.js';
|
|
4
|
+
import { oNodeHierarchyManager } from './o-node.hierarchy-manager.js';
|
|
5
|
+
import { oNodeTransport } from './router/o-node.transport.js';
|
|
6
|
+
import { CoreUtils, NodeState, NodeType, oAddress, RestrictedAddresses, } from '@olane/o-core';
|
|
7
|
+
import { oNodeAddress } from './router/o-node.address.js';
|
|
8
|
+
import { oNodeConnectionManager } from './connection/o-node-connection.manager.js';
|
|
9
|
+
import { oNodeResolver } from './router/resolvers/o-node.resolver.js';
|
|
10
|
+
import { oMethodResolver, oToolBase } from '@olane/o-tool';
|
|
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';
|
|
15
|
+
export class oNode extends oToolBase {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super(config);
|
|
18
|
+
this.didRegister = false;
|
|
19
|
+
this.config = config;
|
|
20
|
+
}
|
|
21
|
+
get leader() {
|
|
22
|
+
return this.isLeader ? this.address : this.config?.leader || null;
|
|
23
|
+
}
|
|
24
|
+
get networkConfig() {
|
|
25
|
+
return {
|
|
26
|
+
...defaultLibp2pConfig,
|
|
27
|
+
...(this.config.network || {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
get parentPeerId() {
|
|
31
|
+
if (!this.parent || this.parent?.transports?.length === 0) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const transport = this.parent?.transports[0];
|
|
35
|
+
const peerId = transport.toPeerId();
|
|
36
|
+
return peerId;
|
|
37
|
+
}
|
|
38
|
+
configureTransports() {
|
|
39
|
+
return [...(defaultLibp2pConfig.transports || [])];
|
|
40
|
+
}
|
|
41
|
+
async initializeRouter() {
|
|
42
|
+
this.hierarchyManager = new oNodeHierarchyManager({
|
|
43
|
+
leaders: this.config.leader ? [this.config.leader] : [],
|
|
44
|
+
parents: this.config.parent ? [this.config.parent] : [],
|
|
45
|
+
children: [],
|
|
46
|
+
});
|
|
47
|
+
this.router = new oNodeRouter();
|
|
48
|
+
}
|
|
49
|
+
createNotificationManager() {
|
|
50
|
+
return new oNodeNotificationManager(this.p2pNode, this.hierarchyManager, this.address);
|
|
51
|
+
}
|
|
52
|
+
get staticAddress() {
|
|
53
|
+
return this.config.address;
|
|
54
|
+
}
|
|
55
|
+
get parentTransports() {
|
|
56
|
+
return this.config.parent?.transports || [];
|
|
57
|
+
}
|
|
58
|
+
get transports() {
|
|
59
|
+
return this.p2pNode
|
|
60
|
+
.getMultiaddrs()
|
|
61
|
+
.map((multiaddr) => new oNodeTransport(multiaddr.toString()));
|
|
62
|
+
}
|
|
63
|
+
async unregister() {
|
|
64
|
+
this.logger.debug('Unregistering node...');
|
|
65
|
+
if (this.type === NodeType.LEADER) {
|
|
66
|
+
this.logger.debug('Skipping unregistration, node is leader');
|
|
67
|
+
return;
|
|
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
|
+
}
|
|
93
|
+
if (!this.config.leader) {
|
|
94
|
+
this.logger.debug('No leader found, skipping unregistration');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const address = new oNodeAddress(RestrictedAddresses.REGISTRY);
|
|
98
|
+
// attempt to unregister from the network
|
|
99
|
+
const params = {
|
|
100
|
+
method: 'remove',
|
|
101
|
+
params: {
|
|
102
|
+
peerId: this.peerId.toString(),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
this.use(address, params).catch((error) => {
|
|
106
|
+
this.logger.error('Failed to unregister from network:', error);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async registerParent() {
|
|
110
|
+
if (this.type === NodeType.LEADER) {
|
|
111
|
+
this.logger.debug('Skipping parent registration, node is leader');
|
|
112
|
+
return;
|
|
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
|
+
}
|
|
124
|
+
// if no parent transports, register with the parent to get them
|
|
125
|
+
// TODO: should we remove the transports check to make this more consistent?
|
|
126
|
+
if (this.config.parent) {
|
|
127
|
+
this.logger.debug('Registering node with parent...', this.config.parent?.toString());
|
|
128
|
+
await this.use(this.config.parent, {
|
|
129
|
+
method: 'child_register',
|
|
130
|
+
params: {
|
|
131
|
+
address: this.address.toString(),
|
|
132
|
+
transports: this.transports.map((t) => t.toString()),
|
|
133
|
+
peerId: this.peerId.toString(),
|
|
134
|
+
_token: this.config.joinToken,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
}
|
|
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
|
+
}
|
|
153
|
+
async register() {
|
|
154
|
+
if (this.type === NodeType.LEADER) {
|
|
155
|
+
this.logger.debug('Skipping registration, node is leader');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (this.didRegister) {
|
|
159
|
+
this.logger.debug('Node already registered, skipping registration');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.didRegister = true;
|
|
163
|
+
this.logger.debug('Registering node...');
|
|
164
|
+
// register with the leader global registry
|
|
165
|
+
if (!this.config.leader) {
|
|
166
|
+
this.logger.warn('No leaders found, skipping registration');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.logger.debug('Registering node with leader...');
|
|
171
|
+
}
|
|
172
|
+
await this.registerParent();
|
|
173
|
+
await this.registerLeader();
|
|
174
|
+
this.logger.debug('Registration successful');
|
|
175
|
+
}
|
|
176
|
+
extractMethod(address) {
|
|
177
|
+
return address.protocol.split('/').pop() || '';
|
|
178
|
+
}
|
|
179
|
+
async start() {
|
|
180
|
+
await super.start();
|
|
181
|
+
// Start heartbeat after node is running
|
|
182
|
+
if (this.connectionHeartbeatManager) {
|
|
183
|
+
await this.connectionHeartbeatManager.start();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async validateJoinRequest(request) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Configure the libp2p node
|
|
191
|
+
* @returns The libp2p config
|
|
192
|
+
*/
|
|
193
|
+
async configure() {
|
|
194
|
+
const params = {
|
|
195
|
+
...defaultLibp2pConfig,
|
|
196
|
+
...this.networkConfig,
|
|
197
|
+
transports: this.configureTransports(),
|
|
198
|
+
listeners: (this.config.network?.listeners ||
|
|
199
|
+
defaultLibp2pConfig.listeners ||
|
|
200
|
+
[]).concat(`/memory/${uuidv4()}`), // ensure we allow for local in-memory communication
|
|
201
|
+
};
|
|
202
|
+
// if the seed is provided, use it to generate the private key
|
|
203
|
+
if (this.config.seed) {
|
|
204
|
+
this.logger.debug('Seed provided, generating private key...');
|
|
205
|
+
const privateKey = await CoreUtils.generatePrivateKey(this.config.seed);
|
|
206
|
+
params.privateKey = privateKey;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this.logger.debug('No seed provided, generating private key...');
|
|
210
|
+
this.logger.debug('Without providing a seed, this node peer id will be destroyed after the node shuts down.');
|
|
211
|
+
// TODO: add a link to documentation about how to setup a seed
|
|
212
|
+
}
|
|
213
|
+
// this is a child node of the network, so communication is heavily restricted
|
|
214
|
+
if (this.parentTransports.length > 0) {
|
|
215
|
+
// peer discovery is only allowed through the parent transports
|
|
216
|
+
const transports = this.parentTransports.map((t) => t.toMultiaddr().toString()) || [];
|
|
217
|
+
// this.logger.debug('Parent transports: ', transports);
|
|
218
|
+
// this.logger.debug(
|
|
219
|
+
// 'Bootstrap transports: ',
|
|
220
|
+
// transports.concat(
|
|
221
|
+
// this.leader?.libp2pTransports.map((t) => t.toString()) || [],
|
|
222
|
+
// ),
|
|
223
|
+
// );
|
|
224
|
+
// params.peerDiscovery = [
|
|
225
|
+
// bootstrap({
|
|
226
|
+
// list: transports.concat(
|
|
227
|
+
// this.leader?.libp2pTransports.map((t) => t.toString()) || [],
|
|
228
|
+
// ),
|
|
229
|
+
// }),
|
|
230
|
+
// ...(defaultLibp2pConfig.peerDiscovery || []),
|
|
231
|
+
// ];
|
|
232
|
+
// // let's make sure we only allow communication through the parent transports
|
|
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
|
+
},
|
|
253
|
+
// who can call us?
|
|
254
|
+
denyInboundEncryptedConnection: (peerId, maConn) => {
|
|
255
|
+
// deny all inbound connections unless they are from a parent transport
|
|
256
|
+
if (this.parentPeerId === peerId.toString()) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
// allow connections from children (for ping)
|
|
260
|
+
if (this.hierarchyManager.children.some((c) => c.libp2pTransports.some((t) => t.toPeerId() === peerId.toString()))) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
// allow leader inbounds
|
|
264
|
+
if (this.config.type === NodeType.LEADER) {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
// deny everything else
|
|
268
|
+
return true;
|
|
269
|
+
},
|
|
270
|
+
// allow the user to override the default connection gater
|
|
271
|
+
...(this.config.network?.connectionGater || {}),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
// handle the address encapsulation
|
|
275
|
+
if (this.config.leader &&
|
|
276
|
+
!this.address.protocol.includes(this.config.leader.protocol)) {
|
|
277
|
+
const parentAddress = this.config.parent || this.config.leader;
|
|
278
|
+
this.address = CoreUtils.childAddress(parentAddress, this.address);
|
|
279
|
+
}
|
|
280
|
+
return params;
|
|
281
|
+
}
|
|
282
|
+
async createNode() {
|
|
283
|
+
const params = await this.configure();
|
|
284
|
+
this.p2pNode = await createNode(params);
|
|
285
|
+
return this.p2pNode;
|
|
286
|
+
}
|
|
287
|
+
async connect(config) {
|
|
288
|
+
if (!this.connectionManager) {
|
|
289
|
+
this.logger.error('Connection manager not initialized');
|
|
290
|
+
throw new Error('Node is not ready to connect to other nodes');
|
|
291
|
+
}
|
|
292
|
+
const connection = await this.connectionManager
|
|
293
|
+
.connect(config)
|
|
294
|
+
.catch((error) => {
|
|
295
|
+
// TODO: we need to handle this better and document
|
|
296
|
+
if (error.message === 'Can not dial self') {
|
|
297
|
+
this.logger.error('Make sure you are entering the network not directly through the leader node.');
|
|
298
|
+
}
|
|
299
|
+
throw error;
|
|
300
|
+
});
|
|
301
|
+
if (!connection) {
|
|
302
|
+
throw new Error('Connection failed');
|
|
303
|
+
}
|
|
304
|
+
return connection;
|
|
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
|
+
}
|
|
342
|
+
async initialize() {
|
|
343
|
+
this.logger.debug('Initializing node...');
|
|
344
|
+
if (this.p2pNode && this.state !== NodeState.STOPPED) {
|
|
345
|
+
throw new Error('Node is not in a valid state to be initialized');
|
|
346
|
+
}
|
|
347
|
+
if (!this.address.validate()) {
|
|
348
|
+
throw new Error('Invalid address');
|
|
349
|
+
}
|
|
350
|
+
await this.createNode();
|
|
351
|
+
await this.initializeRouter();
|
|
352
|
+
// need to wait until our libpp2 node is initialized before calling super.initialize
|
|
353
|
+
await super.initialize();
|
|
354
|
+
this.logger.debug('Node initialized!', this.transports.map((t) => t.toString()));
|
|
355
|
+
this.address.setTransports(this.transports);
|
|
356
|
+
this.peerId = this.p2pNode.peerId;
|
|
357
|
+
// initialize connection manager
|
|
358
|
+
await this.initConnectionManager();
|
|
359
|
+
// initialize address resolution
|
|
360
|
+
this.router.addResolver(new oMethodResolver(this.address));
|
|
361
|
+
this.router.addResolver(new oNodeResolver(this.address));
|
|
362
|
+
// setup a fallback resolver for non-leader nodes
|
|
363
|
+
if (this.isLeader === false) {
|
|
364
|
+
this.logger.debug('Adding leader resolver fallback...');
|
|
365
|
+
this.router.addResolver(new oLeaderResolverFallback(this.address));
|
|
366
|
+
}
|
|
367
|
+
// initialize reconnection manager
|
|
368
|
+
await this.initReconnectionManager();
|
|
369
|
+
await this.hookInitializeFinished();
|
|
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
|
+
// }
|
|
388
|
+
async teardown() {
|
|
389
|
+
// Stop heartbeat before parent teardown
|
|
390
|
+
if (this.connectionHeartbeatManager) {
|
|
391
|
+
await this.connectionHeartbeatManager.stop();
|
|
392
|
+
}
|
|
393
|
+
await this.unregister();
|
|
394
|
+
await super.teardown();
|
|
395
|
+
if (this.p2pNode) {
|
|
396
|
+
await this.p2pNode.stop();
|
|
397
|
+
}
|
|
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
|
+
}
|
|
493
|
+
}
|