raffel 1.0.8 → 1.0.10-next.22f4d4e

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 (109) hide show
  1. package/dist/adapters/index.d.ts +3 -1
  2. package/dist/adapters/index.d.ts.map +1 -1
  3. package/dist/adapters/index.js +2 -0
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/adapters/smtp.d.ts +152 -0
  6. package/dist/adapters/smtp.d.ts.map +1 -0
  7. package/dist/adapters/smtp.js +1143 -0
  8. package/dist/adapters/smtp.js.map +1 -0
  9. package/dist/adapters/websocket.d.ts +100 -1
  10. package/dist/adapters/websocket.d.ts.map +1 -1
  11. package/dist/adapters/websocket.js +461 -16
  12. package/dist/adapters/websocket.js.map +1 -1
  13. package/dist/channels/channel-manager.d.ts.map +1 -1
  14. package/dist/channels/channel-manager.js +542 -4
  15. package/dist/channels/channel-manager.js.map +1 -1
  16. package/dist/channels/history.d.ts +54 -0
  17. package/dist/channels/history.d.ts.map +1 -0
  18. package/dist/channels/history.js +78 -0
  19. package/dist/channels/history.js.map +1 -0
  20. package/dist/channels/index.d.ts +9 -1
  21. package/dist/channels/index.d.ts.map +1 -1
  22. package/dist/channels/index.js +8 -1
  23. package/dist/channels/index.js.map +1 -1
  24. package/dist/channels/recovery.d.ts +57 -0
  25. package/dist/channels/recovery.d.ts.map +1 -0
  26. package/dist/channels/recovery.js +58 -0
  27. package/dist/channels/recovery.js.map +1 -0
  28. package/dist/channels/rest-api.d.ts +32 -0
  29. package/dist/channels/rest-api.d.ts.map +1 -0
  30. package/dist/channels/rest-api.js +197 -0
  31. package/dist/channels/rest-api.js.map +1 -0
  32. package/dist/channels/ticket-store.d.ts +25 -0
  33. package/dist/channels/ticket-store.d.ts.map +1 -0
  34. package/dist/channels/ticket-store.js +70 -0
  35. package/dist/channels/ticket-store.js.map +1 -0
  36. package/dist/channels/types.d.ts +421 -5
  37. package/dist/channels/types.d.ts.map +1 -1
  38. package/dist/channels/types.js +15 -1
  39. package/dist/channels/types.js.map +1 -1
  40. package/dist/client/index.d.ts +39 -0
  41. package/dist/client/index.d.ts.map +1 -0
  42. package/dist/client/index.js +531 -0
  43. package/dist/client/index.js.map +1 -0
  44. package/dist/client/reconnect.d.ts +33 -0
  45. package/dist/client/reconnect.d.ts.map +1 -0
  46. package/dist/client/reconnect.js +60 -0
  47. package/dist/client/reconnect.js.map +1 -0
  48. package/dist/client/types.d.ts +107 -0
  49. package/dist/client/types.d.ts.map +1 -0
  50. package/dist/client/types.js +5 -0
  51. package/dist/client/types.js.map +1 -0
  52. package/dist/index.d.ts +13 -6
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +13 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/middleware/interceptors/field-filter.d.ts +51 -0
  57. package/dist/middleware/interceptors/field-filter.d.ts.map +1 -0
  58. package/dist/middleware/interceptors/field-filter.js +81 -0
  59. package/dist/middleware/interceptors/field-filter.js.map +1 -0
  60. package/dist/middleware/interceptors/guard.d.ts +51 -0
  61. package/dist/middleware/interceptors/guard.d.ts.map +1 -0
  62. package/dist/middleware/interceptors/guard.js +45 -0
  63. package/dist/middleware/interceptors/guard.js.map +1 -0
  64. package/dist/middleware/interceptors/index.d.ts +4 -0
  65. package/dist/middleware/interceptors/index.d.ts.map +1 -1
  66. package/dist/middleware/interceptors/index.js +4 -0
  67. package/dist/middleware/interceptors/index.js.map +1 -1
  68. package/dist/resource-module/index.d.ts +44 -0
  69. package/dist/resource-module/index.d.ts.map +1 -0
  70. package/dist/resource-module/index.js +146 -0
  71. package/dist/resource-module/index.js.map +1 -0
  72. package/dist/resource-module/types.d.ts +109 -0
  73. package/dist/resource-module/types.d.ts.map +1 -0
  74. package/dist/resource-module/types.js +7 -0
  75. package/dist/resource-module/types.js.map +1 -0
  76. package/dist/resource-module/watch-helpers.d.ts +16 -0
  77. package/dist/resource-module/watch-helpers.d.ts.map +1 -0
  78. package/dist/resource-module/watch-helpers.js +65 -0
  79. package/dist/resource-module/watch-helpers.js.map +1 -0
  80. package/dist/server/types.d.ts +27 -0
  81. package/dist/server/types.d.ts.map +1 -1
  82. package/dist/smtp/client.d.ts +12 -0
  83. package/dist/smtp/client.d.ts.map +1 -0
  84. package/dist/smtp/client.js +424 -0
  85. package/dist/smtp/client.js.map +1 -0
  86. package/dist/smtp/index.d.ts +13 -0
  87. package/dist/smtp/index.d.ts.map +1 -0
  88. package/dist/smtp/index.js +14 -0
  89. package/dist/smtp/index.js.map +1 -0
  90. package/dist/smtp/relay.d.ts +14 -0
  91. package/dist/smtp/relay.d.ts.map +1 -0
  92. package/dist/smtp/relay.js +418 -0
  93. package/dist/smtp/relay.js.map +1 -0
  94. package/dist/smtp/types.d.ts +194 -0
  95. package/dist/smtp/types.d.ts.map +1 -0
  96. package/dist/smtp/types.js +7 -0
  97. package/dist/smtp/types.js.map +1 -0
  98. package/dist/types/context.d.ts +15 -1
  99. package/dist/types/context.d.ts.map +1 -1
  100. package/dist/types/context.js +3 -0
  101. package/dist/types/context.js.map +1 -1
  102. package/dist/types/index.d.ts +1 -1
  103. package/dist/types/index.d.ts.map +1 -1
  104. package/dist/types/index.js.map +1 -1
  105. package/dist/ui/types/context.d.ts +15 -1
  106. package/dist/ui/types/context.d.ts.map +1 -1
  107. package/dist/ui/types/index.d.ts +1 -1
  108. package/dist/ui/types/index.d.ts.map +1 -1
  109. package/package.json +9 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * In-Memory Ticket Store
3
+ *
4
+ * Default implementation of TicketStore for connection ticket auth.
5
+ * Tickets are single-use, short-lived tokens generated via HTTP
6
+ * and consumed on WebSocket connect.
7
+ */
8
+ import type { ConnectionTicket, TicketStore } from './types.js';
9
+ export interface MemoryTicketStoreOptions {
10
+ /** GC interval in ms (default: 10000) */
11
+ gcInterval?: number;
12
+ }
13
+ export declare function createMemoryTicketStore(options?: MemoryTicketStoreOptions): TicketStore & {
14
+ dispose(): void;
15
+ size: number;
16
+ };
17
+ /**
18
+ * Helper: generate a ticket for a user
19
+ */
20
+ export declare function generateTicket(userId: string, options?: {
21
+ ttl?: number;
22
+ permissions?: string[];
23
+ metadata?: Record<string, unknown>;
24
+ }): ConnectionTicket;
25
+ //# sourceMappingURL=ticket-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-store.d.ts","sourceRoot":"","sources":["../../src/channels/ticket-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE/D,MAAM,WAAW,wBAAwB;IACvC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,WAAW,GAAG;IAAE,OAAO,IAAI,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuDjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,GACA,gBAAgB,CASlB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * In-Memory Ticket Store
3
+ *
4
+ * Default implementation of TicketStore for connection ticket auth.
5
+ * Tickets are single-use, short-lived tokens generated via HTTP
6
+ * and consumed on WebSocket connect.
7
+ */
8
+ import { sid } from '../utils/id/index.js';
9
+ export function createMemoryTicketStore(options = {}) {
10
+ const { gcInterval = 10_000 } = options;
11
+ const tickets = new Map();
12
+ // Periodic GC for expired tickets
13
+ const timer = setInterval(() => {
14
+ const now = Date.now();
15
+ for (const [id, ticket] of tickets) {
16
+ if (ticket.expiresAt < now || ticket.usedAt) {
17
+ tickets.delete(id);
18
+ }
19
+ }
20
+ }, gcInterval);
21
+ if (timer.unref)
22
+ timer.unref();
23
+ return {
24
+ async create(ticket) {
25
+ tickets.set(ticket.id, { ...ticket });
26
+ },
27
+ async consume(ticketId) {
28
+ const ticket = tickets.get(ticketId);
29
+ if (!ticket)
30
+ return null;
31
+ // Check expiration
32
+ if (ticket.expiresAt < Date.now()) {
33
+ tickets.delete(ticketId);
34
+ return null;
35
+ }
36
+ // Check single-use
37
+ if (ticket.usedAt) {
38
+ return null;
39
+ }
40
+ // Mark as used and return
41
+ ticket.usedAt = Date.now();
42
+ tickets.delete(ticketId); // Remove after consumption
43
+ return ticket;
44
+ },
45
+ async revoke(ticketId) {
46
+ tickets.delete(ticketId);
47
+ },
48
+ dispose() {
49
+ clearInterval(timer);
50
+ tickets.clear();
51
+ },
52
+ get size() {
53
+ return tickets.size;
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * Helper: generate a ticket for a user
59
+ */
60
+ export function generateTicket(userId, options) {
61
+ const ttl = options?.ttl ?? 30_000;
62
+ return {
63
+ id: sid(),
64
+ userId,
65
+ permissions: options?.permissions,
66
+ expiresAt: Date.now() + ttl,
67
+ metadata: options?.metadata,
68
+ };
69
+ }
70
+ //# sourceMappingURL=ticket-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-store.js","sourceRoot":"","sources":["../../src/channels/ticket-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAQ1C,MAAM,UAAU,uBAAuB,CACrC,UAAoC,EAAE;IAEtC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;IACvC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEnD,kCAAkC;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAA;IAEd,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,EAAE,CAAA;IAE9B,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,MAAwB;YACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;QACvC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,QAAgB;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YAExB,mBAAmB;YACnB,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACxB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,mBAAmB;YACnB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,0BAA0B;YAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,2BAA2B;YACpD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,QAAgB;YAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC;QAED,OAAO;YACL,aAAa,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;QAED,IAAI,IAAI;YACN,OAAO,OAAO,CAAC,IAAI,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAIC;IAED,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,MAAM,CAAA;IAClC,OAAO;QACL,EAAE,EAAE,GAAG,EAAE;QACT,MAAM;QACN,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;QAC3B,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAA;AACH,CAAC"}
@@ -12,7 +12,171 @@ import type { Context } from '../types/index.js';
12
12
  /**
13
13
  * Channel type based on name prefix
14
14
  */
15
- export type ChannelType = 'public' | 'private' | 'presence';
15
+ export type ChannelType = 'public' | 'private' | 'presence' | 'queue';
16
+ /**
17
+ * A short-lived, single-use connection ticket.
18
+ * Generated server-side via HTTP, consumed on WS connect.
19
+ */
20
+ export interface ConnectionTicket {
21
+ /** Unique ticket ID */
22
+ id: string;
23
+ /** User/principal identifier */
24
+ userId: string;
25
+ /** Allowed channel patterns (glob-like: 'private-user-123', 'presence-*') */
26
+ permissions?: string[];
27
+ /** Expiration timestamp (ms since epoch) */
28
+ expiresAt: number;
29
+ /** Whether this ticket has been consumed */
30
+ usedAt?: number;
31
+ /** Custom metadata carried into the connection context */
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Storage backend for connection tickets (port interface).
36
+ * Default: in-memory. Can be backed by Redis for multi-instance.
37
+ */
38
+ export interface TicketStore {
39
+ /** Store a new ticket */
40
+ create(ticket: ConnectionTicket): Promise<void>;
41
+ /** Consume a ticket (single-use). Returns null if not found, expired, or already used. */
42
+ consume(ticketId: string): Promise<ConnectionTicket | null>;
43
+ /** Revoke a ticket before use */
44
+ revoke(ticketId: string): Promise<void>;
45
+ }
46
+ /**
47
+ * WebSocket authentication configuration
48
+ */
49
+ export interface WebSocketAuthConfig {
50
+ /**
51
+ * Auth mode:
52
+ * - 'ticket': single-use token from HTTP endpoint (recommended for browsers)
53
+ * - 'bearer': JWT/token in query param or first message
54
+ * - 'custom': your own extraction logic
55
+ */
56
+ mode: 'ticket' | 'bearer' | 'custom';
57
+ /** Ticket store (required for 'ticket' mode, default: in-memory) */
58
+ ticketStore?: TicketStore;
59
+ /** Ticket TTL in ms (default: 30000 = 30s) */
60
+ ticketTTL?: number;
61
+ /**
62
+ * Extract auth token from the HTTP upgrade request.
63
+ * Default: reads `?ticket=xxx` or `?token=xxx` from query string,
64
+ * or `Authorization: Bearer xxx` header.
65
+ */
66
+ extractToken?: (req: import('http').IncomingMessage) => string | undefined;
67
+ /**
68
+ * Validate a token and return auth context seed.
69
+ * Called for 'bearer' and 'custom' modes.
70
+ * Return null to reject the connection.
71
+ */
72
+ validateToken?: (token: string) => import('../types/index.js').ContextSeed | null | Promise<import('../types/index.js').ContextSeed | null>;
73
+ /**
74
+ * Validate a refresh token sent mid-connection.
75
+ * Return new context seed or null to reject.
76
+ */
77
+ refreshToken?: (token: string) => import('../types/index.js').ContextSeed | null | Promise<import('../types/index.js').ContextSeed | null>;
78
+ }
79
+ /**
80
+ * Per-connection rate limits for WebSocket operations
81
+ */
82
+ export interface ChannelRateLimits {
83
+ /** Max channels a single client can subscribe to (default: 100) */
84
+ maxChannelsPerClient?: number;
85
+ /** Max subscribe operations per second per client (default: 10) */
86
+ maxSubscribesPerSecond?: number;
87
+ /** Max publish operations per second per client (default: 10) */
88
+ maxPublishesPerSecond?: number;
89
+ /** Max total messages per second per client (default: 50) */
90
+ maxMessagesPerSecond?: number;
91
+ /** Called when a client is rate-limited */
92
+ onRateLimited?: (socketId: string, operation: string, limit: number) => void;
93
+ }
94
+ /**
95
+ * Backpressure handling for slow consumers
96
+ */
97
+ export interface BackpressureConfig {
98
+ /** Max bytes buffered in the socket's write queue before action (default: 1MB) */
99
+ maxBufferedAmount?: number;
100
+ /** What to do when buffer exceeds limit */
101
+ strategy?: 'drop' | 'disconnect';
102
+ /** Called when a slow consumer is detected */
103
+ onSlowConsumer?: (socketId: string, bufferedAmount: number) => void;
104
+ }
105
+ /**
106
+ * Connected client info exposed via the manager
107
+ */
108
+ export interface ClientInfo {
109
+ /** Socket/connection ID */
110
+ id: string;
111
+ /** User ID from auth context (if available) */
112
+ userId?: string;
113
+ /** Custom data attached at connect time */
114
+ data: Record<string, unknown>;
115
+ /** Channels this client is subscribed to */
116
+ channels: string[];
117
+ /** When the client connected */
118
+ connectedAt: number;
119
+ }
120
+ /**
121
+ * Room: a private 1:1 channel between exactly two clients
122
+ */
123
+ export interface RoomInfo {
124
+ /** Auto-generated room name */
125
+ name: string;
126
+ /** The two participant socket IDs */
127
+ participants: [string, string];
128
+ /** When the room was created */
129
+ createdAt: number;
130
+ }
131
+ /**
132
+ * Group: a named collection of N clients for targeted messaging
133
+ */
134
+ export interface GroupInfo {
135
+ /** Group name */
136
+ name: string;
137
+ /** Member socket IDs */
138
+ members: Set<string>;
139
+ /** Custom metadata */
140
+ data: Record<string, unknown>;
141
+ /** When the group was created */
142
+ createdAt: number;
143
+ }
144
+ /**
145
+ * Lifecycle event data passed to hooks
146
+ */
147
+ export interface ClientConnectEvent {
148
+ socketId: string;
149
+ remoteAddress?: string;
150
+ headers: Record<string, string>;
151
+ }
152
+ export interface ClientDisconnectEvent {
153
+ socketId: string;
154
+ code: number;
155
+ reason: string;
156
+ }
157
+ /**
158
+ * Webhook-ready lifecycle hooks
159
+ */
160
+ export interface ChannelLifecycleHooks {
161
+ /** Called when a client connects (after auth/filter) */
162
+ onConnect?: (event: ClientConnectEvent) => void | Promise<void>;
163
+ /** Called when a client disconnects */
164
+ onDisconnect?: (event: ClientDisconnectEvent) => void | Promise<void>;
165
+ /** Called after a successful subscribe */
166
+ onSubscribe?: (socketId: string, channel: string) => void | Promise<void>;
167
+ /** Called after unsubscribe */
168
+ onUnsubscribe?: (socketId: string, channel: string) => void | Promise<void>;
169
+ /** Called when a member joins a presence channel */
170
+ onMemberAdded?: (channel: string, member: ChannelMember) => void | Promise<void>;
171
+ /** Called when a member leaves a presence channel */
172
+ onMemberRemoved?: (channel: string, member: ChannelMember) => void | Promise<void>;
173
+ /** Called after a successful publish to a channel */
174
+ onPublish?: (socketId: string, channel: string, event: string, data: unknown) => void | Promise<void>;
175
+ /** Called when a new channel is created (first subscriber) */
176
+ onChannelCreated?: (channel: string, type: ChannelType) => void | Promise<void>;
177
+ /** Called when a channel is destroyed (last subscriber left) */
178
+ onChannelDestroyed?: (channel: string, type: ChannelType) => void | Promise<void>;
179
+ }
16
180
  /**
17
181
  * Configuration options for channels
18
182
  */
@@ -69,6 +233,62 @@ export interface ChannelOptions {
69
233
  * @returns true to allow, false to reject
70
234
  */
71
235
  onPublish?: (socketId: string, channel: string, event: string, data: unknown, ctx: Context) => boolean | Promise<boolean>;
236
+ /** Lifecycle hooks for webhook integration */
237
+ hooks?: ChannelLifecycleHooks;
238
+ /** Custom data to attach to clients on connect */
239
+ clientData?: (socketId: string, ctx: Context) => Record<string, unknown>;
240
+ /** Per-connection rate limits */
241
+ rateLimits?: ChannelRateLimits;
242
+ /**
243
+ * Message history configuration for catchup on reconnect.
244
+ * When enabled, recent messages are stored and can be replayed
245
+ * to clients that provide a `since` field in their subscribe message.
246
+ */
247
+ history?: {
248
+ /** Enable message history (default: false) */
249
+ enabled: boolean;
250
+ /** Max entries per channel (default: 100) */
251
+ maxSize?: number;
252
+ /** TTL in ms for history entries (default: 300000 = 5 minutes) */
253
+ ttl?: number;
254
+ };
255
+ /**
256
+ * Transform messages before broadcast.
257
+ * Return null to drop the message.
258
+ * Return modified data to transform.
259
+ */
260
+ transform?: (channel: string, event: string, data: unknown, ctx: {
261
+ socketId: string;
262
+ userId?: string;
263
+ }) => unknown | null | Promise<unknown | null>;
264
+ /**
265
+ * Maximum subscribers per channel.
266
+ * Can be a fixed number or a function that returns the limit per channel name.
267
+ */
268
+ maxSubscribersPerChannel?: number | ((channel: string) => number);
269
+ /**
270
+ * Typing indicator configuration
271
+ */
272
+ typing?: {
273
+ /** Enable typing indicators (default: false) */
274
+ enabled?: boolean;
275
+ /** Auto-stop typing after ms (default: 5000) */
276
+ timeout?: number;
277
+ };
278
+ /**
279
+ * REST API configuration for server-side publishing.
280
+ * When enabled, mounts HTTP endpoints for channel management.
281
+ */
282
+ restApi?: {
283
+ /** Enable REST API (default: false) */
284
+ enabled: boolean;
285
+ /** Base path for REST endpoints (default: '/channels') */
286
+ path?: string;
287
+ /** API key for authentication (simple string check) */
288
+ apiKey?: string;
289
+ /** Custom auth function (overrides apiKey) */
290
+ auth?: (req: import('http').IncomingMessage) => boolean | Promise<boolean>;
291
+ };
72
292
  }
73
293
  /**
74
294
  * A member in a presence channel
@@ -97,6 +317,12 @@ export interface ChannelState {
97
317
  members?: Map<string, ChannelMember>;
98
318
  /** When channel was created */
99
319
  createdAt: number;
320
+ /** Monotonically increasing sequence number for message ordering */
321
+ sequence: number;
322
+ /** Epoch identifier — changes on server restart (for detecting stale offsets) */
323
+ epoch: string;
324
+ /** Round-robin index for queue channels */
325
+ roundRobinIndex?: number;
100
326
  }
101
327
  /**
102
328
  * Result of a subscribe operation
@@ -118,9 +344,13 @@ export interface SubscribeResult {
118
344
  */
119
345
  export interface ChannelManager {
120
346
  /**
121
- * Subscribe a socket to a channel
347
+ * Subscribe a socket to a channel.
348
+ * Optionally pass `since` to replay missed messages from history.
122
349
  */
123
- subscribe(socketId: string, channel: string, ctx: Context): Promise<SubscribeResult>;
350
+ subscribe(socketId: string, channel: string, ctx: Context, since?: {
351
+ seq: number;
352
+ epoch: string;
353
+ }): Promise<SubscribeResult>;
124
354
  /**
125
355
  * Unsubscribe a socket from a channel
126
356
  */
@@ -182,6 +412,114 @@ export interface ChannelManager {
182
412
  * Get subscriber count for a channel
183
413
  */
184
414
  getSubscriberCount(channel: string): number;
415
+ /**
416
+ * Register a connected client (called by WS adapter on connect)
417
+ */
418
+ registerClient(socketId: string, info?: Partial<Pick<ClientInfo, 'userId' | 'data'>>): void;
419
+ /**
420
+ * Remove a connected client (called by WS adapter on disconnect)
421
+ */
422
+ removeClient(socketId: string): void;
423
+ /**
424
+ * Get info about a specific client
425
+ */
426
+ getClient(socketId: string): ClientInfo | undefined;
427
+ /**
428
+ * Get all connected clients
429
+ */
430
+ getClients(): ClientInfo[];
431
+ /**
432
+ * Get total connected client count
433
+ */
434
+ getClientCount(): number;
435
+ /**
436
+ * Send an event directly to a client (no channel needed)
437
+ */
438
+ sendToClient(socketId: string, event: string, data: unknown): void;
439
+ /**
440
+ * Broadcast an event to ALL connected clients
441
+ */
442
+ broadcastAll(event: string, data: unknown, except?: string): void;
443
+ /**
444
+ * Create a private room between exactly two clients.
445
+ * Both clients are auto-subscribed and can exchange messages.
446
+ */
447
+ createRoom(socketA: string, socketB: string): RoomInfo;
448
+ /**
449
+ * Send an event to a room (both participants receive it)
450
+ */
451
+ sendToRoom(roomName: string, event: string, data: unknown, except?: string): void;
452
+ /**
453
+ * Get room info
454
+ */
455
+ getRoom(roomName: string): RoomInfo | undefined;
456
+ /**
457
+ * Get all rooms a client is in
458
+ */
459
+ getClientRooms(socketId: string): RoomInfo[];
460
+ /**
461
+ * Close a room (unsubscribe both participants)
462
+ */
463
+ closeRoom(roomName: string): void;
464
+ /**
465
+ * Create a named group
466
+ */
467
+ createGroup(name: string, data?: Record<string, unknown>): GroupInfo;
468
+ /**
469
+ * Add a client to a group
470
+ */
471
+ joinGroup(groupName: string, socketId: string): void;
472
+ /**
473
+ * Remove a client from a group
474
+ */
475
+ leaveGroup(groupName: string, socketId: string): void;
476
+ /**
477
+ * Send an event to all members of a group
478
+ */
479
+ sendToGroup(groupName: string, event: string, data: unknown, except?: string): void;
480
+ /**
481
+ * Get group info
482
+ */
483
+ getGroup(groupName: string): GroupInfo | undefined;
484
+ /**
485
+ * Get all groups
486
+ */
487
+ getGroups(): GroupInfo[];
488
+ /**
489
+ * Get all groups a client belongs to
490
+ */
491
+ getClientGroups(socketId: string): GroupInfo[];
492
+ /**
493
+ * Delete a group
494
+ */
495
+ deleteGroup(groupName: string): void;
496
+ /**
497
+ * Recover a client's subscriptions from a previous session.
498
+ * Re-subscribes the new socket to all channels and replays
499
+ * missed messages from history (if available).
500
+ */
501
+ recoverClient(oldSocketId: string, newSocketId: string, channels: {
502
+ name: string;
503
+ lastSeq: number;
504
+ }[]): void;
505
+ /**
506
+ * Replay missed messages from history for a specific channel.
507
+ * Called after subscribe+subscribed to send catchup messages.
508
+ */
509
+ replayHistory(socketId: string, channel: string, sinceSeq: number, epoch: string): void;
510
+ /**
511
+ * Get the current epoch for the server (used for history queries).
512
+ */
513
+ getEpoch(): string;
514
+ /**
515
+ * Get the current sequence number for a channel.
516
+ */
517
+ getSequence(channel: string): number;
518
+ /**
519
+ * Handle a typing indicator for a socket on a channel.
520
+ * Only works when typing indicators are enabled in options.
521
+ */
522
+ handleTyping(socketId: string, channel: string, isTyping: boolean): void;
185
523
  }
186
524
  /**
187
525
  * Client → Server: Subscribe to a channel
@@ -190,6 +528,18 @@ export interface SubscribeMessage {
190
528
  id: string;
191
529
  type: 'subscribe';
192
530
  channel: string;
531
+ /** Resume from a specific sequence (for catchup on reconnect) */
532
+ since?: {
533
+ seq: number;
534
+ epoch: string;
535
+ };
536
+ }
537
+ /**
538
+ * Client → Server: Recover a previous session
539
+ */
540
+ export interface RecoverMessage {
541
+ type: 'recover';
542
+ recoveryToken: string;
193
543
  }
194
544
  /**
195
545
  * Server → Client: Subscription successful
@@ -235,6 +585,68 @@ export interface ChannelEventMessage {
235
585
  channel: string;
236
586
  event: string;
237
587
  data: unknown;
588
+ /** Sequence number (monotonically increasing per channel) */
589
+ seq?: number;
590
+ /** Server epoch (changes on restart, used to detect stale offsets) */
591
+ epoch?: string;
592
+ }
593
+ /**
594
+ * Client → Server: Refresh auth token mid-connection
595
+ */
596
+ export interface AuthRefreshMessage {
597
+ id: string;
598
+ type: 'auth:refresh';
599
+ token: string;
600
+ }
601
+ /**
602
+ * Server → Client: Auth refresh result
603
+ */
604
+ export interface AuthRefreshedMessage {
605
+ id: string;
606
+ type: 'auth:refreshed';
607
+ }
608
+ /**
609
+ * Client → Server: Batch subscribe to multiple channels
610
+ */
611
+ export interface BatchSubscribeMessage {
612
+ id: string;
613
+ type: 'subscribe:batch';
614
+ channels: Array<{
615
+ channel: string;
616
+ since?: {
617
+ seq: number;
618
+ epoch: string;
619
+ };
620
+ }>;
621
+ }
622
+ /**
623
+ * Server → Client: Batch subscription results
624
+ */
625
+ export interface BatchSubscribedMessage {
626
+ id: string;
627
+ type: 'subscribed:batch';
628
+ results: Record<string, SubscribeResult>;
629
+ }
630
+ /**
631
+ * Client → Server: Batch publish to multiple channels
632
+ */
633
+ export interface BatchPublishMessage {
634
+ id: string;
635
+ type: 'publish:batch';
636
+ messages: Array<{
637
+ channel: string;
638
+ event: string;
639
+ data: unknown;
640
+ }>;
641
+ }
642
+ /**
643
+ * Client → Server: Typing indicator
644
+ */
645
+ export interface TypingMessage {
646
+ id: string;
647
+ type: 'typing';
648
+ channel: string;
649
+ isTyping: boolean;
238
650
  }
239
651
  /**
240
652
  * Server → Client: Channel error
@@ -249,11 +661,15 @@ export interface ChannelErrorMessage {
249
661
  /**
250
662
  * All channel-related message types
251
663
  */
252
- export type ChannelMessage = SubscribeMessage | SubscribedMessage | UnsubscribeMessage | UnsubscribedMessage | PublishMessage | ChannelEventMessage | ChannelErrorMessage;
664
+ export type ChannelMessage = SubscribeMessage | SubscribedMessage | UnsubscribeMessage | UnsubscribedMessage | PublishMessage | ChannelEventMessage | ChannelErrorMessage | AuthRefreshMessage | AuthRefreshedMessage | RecoverMessage | BatchSubscribeMessage | BatchSubscribedMessage | BatchPublishMessage | TypingMessage;
253
665
  /**
254
666
  * Check if a message is a channel-related message
255
667
  */
256
- export declare function isChannelMessage(message: unknown): message is SubscribeMessage | UnsubscribeMessage | PublishMessage;
668
+ export declare function isChannelMessage(message: unknown): message is SubscribeMessage | UnsubscribeMessage | PublishMessage | BatchSubscribeMessage | BatchPublishMessage | TypingMessage;
669
+ /**
670
+ * Check if a message is a recovery message
671
+ */
672
+ export declare function isRecoverMessage(message: unknown): message is RecoverMessage;
257
673
  /**
258
674
  * Get channel type from name
259
675
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAIrE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC3D,iCAAiC;IACjC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAEpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAA;IAEzB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,MAAM,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IAE1E;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,mBAAmB,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,CAAA;IAE3I;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,mBAAmB,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,CAAA;CAC3I;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,mEAAmE;IACnE,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7E;AAID;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;IAChC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/D,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErE,0CAA0C;IAC1C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzE,+BAA+B;IAC/B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3E,oDAAoD;IACpD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhF,qDAAqD;IACrD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAElF,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErG,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/E,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClF;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,OAAO,KACT,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE/B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,OAAO,KACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE5B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,KACT,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE/B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAE7B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CACX,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,KACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE5B,iCAAiC;IACjC,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAE9B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,8CAA8C;QAC9C,OAAO,EAAE,OAAO,CAAA;QAChB,6CAA6C;QAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,kEAAkE;QAClE,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;IAED;;;;OAIG;IACH,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACvC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAE7C;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;IAEjE;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,gDAAgD;QAChD,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IAED;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,uCAAuC;QACvC,OAAO,EAAE,OAAO,CAAA;QAChB,0DAA0D;QAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,uDAAuD;QACvD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,MAAM,EAAE,eAAe,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAC3E,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,EAAE,WAAW,CAAA;IACjB,mCAAmC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,mDAAmD;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,mDAAmD;IACnD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAK7B;;;OAGG;IACH,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,OAAO,EACZ,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACrC,OAAO,CAAC,eAAe,CAAC,CAAA;IAE3B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAEpD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEtC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAExD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAM5C;;;;;;;OAOG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAAA;IAEP;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,IAAI,CAAA;IAMP;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAAA;IAE5C;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAEvE;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAMvC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAE7C;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE,CAAA;IAEvB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAEzC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAEpC;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAM3C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAA;IAE3F;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEpC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAEnD;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE,CAAA;IAE1B;;OAEG;IACH,cAAc,IAAI,MAAM,CAAA;IAExB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IAElE;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAMjE;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAA;IAEtD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEjF;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IAE/C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;IAE5C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAMjC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAEpE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEpD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAErD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEnF;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IAElD;;OAEG;IACH,SAAS,IAAI,SAAS,EAAE,CAAA;IAExB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAAA;IAE9C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAMpC;;;;OAIG;IACH,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,GAC5C,IAAI,CAAA;IAEP;;;OAGG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAAA;IAEP;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAA;IAElB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAEpC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;CACzE;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAID;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAA;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,kBAAkB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,eAAe,CAAA;IACrB,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAID;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,cAAc,GACd,qBAAqB,GACrB,sBAAsB,GACtB,mBAAmB,GACnB,aAAa,CAAA;AAEjB;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,aAAa,CAWjI;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,cAAc,CAI3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAKxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGrD"}
@@ -17,7 +17,19 @@ export function isChannelMessage(message) {
17
17
  const msg = message;
18
18
  return (msg.type === 'subscribe' ||
19
19
  msg.type === 'unsubscribe' ||
20
- msg.type === 'publish');
20
+ msg.type === 'publish' ||
21
+ msg.type === 'subscribe:batch' ||
22
+ msg.type === 'publish:batch' ||
23
+ msg.type === 'typing');
24
+ }
25
+ /**
26
+ * Check if a message is a recovery message
27
+ */
28
+ export function isRecoverMessage(message) {
29
+ if (!message || typeof message !== 'object')
30
+ return false;
31
+ const msg = message;
32
+ return msg.type === 'recover' && typeof msg.recoveryToken === 'string';
21
33
  }
22
34
  /**
23
35
  * Get channel type from name
@@ -27,6 +39,8 @@ export function getChannelType(name) {
27
39
  return 'presence';
28
40
  if (name.startsWith('private-'))
29
41
  return 'private';
42
+ if (name.startsWith('queue-'))
43
+ return 'queue';
30
44
  return 'public';
31
45
  }
32
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0UH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgB;IAEhB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,GAAG,GAAG,OAAkC,CAAA;IAC9C,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,WAAW;QACxB,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,GAAG,CAAC,IAAI,KAAK,SAAS,CACvB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAA;IACnD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IACjD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACpC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAm0BH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgB;IAEhB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,GAAG,GAAG,OAAkC,CAAA;IAC9C,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,WAAW;QACxB,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,GAAG,CAAC,IAAI,KAAK,SAAS;QACtB,GAAG,CAAC,IAAI,KAAK,iBAAiB;QAC9B,GAAG,CAAC,IAAI,KAAK,eAAe;QAC5B,GAAG,CAAC,IAAI,KAAK,QAAQ,CACtB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgB;IAEhB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,GAAG,GAAG,OAAkC,CAAA;IAC9C,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAA;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAA;IACnD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IACjD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAA;IAC7C,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACpC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,CAAA;AAClD,CAAC"}