@zlink-systems/stream-connector 0.22.0 → 0.23.0

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.
@@ -1,11 +1,10 @@
1
1
  import type { ZlinkStreamMetadata } from '../ZlinkStreamMetadata';
2
- import type { ZlinkStreamEncodedPayload, ZlinkStreamFlow, ZlinkStreamMessage, ZlinkStreamResultOf } from '../ZlinkStreamModels';
2
+ import type { ZlinkStreamEncodedPayload, ZlinkStreamMessage, ZlinkStreamResultOf } from '../ZlinkStreamModels';
3
3
  export interface ZlinkStreamSendCall {
4
4
  packetName(name: string): ZlinkStreamSendCall;
5
5
  metadata(key: string, value: string): ZlinkStreamSendCall;
6
6
  metadata(metadata: ZlinkStreamMetadata): ZlinkStreamSendCall;
7
7
  compress(): ZlinkStreamSendCall;
8
- flowFrom(flow: ZlinkStreamFlow): ZlinkStreamSendCall;
9
8
  submit(): Promise<void>;
10
9
  }
11
10
  export interface ZlinkStreamRequestCall {
@@ -14,7 +13,6 @@ export interface ZlinkStreamRequestCall {
14
13
  metadata(metadata: ZlinkStreamMetadata): ZlinkStreamRequestCall;
15
14
  timeout(timeoutMs: number): ZlinkStreamRequestCall;
16
15
  compress(): ZlinkStreamRequestCall;
17
- flowFrom(flow: ZlinkStreamFlow): ZlinkStreamRequestCall;
18
16
  submit<TReply = unknown>(signal?: AbortSignal): Promise<TReply>;
19
17
  submitEncoded(signal?: AbortSignal): Promise<ZlinkStreamEncodedPayload>;
20
18
  submit(callback: (result: ZlinkStreamResultOf<ZlinkStreamEncodedPayload>) => void): void;
@@ -1,35 +1,19 @@
1
1
  import type { Disposable } from './ZlinkStreamInterfaces';
2
2
  import type { RequiredZlinkStreamConnectorOptions } from './ZlinkStreamConnectorOptions';
3
3
  import type { ZlinkStreamRequestCall, ZlinkStreamSendCall, ZlinkStreamExpectNoneCall, ZlinkStreamSequenceCall, ZlinkStreamWaitCall } from './Calls/ZlinkStreamCalls';
4
- import type { ZlinkStreamConnectionStateChanged, ZlinkStreamEncodedPayload, ZlinkStreamError, ZlinkStreamMessage } from './ZlinkStreamModels';
5
- import type { ZlinkStreamCloseReason, ZlinkStreamConnectionState, ZlinkStreamDiagnosticsLevel } from './ZlinkStreamEnums';
4
+ import type { ZlinkStreamConnectionStateChanged, ZlinkStreamEncodedPayload, ZlinkStreamError, ZlinkStreamMessage, ZlinkStreamRequestSendingContext, ZlinkStreamReplyReceivedContext } from './ZlinkStreamModels';
5
+ import type { ZlinkStreamCloseReason, ZlinkStreamConnectionState } from './ZlinkStreamEnums';
6
+ import type { ZlinkStreamActor } from './ZlinkStreamActor';
6
7
  export interface ZlinkStreamConnector {
7
8
  readonly isConnected: boolean;
8
9
  readonly state: ZlinkStreamConnectionState;
9
10
  readonly closeReason?: ZlinkStreamCloseReason;
10
11
  readonly options: RequiredZlinkStreamConnectorOptions;
11
12
  readonly pendingDispatchCount: number;
12
- /**
13
- * Current diagnostics level (spec 26 §4.1, spec stream-connector 32 §13).
14
- * Always equal to `options.diagnosticsLevel`.
15
- */
16
- readonly diagnosticsLevel: ZlinkStreamDiagnosticsLevel;
17
- /**
18
- * Changes the diagnostics level at runtime without recreating the
19
- * connector (spec 26 §4.1, spec stream-connector 32 §13). Applies to
20
- * processing points that read the level after this call returns; never
21
- * applied retroactively to frames already built. Rejects unknown values
22
- * with {@link import('./ZlinkStreamEnums').ZlinkStreamErrorCode.ConfigurationError}.
23
- */
24
- setDiagnosticsLevel(level: ZlinkStreamDiagnosticsLevel): void;
25
- /**
26
- * Asynchronous counterpart of {@link setDiagnosticsLevel} (spec
27
- * stream-connector 32 §13). Both surfaces change the same value, and this
28
- * one never replaces the synchronous surface: the synchronous call does not
29
- * wait for a completion, so a caller whose idiom is an awaited completion
30
- * uses this one instead. Rejects unknown values the same way.
31
- */
32
- setDiagnosticsLevelAsync(level: ZlinkStreamDiagnosticsLevel): Promise<void>;
13
+ readonly actors: readonly ZlinkStreamActor[];
14
+ actor(actorId: string): ZlinkStreamActor | undefined;
15
+ onActorBound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
16
+ onActorUnbound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
33
17
  /**
34
18
  * Number of packets received under `name` on the current connection (spec
35
19
  * stream-connector 32 §10). Counts arrivals, so consuming a message through
@@ -40,12 +24,14 @@ export interface ZlinkStreamConnector {
40
24
  onErrorReceived(handler: (error: ZlinkStreamError, signal?: AbortSignal) => Promise<void> | void): Disposable;
41
25
  onDisconnected(handler: (signal?: AbortSignal) => Promise<void> | void): Disposable;
42
26
  onConnectionStateChanged(handler: (change: ZlinkStreamConnectionStateChanged, signal?: AbortSignal) => Promise<void> | void): Disposable;
27
+ onRequestSending(handler: (context: ZlinkStreamRequestSendingContext) => void): Disposable;
28
+ onReplyReceived(handler: (context: ZlinkStreamReplyReceivedContext, signal?: AbortSignal) => Promise<void> | void): Disposable;
43
29
  connect(signal?: AbortSignal): Promise<void>;
44
30
  close(signal?: AbortSignal): Promise<void>;
45
31
  dispatch(signal?: AbortSignal): Promise<void>;
46
32
  send(payload: unknown, messageType?: Function): ZlinkStreamSendCall;
47
33
  request(payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
48
- on<TPayload = ZlinkStreamEncodedPayload>(name: string, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
34
+ on<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
49
35
  /**
50
36
  * Wait surfaces (spec stream-connector 32 §10.1). Each takes the packet name
51
37
  * the caller states explicitly, or the payload constructor the options'
@@ -0,0 +1,10 @@
1
+ import type { Disposable } from './ZlinkStreamInterfaces';
2
+ import type { ZlinkStreamRequestCall, ZlinkStreamSendCall } from './Calls/ZlinkStreamCalls';
3
+ import type { ZlinkStreamEncodedPayload, ZlinkStreamMessage } from './ZlinkStreamModels';
4
+ export interface ZlinkStreamActor {
5
+ readonly actorId: string;
6
+ readonly isBound: boolean;
7
+ send(payload: unknown, messageType?: Function): ZlinkStreamSendCall;
8
+ request(payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
9
+ on<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
10
+ }
@@ -1,4 +1,4 @@
1
- import type { ZlinkStreamCompression, ZlinkStreamDiagnosticsLevel, ZlinkStreamDispatchMode, ZlinkStreamTransport } from './ZlinkStreamEnums';
1
+ import type { ZlinkStreamCompression, ZlinkStreamDispatchMode, ZlinkStreamTransport } from './ZlinkStreamEnums';
2
2
  import type { ZlinkStreamEncodedPayload } from './ZlinkStreamModels';
3
3
  export interface ZlinkStreamConnectorOptions {
4
4
  readonly endpoint: string;
@@ -16,15 +16,6 @@ export interface ZlinkStreamConnectorOptions {
16
16
  readonly compression?: ZlinkStreamCompression;
17
17
  readonly compressionCodec?: ZlinkStreamCompressionCodec;
18
18
  readonly nameResolver?: ZlinkStreamPacketNameResolver;
19
- /**
20
- * Initial diagnostics level (spec 26 §4); defaults to
21
- * {@link ZlinkStreamDiagnosticsLevel.Errors}, which preserves the current
22
- * wire behavior. `Off` suppresses all observation-only flow handling
23
- * (spec 27 §4). This is only the level at construction time — spec 26
24
- * §4.1 / spec stream-connector 32 §13 require runtime read/write, provided
25
- * by `ZlinkStreamConnector.diagnosticsLevel` / `setDiagnosticsLevel(...)`.
26
- */
27
- readonly diagnosticsLevel?: ZlinkStreamDiagnosticsLevel;
28
19
  }
29
20
  export interface ZlinkStreamHeartbeatOptions {
30
21
  readonly enabled?: boolean;
@@ -77,5 +68,4 @@ export interface RequiredZlinkStreamConnectorOptions {
77
68
  readonly nameResolver: ZlinkStreamPacketNameResolver;
78
69
  readonly transportFactory: ZlinkStreamTransportFactory;
79
70
  readonly codec?: ZlinkStreamPayloadCodec;
80
- readonly diagnosticsLevel: ZlinkStreamDiagnosticsLevel;
81
71
  }
@@ -11,20 +11,6 @@ export declare enum ZlinkStreamDispatchMode {
11
11
  Manual = "manual",
12
12
  Immediate = "immediate"
13
13
  }
14
- /**
15
- * Connector diagnostics level (spec 26 §4). `Errors` is the default and
16
- * preserves the connector's established wire behavior (outbound frames carry
17
- * the flow pair). `Off` applies spec 27 §4: no flow id is generated or
18
- * attached to outbound frames (header flag 0x10 stays clear), inbound flow
19
- * fields are neither validated nor installed into received messages
20
- * (structural length checks are kept), and no trace-only work runs.
21
- */
22
- export declare enum ZlinkStreamDiagnosticsLevel {
23
- Off = "off",
24
- Errors = "errors",
25
- Normal = "normal",
26
- Detailed = "detailed"
27
- }
28
14
  export declare enum ZlinkStreamMessageKind {
29
15
  Send = 1,
30
16
  Request = 2,
@@ -38,9 +24,9 @@ export declare enum ZlinkStreamHeaderFlags {
38
24
  HasMetadata = 2,
39
25
  PayloadCompressed = 4,
40
26
  HasCorrelationId = 8,
41
- HasFlowId = 16
27
+ HasFlowId = 16,
28
+ HasActorSlot = 32
42
29
  }
43
- export type ZlinkFlowOrigin = 'Inbound' | 'Timer' | 'Application' | 'Lifecycle';
44
30
  export type ZlinkStreamCloseReason = 'ClientClose' | 'IdleTimeout' | 'HeartbeatTimeout' | 'ServerDrain' | 'ProtocolError' | 'TransportError';
45
31
  export declare enum ZlinkStreamErrorCode {
46
32
  Disconnected = "disconnected",
@@ -1,25 +1,28 @@
1
- import type { ZlinkStreamCodec, ZlinkStreamConnectionState, ZlinkStreamErrorCode, ZlinkStreamHeaderFlags, ZlinkStreamMessageKind, ZlinkFlowOrigin } from './ZlinkStreamEnums';
1
+ import type { ZlinkStreamCodec, ZlinkStreamConnectionState, ZlinkStreamErrorCode, ZlinkStreamHeaderFlags, ZlinkStreamMessageKind } from './ZlinkStreamEnums';
2
2
  import type { ZlinkStreamMetadata } from './ZlinkStreamMetadata';
3
3
  export interface ZlinkStreamEncodedPayload {
4
4
  readonly codec: ZlinkStreamCodec;
5
5
  readonly payload: Uint8Array;
6
6
  readonly messageType?: Function;
7
7
  }
8
- export interface ZlinkStreamFlow {
9
- readonly flowId: string;
10
- readonly flowOrigin: ZlinkFlowOrigin;
11
- }
12
8
  export interface ZlinkStreamMessage<TPayload = unknown> {
13
9
  readonly name: string;
14
10
  readonly metadata: ZlinkStreamMetadata;
15
11
  readonly payload: TPayload;
16
- /**
17
- * Present while diagnostics are enabled (the default). With
18
- * `diagnosticsLevel: Off` inbound flow fields are neither read nor
19
- * installed (spec 27 §4), so delivered messages carry no flow pair.
20
- */
21
- readonly flowId?: string;
22
- readonly flowOrigin?: ZlinkFlowOrigin;
12
+ readonly actorId?: string;
13
+ }
14
+ export interface ZlinkStreamRequestSendingContext {
15
+ readonly requestPacketName: string;
16
+ readonly actorId?: string;
17
+ setMetadata(key: string, value: string): void;
18
+ }
19
+ export interface ZlinkStreamReplyReceivedContext {
20
+ readonly requestPacketName: string;
21
+ readonly actorId?: string;
22
+ readonly succeeded: boolean;
23
+ readonly reply?: ZlinkStreamMessage<ZlinkStreamEncodedPayload>;
24
+ readonly error?: ZlinkStreamError;
25
+ readonly elapsed: number;
23
26
  }
24
27
  export interface ZlinkStreamHeader {
25
28
  readonly kind: ZlinkStreamMessageKind;
@@ -29,8 +32,7 @@ export interface ZlinkStreamHeader {
29
32
  readonly name: string;
30
33
  readonly metadata: ZlinkStreamMetadata;
31
34
  readonly correlationId?: string;
32
- readonly flowId?: string;
33
- readonly flowOrigin?: ZlinkFlowOrigin;
35
+ readonly actorSlot?: number;
34
36
  }
35
37
  export interface ZlinkStreamError {
36
38
  readonly code: ZlinkStreamErrorCode;
@@ -1,10 +1,11 @@
1
- export { ZlinkStreamTransport, ZlinkStreamCodec, ZlinkStreamCompression, ZlinkStreamDiagnosticsLevel, ZlinkStreamDispatchMode, ZlinkStreamMessageKind, ZlinkStreamHeaderFlags, ZlinkStreamErrorCode, ZlinkStreamConnectionState } from './ZlinkStreamEnums';
2
- export type { ZlinkFlowOrigin, ZlinkStreamCloseReason } from './ZlinkStreamEnums';
1
+ export { ZlinkStreamTransport, ZlinkStreamCodec, ZlinkStreamCompression, ZlinkStreamDispatchMode, ZlinkStreamMessageKind, ZlinkStreamHeaderFlags, ZlinkStreamErrorCode, ZlinkStreamConnectionState } from './ZlinkStreamEnums';
2
+ export type { ZlinkStreamCloseReason } from './ZlinkStreamEnums';
3
3
  export * from './ZlinkStreamConnectorOptions';
4
4
  export * from './ZlinkStreamInterfaces';
5
5
  export * from './ZlinkStreamMetadata';
6
- export type { ZlinkStreamEncodedPayload, ZlinkStreamFlow, ZlinkStreamMessage, ZlinkStreamError, ZlinkStreamConnectionStateChanged, ZlinkStreamResult, ZlinkStreamResultOf } from './ZlinkStreamModels';
6
+ export type { ZlinkStreamEncodedPayload, ZlinkStreamMessage, ZlinkStreamRequestSendingContext, ZlinkStreamReplyReceivedContext, ZlinkStreamError, ZlinkStreamConnectionStateChanged, ZlinkStreamResult, ZlinkStreamResultOf } from './ZlinkStreamModels';
7
7
  export { ZlinkStreamException } from './ZlinkStreamModels';
8
8
  export * from './ZlinkStreamJsonCodec';
9
9
  export * from './IZlinkStreamConnector';
10
+ export * from './ZlinkStreamActor';
10
11
  export * from './Calls/ZlinkStreamCalls';
@@ -1,33 +1,31 @@
1
- import { RequiredZlinkStreamConnectorOptions, ZlinkStreamEncodedPayload, ZlinkStreamFlow, ZlinkStreamMessage, ZlinkStreamMessageKind, ZlinkStreamMetadata, type ZlinkStreamRequestCall, type ZlinkStreamResultOf, type ZlinkStreamSendCall, type ZlinkStreamWaitCall } from '../../Contracts';
1
+ import { RequiredZlinkStreamConnectorOptions, ZlinkStreamEncodedPayload, ZlinkStreamMessage, ZlinkStreamMessageKind, ZlinkStreamMetadata, type ZlinkStreamRequestCall, type ZlinkStreamResultOf, type ZlinkStreamSendCall, type ZlinkStreamWaitCall } from '../../Contracts';
2
2
  interface ZlinkStreamConnectorSubmitter {
3
3
  readonly options: RequiredZlinkStreamConnectorOptions;
4
- sendEncoded(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, flow?: ZlinkStreamFlow): Promise<void>;
5
- requestEncoded(name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, timeoutMs: number, signal?: AbortSignal, flow?: ZlinkStreamFlow): Promise<ZlinkStreamEncodedPayload>;
4
+ sendEncoded(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, correlationId?: string, actorSlot?: number): Promise<void>;
5
+ requestEncoded(name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, timeoutMs: number, signal?: AbortSignal, actorSlot?: number): Promise<ZlinkStreamEncodedPayload>;
6
6
  waitForMessage<TPayload>(name: string, timeoutMs: number, predicate: (message: ZlinkStreamMessage<TPayload>) => boolean, signal?: AbortSignal): Promise<ZlinkStreamMessage<TPayload> | undefined>;
7
7
  }
8
8
  export declare class ZlinkStreamSendBuilder implements ZlinkStreamSendCall {
9
9
  private readonly connector;
10
10
  private readonly payload;
11
11
  private readonly state;
12
- constructor(connector: ZlinkStreamConnectorSubmitter, name: string | undefined, payload: ZlinkStreamEncodedPayload);
12
+ constructor(connector: ZlinkStreamConnectorSubmitter, name: string | undefined, payload: ZlinkStreamEncodedPayload, actorSlot?: number, validateActor?: () => void);
13
13
  packetName(name: string): this;
14
14
  metadata(key: string, value: string): this;
15
15
  metadata(metadata: ZlinkStreamMetadata): this;
16
16
  compress(): this;
17
- flowFrom(flow: ZlinkStreamFlow): this;
18
17
  submit(signal?: AbortSignal): Promise<void>;
19
18
  }
20
19
  export declare class ZlinkStreamRequestBuilder implements ZlinkStreamRequestCall {
21
20
  private readonly connector;
22
21
  private readonly payload;
23
22
  private readonly state;
24
- constructor(connector: ZlinkStreamConnectorSubmitter, name: string | undefined, payload: ZlinkStreamEncodedPayload);
23
+ constructor(connector: ZlinkStreamConnectorSubmitter, name: string | undefined, payload: ZlinkStreamEncodedPayload, actorSlot?: number, validateActor?: () => void);
25
24
  packetName(name: string): this;
26
25
  metadata(key: string, value: string): this;
27
26
  metadata(metadata: ZlinkStreamMetadata): this;
28
27
  timeout(timeoutMs: number): this;
29
28
  compress(): this;
30
- flowFrom(flow: ZlinkStreamFlow): this;
31
29
  submit<TReply = unknown>(signal?: AbortSignal): Promise<TReply>;
32
30
  submit(callback: (result: ZlinkStreamResultOf<ZlinkStreamEncodedPayload>) => void): void;
33
31
  submitEncoded(signal?: AbortSignal): Promise<ZlinkStreamEncodedPayload>;
@@ -1,20 +1,18 @@
1
1
  import type { RequiredZlinkStreamConnectorOptions, ZlinkStreamEncodedPayload, ZlinkStreamMetadata } from '../../Contracts';
2
2
  import { ZlinkStreamMessageKind } from '../../Contracts';
3
3
  import type { ZlinkStreamHeader } from '../../Contracts/ZlinkStreamModels';
4
- import type { ZlinkFlowOrigin } from '../../Contracts';
5
4
  export declare const ZLINK_STREAM_HEARTBEAT_PING = "$zlink.heartbeat.ping";
6
5
  export declare const ZLINK_STREAM_HEARTBEAT_PONG = "$zlink.heartbeat.pong";
7
6
  export declare class ZlinkStreamFrameProtocol {
8
7
  private readonly options;
9
8
  constructor(options: RequiredZlinkStreamConnectorOptions);
10
- encode(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, correlationId?: string, flowId?: string, flowOrigin?: ZlinkFlowOrigin): Uint8Array;
9
+ encode(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, correlationId?: string, actorSlot?: number): Uint8Array;
11
10
  encodeControl(name: string, payload?: Uint8Array<ArrayBuffer>): Uint8Array;
12
- decode(frameBytes: Uint8Array, flowEnabled?: boolean): {
11
+ decode(frameBytes: Uint8Array): {
13
12
  readonly header: ZlinkStreamHeader;
14
13
  readonly payload: Uint8Array;
15
14
  };
16
- flowEnabled(): boolean;
17
- decodeFrames(chunk: Uint8Array, flowEnabled?: boolean): readonly {
15
+ decodeFrames(chunk: Uint8Array): readonly {
18
16
  readonly header: ZlinkStreamHeader;
19
17
  readonly payload: Uint8Array;
20
18
  }[];
@@ -2,11 +2,6 @@ import { ZlinkStreamCodec, ZlinkStreamMessageKind, ZlinkStreamMetadata } from '.
2
2
  import type { ZlinkStreamHeader } from '../../Contracts/ZlinkStreamModels';
3
3
  export declare class ZlinkStreamHeaderCodec {
4
4
  static encode(header: ZlinkStreamHeader): Uint8Array;
5
- /**
6
- * `includeFlow=false` (diagnostics Off, spec 27 §4) skips reading and
7
- * validating the inbound flow fields while the structural length checks in
8
- * the wire decoder are preserved.
9
- */
10
- static decode(header: Uint8Array, includeFlow?: boolean): ZlinkStreamHeader;
5
+ static decode(header: Uint8Array): ZlinkStreamHeader;
11
6
  }
12
- export declare function buildHeader(kind: ZlinkStreamMessageKind, name: string, codec: ZlinkStreamCodec, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, correlationId?: string, flowId?: string, flowOrigin?: import('../../Contracts').ZlinkFlowOrigin): ZlinkStreamHeader;
7
+ export declare function buildHeader(kind: ZlinkStreamMessageKind, name: string, codec: ZlinkStreamCodec, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, correlationId?: string, actorSlot?: number): ZlinkStreamHeader;
@@ -0,0 +1,45 @@
1
+ import type { Disposable, ZlinkStreamActor, ZlinkStreamEncodedPayload, ZlinkStreamMessage, ZlinkStreamRequestCall, ZlinkStreamSendCall } from '../Contracts';
2
+ import type { ZlinkStreamReceivedMessages } from './ZlinkStreamReceivedMessages';
3
+ import type { ZlinkStreamConnectorEvents } from './ZlinkStreamConnectorEvents';
4
+ export declare const zlinkStreamActorBinding: unique symbol;
5
+ interface ActorConnector {
6
+ sendForActor(actor: DefaultZlinkStreamActor, payload: unknown, messageType?: Function): ZlinkStreamSendCall;
7
+ requestForActor(actor: DefaultZlinkStreamActor, payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
8
+ onActorMessage<TPayload>(actor: DefaultZlinkStreamActor, nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
9
+ }
10
+ export declare class DefaultZlinkStreamActor implements ZlinkStreamActor {
11
+ private readonly connector;
12
+ readonly actorId: string;
13
+ readonly slot: number;
14
+ private bound;
15
+ constructor(connector: ActorConnector, actorId: string, slot: number);
16
+ get isBound(): boolean;
17
+ send(payload: unknown, messageType?: Function): ZlinkStreamSendCall;
18
+ request(payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
19
+ on<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
20
+ ensureBound(): void;
21
+ close(): void;
22
+ }
23
+ export declare class ZlinkStreamActors {
24
+ private readonly connector;
25
+ private readonly receivedMessages;
26
+ private readonly events;
27
+ private readonly bySlot;
28
+ private readonly byId;
29
+ private readonly issued;
30
+ private readonly boundHandlers;
31
+ private readonly unboundHandlers;
32
+ constructor(connector: ActorConnector, receivedMessages: ZlinkStreamReceivedMessages, events: ZlinkStreamConnectorEvents);
33
+ get snapshot(): readonly ZlinkStreamActor[];
34
+ find(actorId: string): ZlinkStreamActor | undefined;
35
+ onBound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
36
+ onUnbound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
37
+ processControl(name: string, payload: Uint8Array, signal?: AbortSignal): boolean;
38
+ resolve(slot: number): DefaultZlinkStreamActor;
39
+ closeAll(signal?: AbortSignal): void;
40
+ private bind;
41
+ private unbind;
42
+ private queue;
43
+ private invoke;
44
+ }
45
+ export {};
@@ -1,4 +1,5 @@
1
- import { Disposable, RequiredZlinkStreamConnectorOptions, ZlinkStreamConnectionState, ZlinkStreamConnectionStateChanged, ZlinkStreamConnector, ZlinkStreamConnectorOptions, ZlinkStreamDiagnosticsLevel, ZlinkStreamEncodedPayload, ZlinkStreamError, ZlinkStreamExpectNoneCall, ZlinkStreamFlow, ZlinkStreamMessage, ZlinkStreamMessageKind, ZlinkStreamMetadata, ZlinkStreamRequestCall, ZlinkStreamSendCall, ZlinkStreamSequenceCall, ZlinkStreamWaitCall } from '../Contracts';
1
+ import { Disposable, RequiredZlinkStreamConnectorOptions, ZlinkStreamConnectionState, ZlinkStreamConnectionStateChanged, ZlinkStreamConnector, ZlinkStreamConnectorOptions, ZlinkStreamEncodedPayload, ZlinkStreamError, ZlinkStreamExpectNoneCall, ZlinkStreamMessage, ZlinkStreamRequestSendingContext, ZlinkStreamReplyReceivedContext, ZlinkStreamMessageKind, ZlinkStreamMetadata, ZlinkStreamRequestCall, ZlinkStreamActor, ZlinkStreamSendCall, ZlinkStreamSequenceCall, ZlinkStreamWaitCall } from '../Contracts';
2
+ import { DefaultZlinkStreamActor } from './ZlinkStreamActors';
2
3
  export declare class DefaultZlinkStreamConnector implements ZlinkStreamConnector {
3
4
  static readonly heartbeatPingName = "$zlink.heartbeat.ping";
4
5
  static readonly heartbeatPongName = "$zlink.heartbeat.pong";
@@ -9,13 +10,19 @@ export declare class DefaultZlinkStreamConnector implements ZlinkStreamConnector
9
10
  private readonly pendingRequests;
10
11
  private readonly frameSender;
11
12
  private readonly receiveDispatcher;
12
- private readonly diagnosticsLevelCell;
13
+ private readonly requestSendingHandlers;
14
+ private readonly replyReceivedHandlers;
15
+ private readonly boundActors;
13
16
  readonly options: RequiredZlinkStreamConnectorOptions;
14
17
  constructor(options: ZlinkStreamConnectorOptions);
15
18
  get isConnected(): boolean;
16
19
  get closeReason(): import("..").ZlinkStreamCloseReason | undefined;
17
20
  get state(): ZlinkStreamConnectionState;
18
21
  get pendingDispatchCount(): number;
22
+ get actors(): readonly ZlinkStreamActor[];
23
+ actor(actorId: string): ZlinkStreamActor | undefined;
24
+ onActorBound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
25
+ onActorUnbound(handler: (actor: ZlinkStreamActor, signal?: AbortSignal) => Promise<void> | void): Disposable;
19
26
  /**
20
27
  * Spec stream-connector 32 §10: how many packets carrying `name` arrived on
21
28
  * the current connection. Arrivals are what is counted, so a message a
@@ -24,39 +31,20 @@ export declare class DefaultZlinkStreamConnector implements ZlinkStreamConnector
24
31
  * the count to 0, a reconnect included.
25
32
  */
26
33
  receivedCount(name: string): number;
27
- /**
28
- * Current diagnostics level (spec 26 §4.1, spec stream-connector 32 §13).
29
- * Reflects the level set by the most recent {@link setDiagnosticsLevel}
30
- * call, or the construction-time option (default
31
- * {@link ZlinkStreamDiagnosticsLevel.Errors}) if it was never changed.
32
- */
33
- get diagnosticsLevel(): ZlinkStreamDiagnosticsLevel;
34
- /**
35
- * Changes the diagnostics level in place without recreating the connector
36
- * (spec 26 §4.1, spec stream-connector 32 §13). The change is an atomic
37
- * state update: it applies to processing points that read the level after
38
- * this call returns and is never applied retroactively to frames already
39
- * built. Rejects unknown values with {@link ZlinkStreamErrorCode.ConfigurationError}.
40
- * Spec stream-connector 32 §13: this surface changes the value without
41
- * waiting for anything; it is not a blocking call over the asynchronous pair,
42
- * which a receive callback would otherwise make wait for its own completion.
43
- */
44
- setDiagnosticsLevel(level: ZlinkStreamDiagnosticsLevel): void;
45
- /**
46
- * Asynchronous counterpart of {@link setDiagnosticsLevel} (spec
47
- * stream-connector 32 §13). It changes the same value; awaiting it is how a
48
- * caller observes the change, and it never replaces the synchronous surface.
49
- */
50
- setDiagnosticsLevelAsync(level: ZlinkStreamDiagnosticsLevel): Promise<void>;
51
34
  onErrorReceived(handler: (error: ZlinkStreamError, signal?: AbortSignal) => Promise<void> | void): Disposable;
52
35
  onDisconnected(handler: (signal?: AbortSignal) => Promise<void> | void): Disposable;
53
36
  onConnectionStateChanged(handler: (change: ZlinkStreamConnectionStateChanged, signal?: AbortSignal) => Promise<void> | void): Disposable;
37
+ onRequestSending(handler: (context: ZlinkStreamRequestSendingContext) => void): Disposable;
38
+ onReplyReceived(handler: (context: ZlinkStreamReplyReceivedContext, signal?: AbortSignal) => Promise<void> | void): Disposable;
54
39
  connect(signal?: AbortSignal): Promise<void>;
55
40
  close(signal?: AbortSignal): Promise<void>;
56
41
  dispatch(signal?: AbortSignal): Promise<void>;
57
42
  send(payload: unknown, messageType?: Function): ZlinkStreamSendCall;
58
43
  request(payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
59
- on<TPayload = ZlinkStreamEncodedPayload>(name: string, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
44
+ on<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
45
+ sendForActor(actor: DefaultZlinkStreamActor, payload: unknown, messageType?: Function): ZlinkStreamSendCall;
46
+ requestForActor(actor: DefaultZlinkStreamActor, payload: unknown, messageType?: Function): ZlinkStreamRequestCall;
47
+ onActorMessage<TPayload>(actor: DefaultZlinkStreamActor, nameOrType: string | Function, handler: (message: ZlinkStreamMessage<TPayload>, signal?: AbortSignal) => Promise<void> | void, messageType?: Function): Disposable;
60
48
  waitFor<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function): ZlinkStreamWaitCall<TPayload>;
61
49
  expectNone<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function): ZlinkStreamExpectNoneCall<TPayload>;
62
50
  waitForSequence<TPayload = ZlinkStreamEncodedPayload>(nameOrType: string | Function): ZlinkStreamSequenceCall<TPayload>;
@@ -83,12 +71,13 @@ export declare class DefaultZlinkStreamConnector implements ZlinkStreamConnector
83
71
  private encodePayload;
84
72
  private decodePayload;
85
73
  private decodeWaitPayload;
86
- sendEncoded(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, flow?: ZlinkStreamFlow, correlationId?: string): Promise<void>;
74
+ sendEncoded(kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, correlationId?: string, actorSlot?: number): Promise<void>;
87
75
  /**
88
76
  * Per-connector monotonic correlation id (hex). The client generates it on each request
89
- * and the server echoes it back on the reply, so flows can be joined across the wire.
77
+ * and the server echoes it back on the reply.
90
78
  */
91
79
  private nextCorrelationId;
92
- requestEncoded(name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, timeoutMs: number, signal?: AbortSignal, flow?: ZlinkStreamFlow): Promise<ZlinkStreamEncodedPayload>;
80
+ requestEncoded(name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, timeoutMs: number, signal?: AbortSignal, actorSlot?: number): Promise<ZlinkStreamEncodedPayload>;
81
+ private publishReplyReceived;
93
82
  private resolveNameOrDefault;
94
83
  }
@@ -6,12 +6,14 @@ import type { ZlinkStreamFrameSender } from './ZlinkStreamFrameSender';
6
6
  import type { ZlinkStreamPendingRequests } from './ZlinkStreamPendingRequests';
7
7
  import type { ZlinkStreamReceiveDispatcher } from './ZlinkStreamReceiveDispatcher';
8
8
  import type { ZlinkStreamReceivedMessages } from './ZlinkStreamReceivedMessages';
9
+ import type { ZlinkStreamActors } from './ZlinkStreamActors';
9
10
  export declare class ZlinkStreamConnectorLifecycle {
10
11
  private readonly options;
11
12
  private readonly pendingRequests;
12
13
  private readonly frameSender;
13
14
  private readonly receiveDispatcher;
14
15
  private readonly receivedMessages;
16
+ private readonly actors;
15
17
  private readonly events;
16
18
  private receiveLoopAbort;
17
19
  private receiveLoopSleeping;
@@ -30,7 +32,7 @@ export declare class ZlinkStreamConnectorLifecycle {
30
32
  private disconnectedPublished;
31
33
  private closeReasonValue?;
32
34
  private lateConnectCleanupError;
33
- constructor(options: RequiredZlinkStreamConnectorOptions, pendingRequests: ZlinkStreamPendingRequests, frameSender: ZlinkStreamFrameSender, receiveDispatcher: ZlinkStreamReceiveDispatcher, receivedMessages: ZlinkStreamReceivedMessages, events: ZlinkStreamConnectorEvents);
35
+ constructor(options: RequiredZlinkStreamConnectorOptions, pendingRequests: ZlinkStreamPendingRequests, frameSender: ZlinkStreamFrameSender, receiveDispatcher: ZlinkStreamReceiveDispatcher, receivedMessages: ZlinkStreamReceivedMessages, actors: ZlinkStreamActors, events: ZlinkStreamConnectorEvents);
34
36
  get isConnected(): boolean;
35
37
  get state(): ZlinkStreamConnectionState;
36
38
  get closeReason(): ZlinkStreamCloseReason | undefined;
@@ -102,5 +104,9 @@ export declare class ZlinkStreamConnectorLifecycle {
102
104
  * reporting the same failure a second time on the error surface.
103
105
  */
104
106
  private publishDisconnectedWithoutWaiting;
107
+ private queueDisconnected;
108
+ private queueState;
105
109
  private setState;
110
+ private transitionState;
111
+ private publishStateChange;
106
112
  }
@@ -1,4 +1,4 @@
1
- import { RequiredZlinkStreamConnectorOptions, ZlinkStreamConnectorOptions, ZlinkStreamDiagnosticsLevel, ZlinkStreamPacketNameResolver } from '../Contracts';
1
+ import { RequiredZlinkStreamConnectorOptions, ZlinkStreamConnectorOptions, ZlinkStreamPacketNameResolver } from '../Contracts';
2
2
  export declare function normalizeOptions(options: ZlinkStreamConnectorOptions, defaultTransportFactory: RequiredZlinkStreamConnectorOptions['transportFactory']): RequiredZlinkStreamConnectorOptions;
3
3
  /**
4
4
  * Spec stream-connector 32 §5 and the TypeScript projection §4: a payload type
@@ -14,4 +14,3 @@ export declare function normalizeOptions(options: ZlinkStreamConnectorOptions, d
14
14
  * bundle keeps class names.
15
15
  */
16
16
  export declare const defaultPacketNameResolver: ZlinkStreamPacketNameResolver;
17
- export declare function validateDiagnosticsLevel(level: ZlinkStreamDiagnosticsLevel | undefined): void;
@@ -1,12 +1,10 @@
1
- import type { ZlinkStreamConnection, ZlinkStreamEncodedPayload, ZlinkStreamFlow, ZlinkStreamMetadata, ZlinkStreamMessageKind } from '../Contracts';
1
+ import type { ZlinkStreamConnection, ZlinkStreamEncodedPayload, ZlinkStreamMetadata, ZlinkStreamMessageKind } from '../Contracts';
2
2
  import type { ZlinkStreamFrameProtocol } from './Protocol/ZlinkStreamFrameProtocol';
3
- import type { ZlinkFlowContext } from './ZlinkFlowContext';
4
3
  export declare class ZlinkStreamFrameSender {
5
4
  private readonly protocol;
6
- private readonly flowContext;
7
5
  private readonly pendingWrites;
8
- constructor(protocol: ZlinkStreamFrameProtocol, flowContext: ZlinkFlowContext);
9
- send(connection: ZlinkStreamConnection, kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, correlationId?: string, explicitFlow?: ZlinkStreamFlow): Promise<void>;
6
+ constructor(protocol: ZlinkStreamFrameProtocol);
7
+ send(connection: ZlinkStreamConnection, kind: ZlinkStreamMessageKind, name: string, payload: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata, compress: boolean, requestSeq: bigint | undefined, signal?: AbortSignal, correlationId?: string, actorSlot?: number): Promise<void>;
10
8
  sendControl(connection: ZlinkStreamConnection, name: string, signal?: AbortSignal): Promise<void>;
11
9
  drain(signal?: AbortSignal): Promise<void>;
12
10
  private write;
@@ -1,14 +1,14 @@
1
- import { ZlinkStreamEncodedPayload, ZlinkStreamError } from '../Contracts';
1
+ import { ZlinkStreamEncodedPayload, ZlinkStreamError, ZlinkStreamMessage, ZlinkStreamMetadata } from '../Contracts';
2
2
  export interface PendingZlinkStreamRequest {
3
3
  readonly requestSeq: bigint;
4
- readonly promise: Promise<ZlinkStreamEncodedPayload>;
4
+ readonly promise: Promise<ZlinkStreamMessage<ZlinkStreamEncodedPayload>>;
5
5
  }
6
6
  export declare class ZlinkStreamPendingRequests {
7
7
  private nextRequestSeq;
8
8
  private readonly active;
9
9
  get count(): number;
10
10
  create(packetName: string, timeoutMs: number): PendingZlinkStreamRequest;
11
- resolve(requestSeq: bigint, value: ZlinkStreamEncodedPayload): boolean;
11
+ resolve(requestSeq: bigint, value: ZlinkStreamEncodedPayload, metadata: ZlinkStreamMetadata): boolean;
12
12
  reject(requestSeq: bigint, error: ZlinkStreamError): boolean;
13
13
  cancel(requestSeq: bigint): void;
14
14
  failAll(error: ZlinkStreamError): void;
@@ -4,8 +4,8 @@ import type { ZlinkStreamConnectorEvents } from './ZlinkStreamConnectorEvents';
4
4
  import type { ZlinkStreamFrameSender } from './ZlinkStreamFrameSender';
5
5
  import type { ZlinkStreamPendingRequests } from './ZlinkStreamPendingRequests';
6
6
  import type { ZlinkStreamReceivedMessages } from './ZlinkStreamReceivedMessages';
7
- import type { ZlinkFlowContext } from './ZlinkFlowContext';
8
7
  import type { ZlinkStreamCloseReason } from '../Contracts';
8
+ import { type ZlinkStreamActors } from './ZlinkStreamActors';
9
9
  export interface ZlinkStreamReceiveResult {
10
10
  readonly available: boolean;
11
11
  readonly inbound: boolean;
@@ -16,9 +16,9 @@ export declare class ZlinkStreamReceiveDispatcher {
16
16
  private readonly receivedMessages;
17
17
  private readonly frameSender;
18
18
  private readonly events;
19
- private readonly flowContext;
19
+ private readonly actors;
20
20
  private readonly serverClosing?;
21
- constructor(protocol: ZlinkStreamFrameProtocol, pendingRequests: ZlinkStreamPendingRequests, receivedMessages: ZlinkStreamReceivedMessages, frameSender: ZlinkStreamFrameSender, events: ZlinkStreamConnectorEvents, flowContext: ZlinkFlowContext, serverClosing?: ((reason: ZlinkStreamCloseReason) => Promise<void>) | undefined);
21
+ constructor(protocol: ZlinkStreamFrameProtocol, pendingRequests: ZlinkStreamPendingRequests, receivedMessages: ZlinkStreamReceivedMessages, frameSender: ZlinkStreamFrameSender, events: ZlinkStreamConnectorEvents, actors: ZlinkStreamActors, serverClosing?: ((reason: ZlinkStreamCloseReason) => Promise<void>) | undefined);
22
22
  /**
23
23
  * @param isCurrent Tells whether the connection this batch was read from is
24
24
  * still the connector's connection. It is asked again at the head of every
@@ -74,6 +74,7 @@ export declare class ZlinkStreamReceivedMessages {
74
74
  */
75
75
  connectionEnded(): void;
76
76
  enqueue(message: ZlinkStreamMessage<ZlinkStreamEncodedPayload>, signal?: AbortSignal): void;
77
+ enqueueCallback(callback: () => Promise<void> | void): void;
77
78
  /**
78
79
  * Runs the registered handlers the receive path left queued. `Manual` calls
79
80
  * this from `dispatch`; `Immediate` has already drained on arrival.