@igoforth/ws-rpc 1.1.0 → 1.1.2

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 (34) hide show
  1. package/README.md +3 -3
  2. package/dist/adapters/client.d.ts +12 -12
  3. package/dist/adapters/cloudflare-do.d.ts +8 -8
  4. package/dist/adapters/index.d.ts +7 -7
  5. package/dist/adapters/server.d.ts +7 -7
  6. package/dist/adapters/types.d.ts +13 -13
  7. package/dist/codecs/cbor.d.ts +2 -2
  8. package/dist/codecs/factory.d.ts +2 -2
  9. package/dist/codecs/index.d.ts +3 -3
  10. package/dist/codecs/json.d.ts +3 -3
  11. package/dist/codecs/msgpack.d.ts +2 -2
  12. package/dist/{default-DOftsqyK.d.ts → default-CKJtfuap.d.ts} +7 -7
  13. package/dist/{factory-BGezZgAP.d.ts → factory-CZioNF7N.d.ts} +1 -1
  14. package/dist/index.d.ts +8 -8
  15. package/dist/{interface-CuTDe_Pq.d.ts → interface-RK7s4DQf.d.ts} +1 -1
  16. package/dist/{json-BZzd4eNj.d.ts → json-1pVWk4mJ.d.ts} +1 -1
  17. package/dist/{memory-BbN1TQZi.d.ts → memory-BxojNC-D.d.ts} +2 -2
  18. package/dist/peers/default.d.ts +6 -6
  19. package/dist/peers/durable.d.ts +7 -7
  20. package/dist/peers/index.d.ts +7 -7
  21. package/dist/{protocol-ipDMUaRc.d.ts → protocol-DxoHWqMA.d.ts} +1 -1
  22. package/dist/protocol.d.ts +4 -4
  23. package/dist/schema-B0zKtaPR.d.ts +118 -0
  24. package/dist/schema.d.ts +2 -2
  25. package/dist/{server-BJm2ViQB.d.ts → server-q205-WY8.d.ts} +8 -8
  26. package/dist/{sql-BpEL9udW.d.ts → sql-xafn7bdx.d.ts} +2 -2
  27. package/dist/storage/index.d.ts +6 -6
  28. package/dist/storage/interface.d.ts +2 -2
  29. package/dist/storage/memory.d.ts +5 -5
  30. package/dist/storage/sql.d.ts +5 -5
  31. package/dist/{types-BGM8eZe5.d.ts → types-BUYZxMco.d.ts} +8 -8
  32. package/dist/types.d.ts +5 -5
  33. package/package.json +1 -1
  34. package/dist/schema-BPJJ9slm.d.ts +0 -108
package/README.md CHANGED
@@ -305,9 +305,9 @@ Real WebSocket RPC round-trip benchmarks (GitHub Actions runner, Node.js 22):
305
305
  **Throughput (ops/sec):**
306
306
  | Payload | JSON | MessagePack | CBOR | Fastest |
307
307
  |---------|------|-------------|------|---------|
308
- | Small | 1443 | 1798 | 1812 | CBOR |
309
- | Medium | 1514 | 1591 | 5142 | CBOR |
310
- | Large | 1656 | 1270 | 1999 | CBOR |
308
+ | Small | 0 | 0 | 0 | JSON |
309
+ | Medium | 0 | 0 | 0 | JSON |
310
+ | Large | 0 | 0 | 0 | JSON |
311
311
 
312
312
  > Benchmarks run automatically via GitHub Actions. Results may vary based on runner load.
313
313
  > Run locally with `pnpm bench` for your environment.
@@ -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-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import { _ as RpcSchema, h as Provider, s as InferEvents, t as Driver, v as StringKeys } from "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import { u as RpcProtocol } from "../protocol-ipDMUaRc.js";
6
- import { a as IRpcOptions, c as WebSocketOptions, o as IWebSocket } from "../types-BGM8eZe5.js";
7
- import "../default-DOftsqyK.js";
5
+ import { u as RpcProtocol } from "../protocol-DxoHWqMA.js";
6
+ import { a as IRpcOptions, c as WebSocketOptions, o as IWebSocket } from "../types-BUYZxMco.js";
7
+ import "../default-CKJtfuap.js";
8
8
  import { t as ReconnectOptions } from "../reconnect-DbcN0R_1.js";
9
9
  import { IAdapterHooks, IConnectionAdapter } from "./types.js";
10
10
 
@@ -13,11 +13,11 @@ 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 */
20
- provider: Provider<TLocalSchema>;
20
+ provider: Provider<TLocalSchema["methods"]>;
21
21
  /** Auto-reconnect options (set to false to disable) */
22
22
  reconnect?: ReconnectOptions | false;
23
23
  /** Automatically connect when client is created (default: false) */
@@ -43,8 +43,8 @@ declare class RpcClient<TLocalSchema extends RpcSchema, TRemoteSchema extends Rp
43
43
  readonly remoteSchema: TRemoteSchema;
44
44
  readonly timeout: number;
45
45
  readonly protocol?: RpcProtocol;
46
- readonly provider: Provider<TLocalSchema>;
47
- readonly hooks: IAdapterHooks<TRemoteSchema>;
46
+ readonly provider: Provider<TLocalSchema["methods"]>;
47
+ readonly hooks: IAdapterHooks<TRemoteSchema["events"]>;
48
48
  private readonly reconnectOptions;
49
49
  private readonly createWebSocket;
50
50
  private ws;
@@ -68,14 +68,14 @@ declare class RpcClient<TLocalSchema extends RpcSchema, TRemoteSchema extends Rp
68
68
  * @returns Driver proxy for calling remote methods
69
69
  * @throws Error if not connected
70
70
  */
71
- get driver(): Driver<TRemoteSchema>;
71
+ get driver(): Driver<TRemoteSchema["methods"]>;
72
72
  /**
73
73
  * Emit an event to the server (fire-and-forget)
74
74
  *
75
75
  * @param event - Event name from local schema
76
76
  * @param data - Event data matching the schema
77
77
  */
78
- emit<K extends StringKeys<TLocalSchema["events"]>>(event: K, data: TLocalSchema["events"] extends Record<string, EventDef> ? InferEventData<TLocalSchema["events"][K]> : never): void;
78
+ emit<K extends StringKeys<InferEvents<TLocalSchema["events"]>>>(event: K, data: InferEvents<TLocalSchema["events"]>[K]): void;
79
79
  /**
80
80
  * Connect to the WebSocket server
81
81
  *
@@ -1,10 +1,10 @@
1
- import { a as InferEventData, h as StringKeys, m as RpcSchema, n as EventDef, p as Provider } from "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import { _ as RpcSchema, h as Provider, s as InferEvents, v as StringKeys } from "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import { a as IRpcOptions } from "../types-BGM8eZe5.js";
7
- import { t as RpcPeer } from "../default-DOftsqyK.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import { a as IRpcOptions } from "../types-BUYZxMco.js";
7
+ import { t as RpcPeer } from "../default-CKJtfuap.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<K extends StringKeys<InferEvents<TRemoteSchema["events"]>>>(peer: RpcPeer<TLocalSchema, TRemoteSchema>, event: K, data: InferEvents<TRemoteSchema["events"]>[K]): 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. */
@@ -87,7 +87,7 @@ type RpcActorConstructor<TBase extends Constructor<Actor<unknown>>, TLocalSchema
87
87
  * ```
88
88
  */
89
89
  declare function withRpc<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema, TEnv, TBase extends Constructor<Actor<TEnv>> & {
90
- prototype: Provider<TLocalSchema>;
90
+ prototype: Provider<TLocalSchema["methods"]>;
91
91
  }>(Base: TBase, options: IRpcOptions<TLocalSchema, TRemoteSchema>): RpcActorConstructor<TBase, TLocalSchema, TRemoteSchema>;
92
92
  //#endregion
93
93
  export { IDOHooks, IRpcActorHooks, RpcActorConstructor, withRpc };
@@ -1,13 +1,13 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import "../types-BGM8eZe5.js";
7
- import "../default-DOftsqyK.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import "../types-BUYZxMco.js";
7
+ import "../default-CKJtfuap.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-BJm2ViQB.js";
12
+ import { n as RpcServerOptions, r as MultiPeerBase, t as RpcServer } from "../server-q205-WY8.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 };
@@ -1,10 +1,10 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import "../types-BGM8eZe5.js";
7
- import "../default-DOftsqyK.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import "../types-BUYZxMco.js";
7
+ import "../default-CKJtfuap.js";
8
8
  import "./types.js";
9
- import { n as RpcServerOptions, t as RpcServer } from "../server-BJm2ViQB.js";
9
+ import { n as RpcServerOptions, t as RpcServer } from "../server-q205-WY8.js";
10
10
  export { RpcServer, RpcServerOptions };
@@ -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-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import { _ as RpcSchema, a as EventHandler, c as InferInput, m as MethodDef, r as EventDef, t as Driver, u as InferOutput, v as StringKeys } from "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import { a as IRpcOptions, n as IMethodController, t as IEventController } from "../types-BGM8eZe5.js";
7
- import { t as RpcPeer } from "../default-DOftsqyK.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import { a as IRpcOptions, n as IMethodController, t as IEventController } from "../types-BUYZxMco.js";
7
+ import { t as RpcPeer } from "../default-CKJtfuap.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>;
91
+ onEvent?: EventHandler<TRemoteEvents>;
92
92
  }
93
93
  interface IMultiAdapterHooks<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> {
94
94
  /** Called when a peer connects */
@@ -96,15 +96,15 @@ interface IMultiAdapterHooks<TLocalSchema extends RpcSchema, TRemoteSchema exten
96
96
  /** Called when a peer disconnects */
97
97
  onDisconnect?(peer: RpcPeer<TLocalSchema, TRemoteSchema>): void;
98
98
  /** Called when an event is received from a peer */
99
- onEvent?: EventHandler<TRemoteSchema, [peer: RpcPeer<TLocalSchema, TRemoteSchema>]>;
99
+ onEvent?: EventHandler<TRemoteSchema["events"], [peer: RpcPeer<TLocalSchema, TRemoteSchema>]>;
100
100
  /** Called when a peer encounters an error */
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
- readonly driver: Driver<TRemoteSchema>;
107
- readonly hooks: IAdapterHooks<TRemoteSchema>;
106
+ readonly driver: Driver<TRemoteSchema["methods"]>;
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-BPJJ9slm.js";
2
- import { n as CodecFactory } from "../factory-BGezZgAP.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import { n as CodecFactory } from "../factory-CZioNF7N.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-BPJJ9slm.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-BGezZgAP.js";
1
+ import "../schema-B0zKtaPR.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-CZioNF7N.js";
3
3
  export { BinaryCodec, CodecFactory, CodecOptions, StringCodec, WireCodec, WireData, createBinaryCodecFactory, createStringCodecFactory, isBinaryCodec, isStringCodec };
@@ -1,5 +1,5 @@
1
- import "../schema-BPJJ9slm.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-BGezZgAP.js";
3
- import { n as createJsonCodec, t as JsonCodec } from "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.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-CZioNF7N.js";
3
+ import { n as createJsonCodec, t as JsonCodec } from "../json-1pVWk4mJ.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-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import { n as createJsonCodec, t as JsonCodec } from "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import { n as createJsonCodec, t as JsonCodec } from "../json-1pVWk4mJ.js";
4
4
  export { JsonCodec, createJsonCodec };
@@ -1,5 +1,5 @@
1
- import "../schema-BPJJ9slm.js";
2
- import { n as CodecFactory } from "../factory-BGezZgAP.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import { n as CodecFactory } from "../factory-CZioNF7N.js";
3
3
  import * as z from "zod";
4
4
 
5
5
  //#region src/codecs/msgpack.d.ts
@@ -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-BPJJ9slm.js";
2
- import { g as WireInput, u as RpcProtocol } from "./protocol-ipDMUaRc.js";
3
- import { a as IRpcOptions, r as IMinWebSocket } from "./types-BGM8eZe5.js";
1
+ import { _ as RpcSchema, a as EventHandler, h as Provider, s as InferEvents, t as Driver, v as StringKeys } from "./schema-B0zKtaPR.js";
2
+ import { g as WireInput, u as RpcProtocol } from "./protocol-DxoHWqMA.js";
3
+ import { a as IRpcOptions, r as IMinWebSocket } from "./types-BUYZxMco.js";
4
4
 
5
5
  //#region src/peers/default.d.ts
6
6
 
@@ -13,9 +13,9 @@ interface RpcPeerOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends R
13
13
  /** WebSocket instance */
14
14
  ws: IMinWebSocket;
15
15
  /** Implementation of local methods */
16
- provider: Partial<Provider<TLocalSchema>>;
16
+ provider: Partial<Provider<TLocalSchema["methods"]>>;
17
17
  /** Handler for incoming events */
18
- onEvent?: EventHandler<TRemoteSchema> | undefined;
18
+ onEvent?: EventHandler<TRemoteSchema["events"]> | undefined;
19
19
  /** Generate unique request IDs */
20
20
  generateId?: (() => string) | undefined;
21
21
  }
@@ -42,7 +42,7 @@ declare class RpcPeer<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcS
42
42
  private requestCounter;
43
43
  private closed;
44
44
  /** Proxy for calling remote methods */
45
- readonly driver: Driver<TRemoteSchema>;
45
+ readonly driver: Driver<TRemoteSchema["methods"]>;
46
46
  constructor(options: RpcPeerOptions<TLocalSchema, TRemoteSchema>);
47
47
  /**
48
48
  * Create a proxy that allows calling remote methods
@@ -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<K extends StringKeys<InferEvents<TLocalSchema["events"]>>>(event: K, data: InferEvents<TLocalSchema["events"]>[K]): void;
59
59
  /**
60
60
  * Handle an incoming WebSocket message
61
61
  *
@@ -1,4 +1,4 @@
1
- import { d as LiteralStringUnion } from "./schema-BPJJ9slm.js";
1
+ import { f as LiteralStringUnion } from "./schema-B0zKtaPR.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-BPJJ9slm.js";
2
- import "./factory-BGezZgAP.js";
3
- import "./json-BZzd4eNj.js";
1
+ import { _ as RpcSchema, a as EventHandler, b as method, c as InferInput, h as Provider, l as InferMethods, m as MethodDef, o as InferEventData, r as EventDef, s as InferEvents, t as Driver, u as InferOutput, y as event } from "./schema-B0zKtaPR.js";
2
+ import "./factory-CZioNF7N.js";
3
+ import "./json-1pVWk4mJ.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-ipDMUaRc.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-BGM8eZe5.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-DxoHWqMA.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-BUYZxMco.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-CuTDe_Pq.js";
10
- import { t as MemoryPendingCallStorage } from "./memory-BbN1TQZi.js";
11
- import { t as SqlPendingCallStorage } from "./sql-BpEL9udW.js";
9
+ import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "./interface-RK7s4DQf.js";
10
+ import { t as MemoryPendingCallStorage } from "./memory-BxojNC-D.js";
11
+ import { t as SqlPendingCallStorage } from "./sql-xafn7bdx.js";
12
12
  import "./storage/index.js";
13
13
  import "./utils/index.js";
14
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 };
@@ -1,4 +1,4 @@
1
- import { m as RpcSchema } from "./schema-BPJJ9slm.js";
1
+ import { _ as RpcSchema } from "./schema-B0zKtaPR.js";
2
2
 
3
3
  //#region src/storage/interface.d.ts
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as CodecFactory } from "./factory-BGezZgAP.js";
1
+ import { n as CodecFactory } from "./factory-CZioNF7N.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-BGezZgAP.js";
2
- import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-CuTDe_Pq.js";
1
+ import { i as StringCodec } from "./factory-CZioNF7N.js";
2
+ import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-RK7s4DQf.js";
3
3
 
4
4
  //#region src/storage/memory.d.ts
5
5
 
@@ -1,8 +1,8 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import "../types-BGM8eZe5.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DOftsqyK.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import "../types-BUYZxMco.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-CKJtfuap.js";
8
8
  export { RpcPeer, RpcPeerOptions };
@@ -1,11 +1,11 @@
1
- import { m as RpcSchema } from "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import { _ as RpcSchema } from "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import { g as WireInput } from "../protocol-ipDMUaRc.js";
6
- import "../types-BGM8eZe5.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DOftsqyK.js";
8
- import { i as PendingCall, s as SyncPendingCallStorage } from "../interface-CuTDe_Pq.js";
5
+ import { g as WireInput } from "../protocol-DxoHWqMA.js";
6
+ import "../types-BUYZxMco.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-CKJtfuap.js";
8
+ import { i as PendingCall, s as SyncPendingCallStorage } from "../interface-RK7s4DQf.js";
9
9
 
10
10
  //#region src/peers/durable.d.ts
11
11
 
@@ -1,10 +1,10 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../protocol-ipDMUaRc.js";
6
- import "../types-BGM8eZe5.js";
7
- import { n as RpcPeerOptions, t as RpcPeer } from "../default-DOftsqyK.js";
8
- import "../interface-CuTDe_Pq.js";
5
+ import "../protocol-DxoHWqMA.js";
6
+ import "../types-BUYZxMco.js";
7
+ import { n as RpcPeerOptions, t as RpcPeer } from "../default-CKJtfuap.js";
8
+ import "../interface-RK7s4DQf.js";
9
9
  import { CallContext, DurableRpcPeer, DurableRpcPeerOptions } from "./durable.js";
10
10
  export { type CallContext, DurableRpcPeer, type DurableRpcPeerOptions, RpcPeer, type RpcPeerOptions };
@@ -1,4 +1,4 @@
1
- import { a as WireCodec } from "./factory-BGezZgAP.js";
1
+ import { a as WireCodec } from "./factory-CZioNF7N.js";
2
2
  import * as z from "zod";
3
3
 
4
4
  //#region src/protocol.d.ts
@@ -1,6 +1,6 @@
1
- import "./schema-BPJJ9slm.js";
2
- import "./factory-BGezZgAP.js";
3
- import "./json-BZzd4eNj.js";
1
+ import "./schema-B0zKtaPR.js";
2
+ import "./factory-CZioNF7N.js";
3
+ import "./json-1pVWk4mJ.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-ipDMUaRc.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-DxoHWqMA.js";
6
6
  export { JsonProtocol, RpcError, RpcErrorCodes, RpcErrorSchema, RpcEvent, RpcEventSchema, RpcMessage, RpcMessageCodec, RpcMessageSchema, RpcProtocol, RpcRequest, RpcRequestSchema, RpcResponse, RpcResponseSchema, RpcWireCodec, WireInput, createProtocol };
@@ -0,0 +1,118 @@
1
+ import * as z from "zod";
2
+ import { LiteralUnion } from "type-fest";
3
+
4
+ //#region src/schema.d.ts
5
+
6
+ type StringKeys<T> = keyof T extends string ? keyof T : never;
7
+ type LiteralString = "" | (string & Record<never, never>);
8
+ type LiteralStringUnion<T> = LiteralUnion<T, string>;
9
+ /**
10
+ * Method definition with input and output schemas
11
+ */
12
+ interface MethodDef<TInput extends z.ZodType = z.ZodType, TOutput extends z.ZodType = z.ZodType> {
13
+ _type: "method";
14
+ input: TInput;
15
+ output: TOutput;
16
+ }
17
+ type Method = (input: unknown) => unknown | Promise<unknown>;
18
+ /**
19
+ * Event definition with data schema
20
+ */
21
+ interface EventDef<TData extends z.ZodType = z.ZodType> {
22
+ _type: "event";
23
+ data: TData;
24
+ }
25
+ type Event = unknown;
26
+ /**
27
+ * Define an RPC method with input/output schemas
28
+ *
29
+ * @param def - Object containing input and output Zod schemas
30
+ * @returns MethodDef with preserved type information
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const getUser = method({
35
+ * input: z.object({ id: z.string() }),
36
+ * output: z.object({ name: z.string(), email: z.string() }),
37
+ * });
38
+ * ```
39
+ */
40
+ declare function method<TInput extends z.ZodType, TOutput extends z.ZodType>(def: {
41
+ input: TInput;
42
+ output: TOutput;
43
+ }): MethodDef<TInput, TOutput>;
44
+ /**
45
+ * Define a fire-and-forget event with data schema
46
+ *
47
+ * @param def - Object containing data Zod schema
48
+ * @returns EventDef with preserved type information
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const userCreated = event({
53
+ * data: z.object({ id: z.string(), name: z.string() }),
54
+ * });
55
+ * ```
56
+ */
57
+ declare function event<TData extends z.ZodType>(def: {
58
+ data: TData;
59
+ }): EventDef<TData>;
60
+ /**
61
+ * Schema definition containing methods and events
62
+ */
63
+ interface RpcSchema {
64
+ methods?: Record<string, MethodDef>;
65
+ events?: Record<string, EventDef>;
66
+ }
67
+ interface RpcCollection {
68
+ methods?: Record<string, Method>;
69
+ events?: Record<string, Event>;
70
+ }
71
+ /**
72
+ * Infer the input type from a method definition
73
+ *
74
+ * @typeParam T - A MethodDef type to extract the input from
75
+ */
76
+ type InferInput<T extends MethodDef> = z.input<T["input"]>;
77
+ /**
78
+ * Infer the output type from a method definition
79
+ *
80
+ * @typeParam T - A MethodDef type to extract the output from
81
+ */
82
+ type InferOutput<T extends MethodDef> = z.output<T["output"]>;
83
+ /**
84
+ * Infer the data type from an event definition
85
+ *
86
+ * @typeParam T - An EventDef type to extract the data type from
87
+ */
88
+ type InferEventData<T extends EventDef> = z.infer<T["data"]>;
89
+ /**
90
+ * Infer method signatures from a schema's methods
91
+ */
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>;
93
+ /**
94
+ * Infer event emitter signatures from a schema's events
95
+ */
96
+ type InferEvents<T extends RpcSchema["events"]> = T extends Record<string, EventDef> ? { [K in StringKeys<T>]: z.infer<T[K]["data"]> } : Record<string, Event>;
97
+ /**
98
+ * Provider type - implements the local methods defined in a schema
99
+ */
100
+ type Provider<T extends RpcSchema["methods"]> = T extends Record<string, MethodDef> ? InferMethods<T> : {};
101
+ /**
102
+ * Driver type - proxy to call remote methods defined in a schema
103
+ */
104
+ type Driver<T extends RpcSchema["methods"]> = T extends Record<string, MethodDef> ? InferMethods<T> : {};
105
+ /**
106
+ * Event handler type - handles incoming events
107
+ */
108
+ interface EventHandler<T extends RpcSchema["events"], ExtraArgs extends any[] = []> {
109
+ <K$1 extends StringKeys<InferEvents<T>>>(...args: [...ExtraArgs, event: K$1, data: InferEvents<T>[K$1]]): void;
110
+ }
111
+ /**
112
+ * Event emitter type - emits outgoing events
113
+ */
114
+ interface EventEmitter<T extends RpcSchema["events"], ExtraArgs extends any[] = []> {
115
+ <K$1 extends StringKeys<InferEvents<T>>>(...args: [event: K$1, data: InferEvents<T>[K$1], ...ExtraArgs]): void;
116
+ }
117
+ //#endregion
118
+ export { RpcSchema as _, EventHandler as a, method as b, InferInput as c, LiteralString as d, LiteralStringUnion as f, RpcCollection as g, Provider as h, EventEmitter as i, InferMethods as l, MethodDef as m, Event as n, InferEventData as o, Method as p, EventDef as r, InferEvents as s, Driver as t, InferOutput as u, StringKeys as v, event 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-BPJJ9slm.js";
2
- export { Driver, EventDef, EventEmitter, EventHandler, InferEventData, InferEvents, InferInput, InferMethods, InferOutput, LiteralString, LiteralStringUnion, MethodDef, Provider, RpcSchema, StringKeys, event, method };
1
+ import { _ as RpcSchema, a as EventHandler, b as method, c as InferInput, d as LiteralString, f as LiteralStringUnion, g as RpcCollection, h as Provider, i as EventEmitter, l as InferMethods, m as MethodDef, n as Event, o as InferEventData, p as Method, r as EventDef, s as InferEvents, t as Driver, u as InferOutput, v as StringKeys, y as event } from "./schema-B0zKtaPR.js";
2
+ export { Driver, Event, EventDef, EventEmitter, EventHandler, 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-BPJJ9slm.js";
2
- import { u as RpcProtocol } from "./protocol-ipDMUaRc.js";
3
- import { a as IRpcOptions, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, u as WebSocketServerOptions } from "./types-BGM8eZe5.js";
4
- import { t as RpcPeer } from "./default-DOftsqyK.js";
1
+ import { _ as RpcSchema, h as Provider, s as InferEvents, v as StringKeys } from "./schema-B0zKtaPR.js";
2
+ import { u as RpcProtocol } from "./protocol-DxoHWqMA.js";
3
+ import { a as IRpcOptions, o as IWebSocket, r as IMinWebSocket, s as IWebSocketServer, u as WebSocketServerOptions } from "./types-BUYZxMco.js";
4
+ import { t as RpcPeer } from "./default-CKJtfuap.js";
5
5
  import { IMultiAdapterHooks, IMultiConnectionAdapter, MultiDriver } from "./adapters/types.js";
6
6
 
7
7
  //#region src/adapters/multi-peer.d.ts
@@ -15,7 +15,7 @@ interface MultiPeerOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends
15
15
  /** Schema defining remote methods we can call */
16
16
  remoteSchema: TRemoteSchema;
17
17
  /** Implementation of local methods */
18
- provider: Provider<TLocalSchema>;
18
+ provider: Provider<TLocalSchema["methods"]>;
19
19
  /** Default timeout for RPC calls in ms */
20
20
  timeout?: number;
21
21
  /** Protocol for encoding/decoding messages */
@@ -43,7 +43,7 @@ declare abstract class MultiPeerBase<TLocalSchema extends RpcSchema, TRemoteSche
43
43
  /** Remote schema */
44
44
  readonly remoteSchema: TRemoteSchema;
45
45
  /** Implementation of local methods */
46
- readonly provider: Provider<TLocalSchema>;
46
+ readonly provider: Provider<TLocalSchema["methods"]>;
47
47
  /** Default timeout for RPC calls */
48
48
  readonly timeout: number;
49
49
  /** Protocol for encoding/decoding messages */
@@ -115,7 +115,7 @@ declare abstract class MultiPeerBase<TLocalSchema extends RpcSchema, TRemoteSche
115
115
  * @param data - Event data matching the schema
116
116
  * @param ids - Optional array of peer IDs to emit to (broadcasts to all if omitted)
117
117
  */
118
- emit<K extends StringKeys<TLocalSchema["events"]>>(event: K, data: TLocalSchema["events"] extends Record<string, EventDef> ? InferEventData<TLocalSchema["events"][K]> : never, ids?: string[]): void;
118
+ emit<K extends StringKeys<InferEvents<TLocalSchema["events"]>>>(event: K, data: InferEvents<TLocalSchema["events"]>[K], ids?: string[]): void;
119
119
  /**
120
120
  * Close a specific peer by ID
121
121
  *
@@ -148,7 +148,7 @@ declare abstract class MultiPeerBase<TLocalSchema extends RpcSchema, TRemoteSche
148
148
  */
149
149
  interface RpcServerOptions<TLocalSchema extends RpcSchema, TRemoteSchema extends RpcSchema> extends IRpcOptions<TLocalSchema, TRemoteSchema> {
150
150
  /** Implementation of local methods */
151
- provider: Provider<TLocalSchema>;
151
+ provider: Provider<TLocalSchema["methods"]>;
152
152
  /** WebSocket server instance or options to create one */
153
153
  wss: IWebSocketServer | WebSocketServerOptions;
154
154
  /** WebSocket server constructor (required when passing options instead of server instance) */
@@ -1,5 +1,5 @@
1
- import { i as StringCodec } from "./factory-BGezZgAP.js";
2
- import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-CuTDe_Pq.js";
1
+ import { i as StringCodec } from "./factory-CZioNF7N.js";
2
+ import { i as PendingCall, s as SyncPendingCallStorage } from "./interface-RK7s4DQf.js";
3
3
 
4
4
  //#region src/storage/sql.d.ts
5
5
 
@@ -1,8 +1,8 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.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-CuTDe_Pq.js";
6
- import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BbN1TQZi.js";
7
- import { n as SqlPendingCallStorageOptions, t as SqlPendingCallStorage } from "../sql-BpEL9udW.js";
5
+ import { a as PendingCallStorage, i as PendingCall, o as StorageMode, r as MaybePromise, s as SyncPendingCallStorage, t as AsyncPendingCallStorage } from "../interface-RK7s4DQf.js";
6
+ import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BxojNC-D.js";
7
+ import { n as SqlPendingCallStorageOptions, t as SqlPendingCallStorage } from "../sql-xafn7bdx.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-BPJJ9slm.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-CuTDe_Pq.js";
1
+ import "../schema-B0zKtaPR.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-RK7s4DQf.js";
3
3
  export { AsyncPendingCallStorage, IContinuationHandler, MaybePromise, PendingCall, PendingCallStorage, StorageMode, SyncPendingCallStorage };
@@ -1,7 +1,7 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../interface-CuTDe_Pq.js";
6
- import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BbN1TQZi.js";
5
+ import "../interface-RK7s4DQf.js";
6
+ import { n as MemoryPendingCallStorageOptions, t as MemoryPendingCallStorage } from "../memory-BxojNC-D.js";
7
7
  export { MemoryPendingCallStorage, MemoryPendingCallStorageOptions };
@@ -1,7 +1,7 @@
1
- import "../schema-BPJJ9slm.js";
2
- import "../factory-BGezZgAP.js";
3
- import "../json-BZzd4eNj.js";
1
+ import "../schema-B0zKtaPR.js";
2
+ import "../factory-CZioNF7N.js";
3
+ import "../json-1pVWk4mJ.js";
4
4
  import "../index-Be7jjS77.js";
5
- import "../interface-CuTDe_Pq.js";
6
- import { i as SqlStorageCursor, n as SqlPendingCallStorageOptions, r as SqlStorage, t as SqlPendingCallStorage } from "../sql-BpEL9udW.js";
5
+ import "../interface-RK7s4DQf.js";
6
+ import { i as SqlStorageCursor, n as SqlPendingCallStorageOptions, r as SqlStorage, t as SqlPendingCallStorage } from "../sql-xafn7bdx.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-BPJJ9slm.js";
2
- import { g as WireInput, u as RpcProtocol } from "./protocol-ipDMUaRc.js";
1
+ import { _ as RpcSchema, a as EventHandler, h as Provider, i as EventEmitter, m as MethodDef, r as EventDef } from "./schema-B0zKtaPR.js";
2
+ import { g as WireInput, u as RpcProtocol } from "./protocol-DxoHWqMA.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>;
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, EmitArgs>;
100
+ emit: EventEmitter<TLocalEvents, EmitArgs>;
101
101
  /** Called when receiving an event from the connected peer */
102
- onEvent?: EventHandler<TRemoteSchema, 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-BPJJ9slm.js";
2
- import "./factory-BGezZgAP.js";
3
- import "./json-BZzd4eNj.js";
1
+ import "./schema-B0zKtaPR.js";
2
+ import "./factory-CZioNF7N.js";
3
+ import "./json-1pVWk4mJ.js";
4
4
  import "./index-Be7jjS77.js";
5
- import "./protocol-ipDMUaRc.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-BGM8eZe5.js";
5
+ import "./protocol-DxoHWqMA.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-BUYZxMco.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.0",
3
+ "version": "1.1.2",
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",
@@ -1,108 +0,0 @@
1
- import * as z from "zod";
2
- import { LiteralUnion } from "type-fest";
3
-
4
- //#region src/schema.d.ts
5
-
6
- type StringKeys<T> = keyof T extends string ? keyof T : never;
7
- type LiteralString = "" | (string & Record<never, never>);
8
- type LiteralStringUnion<T> = LiteralUnion<T, string>;
9
- /**
10
- * Method definition with input and output schemas
11
- */
12
- interface MethodDef<TInput$1 extends z.ZodType = z.ZodType, TOutput$1 extends z.ZodType = z.ZodType> {
13
- _type: "method";
14
- input: TInput$1;
15
- output: TOutput$1;
16
- }
17
- /**
18
- * Event definition with data schema
19
- */
20
- interface EventDef<TData$1 extends z.ZodType = z.ZodType> {
21
- _type: "event";
22
- data: TData$1;
23
- }
24
- /**
25
- * Define an RPC method with input/output schemas
26
- *
27
- * @param def - Object containing input and output Zod schemas
28
- * @returns MethodDef with preserved type information
29
- *
30
- * @example
31
- * ```ts
32
- * const getUser = method({
33
- * input: z.object({ id: z.string() }),
34
- * output: z.object({ name: z.string(), email: z.string() }),
35
- * });
36
- * ```
37
- */
38
- declare function method<TInput$1 extends z.ZodType, TOutput$1 extends z.ZodType>(def: {
39
- input: TInput$1;
40
- output: TOutput$1;
41
- }): MethodDef<TInput$1, TOutput$1>;
42
- /**
43
- * Define a fire-and-forget event with data schema
44
- *
45
- * @param def - Object containing data Zod schema
46
- * @returns EventDef with preserved type information
47
- *
48
- * @example
49
- * ```ts
50
- * const userCreated = event({
51
- * data: z.object({ id: z.string(), name: z.string() }),
52
- * });
53
- * ```
54
- */
55
- declare function event<TData$1 extends z.ZodType>(def: {
56
- data: TData$1;
57
- }): EventDef<TData$1>;
58
- /**
59
- * Schema definition containing methods and events
60
- */
61
- interface RpcSchema {
62
- methods?: Record<string, MethodDef>;
63
- events?: Record<string, EventDef>;
64
- }
65
- /**
66
- * Infer the input type from a method definition
67
- *
68
- * @typeParam T - A MethodDef type to extract the input from
69
- */
70
- type InferInput<T> = T extends MethodDef<infer TInput, z.ZodType> ? z.input<TInput> : never;
71
- /**
72
- * Infer the output type from a method definition
73
- *
74
- * @typeParam T - A MethodDef type to extract the output from
75
- */
76
- type InferOutput<T> = T extends MethodDef<z.ZodType, infer TOutput> ? z.output<TOutput> : never;
77
- /**
78
- * Infer the data type from an event definition
79
- *
80
- * @typeParam T - An EventDef type to extract the data type from
81
- */
82
- type InferEventData<T> = T extends EventDef<infer TData> ? z.infer<TData> : never;
83
- /**
84
- * Infer method signatures from a schema's methods
85
- */
86
- type InferMethods<T extends RpcSchema> = T["methods"] extends Record<string, MethodDef> ? { [K in StringKeys<T["methods"]>]: (input: InferInput<T["methods"][K]>) => InferOutput<T["methods"][K]> | Promise<InferOutput<T["methods"][K]>> } : object;
87
- /**
88
- * Infer event emitter signatures from a schema's events
89
- */
90
- type InferEvents<T extends RpcSchema> = T["events"] extends Record<string, EventDef> ? { [K in StringKeys<T["events"]>]: InferEventData<T["events"][K]> } : object;
91
- /**
92
- * Provider type - implements the local methods defined in a schema
93
- */
94
- type Provider<T extends RpcSchema> = InferMethods<T>;
95
- /**
96
- * Driver type - proxy to call remote methods defined in a schema
97
- */
98
- type Driver<T extends RpcSchema> = InferMethods<T>;
99
- /**
100
- * Event handler type - handles incoming events
101
- */
102
- type EventHandler<T extends RpcSchema, ExtraArgs extends any[] = []> = <K$1 extends StringKeys<T["events"]>>(...args: [...ExtraArgs, event: K$1, data: T["events"] extends Record<string, EventDef> ? InferEventData<T["events"][K$1]> : never]) => void;
103
- /**
104
- * Event emitter type - emits outgoing events
105
- */
106
- type EventEmitter<T extends RpcSchema, ExtraArgs extends any[] = []> = <K$1 extends StringKeys<T["events"]>>(...args: [event: K$1, data: T["events"] extends Record<string, EventDef> ? InferEventData<T["events"][K$1]> : never, ...ExtraArgs]) => void;
107
- //#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 };