@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,107 @@
|
|
|
1
|
+
import { oObject } from '@olane/o-core';
|
|
2
|
+
export declare enum CircuitState {
|
|
3
|
+
CLOSED = "CLOSED",// Normal operation, requests pass through
|
|
4
|
+
OPEN = "OPEN",// Circuit broken, requests fast-fail
|
|
5
|
+
HALF_OPEN = "HALF_OPEN"
|
|
6
|
+
}
|
|
7
|
+
export interface CircuitBreakerConfig {
|
|
8
|
+
failureThreshold: number;
|
|
9
|
+
openTimeoutMs: number;
|
|
10
|
+
halfOpenMaxAttempts: number;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface CircuitStats {
|
|
14
|
+
state: CircuitState;
|
|
15
|
+
consecutiveFailures: number;
|
|
16
|
+
totalFailures: number;
|
|
17
|
+
totalSuccesses: number;
|
|
18
|
+
lastFailureTime?: number;
|
|
19
|
+
lastSuccessTime?: number;
|
|
20
|
+
openedAt?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Circuit Breaker Pattern Implementation
|
|
24
|
+
*
|
|
25
|
+
* Prevents cascading failures by "breaking the circuit" when a service
|
|
26
|
+
* experiences persistent failures. This allows the system to fail fast
|
|
27
|
+
* rather than wasting resources on retries that are likely to fail.
|
|
28
|
+
*
|
|
29
|
+
* States:
|
|
30
|
+
* - CLOSED: Normal operation, all requests pass through
|
|
31
|
+
* - OPEN: Circuit broken due to failures, requests fail immediately
|
|
32
|
+
* - HALF_OPEN: Testing recovery, limited requests allowed
|
|
33
|
+
*
|
|
34
|
+
* Flow:
|
|
35
|
+
* 1. CLOSED -> OPEN: After N consecutive failures
|
|
36
|
+
* 2. OPEN -> HALF_OPEN: After timeout period
|
|
37
|
+
* 3. HALF_OPEN -> CLOSED: After successful request
|
|
38
|
+
* 4. HALF_OPEN -> OPEN: After failure in recovery
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const breaker = new CircuitBreaker('registry', {
|
|
43
|
+
* failureThreshold: 3,
|
|
44
|
+
* openTimeoutMs: 30000,
|
|
45
|
+
* halfOpenMaxAttempts: 1,
|
|
46
|
+
* enabled: true,
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* // Before making request
|
|
50
|
+
* if (!breaker.shouldAllowRequest()) {
|
|
51
|
+
* throw new Error('Circuit breaker is open');
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* try {
|
|
55
|
+
* const result = await makeRequest();
|
|
56
|
+
* breaker.recordSuccess();
|
|
57
|
+
* return result;
|
|
58
|
+
* } catch (error) {
|
|
59
|
+
* breaker.recordFailure();
|
|
60
|
+
* throw error;
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare class CircuitBreaker extends oObject {
|
|
65
|
+
private readonly serviceName;
|
|
66
|
+
private readonly config;
|
|
67
|
+
private state;
|
|
68
|
+
private consecutiveFailures;
|
|
69
|
+
private totalFailures;
|
|
70
|
+
private totalSuccesses;
|
|
71
|
+
private lastFailureTime?;
|
|
72
|
+
private lastSuccessTime?;
|
|
73
|
+
private openedAt?;
|
|
74
|
+
private halfOpenAttempts;
|
|
75
|
+
constructor(serviceName: string, config: CircuitBreakerConfig);
|
|
76
|
+
/**
|
|
77
|
+
* Check if a request should be allowed through the circuit breaker
|
|
78
|
+
* @returns true if request should proceed, false if should fast-fail
|
|
79
|
+
*/
|
|
80
|
+
shouldAllowRequest(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Record a successful request
|
|
83
|
+
*/
|
|
84
|
+
recordSuccess(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Record a failed request
|
|
87
|
+
*/
|
|
88
|
+
recordFailure(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get current statistics
|
|
91
|
+
*/
|
|
92
|
+
getStats(): CircuitStats;
|
|
93
|
+
/**
|
|
94
|
+
* Get current circuit state
|
|
95
|
+
*/
|
|
96
|
+
getState(): CircuitState;
|
|
97
|
+
/**
|
|
98
|
+
* Force reset the circuit breaker to CLOSED state
|
|
99
|
+
* Use with caution - mainly for testing or manual recovery
|
|
100
|
+
*/
|
|
101
|
+
reset(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Transition to a new state
|
|
104
|
+
*/
|
|
105
|
+
private transitionTo;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../../src/utils/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,oBAAY,YAAY;IACtB,MAAM,WAAW,CAAE,0CAA0C;IAC7D,IAAI,SAAS,CAAE,qCAAqC;IACpD,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,cAAe,SAAQ,OAAO;IAWvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAa;gBAGlB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,oBAAoB;IAW/C;;;OAGG;IACH,kBAAkB,IAAI,OAAO;IA2C7B;;OAEG;IACH,aAAa,IAAI,IAAI;IAkBrB;;OAEG;IACH,aAAa,IAAI,IAAI;IA+BrB;;OAEG;IACH,QAAQ,IAAI,YAAY;IAYxB;;OAEG;IACH,QAAQ,IAAI,YAAY;IAIxB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { oObject } from '@olane/o-core';
|
|
2
|
+
export var CircuitState;
|
|
3
|
+
(function (CircuitState) {
|
|
4
|
+
CircuitState["CLOSED"] = "CLOSED";
|
|
5
|
+
CircuitState["OPEN"] = "OPEN";
|
|
6
|
+
CircuitState["HALF_OPEN"] = "HALF_OPEN";
|
|
7
|
+
})(CircuitState || (CircuitState = {}));
|
|
8
|
+
/**
|
|
9
|
+
* Circuit Breaker Pattern Implementation
|
|
10
|
+
*
|
|
11
|
+
* Prevents cascading failures by "breaking the circuit" when a service
|
|
12
|
+
* experiences persistent failures. This allows the system to fail fast
|
|
13
|
+
* rather than wasting resources on retries that are likely to fail.
|
|
14
|
+
*
|
|
15
|
+
* States:
|
|
16
|
+
* - CLOSED: Normal operation, all requests pass through
|
|
17
|
+
* - OPEN: Circuit broken due to failures, requests fail immediately
|
|
18
|
+
* - HALF_OPEN: Testing recovery, limited requests allowed
|
|
19
|
+
*
|
|
20
|
+
* Flow:
|
|
21
|
+
* 1. CLOSED -> OPEN: After N consecutive failures
|
|
22
|
+
* 2. OPEN -> HALF_OPEN: After timeout period
|
|
23
|
+
* 3. HALF_OPEN -> CLOSED: After successful request
|
|
24
|
+
* 4. HALF_OPEN -> OPEN: After failure in recovery
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const breaker = new CircuitBreaker('registry', {
|
|
29
|
+
* failureThreshold: 3,
|
|
30
|
+
* openTimeoutMs: 30000,
|
|
31
|
+
* halfOpenMaxAttempts: 1,
|
|
32
|
+
* enabled: true,
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Before making request
|
|
36
|
+
* if (!breaker.shouldAllowRequest()) {
|
|
37
|
+
* throw new Error('Circuit breaker is open');
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* try {
|
|
41
|
+
* const result = await makeRequest();
|
|
42
|
+
* breaker.recordSuccess();
|
|
43
|
+
* return result;
|
|
44
|
+
* } catch (error) {
|
|
45
|
+
* breaker.recordFailure();
|
|
46
|
+
* throw error;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export class CircuitBreaker extends oObject {
|
|
51
|
+
constructor(serviceName, config) {
|
|
52
|
+
super();
|
|
53
|
+
this.serviceName = serviceName;
|
|
54
|
+
this.config = config;
|
|
55
|
+
this.state = CircuitState.CLOSED;
|
|
56
|
+
this.consecutiveFailures = 0;
|
|
57
|
+
this.totalFailures = 0;
|
|
58
|
+
this.totalSuccesses = 0;
|
|
59
|
+
this.halfOpenAttempts = 0;
|
|
60
|
+
this.logger.debug(`Circuit breaker initialized for ${serviceName}:`, `threshold=${config.failureThreshold},`, `timeout=${config.openTimeoutMs}ms,`, `enabled=${config.enabled}`);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if a request should be allowed through the circuit breaker
|
|
64
|
+
* @returns true if request should proceed, false if should fast-fail
|
|
65
|
+
*/
|
|
66
|
+
shouldAllowRequest() {
|
|
67
|
+
if (!this.config.enabled) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
switch (this.state) {
|
|
72
|
+
case CircuitState.CLOSED:
|
|
73
|
+
return true;
|
|
74
|
+
case CircuitState.OPEN:
|
|
75
|
+
// Check if timeout period has elapsed
|
|
76
|
+
if (this.openedAt &&
|
|
77
|
+
now - this.openedAt >= this.config.openTimeoutMs) {
|
|
78
|
+
this.logger.info(`Circuit breaker for ${this.serviceName} entering HALF_OPEN state`);
|
|
79
|
+
this.transitionTo(CircuitState.HALF_OPEN);
|
|
80
|
+
this.halfOpenAttempts = 0;
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
// Circuit still open, fast-fail
|
|
84
|
+
this.logger.debug(`Circuit breaker for ${this.serviceName} is OPEN, rejecting request`);
|
|
85
|
+
return false;
|
|
86
|
+
case CircuitState.HALF_OPEN:
|
|
87
|
+
// Allow limited attempts in HALF_OPEN state
|
|
88
|
+
if (this.halfOpenAttempts < this.config.halfOpenMaxAttempts) {
|
|
89
|
+
this.halfOpenAttempts++;
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
this.logger.debug(`Circuit breaker for ${this.serviceName} HALF_OPEN max attempts reached`);
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Record a successful request
|
|
98
|
+
*/
|
|
99
|
+
recordSuccess() {
|
|
100
|
+
if (!this.config.enabled) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.totalSuccesses++;
|
|
104
|
+
this.lastSuccessTime = Date.now();
|
|
105
|
+
this.consecutiveFailures = 0;
|
|
106
|
+
if (this.state === CircuitState.HALF_OPEN) {
|
|
107
|
+
this.logger.info(`Circuit breaker for ${this.serviceName} recovered, closing circuit`);
|
|
108
|
+
this.transitionTo(CircuitState.CLOSED);
|
|
109
|
+
this.halfOpenAttempts = 0;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Record a failed request
|
|
114
|
+
*/
|
|
115
|
+
recordFailure() {
|
|
116
|
+
if (!this.config.enabled) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.totalFailures++;
|
|
120
|
+
this.consecutiveFailures++;
|
|
121
|
+
this.lastFailureTime = Date.now();
|
|
122
|
+
if (this.state === CircuitState.HALF_OPEN) {
|
|
123
|
+
this.logger.warn(`Circuit breaker for ${this.serviceName} failed in HALF_OPEN, reopening circuit`);
|
|
124
|
+
this.transitionTo(CircuitState.OPEN);
|
|
125
|
+
this.openedAt = Date.now();
|
|
126
|
+
this.halfOpenAttempts = 0;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (this.state === CircuitState.CLOSED &&
|
|
130
|
+
this.consecutiveFailures >= this.config.failureThreshold) {
|
|
131
|
+
this.logger.error(`Circuit breaker for ${this.serviceName} opening after ${this.consecutiveFailures} consecutive failures`);
|
|
132
|
+
this.transitionTo(CircuitState.OPEN);
|
|
133
|
+
this.openedAt = Date.now();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get current statistics
|
|
138
|
+
*/
|
|
139
|
+
getStats() {
|
|
140
|
+
return {
|
|
141
|
+
state: this.state,
|
|
142
|
+
consecutiveFailures: this.consecutiveFailures,
|
|
143
|
+
totalFailures: this.totalFailures,
|
|
144
|
+
totalSuccesses: this.totalSuccesses,
|
|
145
|
+
lastFailureTime: this.lastFailureTime,
|
|
146
|
+
lastSuccessTime: this.lastSuccessTime,
|
|
147
|
+
openedAt: this.openedAt,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get current circuit state
|
|
152
|
+
*/
|
|
153
|
+
getState() {
|
|
154
|
+
return this.state;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Force reset the circuit breaker to CLOSED state
|
|
158
|
+
* Use with caution - mainly for testing or manual recovery
|
|
159
|
+
*/
|
|
160
|
+
reset() {
|
|
161
|
+
this.logger.info(`Circuit breaker for ${this.serviceName} manually reset`);
|
|
162
|
+
this.transitionTo(CircuitState.CLOSED);
|
|
163
|
+
this.consecutiveFailures = 0;
|
|
164
|
+
this.halfOpenAttempts = 0;
|
|
165
|
+
this.openedAt = undefined;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Transition to a new state
|
|
169
|
+
*/
|
|
170
|
+
transitionTo(newState) {
|
|
171
|
+
const oldState = this.state;
|
|
172
|
+
this.state = newState;
|
|
173
|
+
this.logger.debug(`Circuit breaker for ${this.serviceName}: ${oldState} -> ${newState}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { oObject, oAddress } from '@olane/o-core';
|
|
2
|
+
import { CircuitBreakerConfig } from './circuit-breaker.js';
|
|
3
|
+
export interface LeaderRetryConfig {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
maxAttempts: number;
|
|
6
|
+
baseDelayMs: number;
|
|
7
|
+
maxDelayMs: number;
|
|
8
|
+
timeoutMs: number;
|
|
9
|
+
circuitBreaker?: CircuitBreakerConfig;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Leader Request Wrapper
|
|
13
|
+
*
|
|
14
|
+
* Wraps requests to leader/registry with retry logic and circuit breaker.
|
|
15
|
+
* Used when leader may be temporarily unavailable (healing, maintenance).
|
|
16
|
+
*
|
|
17
|
+
* Strategy:
|
|
18
|
+
* 1. Detect if request is to leader or registry
|
|
19
|
+
* 2. Check circuit breaker state (fast-fail if open)
|
|
20
|
+
* 3. Apply retry logic with exponential backoff
|
|
21
|
+
* 4. Timeout individual attempts
|
|
22
|
+
* 5. Record success/failure in circuit breaker
|
|
23
|
+
* 6. Log retries for observability
|
|
24
|
+
*/
|
|
25
|
+
export declare class LeaderRequestWrapper extends oObject {
|
|
26
|
+
private config;
|
|
27
|
+
private leaderCircuitBreaker;
|
|
28
|
+
private registryCircuitBreaker;
|
|
29
|
+
constructor(config: LeaderRetryConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Check if address is a leader-related address that needs retry
|
|
32
|
+
*/
|
|
33
|
+
private isLeaderAddress;
|
|
34
|
+
/**
|
|
35
|
+
* Get the appropriate circuit breaker for the address
|
|
36
|
+
*/
|
|
37
|
+
private getCircuitBreaker;
|
|
38
|
+
/**
|
|
39
|
+
* Execute request with retry logic and circuit breaker
|
|
40
|
+
*/
|
|
41
|
+
execute<T>(requestFn: () => Promise<T>, address: oAddress, context?: string): Promise<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate exponential backoff delay
|
|
44
|
+
*/
|
|
45
|
+
private calculateBackoffDelay;
|
|
46
|
+
/**
|
|
47
|
+
* Sleep utility
|
|
48
|
+
*/
|
|
49
|
+
private sleep;
|
|
50
|
+
/**
|
|
51
|
+
* Get current configuration
|
|
52
|
+
*/
|
|
53
|
+
getConfig(): LeaderRetryConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Get circuit breaker statistics for observability
|
|
56
|
+
*/
|
|
57
|
+
getCircuitBreakerStats(): {
|
|
58
|
+
leader: import("./circuit-breaker.js").CircuitStats;
|
|
59
|
+
registry: import("./circuit-breaker.js").CircuitStats;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Reset circuit breakers (for testing or manual recovery)
|
|
63
|
+
*/
|
|
64
|
+
resetCircuitBreakers(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=leader-request-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leader-request-wrapper.d.ts","sourceRoot":"","sources":["../../../../src/utils/leader-request-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAC;AACvE,OAAO,EAEL,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,OAAO;IAInC,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,oBAAoB,CAAiB;IAC7C,OAAO,CAAC,sBAAsB,CAAiB;gBAE3B,MAAM,EAAE,iBAAiB;IAuB7C;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,QAAQ,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;IA2Gb;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;OAEG;IACH,sBAAsB;;;;IAOtB;;OAEG;IACH,oBAAoB,IAAI,IAAI;CAI7B"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { oObject } from '@olane/o-core';
|
|
2
|
+
import { CircuitBreaker, CircuitState, } from './circuit-breaker.js';
|
|
3
|
+
/**
|
|
4
|
+
* Leader Request Wrapper
|
|
5
|
+
*
|
|
6
|
+
* Wraps requests to leader/registry with retry logic and circuit breaker.
|
|
7
|
+
* Used when leader may be temporarily unavailable (healing, maintenance).
|
|
8
|
+
*
|
|
9
|
+
* Strategy:
|
|
10
|
+
* 1. Detect if request is to leader or registry
|
|
11
|
+
* 2. Check circuit breaker state (fast-fail if open)
|
|
12
|
+
* 3. Apply retry logic with exponential backoff
|
|
13
|
+
* 4. Timeout individual attempts
|
|
14
|
+
* 5. Record success/failure in circuit breaker
|
|
15
|
+
* 6. Log retries for observability
|
|
16
|
+
*/
|
|
17
|
+
export class LeaderRequestWrapper extends oObject {
|
|
18
|
+
constructor(config) {
|
|
19
|
+
super();
|
|
20
|
+
this.config = config;
|
|
21
|
+
// Initialize circuit breakers with defaults if not provided
|
|
22
|
+
const defaultCircuitBreakerConfig = {
|
|
23
|
+
failureThreshold: 3,
|
|
24
|
+
openTimeoutMs: 30000, // 30 seconds
|
|
25
|
+
halfOpenMaxAttempts: 1,
|
|
26
|
+
enabled: true,
|
|
27
|
+
};
|
|
28
|
+
const circuitConfig = {
|
|
29
|
+
...defaultCircuitBreakerConfig,
|
|
30
|
+
...(config.circuitBreaker || {}),
|
|
31
|
+
};
|
|
32
|
+
this.leaderCircuitBreaker = new CircuitBreaker('leader', circuitConfig);
|
|
33
|
+
this.registryCircuitBreaker = new CircuitBreaker('registry', circuitConfig);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if address is a leader-related address that needs retry
|
|
37
|
+
*/
|
|
38
|
+
isLeaderAddress(address) {
|
|
39
|
+
const addressStr = address.toString();
|
|
40
|
+
return addressStr === 'o://leader' || addressStr === 'o://registry';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the appropriate circuit breaker for the address
|
|
44
|
+
*/
|
|
45
|
+
getCircuitBreaker(address) {
|
|
46
|
+
const addressStr = address.toString();
|
|
47
|
+
if (addressStr === 'o://leader') {
|
|
48
|
+
return this.leaderCircuitBreaker;
|
|
49
|
+
}
|
|
50
|
+
if (addressStr === 'o://registry') {
|
|
51
|
+
return this.registryCircuitBreaker;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Execute request with retry logic and circuit breaker
|
|
57
|
+
*/
|
|
58
|
+
async execute(requestFn, address, context) {
|
|
59
|
+
// If retry disabled or not a leader address, execute directly
|
|
60
|
+
if (!this.config.enabled || !this.isLeaderAddress(address)) {
|
|
61
|
+
return await requestFn();
|
|
62
|
+
}
|
|
63
|
+
const circuitBreaker = this.getCircuitBreaker(address);
|
|
64
|
+
// Check circuit breaker state before attempting
|
|
65
|
+
if (circuitBreaker && !circuitBreaker.shouldAllowRequest()) {
|
|
66
|
+
const stats = circuitBreaker.getStats();
|
|
67
|
+
const error = new Error(`Circuit breaker is ${stats.state} for ${address.toString()}. ` +
|
|
68
|
+
`Consecutive failures: ${stats.consecutiveFailures}. ` +
|
|
69
|
+
`Fast-failing to prevent cascading failures.`);
|
|
70
|
+
this.logger.warn(`Circuit breaker blocked request to ${address.toString()}` +
|
|
71
|
+
(context ? ` (${context})` : ''));
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
let attempt = 0;
|
|
75
|
+
let lastError;
|
|
76
|
+
while (attempt < this.config.maxAttempts) {
|
|
77
|
+
attempt++;
|
|
78
|
+
try {
|
|
79
|
+
if (attempt > 5) {
|
|
80
|
+
this.logger.debug(`Retrying... Leader request attempt ${attempt}/${this.config.maxAttempts}` +
|
|
81
|
+
(context ? ` (${context})` : ''));
|
|
82
|
+
}
|
|
83
|
+
// Create timeout promise
|
|
84
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
85
|
+
setTimeout(() => reject(new Error(`Leader request timeout after ${this.config.timeoutMs}ms`)), this.config.timeoutMs);
|
|
86
|
+
});
|
|
87
|
+
// Race between request and timeout
|
|
88
|
+
const result = await Promise.race([requestFn(), timeoutPromise]);
|
|
89
|
+
// Success! Record in circuit breaker
|
|
90
|
+
if (circuitBreaker) {
|
|
91
|
+
circuitBreaker.recordSuccess();
|
|
92
|
+
}
|
|
93
|
+
if (attempt > 1) {
|
|
94
|
+
this.logger.info(`Leader request succeeded after ${attempt} attempts` +
|
|
95
|
+
(context ? ` (${context})` : ''));
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
101
|
+
// Record failure in circuit breaker
|
|
102
|
+
if (circuitBreaker) {
|
|
103
|
+
circuitBreaker.recordFailure();
|
|
104
|
+
}
|
|
105
|
+
this.logger.warn(`Leader request attempt ${attempt} failed: ${lastError.message}` +
|
|
106
|
+
(context ? ` (${context})` : ''));
|
|
107
|
+
// Check if circuit breaker has opened during retries
|
|
108
|
+
if (circuitBreaker && circuitBreaker.getState() === CircuitState.OPEN) {
|
|
109
|
+
this.logger.error(`Circuit breaker opened during retries for ${address.toString()}, stopping retry attempts` +
|
|
110
|
+
(context ? ` (${context})` : ''));
|
|
111
|
+
throw new Error(`Circuit breaker opened after ${attempt} attempts: ${lastError.message}`);
|
|
112
|
+
}
|
|
113
|
+
if (attempt < this.config.maxAttempts) {
|
|
114
|
+
const delay = this.calculateBackoffDelay(attempt);
|
|
115
|
+
this.logger.debug(`Waiting ${delay}ms before next attempt...`);
|
|
116
|
+
await this.sleep(delay);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// All attempts failed
|
|
121
|
+
this.logger.error(`Leader request failed after ${this.config.maxAttempts} attempts` +
|
|
122
|
+
(context ? ` (${context})` : ''));
|
|
123
|
+
throw lastError || new Error('Leader request failed');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate exponential backoff delay
|
|
127
|
+
*/
|
|
128
|
+
calculateBackoffDelay(attempt) {
|
|
129
|
+
const delay = this.config.baseDelayMs * Math.pow(2, attempt - 1);
|
|
130
|
+
return Math.min(delay, this.config.maxDelayMs);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sleep utility
|
|
134
|
+
*/
|
|
135
|
+
sleep(ms) {
|
|
136
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get current configuration
|
|
140
|
+
*/
|
|
141
|
+
getConfig() {
|
|
142
|
+
return { ...this.config };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get circuit breaker statistics for observability
|
|
146
|
+
*/
|
|
147
|
+
getCircuitBreakerStats() {
|
|
148
|
+
return {
|
|
149
|
+
leader: this.leaderCircuitBreaker.getStats(),
|
|
150
|
+
registry: this.registryCircuitBreaker.getStats(),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Reset circuit breakers (for testing or manual recovery)
|
|
155
|
+
*/
|
|
156
|
+
resetCircuitBreakers() {
|
|
157
|
+
this.leaderCircuitBreaker.reset();
|
|
158
|
+
this.registryCircuitBreaker.reset();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Libp2p, Multiaddr } from '@olane/o-config';
|
|
2
|
+
import { oObject } from '@olane/o-core';
|
|
3
|
+
import { CID } from 'multiformats';
|
|
4
|
+
import { oNodeAddress } from '../router/o-node.address.js';
|
|
5
|
+
export declare class NetworkUtils extends oObject {
|
|
6
|
+
static findProviders(p2pNode: Libp2p, cid: CID): Promise<{
|
|
7
|
+
transports: Multiaddr[];
|
|
8
|
+
staticAddress: string;
|
|
9
|
+
absoluteAddress: string;
|
|
10
|
+
}>;
|
|
11
|
+
static findNode(p2pNode: Libp2p, address: oNodeAddress): Promise<{
|
|
12
|
+
transports: Multiaddr[];
|
|
13
|
+
staticAddress: string;
|
|
14
|
+
absoluteAddress: string;
|
|
15
|
+
}>;
|
|
16
|
+
static advertiseValueToNetwork(value: CID, p2pNode: Libp2p): Promise<void>;
|
|
17
|
+
static dhtProvide(value: CID, p2pNode: Libp2p): Promise<void>;
|
|
18
|
+
static advertiseToNetwork(address: oNodeAddress, staticAddress: oNodeAddress, p2pNode: Libp2p): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=network.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/network.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,qBAAa,YAAa,SAAQ,OAAO;WACnB,aAAa,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,GAAG,GACP,OAAO,CAAC;QACT,UAAU,EAAE,SAAS,EAAE,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;WA2BkB,QAAQ,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;QACT,UAAU,EAAE,SAAS,EAAE,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;WAiBkB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;WAgBnD,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;WAYtC,kBAAkB,CACpC,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,YAAY,EAC3B,OAAO,EAAE,MAAM;CAoClB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { oObject } from '@olane/o-core';
|
|
2
|
+
import { oNodeAddress } from '../router/o-node.address.js';
|
|
3
|
+
export class NetworkUtils extends oObject {
|
|
4
|
+
static async findProviders(p2pNode, cid) {
|
|
5
|
+
let peer = null;
|
|
6
|
+
let multiaddrs = [];
|
|
7
|
+
for await (const event of p2pNode.services.dht.findProviders(cid)) {
|
|
8
|
+
// Look for events that contain actual provider information
|
|
9
|
+
if (event.name === 'PEER_RESPONSE') {
|
|
10
|
+
if (event.providers?.length === 0) {
|
|
11
|
+
NetworkUtils.log('No providers found');
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
peer = event.providers[0].id;
|
|
15
|
+
multiaddrs = event.providers[0].multiaddrs;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
if (event.name === 'PATH_ENDED' || event.name === 'QUERY_ERROR') {
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
transports: multiaddrs,
|
|
24
|
+
staticAddress: '',
|
|
25
|
+
absoluteAddress: '',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
static async findNode(p2pNode, address) {
|
|
29
|
+
const cid = await address.toCID();
|
|
30
|
+
return await Promise.race([
|
|
31
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Content routing provide timeout')), 5000)),
|
|
32
|
+
this.findProviders(p2pNode, cid),
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
static async advertiseValueToNetwork(value, p2pNode) {
|
|
36
|
+
NetworkUtils.log('Advertising value to network: ', value.toString());
|
|
37
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Advertise Content routing provide timeout')), 5000));
|
|
38
|
+
await Promise.race([
|
|
39
|
+
NetworkUtils.dhtProvide(value, p2pNode),
|
|
40
|
+
timeoutPromise,
|
|
41
|
+
]);
|
|
42
|
+
NetworkUtils.log('Advertise complete!');
|
|
43
|
+
}
|
|
44
|
+
static async dhtProvide(value, p2pNode) {
|
|
45
|
+
for await (const event of p2pNode.services.dht.provide(value)) {
|
|
46
|
+
if (event.name === 'PATH_ENDED' ||
|
|
47
|
+
event.name === 'QUERY_ERROR' ||
|
|
48
|
+
event.name === 'PEER_RESPONSE') {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static async advertiseToNetwork(address, staticAddress, p2pNode) {
|
|
54
|
+
NetworkUtils.log('Advertising to network our static and absolute addresses...');
|
|
55
|
+
// advertise the absolute address to the network with timeout
|
|
56
|
+
const add = new oNodeAddress(address.toString());
|
|
57
|
+
const absoluteAddressCid = await add.toCID();
|
|
58
|
+
// Add timeout to prevent hanging
|
|
59
|
+
NetworkUtils.advertiseValueToNetwork(absoluteAddressCid, p2pNode)
|
|
60
|
+
.then((d) => {
|
|
61
|
+
NetworkUtils.log(`${address.toString()} - Successfully advertised absolute address`);
|
|
62
|
+
})
|
|
63
|
+
.catch((error) => {
|
|
64
|
+
NetworkUtils.log(`${address.toString()} - Failed to advertise absolute address (this is normal for isolated nodes):`, error.message);
|
|
65
|
+
});
|
|
66
|
+
// advertise the static address to the network with timeout
|
|
67
|
+
const staticAdd = new oNodeAddress(staticAddress.toString());
|
|
68
|
+
const staticAddressCid = await staticAdd.toCID();
|
|
69
|
+
// Add timeout to prevent hanging
|
|
70
|
+
NetworkUtils.advertiseValueToNetwork(staticAddressCid, p2pNode).catch((error) => {
|
|
71
|
+
NetworkUtils.log('Failed to advertise absolute address (this is normal for isolated nodes):', error.message);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Stream } from '@olane/o-config';
|
|
2
|
+
import { oObject, oRequest } from '@olane/o-core';
|
|
3
|
+
export declare class StreamUtils extends oObject {
|
|
4
|
+
static processGenerator(request: oRequest, generator: AsyncGenerator<any>, stream: Stream): Promise<any>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=stream.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/stream.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAEL,OAAO,EACP,QAAQ,EAGT,MAAM,eAAe,CAAC;AAEvB,qBAAa,WAAY,SAAQ,OAAO;WAClB,gBAAgB,CAClC,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC;CA6BhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CoreUtils, oObject, ResponseBuilder, } from '@olane/o-core';
|
|
2
|
+
export class StreamUtils extends oObject {
|
|
3
|
+
static async processGenerator(request, generator, stream) {
|
|
4
|
+
const utils = new StreamUtils();
|
|
5
|
+
const responseBuilder = ResponseBuilder.create();
|
|
6
|
+
let aggregatedResult = '';
|
|
7
|
+
try {
|
|
8
|
+
// Send each chunk from the generator
|
|
9
|
+
// result should not be an oResponse, but rather a key value pair dict
|
|
10
|
+
for await (const result of generator) {
|
|
11
|
+
if (result.delta) {
|
|
12
|
+
aggregatedResult += result.delta;
|
|
13
|
+
}
|
|
14
|
+
const chunkResponse = await responseBuilder.buildChunk(request, result);
|
|
15
|
+
await CoreUtils.sendStreamResponse(chunkResponse, stream);
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
message: aggregatedResult,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
// If error occurs during streaming, send error response
|
|
23
|
+
const errorResponse = await responseBuilder.buildError(request, error, {
|
|
24
|
+
isStream: true,
|
|
25
|
+
isLast: true,
|
|
26
|
+
});
|
|
27
|
+
await CoreUtils.sendStreamResponse(errorResponse, stream);
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|