@igoforth/ws-rpc 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/adapters/client.d.ts +10 -11
  2. package/dist/adapters/client.js +5 -6
  3. package/dist/adapters/cloudflare-do.d.ts +7 -7
  4. package/dist/adapters/cloudflare-do.js +9 -9
  5. package/dist/adapters/index.d.ts +7 -7
  6. package/dist/adapters/index.js +3 -3
  7. package/dist/adapters/server.d.ts +7 -7
  8. package/dist/adapters/server.js +4 -4
  9. package/dist/adapters/types.d.ts +11 -11
  10. package/dist/codecs/cbor.d.ts +2 -2
  11. package/dist/codecs/factory.d.ts +2 -2
  12. package/dist/codecs/index.d.ts +3 -3
  13. package/dist/codecs/json.d.ts +3 -3
  14. package/dist/codecs/msgpack.d.ts +2 -2
  15. package/dist/{default-B6CVJfTD.js → default-DUF9qUU_.js} +1 -1
  16. package/dist/{default-DY19RYXA.d.ts → default-dpfi_YqB.d.ts} +4 -4
  17. package/dist/{durable-DENcbnTp.js → durable-8omxPmIp.js} +1 -1
  18. package/dist/{factory-Dapk2aA3.d.ts → factory-CoVA-Yix.d.ts} +1 -1
  19. package/dist/index.d.ts +9 -9
  20. package/dist/{interface-CoVQ0KnO.d.ts → interface-Cj6qYfKi.d.ts} +1 -1
  21. package/dist/{json-ZQ5sjEbW.d.ts → json-CQRE-rQe.d.ts} +1 -1
  22. package/dist/{memory-DSlJL2of.d.ts → memory-BFwexqyK.d.ts} +2 -2
  23. package/dist/{multi-peer-DFUqFBsx.js → multi-peer-ClznNCc6.js} +8 -8
  24. package/dist/peers/default.d.ts +6 -6
  25. package/dist/peers/default.js +1 -1
  26. package/dist/peers/durable.d.ts +7 -7
  27. package/dist/peers/durable.js +2 -2
  28. package/dist/peers/index.d.ts +7 -7
  29. package/dist/peers/index.js +2 -2
  30. package/dist/{protocol-4AgHYQBE.d.ts → protocol-CIjzi9ME.d.ts} +1 -1
  31. package/dist/protocol.d.ts +4 -4
  32. package/dist/{schema-BzaFWzeV.d.ts → schema-DuWFD2hs.d.ts} +23 -7
  33. package/dist/schema.d.ts +2 -2
  34. package/dist/{server-Dp8DSL5I.d.ts → server-C53TIGtY.d.ts} +6 -8
  35. package/dist/{sql-bFsho2vn.d.ts → sql-D2z59CPk.d.ts} +2 -2
  36. package/dist/storage/index.d.ts +6 -6
  37. package/dist/storage/interface.d.ts +2 -2
  38. package/dist/storage/memory.d.ts +5 -5
  39. package/dist/storage/sql.d.ts +5 -5
  40. package/dist/{types-NYBscFQZ.d.ts → types-DsiLgrDW.d.ts} +8 -8
  41. package/dist/types.d.ts +5 -5
  42. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
- import { a as InferEventData, h as StringKeys, m as RpcSchema, n as EventDef, p as Provider, t as Driver } from "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import { g as Provider, o as EventTuple, t as Driver, v as RpcSchema } from "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import { u as RpcProtocol } from "../protocol-4AgHYQBE.js";
6
- import { a as IRpcOptions, c as WebSocketOptions, o as IWebSocket } from "../types-NYBscFQZ.js";
7
- import "../default-DY19RYXA.js";
5
+ import { u as RpcProtocol } from "../protocol-CIjzi9ME.js";
6
+ import { a as IRpcOptions, c as WebSocketOptions, o as IWebSocket } from "../types-DsiLgrDW.js";
7
+ import "../default-dpfi_YqB.js";
8
8
  import { t as ReconnectOptions } from "../reconnect-DbcN0R_1.js";
9
9
  import { IAdapterHooks, IConnectionAdapter } from "./types.js";
10
10
 
@@ -13,7 +13,7 @@ import { IAdapterHooks, IConnectionAdapter } from "./types.js";
13
13
  /**
14
14
  * Options for creating an RpcClient
15
15
  */
16
- interface RpcClientOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IAdapterHooks<TRemoteSchema>, IRpcOptions<TLocalSchema, TRemoteSchema> {
16
+ interface RpcClientOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IAdapterHooks<TRemoteSchema["events"]>, IRpcOptions<TLocalSchema, TRemoteSchema> {
17
17
  /** WebSocket URL to connect to */
18
18
  url: string;
19
19
  /** Implementation of local methods */
@@ -44,7 +44,7 @@ declare class RpcClient<TLocalSchema extends RpcSchema, TRemoteSchema extends Rp
44
44
  readonly timeout: number;
45
45
  readonly protocol?: RpcProtocol;
46
46
  readonly provider: Provider<TLocalSchema["methods"]>;
47
- readonly hooks: IAdapterHooks<TRemoteSchema>;
47
+ readonly hooks: IAdapterHooks<TRemoteSchema["events"]>;
48
48
  private readonly reconnectOptions;
49
49
  private readonly createWebSocket;
50
50
  private ws;
@@ -72,10 +72,9 @@ declare class RpcClient<TLocalSchema extends RpcSchema, TRemoteSchema extends Rp
72
72
  /**
73
73
  * Emit an event to the server (fire-and-forget)
74
74
  *
75
- * @param event - Event name from local schema
76
- * @param data - Event data matching the schema
75
+ * @param args - Event name and data as tuple
77
76
  */
78
- emit<K extends StringKeys<TLocalSchema["events"]>>(event: K, data: TLocalSchema["events"] extends Record<string, EventDef> ? InferEventData<TLocalSchema["events"][K]> : never): void;
77
+ emit(...args: EventTuple<TLocalSchema["events"]>): void;
79
78
  /**
80
79
  * Connect to the WebSocket server
81
80
  *
@@ -5,7 +5,7 @@ import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
6
  import { t as WebSocketReadyState } from "../types-D_psiH09.js";
7
7
  import { n as defaultReconnectOptions, t as calculateReconnectDelay } from "../reconnect-CGAA_1Gf.js";
8
- import { t as RpcPeer } from "../default-B6CVJfTD.js";
8
+ import { t as RpcPeer } from "../default-DUF9qUU_.js";
9
9
  import "./types.js";
10
10
 
11
11
  //#region src/adapters/client.ts
@@ -81,15 +81,14 @@ var RpcClient = class {
81
81
  /**
82
82
  * Emit an event to the server (fire-and-forget)
83
83
  *
84
- * @param event - Event name from local schema
85
- * @param data - Event data matching the schema
84
+ * @param args - Event name and data as tuple
86
85
  */
87
- emit(event, data) {
86
+ emit(...args) {
88
87
  if (!this.peer) {
89
- console.warn(`Cannot emit event '${String(event)}': not connected`);
88
+ console.warn(`Cannot emit event '${args[0]}': not connected`);
90
89
  return;
91
90
  }
92
- this.peer.emit(event, data);
91
+ this.peer.emit(...args);
93
92
  }
94
93
  /**
95
94
  * Connect to the WebSocket server
@@ -1,10 +1,10 @@
1
- import { a as InferEventData, h as StringKeys, m as RpcSchema, n as EventDef, p as Provider } from "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import { g as Provider, o as EventTuple, v as RpcSchema } from "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import { a as IRpcOptions } from "../types-NYBscFQZ.js";
7
- import { t as RpcPeer } from "../default-DY19RYXA.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import { a as IRpcOptions } from "../types-DsiLgrDW.js";
7
+ import { t as RpcPeer } from "../default-dpfi_YqB.js";
8
8
  import { IMultiAdapterHooks, IMultiConnectionAdapter } from "./types.js";
9
9
  import { Constructor } from "type-fest";
10
10
  import { Actor } from "@cloudflare/actors";
@@ -28,7 +28,7 @@ interface IRpcActorHooks<TLocalSchema extends RpcSchema, TRemoteSchema extends R
28
28
  /** Called when a peer disconnects. Override to handle disconnection events. */
29
29
  onRpcDisconnect(peer: RpcPeer<TLocalSchema, TRemoteSchema>): void;
30
30
  /** Called when an event is received from a peer. Override to handle events. */
31
- onRpcEvent<K extends StringKeys<TRemoteSchema["events"]>>(peer: RpcPeer<TLocalSchema, TRemoteSchema>, event: K, data: TRemoteSchema["events"] extends Record<string, EventDef> ? InferEventData<TRemoteSchema["events"][K]> : never): void;
31
+ onRpcEvent(peer: RpcPeer<TLocalSchema, TRemoteSchema>, ...args: EventTuple<TRemoteSchema["events"]>): void;
32
32
  /** Called when a peer encounters an error. Override to handle errors. */
33
33
  onRpcError(peer: RpcPeer<TLocalSchema, TRemoteSchema> | null, error: Error): void;
34
34
  /** Called when a peer is recreated after hibernation. Override to handle recovery. */
@@ -4,9 +4,9 @@ import "../codecs-BmYG2d_U.js";
4
4
  import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
6
  import { t as SqlPendingCallStorage } from "../sql-CCjc6Bid.js";
7
- import "../default-B6CVJfTD.js";
8
- import { n as createDurableRpcPeerFactory } from "../durable-DENcbnTp.js";
9
- import { t as MultiPeerBase } from "../multi-peer-DFUqFBsx.js";
7
+ import "../default-DUF9qUU_.js";
8
+ import { n as createDurableRpcPeerFactory } from "../durable-8omxPmIp.js";
9
+ import { t as MultiPeerBase } from "../multi-peer-ClznNCc6.js";
10
10
 
11
11
  //#region src/adapters/cloudflare-do.ts
12
12
  /**
@@ -35,8 +35,8 @@ var DOMultiPeer = class extends MultiPeerBase {
35
35
  remoteSchema: this.remoteSchema,
36
36
  provider,
37
37
  ...this.protocol !== void 0 && { protocol: this.protocol },
38
- onEvent: (event, data) => {
39
- this.hooks.onEvent?.(peer, event, data);
38
+ onEvent: (...args) => {
39
+ this.hooks.onEvent?.(peer, ...args);
40
40
  },
41
41
  timeout: this.timeout
42
42
  });
@@ -148,7 +148,7 @@ function withRpc(Base, options) {
148
148
  hooks: {
149
149
  onConnect: (peer) => this.onRpcConnect(peer),
150
150
  onDisconnect: (peer) => this.onRpcDisconnect(peer),
151
- onEvent: (peer, event, data) => this.onRpcEvent(peer, event, data),
151
+ onEvent: (peer, ...args) => this.onRpcEvent(peer, ...args),
152
152
  onError: (peer, error) => this.onRpcError(peer, error),
153
153
  onPeerRecreated: (peer, ws) => this.onRpcPeerRecreated(peer, ws)
154
154
  }
@@ -159,7 +159,7 @@ function withRpc(Base, options) {
159
159
  /** Called when a peer disconnects. Override to handle disconnection events. */
160
160
  onRpcDisconnect(_peer) {}
161
161
  /** Called when an event is received from a peer. Override to handle events. */
162
- onRpcEvent(_peer, _event, _data) {}
162
+ onRpcEvent(_peer, ...[_event, _data]) {}
163
163
  /** Called when a peer encounters an error. Override to handle errors. */
164
164
  onRpcError(_peer, _error) {}
165
165
  /** Called when a peer is recreated after hibernation. Override to handle recovery. */
@@ -177,8 +177,8 @@ function withRpc(Base, options) {
177
177
  * @param data - Event data matching the schema
178
178
  * @param ids - Optional array of peer IDs to emit to (broadcasts to all if omitted)
179
179
  */
180
- emit(event, data, ids) {
181
- this._rpc.emit(event, data, ids);
180
+ emit(...args) {
181
+ this._rpc.emit(...args);
182
182
  }
183
183
  /**
184
184
  * Get the number of connected peers
@@ -1,13 +1,13 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import "../types-NYBscFQZ.js";
7
- import "../default-DY19RYXA.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import "../types-DsiLgrDW.js";
7
+ import "../default-dpfi_YqB.js";
8
8
  import { n as calculateReconnectDelay, r as defaultReconnectOptions, t as ReconnectOptions } from "../reconnect-DbcN0R_1.js";
9
9
  import { IAdapterHooks, IConnectionAdapter, IMultiAdapterHooks, IMultiConnectionAdapter, MultiCallOptions, MultiCallResult, MultiDriver } from "./types.js";
10
10
  import { ConnectionState, RpcClient, RpcClientOptions } from "./client.js";
11
11
  import { IDOHooks, IRpcActorHooks, RpcActorConstructor, withRpc } from "./cloudflare-do.js";
12
- import { n as RpcServerOptions, r as MultiPeerBase, t as RpcServer } from "../server-Dp8DSL5I.js";
12
+ import { n as RpcServerOptions, r as MultiPeerBase, t as RpcServer } from "../server-C53TIGtY.js";
13
13
  export { type ConnectionState, IAdapterHooks, IConnectionAdapter, type IDOHooks, IMultiAdapterHooks, IMultiConnectionAdapter, type IRpcActorHooks, MultiCallOptions, MultiCallResult, MultiDriver, MultiPeerBase, ReconnectOptions, type RpcActorConstructor, RpcClient, type RpcClientOptions, RpcServer, type RpcServerOptions, calculateReconnectDelay, defaultReconnectOptions, withRpc };
@@ -5,11 +5,11 @@ import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
6
  import "../sql-CCjc6Bid.js";
7
7
  import { n as defaultReconnectOptions, t as calculateReconnectDelay } from "../reconnect-CGAA_1Gf.js";
8
- import "../default-B6CVJfTD.js";
9
- import "../durable-DENcbnTp.js";
8
+ import "../default-DUF9qUU_.js";
9
+ import "../durable-8omxPmIp.js";
10
10
  import "./types.js";
11
11
  import { RpcClient } from "./client.js";
12
- import { t as MultiPeerBase } from "../multi-peer-DFUqFBsx.js";
12
+ import { t as MultiPeerBase } from "../multi-peer-ClznNCc6.js";
13
13
  import { withRpc } from "./cloudflare-do.js";
14
14
  import { RpcServer } from "./server.js";
15
15
 
@@ -1,10 +1,10 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import "../types-NYBscFQZ.js";
7
- import "../default-DY19RYXA.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import "../types-DsiLgrDW.js";
7
+ import "../default-dpfi_YqB.js";
8
8
  import "./types.js";
9
- import { n as RpcServerOptions, t as RpcServer } from "../server-Dp8DSL5I.js";
9
+ import { n as RpcServerOptions, t as RpcServer } from "../server-C53TIGtY.js";
10
10
  export { RpcServer, RpcServerOptions };
@@ -4,8 +4,8 @@ import "../codecs-BmYG2d_U.js";
4
4
  import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
6
  import { t as WebSocketReadyState } from "../types-D_psiH09.js";
7
- import { t as RpcPeer } from "../default-B6CVJfTD.js";
8
- import { t as MultiPeerBase } from "../multi-peer-DFUqFBsx.js";
7
+ import { t as RpcPeer } from "../default-DUF9qUU_.js";
8
+ import { t as MultiPeerBase } from "../multi-peer-ClznNCc6.js";
9
9
 
10
10
  //#region src/adapters/server.ts
11
11
  /**
@@ -80,8 +80,8 @@ var RpcServer = class extends MultiPeerBase {
80
80
  provider: this.provider,
81
81
  ...this.protocol !== void 0 && { protocol: this.protocol },
82
82
  timeout: this.timeout,
83
- onEvent: (event, data) => {
84
- this.hooks.onEvent?.(peer, event, data);
83
+ onEvent: (...args) => {
84
+ this.hooks.onEvent?.(peer, ...args);
85
85
  }
86
86
  });
87
87
  this.addPeer(ws, peer);
@@ -1,10 +1,10 @@
1
- import { f as MethodDef, h as StringKeys, i as EventHandler, l as InferOutput, m as RpcSchema, s as InferInput, t as Driver } from "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import { a as EventHandler, d as InferOutput, h as MethodDef, l as InferInput, r as EventDef, t as Driver, v as RpcSchema, y as StringKeys } from "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import { a as IRpcOptions, n as IMethodController, t as IEventController } from "../types-NYBscFQZ.js";
7
- import { t as RpcPeer } from "../default-DY19RYXA.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import { a as IRpcOptions, n as IMethodController, t as IEventController } from "../types-DsiLgrDW.js";
7
+ import { t as RpcPeer } from "../default-dpfi_YqB.js";
8
8
  import { n as calculateReconnectDelay, r as defaultReconnectOptions, t as ReconnectOptions } from "../reconnect-DbcN0R_1.js";
9
9
 
10
10
  //#region src/adapters/types.d.ts
@@ -78,7 +78,7 @@ type MultiDriver<TRemoteSchema extends RpcSchema> = TRemoteSchema["methods"] ext
78
78
  /**
79
79
  * Event emitter type for client callbacks
80
80
  */
81
- interface IAdapterHooks<TRemoteSchema extends RpcSchema> {
81
+ interface IAdapterHooks<TRemoteEvents extends Record<string, EventDef> | undefined> {
82
82
  /** Called when WebSocket connection opens */
83
83
  onConnect?(): void;
84
84
  /** Called when WebSocket connection closes */
@@ -88,7 +88,7 @@ interface IAdapterHooks<TRemoteSchema extends RpcSchema> {
88
88
  /** Called when reconnection fails after max attempts */
89
89
  onReconnectFailed?(): void;
90
90
  /** Called when receiving an event from the server */
91
- onEvent?: EventHandler<TRemoteSchema["events"]>;
91
+ onEvent?: EventHandler<TRemoteEvents>;
92
92
  }
93
93
  interface IMultiAdapterHooks<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> {
94
94
  /** Called when a peer connects */
@@ -101,10 +101,10 @@ interface IMultiAdapterHooks<TLocalSchema extends RpcSchema, TRemoteSchema exten
101
101
  onError?(peer: RpcPeer<TLocalSchema, TRemoteSchema> | null, error: Error): void;
102
102
  onClose?(): void;
103
103
  }
104
- interface IConnectionAdapter<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema>, IEventController<TLocalSchema, TRemoteSchema> {
104
+ interface IConnectionAdapter<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema["methods"]>, IEventController<TLocalSchema["events"], TRemoteSchema["events"]> {
105
105
  /** Driver for calling remote methods on connected peer */
106
106
  readonly driver: Driver<TRemoteSchema["methods"]>;
107
- readonly hooks: IAdapterHooks<TRemoteSchema>;
107
+ readonly hooks: IAdapterHooks<TRemoteSchema["events"]>;
108
108
  }
109
109
  /**
110
110
  * Interface for adapters that manage multiple connections
@@ -112,7 +112,7 @@ interface IConnectionAdapter<TLocalSchema extends RpcSchema, TRemoteSchema exten
112
112
  * Extends IRpcConnection - `emit()` broadcasts to all connected peers.
113
113
  * Implemented by RpcServer and Cloudflare DO adapter.
114
114
  */
115
- interface IMultiConnectionAdapter<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema>, IEventController<TLocalSchema, TRemoteSchema, [ids?: string[]]> {
115
+ interface IMultiConnectionAdapter<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema["methods"]>, IEventController<TLocalSchema["events"], TRemoteSchema["events"], [ids?: string[]]> {
116
116
  /** Driver for calling remote methods on connected peers */
117
117
  readonly driver: MultiDriver<TRemoteSchema>;
118
118
  readonly hooks: IMultiAdapterHooks<TLocalSchema, TRemoteSchema>;
@@ -1,5 +1,5 @@
1
- import "../schema-BzaFWzeV.js";
2
- import { n as CodecFactory } from "../factory-Dapk2aA3.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import { n as CodecFactory } from "../factory-CoVA-Yix.js";
3
3
  import * as z from "zod";
4
4
 
5
5
  //#region src/codecs/cbor.d.ts
@@ -1,3 +1,3 @@
1
- import "../schema-BzaFWzeV.js";
2
- import { a as WireCodec, c as createStringCodecFactory, i as StringCodec, l as isBinaryCodec, n as CodecFactory, o as WireData, r as CodecOptions, s as createBinaryCodecFactory, t as BinaryCodec, u as isStringCodec } from "../factory-Dapk2aA3.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import { a as WireCodec, c as createStringCodecFactory, i as StringCodec, l as isBinaryCodec, n as CodecFactory, o as WireData, r as CodecOptions, s as createBinaryCodecFactory, t as BinaryCodec, u as isStringCodec } from "../factory-CoVA-Yix.js";
3
3
  export { BinaryCodec, CodecFactory, CodecOptions, StringCodec, WireCodec, WireData, createBinaryCodecFactory, createStringCodecFactory, isBinaryCodec, isStringCodec };
@@ -1,5 +1,5 @@
1
- import "../schema-BzaFWzeV.js";
2
- import { a as WireCodec, c as createStringCodecFactory, i as StringCodec, l as isBinaryCodec, n as CodecFactory, o as WireData, r as CodecOptions, s as createBinaryCodecFactory, t as BinaryCodec, u as isStringCodec } from "../factory-Dapk2aA3.js";
3
- import { n as createJsonCodec, t as JsonCodec } from "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import { a as WireCodec, c as createStringCodecFactory, i as StringCodec, l as isBinaryCodec, n as CodecFactory, o as WireData, r as CodecOptions, s as createBinaryCodecFactory, t as BinaryCodec, u as isStringCodec } from "../factory-CoVA-Yix.js";
3
+ import { n as createJsonCodec, t as JsonCodec } from "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
5
  export { BinaryCodec, CodecFactory, CodecOptions, JsonCodec, StringCodec, WireCodec, WireData, createBinaryCodecFactory, createJsonCodec, createStringCodecFactory, isBinaryCodec, isStringCodec };
@@ -1,4 +1,4 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import { n as createJsonCodec, t as JsonCodec } from "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import { n as createJsonCodec, t as JsonCodec } from "../json-CQRE-rQe.js";
4
4
  export { JsonCodec, createJsonCodec };
@@ -1,5 +1,5 @@
1
- import "../schema-BzaFWzeV.js";
2
- import { n as CodecFactory } from "../factory-Dapk2aA3.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import { n as CodecFactory } from "../factory-CoVA-Yix.js";
3
3
  import * as z from "zod";
4
4
 
5
5
  //#region src/codecs/msgpack.d.ts
@@ -82,7 +82,7 @@ var RpcPeer = class {
82
82
  /**
83
83
  * Emit an event to the remote peer (fire-and-forget)
84
84
  */
85
- emit(event, data) {
85
+ emit(...[event, data]) {
86
86
  if (this.closed || this.ws.readyState !== 1) {
87
87
  console.warn(`Cannot emit event '${String(event)}': connection closed`);
88
88
  return;
@@ -1,6 +1,6 @@
1
- import { a as InferEventData, h as StringKeys, i as EventHandler, m as RpcSchema, n as EventDef, p as Provider, t as Driver } from "./schema-BzaFWzeV.js";
2
- import { g as WireInput, u as RpcProtocol } from "./protocol-4AgHYQBE.js";
3
- import { a as IRpcOptions, r as IMinWebSocket } from "./types-NYBscFQZ.js";
1
+ import { a as EventHandler, g as Provider, o as EventTuple, t as Driver, v as RpcSchema } from "./schema-DuWFD2hs.js";
2
+ import { g as WireInput, u as RpcProtocol } from "./protocol-CIjzi9ME.js";
3
+ import { a as IRpcOptions, r as IMinWebSocket } from "./types-DsiLgrDW.js";
4
4
 
5
5
  //#region src/peers/default.d.ts
6
6
 
@@ -55,7 +55,7 @@ declare class RpcPeer<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcS
55
55
  /**
56
56
  * Emit an event to the remote peer (fire-and-forget)
57
57
  */
58
- emit<K extends StringKeys<TLocalSchema["events"]>>(event: K, data: TLocalSchema["events"] extends Record<string, EventDef> ? InferEventData<TLocalSchema["events"][K]> : never): void;
58
+ emit(...[event, data]: EventTuple<TLocalSchema["events"]>): void;
59
59
  /**
60
60
  * Handle an incoming WebSocket message
61
61
  *
@@ -1,4 +1,4 @@
1
- import { t as RpcPeer } from "./default-B6CVJfTD.js";
1
+ import { t as RpcPeer } from "./default-DUF9qUU_.js";
2
2
 
3
3
  //#region src/peers/durable.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { d as LiteralStringUnion } from "./schema-BzaFWzeV.js";
1
+ import { p as LiteralStringUnion } from "./schema-DuWFD2hs.js";
2
2
  import * as z from "zod";
3
3
 
4
4
  //#region src/codecs/factory.d.ts
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- import { _ as method, a as InferEventData, c as InferMethods, f as MethodDef, g as event, i as EventHandler, l as InferOutput, m as RpcSchema, n as EventDef, o as InferEvents, p as Provider, s as InferInput, t as Driver } from "./schema-BzaFWzeV.js";
2
- import "./factory-Dapk2aA3.js";
3
- import "./json-ZQ5sjEbW.js";
1
+ import { a as EventHandler, b as event, c as InferEvents, d as InferOutput, g as Provider, h as MethodDef, l as InferInput, o as EventTuple, r as EventDef, s as InferEventData, t as Driver, u as InferMethods, v as RpcSchema, x as method } from "./schema-DuWFD2hs.js";
2
+ import "./factory-CoVA-Yix.js";
3
+ import "./json-CQRE-rQe.js";
4
4
  import "./index-Be7jjS77.js";
5
- import { _ as createProtocol, a as RpcEvent, c as RpcMessageCodec, d as RpcRequest, f as RpcRequestSchema, h as RpcWireCodec, i as RpcErrorSchema, l as RpcMessageSchema, m as RpcResponseSchema, n as RpcError$1, o as RpcEventSchema, p as RpcResponse, r as RpcErrorCodes, s as RpcMessage, t as JsonProtocol, u as RpcProtocol } from "./protocol-4AgHYQBE.js";
6
- import { a as IRpcOptions, c as WebSocketOptions, i as IRpcConnection, l as WebSocketReadyState, n as IMethodController, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, t as IEventController, u as WebSocketServerOptions } from "./types-NYBscFQZ.js";
5
+ import { _ as createProtocol, a as RpcEvent, c as RpcMessageCodec, d as RpcRequest, f as RpcRequestSchema, h as RpcWireCodec, i as RpcErrorSchema, l as RpcMessageSchema, m as RpcResponseSchema, n as RpcError$1, o as RpcEventSchema, p as RpcResponse, r as RpcErrorCodes, s as RpcMessage, t as JsonProtocol, u as RpcProtocol } from "./protocol-CIjzi9ME.js";
6
+ import { a as IRpcOptions, c as WebSocketOptions, i as IRpcConnection, l as WebSocketReadyState, n as IMethodController, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, t as IEventController, u as WebSocketServerOptions } from "./types-DsiLgrDW.js";
7
7
  import { n as calculateReconnectDelay, r as defaultReconnectOptions, t as ReconnectOptions } from "./reconnect-DbcN0R_1.js";
8
8
  import { RpcConnectionClosed, RpcError, RpcMethodNotFoundError, RpcRemoteError, RpcTimeoutError, RpcValidationError } from "./errors.js";
9
- import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "./interface-CoVQ0KnO.js";
10
- import { t as MemoryPendingCallStorage } from "./memory-DSlJL2of.js";
11
- import { t as SqlPendingCallStorage } from "./sql-bFsho2vn.js";
9
+ import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "./interface-Cj6qYfKi.js";
10
+ import { t as MemoryPendingCallStorage } from "./memory-BFwexqyK.js";
11
+ import { t as SqlPendingCallStorage } from "./sql-D2z59CPk.js";
12
12
  import "./storage/index.js";
13
13
  import "./utils/index.js";
14
- export { type AsyncPendingCallStorage, type Driver, type EventDef, type EventHandler, type IEventController, type IMethodController, type IMinWebSocket, type IRpcConnection, type IRpcOptions, type IWebSocket, type IWebSocketServer, type InferEventData, type InferEvents, type InferInput, type InferMethods, type InferOutput, JsonProtocol, type MaybePromise, MemoryPendingCallStorage, type MethodDef, type PendingCall, type PendingCallStorage, type Provider, type ReconnectOptions, RpcConnectionClosed, RpcError, RpcErrorCodes, type RpcError$1 as RpcErrorMessage, RpcErrorSchema, type RpcEvent, RpcEventSchema, type RpcMessage, RpcMessageCodec, RpcMessageSchema, RpcMethodNotFoundError, type RpcProtocol, RpcRemoteError, type RpcRequest, RpcRequestSchema, type RpcResponse, RpcResponseSchema, type RpcSchema, RpcTimeoutError, RpcValidationError, type RpcWireCodec, SqlPendingCallStorage, type StorageMode, type SyncPendingCallStorage, type WebSocketOptions, WebSocketReadyState, type WebSocketServerOptions, calculateReconnectDelay, createProtocol, defaultReconnectOptions, event, method };
14
+ export { type AsyncPendingCallStorage, type Driver, type EventDef, type EventHandler, type EventTuple, type IEventController, type IMethodController, type IMinWebSocket, type IRpcConnection, type IRpcOptions, type IWebSocket, type IWebSocketServer, type InferEventData, type InferEvents, type InferInput, type InferMethods, type InferOutput, JsonProtocol, type MaybePromise, MemoryPendingCallStorage, type MethodDef, type PendingCall, type PendingCallStorage, type Provider, type ReconnectOptions, RpcConnectionClosed, RpcError, RpcErrorCodes, type RpcError$1 as RpcErrorMessage, RpcErrorSchema, type RpcEvent, RpcEventSchema, type RpcMessage, RpcMessageCodec, RpcMessageSchema, RpcMethodNotFoundError, type RpcProtocol, RpcRemoteError, type RpcRequest, RpcRequestSchema, type RpcResponse, RpcResponseSchema, type RpcSchema, RpcTimeoutError, RpcValidationError, type RpcWireCodec, SqlPendingCallStorage, type StorageMode, type SyncPendingCallStorage, type WebSocketOptions, WebSocketReadyState, type WebSocketServerOptions, calculateReconnectDelay, createProtocol, defaultReconnectOptions, event, method };
@@ -1,4 +1,4 @@
1
- import { m as RpcSchema } from "./schema-BzaFWzeV.js";
1
+ import { v as RpcSchema } from "./schema-DuWFD2hs.js";
2
2
 
3
3
  //#region src/storage/interface.d.ts
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as CodecFactory } from "./factory-Dapk2aA3.js";
1
+ import { n as CodecFactory } from "./factory-CoVA-Yix.js";
2
2
  import * as z from "zod";
3
3
 
4
4
  //#region src/codecs/json.d.ts
@@ -1,5 +1,5 @@
1
- import { i as StringCodec } from "./factory-Dapk2aA3.js";
2
- import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-CoVQ0KnO.js";
1
+ import { i as StringCodec } from "./factory-CoVA-Yix.js";
2
+ import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-Cj6qYfKi.js";
3
3
 
4
4
  //#region src/storage/memory.d.ts
5
5
 
@@ -1,4 +1,4 @@
1
- import { t as RpcPeer } from "./default-B6CVJfTD.js";
1
+ import { t as RpcPeer } from "./default-DUF9qUU_.js";
2
2
 
3
3
  //#region src/adapters/multi-peer.ts
4
4
  /**
@@ -53,9 +53,9 @@ var MultiPeerBase = class {
53
53
  remoteSchema: this.remoteSchema,
54
54
  provider: this.provider,
55
55
  ...this.protocol !== void 0 && { protocol: this.protocol },
56
- onEvent: this.hooks.onEvent ? (event, data) => {
56
+ onEvent: this.hooks.onEvent ? (...args) => {
57
57
  const peer = this.findPeerByWs(ws);
58
- if (peer) this.hooks.onEvent(peer, event, data);
58
+ if (peer) this.hooks.onEvent?.(peer, ...args);
59
59
  } : void 0,
60
60
  timeout: this.timeout
61
61
  });
@@ -154,13 +154,13 @@ var MultiPeerBase = class {
154
154
  /**
155
155
  * Emit an event to connected peers
156
156
  *
157
- * @param event - Event name from local schema
158
- * @param data - Event data matching the schema
159
- * @param ids - Optional array of peer IDs to emit to (broadcasts to all if omitted)
157
+ * @param args - Event tuple followed by optional peer IDs
160
158
  */
161
- emit(event, data, ids) {
159
+ emit(...args) {
160
+ const ids = args[2];
161
+ const eventArgs = args.slice(0, 2);
162
162
  const validPeers = ids ? this.peers.values().filter((p) => ids.includes(p.id) && p.isOpen) : this.peers.values().filter((p) => p.isOpen);
163
- for (const peer of validPeers) peer.emit(event, data);
163
+ for (const peer of validPeers) peer.emit(...eventArgs);
164
164
  }
165
165
  /**
166
166
  * Close a specific peer by ID
@@ -1,8 +1,8 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import "../types-NYBscFQZ.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DY19RYXA.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import "../types-DsiLgrDW.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-dpfi_YqB.js";
8
8
  export { RpcPeer, RpcPeerOptions };
@@ -3,6 +3,6 @@ import "../json-Bshec-bZ.js";
3
3
  import "../codecs-BmYG2d_U.js";
4
4
  import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
- import { t as RpcPeer } from "../default-B6CVJfTD.js";
6
+ import { t as RpcPeer } from "../default-DUF9qUU_.js";
7
7
 
8
8
  export { RpcPeer };
@@ -1,11 +1,11 @@
1
- import { m as RpcSchema } from "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import { v as RpcSchema } from "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import { g as WireInput } from "../protocol-4AgHYQBE.js";
6
- import "../types-NYBscFQZ.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DY19RYXA.js";
8
- import { i as PendingCall, s as SyncPendingCallStorage } from "../interface-CoVQ0KnO.js";
5
+ import { g as WireInput } from "../protocol-CIjzi9ME.js";
6
+ import "../types-DsiLgrDW.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-dpfi_YqB.js";
8
+ import { i as PendingCall, s as SyncPendingCallStorage } from "../interface-Cj6qYfKi.js";
9
9
 
10
10
  //#region src/peers/durable.d.ts
11
11
 
@@ -3,7 +3,7 @@ import "../json-Bshec-bZ.js";
3
3
  import "../codecs-BmYG2d_U.js";
4
4
  import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
- import "../default-B6CVJfTD.js";
7
- import { n as createDurableRpcPeerFactory, t as DurableRpcPeer } from "../durable-DENcbnTp.js";
6
+ import "../default-DUF9qUU_.js";
7
+ import { n as createDurableRpcPeerFactory, t as DurableRpcPeer } from "../durable-8omxPmIp.js";
8
8
 
9
9
  export { DurableRpcPeer, createDurableRpcPeerFactory };
@@ -1,10 +1,10 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-4AgHYQBE.js";
6
- import "../types-NYBscFQZ.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DY19RYXA.js";
8
- import "../interface-CoVQ0KnO.js";
5
+ import "../protocol-CIjzi9ME.js";
6
+ import "../types-DsiLgrDW.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-dpfi_YqB.js";
8
+ import "../interface-Cj6qYfKi.js";
9
9
  import { CallContext, DurableRpcPeer, DurableRpcPeerOptions } from "./durable.js";
10
10
  export { type CallContext, DurableRpcPeer, type DurableRpcPeerOptions, RpcPeer, type RpcPeerOptions };
@@ -3,7 +3,7 @@ import "../json-Bshec-bZ.js";
3
3
  import "../codecs-BmYG2d_U.js";
4
4
  import "../protocol-_mpoOPp6.js";
5
5
  import "../errors-5BfreE63.js";
6
- import { t as RpcPeer } from "../default-B6CVJfTD.js";
7
- import { t as DurableRpcPeer } from "../durable-DENcbnTp.js";
6
+ import { t as RpcPeer } from "../default-DUF9qUU_.js";
7
+ import { t as DurableRpcPeer } from "../durable-8omxPmIp.js";
8
8
 
9
9
  export { DurableRpcPeer, RpcPeer };
@@ -1,4 +1,4 @@
1
- import { a as WireCodec } from "./factory-Dapk2aA3.js";
1
+ import { a as WireCodec } from "./factory-CoVA-Yix.js";
2
2
  import * as z from "zod";
3
3
 
4
4
  //#region src/protocol.d.ts
@@ -1,6 +1,6 @@
1
- import "./schema-BzaFWzeV.js";
2
- import "./factory-Dapk2aA3.js";
3
- import "./json-ZQ5sjEbW.js";
1
+ import "./schema-DuWFD2hs.js";
2
+ import "./factory-CoVA-Yix.js";
3
+ import "./json-CQRE-rQe.js";
4
4
  import "./index-Be7jjS77.js";
5
- import { _ as createProtocol, a as RpcEvent, c as RpcMessageCodec, d as RpcRequest, f as RpcRequestSchema, g as WireInput, h as RpcWireCodec, i as RpcErrorSchema, l as RpcMessageSchema, m as RpcResponseSchema, n as RpcError, o as RpcEventSchema, p as RpcResponse, r as RpcErrorCodes, s as RpcMessage, t as JsonProtocol, u as RpcProtocol } from "./protocol-4AgHYQBE.js";
5
+ import { _ as createProtocol, a as RpcEvent, c as RpcMessageCodec, d as RpcRequest, f as RpcRequestSchema, g as WireInput, h as RpcWireCodec, i as RpcErrorSchema, l as RpcMessageSchema, m as RpcResponseSchema, n as RpcError, o as RpcEventSchema, p as RpcResponse, r as RpcErrorCodes, s as RpcMessage, t as JsonProtocol, u as RpcProtocol } from "./protocol-CIjzi9ME.js";
6
6
  export { JsonProtocol, RpcError, RpcErrorCodes, RpcErrorSchema, RpcEvent, RpcEventSchema, RpcMessage, RpcMessageCodec, RpcMessageSchema, RpcProtocol, RpcRequest, RpcRequestSchema, RpcResponse, RpcResponseSchema, RpcWireCodec, WireInput, createProtocol };
@@ -14,6 +14,7 @@ interface MethodDef<TInput extends z.ZodType = z.ZodType, TOutput extends z.ZodT
14
14
  input: TInput;
15
15
  output: TOutput;
16
16
  }
17
+ type Method = (input: unknown) => unknown | Promise<unknown>;
17
18
  /**
18
19
  * Event definition with data schema
19
20
  */
@@ -21,6 +22,7 @@ interface EventDef<TData extends z.ZodType = z.ZodType> {
21
22
  _type: "event";
22
23
  data: TData;
23
24
  }
25
+ type Event = unknown;
24
26
  /**
25
27
  * Define an RPC method with input/output schemas
26
28
  *
@@ -62,6 +64,10 @@ interface RpcSchema {
62
64
  methods?: Record<string, MethodDef>;
63
65
  events?: Record<string, EventDef>;
64
66
  }
67
+ interface RpcCollection {
68
+ methods?: Record<string, Method>;
69
+ events?: Record<string, Event>;
70
+ }
65
71
  /**
66
72
  * Infer the input type from a method definition
67
73
  *
@@ -83,11 +89,11 @@ type InferEventData<T extends EventDef> = z.infer<T["data"]>;
83
89
  /**
84
90
  * Infer method signatures from a schema's methods
85
91
  */
86
- type InferMethods<T extends Record<string, MethodDef>> = { [K in StringKeys<T>]: (input: z.input<T[K]["input"]>) => z.output<T[K]["output"]> | Promise<z.output<T[K]["output"]>> };
92
+ type InferMethods<T extends RpcSchema["methods"]> = T extends Record<string, MethodDef> ? { [K in StringKeys<T>]: (input: z.input<T[K]["input"]>) => z.output<T[K]["output"]> | Promise<z.output<T[K]["output"]>> } : Record<string, Method>;
87
93
  /**
88
94
  * Infer event emitter signatures from a schema's events
89
95
  */
90
- type InferEvents<T extends Record<string, EventDef>> = { [K in StringKeys<T>]: InferEventData<T[K]> };
96
+ type InferEvents<T extends RpcSchema["events"]> = T extends Record<string, EventDef> ? { [K in StringKeys<T>]: z.infer<T[K]["data"]> } : Record<string, Event>;
91
97
  /**
92
98
  * Provider type - implements the local methods defined in a schema
93
99
  */
@@ -97,12 +103,22 @@ type Provider<T extends RpcSchema["methods"]> = T extends Record<string, MethodD
97
103
  */
98
104
  type Driver<T extends RpcSchema["methods"]> = T extends Record<string, MethodDef> ? InferMethods<T> : {};
99
105
  /**
100
- * Event handler type - handles incoming events
106
+ * Discriminated event tuple union - enables proper narrowing in switch statements.
101
107
  */
102
- type EventHandler<T extends RpcSchema["events"], ExtraArgs extends any[] = []> = <K$1 extends StringKeys<T>>(...args: [...ExtraArgs, event: K$1, data: T extends Record<string, EventDef> ? InferEventData<T[K$1]> : never]) => void;
108
+ type EventTuple<T extends RpcSchema["events"]> = T extends Record<string, EventDef> ? { [K in keyof T]: [event: K, data: z.infer<T[K]["data"]>] }[keyof T] : [event: string, data: unknown];
103
109
  /**
104
- * Event emitter type - emits outgoing events
110
+ * Event handler type - handles incoming events.
111
+ * Uses discriminated tuple union for proper type narrowing in switch statements.
105
112
  */
106
- type EventEmitter<T extends RpcSchema["events"], ExtraArgs extends any[] = []> = <K$1 extends StringKeys<T>>(...args: [event: K$1, data: T extends Record<string, EventDef> ? InferEventData<T[K$1]> : never, ...ExtraArgs]) => void;
113
+ interface EventHandler<T extends RpcSchema["events"], ExtraArgs extends any[] = []> {
114
+ (...args: [...ExtraArgs, ...EventTuple<T>]): void;
115
+ }
116
+ /**
117
+ * Event emitter type - emits outgoing events.
118
+ * Uses discriminated tuple union for proper type narrowing.
119
+ */
120
+ interface EventEmitter<T extends RpcSchema["events"], ExtraArgs extends any[] = []> {
121
+ (...args: [...EventTuple<T>, ...ExtraArgs]): void;
122
+ }
107
123
  //#endregion
108
- export { method as _, InferEventData as a, InferMethods as c, LiteralStringUnion as d, MethodDef as f, event as g, StringKeys as h, EventHandler as i, InferOutput as l, RpcSchema as m, EventDef as n, InferEvents as o, Provider as p, EventEmitter as r, InferInput as s, Driver as t, LiteralString as u };
124
+ export { RpcCollection as _, EventHandler as a, event as b, InferEvents as c, InferOutput as d, LiteralString as f, Provider as g, MethodDef as h, EventEmitter as i, InferInput as l, Method as m, Event as n, EventTuple as o, LiteralStringUnion as p, EventDef as r, InferEventData as s, Driver as t, InferMethods as u, RpcSchema as v, method as x, StringKeys as y };
package/dist/schema.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as method, a as InferEventData, c as InferMethods, d as LiteralStringUnion, f as MethodDef, g as event, h as StringKeys, i as EventHandler, l as InferOutput, m as RpcSchema, n as EventDef, o as InferEvents, p as Provider, r as EventEmitter, s as InferInput, t as Driver, u as LiteralString } from "./schema-BzaFWzeV.js";
2
- export { Driver, EventDef, EventEmitter, EventHandler, InferEventData, InferEvents, InferInput, InferMethods, InferOutput, LiteralString, LiteralStringUnion, MethodDef, Provider, RpcSchema, StringKeys, event, method };
1
+ import { _ as RpcCollection, a as EventHandler, b as event, c as InferEvents, d as InferOutput, f as LiteralString, g as Provider, h as MethodDef, i as EventEmitter, l as InferInput, m as Method, n as Event, o as EventTuple, p as LiteralStringUnion, r as EventDef, s as InferEventData, t as Driver, u as InferMethods, v as RpcSchema, x as method, y as StringKeys } from "./schema-DuWFD2hs.js";
2
+ export { Driver, Event, EventDef, EventEmitter, EventHandler, EventTuple, InferEventData, InferEvents, InferInput, InferMethods, InferOutput, LiteralString, LiteralStringUnion, Method, MethodDef, Provider, RpcCollection, RpcSchema, StringKeys, event, method };
@@ -1,7 +1,7 @@
1
- import { a as InferEventData, h as StringKeys, m as RpcSchema, n as EventDef, p as Provider } from "./schema-BzaFWzeV.js";
2
- import { u as RpcProtocol } from "./protocol-4AgHYQBE.js";
3
- import { a as IRpcOptions, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, u as WebSocketServerOptions } from "./types-NYBscFQZ.js";
4
- import { t as RpcPeer } from "./default-DY19RYXA.js";
1
+ import { g as Provider, o as EventTuple, v as RpcSchema } from "./schema-DuWFD2hs.js";
2
+ import { u as RpcProtocol } from "./protocol-CIjzi9ME.js";
3
+ import { a as IRpcOptions, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, u as WebSocketServerOptions } from "./types-DsiLgrDW.js";
4
+ import { t as RpcPeer } from "./default-dpfi_YqB.js";
5
5
  import { IMultiAdapterHooks, IMultiConnectionAdapter, MultiDriver } from "./adapters/types.js";
6
6
 
7
7
  //#region src/adapters/multi-peer.d.ts
@@ -111,11 +111,9 @@ declare abstract class MultiPeerBase<TLocalSchema extends RpcSchema, TRemoteSche
111
111
  /**
112
112
  * Emit an event to connected peers
113
113
  *
114
- * @param event - Event name from local schema
115
- * @param data - Event data matching the schema
116
- * @param ids - Optional array of peer IDs to emit to (broadcasts to all if omitted)
114
+ * @param args - Event tuple followed by optional peer IDs
117
115
  */
118
- emit<K extends StringKeys<TLocalSchema["events"]>>(event: K, data: TLocalSchema["events"] extends Record<string, EventDef> ? InferEventData<TLocalSchema["events"][K]> : never, ids?: string[]): void;
116
+ emit(...args: [...EventTuple<TLocalSchema["events"]>, ids?: string[] | undefined]): void;
119
117
  /**
120
118
  * Close a specific peer by ID
121
119
  *
@@ -1,5 +1,5 @@
1
- import { i as StringCodec } from "./factory-Dapk2aA3.js";
2
- import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-CoVQ0KnO.js";
1
+ import { i as StringCodec } from "./factory-CoVA-Yix.js";
2
+ import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-Cj6qYfKi.js";
3
3
 
4
4
  //#region src/storage/sql.d.ts
5
5
 
@@ -1,8 +1,8 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "../interface-CoVQ0KnO.js";
6
- import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-DSlJL2of.js";
7
- import { n as SqlPendingCallStorageOptions, t as SqlPendingCallStorage } from "../sql-bFsho2vn.js";
5
+ import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "../interface-Cj6qYfKi.js";
6
+ import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BFwexqyK.js";
7
+ import { n as SqlPendingCallStorageOptions, t as SqlPendingCallStorage } from "../sql-D2z59CPk.js";
8
8
  export { type AsyncPendingCallStorage, type MaybePromise, MemoryPendingCallStorage, type MemoryPendingCallStorageOptions, type PendingCall, type PendingCallStorage, SqlPendingCallStorage, type SqlPendingCallStorageOptions, type StorageMode, type SyncPendingCallStorage };
@@ -1,3 +1,3 @@
1
- import "../schema-BzaFWzeV.js";
2
- import { a as PendingCallStorage, i as PendingCall, n as IContinuationHandler, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "../interface-CoVQ0KnO.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import { a as PendingCallStorage, i as PendingCall, n as IContinuationHandler, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "../interface-Cj6qYfKi.js";
3
3
  export { AsyncPendingCallStorage, IContinuationHandler, MaybePromise, PendingCall, PendingCallStorage, StorageMode, SyncPendingCallStorage };
@@ -1,7 +1,7 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../interface-CoVQ0KnO.js";
6
- import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-DSlJL2of.js";
5
+ import "../interface-Cj6qYfKi.js";
6
+ import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BFwexqyK.js";
7
7
  export { MemoryPendingCallStorage, MemoryPendingCallStorageOptions };
@@ -1,7 +1,7 @@
1
- import "../schema-BzaFWzeV.js";
2
- import "../factory-Dapk2aA3.js";
3
- import "../json-ZQ5sjEbW.js";
1
+ import "../schema-DuWFD2hs.js";
2
+ import "../factory-CoVA-Yix.js";
3
+ import "../json-CQRE-rQe.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../interface-CoVQ0KnO.js";
6
- import { i as SqlStorageCursor, n as SqlPendingCallStorageOptions, r as SqlStorage, t as SqlPendingCallStorage } from "../sql-bFsho2vn.js";
5
+ import "../interface-Cj6qYfKi.js";
6
+ import { i as SqlStorageCursor, n as SqlPendingCallStorageOptions, r as SqlStorage, t as SqlPendingCallStorage } from "../sql-D2z59CPk.js";
7
7
  export { SqlPendingCallStorage, SqlPendingCallStorageOptions, SqlStorage, SqlStorageCursor };
@@ -1,5 +1,5 @@
1
- import { i as EventHandler, m as RpcSchema, p as Provider, r as EventEmitter } from "./schema-BzaFWzeV.js";
2
- import { g as WireInput, u as RpcProtocol } from "./protocol-4AgHYQBE.js";
1
+ import { a as EventHandler, g as Provider, h as MethodDef, i as EventEmitter, r as EventDef, v as RpcSchema } from "./schema-DuWFD2hs.js";
2
+ import { g as WireInput, u as RpcProtocol } from "./protocol-CIjzi9ME.js";
3
3
 
4
4
  //#region src/types.d.ts
5
5
 
@@ -83,9 +83,9 @@ interface IRpcOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcS
83
83
  *
84
84
  * @typeParam TLocalSchema - Schema defining local methods
85
85
  */
86
- interface IMethodController<TLocalSchema extends RpcSchema> {
86
+ interface IMethodController<TLocalMethods extends Record<string, MethodDef> | undefined> {
87
87
  /** Implementation of local methods */
88
- readonly provider: Provider<TLocalSchema["methods"]>;
88
+ readonly provider: Provider<TLocalMethods>;
89
89
  }
90
90
  /**
91
91
  * Interface for types that can emit and receive events
@@ -95,18 +95,18 @@ interface IMethodController<TLocalSchema extends RpcSchema> {
95
95
  * @typeParam EmitArgs - Additional arguments for emit (e.g., peer IDs)
96
96
  * @typeParam EventArgs - Additional arguments for event handler
97
97
  */
98
- interface IEventController<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema, EmitArgs extends any[] = [], EventArgs extends any[] = []> {
98
+ interface IEventController<TLocalEvents extends Record<string, EventDef> | undefined, TRemoteEvents extends Record<string, EventDef> | undefined, EmitArgs extends any[] = [], EventArgs extends any[] = []> {
99
99
  /** Emit an event to the connected peer */
100
- emit: EventEmitter<TLocalSchema["events"], EmitArgs>;
100
+ emit: EventEmitter<TLocalEvents, EmitArgs>;
101
101
  /** Called when receiving an event from the connected peer */
102
- onEvent?: EventHandler<TRemoteSchema["events"], EventArgs>;
102
+ onEvent?: EventHandler<TRemoteEvents, EventArgs>;
103
103
  }
104
104
  /**
105
105
  * Base interface for RPC connections (1-1)
106
106
  *
107
107
  * Implemented by RpcPeer.
108
108
  */
109
- interface IRpcConnection<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema>, IEventController<TLocalSchema, TRemoteSchema> {
109
+ interface IRpcConnection<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema>, IMethodController<TLocalSchema["methods"]>, IEventController<TLocalSchema["events"], TRemoteSchema["events"]> {
110
110
  /** Timeout for RPC calls in ms */
111
111
  readonly timeout: number;
112
112
  /** Handle an incoming WebSocket message */
package/dist/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import "./schema-BzaFWzeV.js";
2
- import "./factory-Dapk2aA3.js";
3
- import "./json-ZQ5sjEbW.js";
1
+ import "./schema-DuWFD2hs.js";
2
+ import "./factory-CoVA-Yix.js";
3
+ import "./json-CQRE-rQe.js";
4
4
  import "./index-Be7jjS77.js";
5
- import "./protocol-4AgHYQBE.js";
6
- import { a as IRpcOptions, c as WebSocketOptions, i as IRpcConnection, l as WebSocketReadyState, n as IMethodController, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, t as IEventController, u as WebSocketServerOptions } from "./types-NYBscFQZ.js";
5
+ import "./protocol-CIjzi9ME.js";
6
+ import { a as IRpcOptions, c as WebSocketOptions, i as IRpcConnection, l as WebSocketReadyState, n as IMethodController, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, t as IEventController, u as WebSocketServerOptions } from "./types-DsiLgrDW.js";
7
7
  export { IEventController, IMethodController, IMinWebSocket, IRpcConnection, IRpcOptions, IWebSocket, IWebSocketServer, WebSocketOptions, WebSocketReadyState, WebSocketServerOptions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igoforth/ws-rpc",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Bidirectional RPC over WebSocket with Zod schema validation, TypeScript inference, and Cloudflare Durable Object support",
5
5
  "type": "module",
6
6
  "license": "MIT",