@zerotal/broadcasting 1.6.3 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/api-surface.md +285 -0
  2. package/package.json +3 -2
package/api-surface.md ADDED
@@ -0,0 +1,285 @@
1
+ # @zerotal/broadcasting — public API surface
2
+
3
+ <!-- AUTO-GENERATED by scripts/api-surface.ts. Do not edit by hand.
4
+ Run `bun run api:surface` to regenerate after an intentional API change. -->
5
+
6
+ ## . `(./src/index.ts)`
7
+
8
+ class AnonymousBroadcast = {
9
+ new (channel: string): AnonymousBroadcast
10
+ as: (event: string) => AnonymousBroadcast
11
+ send: () => void
12
+ sendNow: () => void
13
+ toOthers: () => AnonymousBroadcast
14
+ with: (data: unknown) => AnonymousBroadcast
15
+ }
16
+
17
+ class Broadcast = {
18
+ new (): Broadcast
19
+ static channel: (pattern: string, callback: ChannelCallback) => void
20
+ static channels: () => { pattern: string; paramNames: string[];}[]
21
+ static fake: () => BroadcastFake
22
+ static getMembers: (channel: string) => PresenceMember[]
23
+ static on: (channel: string) => AnonymousBroadcast
24
+ static presence: (channel: string) => AnonymousBroadcast
25
+ static private: (channel: string) => AnonymousBroadcast
26
+ static resetFake: () => void
27
+ static send: (event: BroadcastEvent, opts?: { exceptSocketId?: string;}) => void
28
+ static to: (channel: string, eventName: string, data?: unknown, opts?: { exceptSocketId?: string;}) => void
29
+ }
30
+
31
+ class BroadcastError = {
32
+ new (message: string, code?: string, status?: number, context?: Record<string, unknown>): BroadcastError
33
+ readonly code: string
34
+ readonly context?: Record<string, unknown> | undefined
35
+ readonly status: number
36
+ }
37
+
38
+ class BroadcastFake = {
39
+ new (): BroadcastFake
40
+ assertBroadcast: (eventName: string, channel?: string, data?: Record<string, unknown>) => void
41
+ assertBroadcastCount: (count: number) => void
42
+ assertNotBroadcast: (eventName: string, channel?: string) => void
43
+ assertNothingBroadcast: () => void
44
+ recorded: () => RecordedBroadcast[]
45
+ reset: () => void
46
+ send: (event: BroadcastEvent, opts?: { exceptSocketId?: string;}) => void
47
+ to: (channel: string, eventName: string, data?: unknown, _opts?: { exceptSocketId?: string;}) => void
48
+ }
49
+
50
+ class BroadcastingEvent = {
51
+ new (): BroadcastingEvent
52
+ static dispatch: <T extends BroadcastingEvent, A extends unknown[]>(this: new (...args: A) => T, ...args: A) => T
53
+ broadcastAs: () => string
54
+ broadcastOn: () => string | string[]
55
+ broadcastWhen: () => boolean
56
+ broadcastWith: () => object
57
+ }
58
+
59
+ class BroadcastManager = {
60
+ new (): BroadcastManager
61
+ authorizePresenceWith: (fn: PresenceAuthFn) => void
62
+ authorizeWith: (fn: ChannelAuthFn) => void
63
+ connectionCount: () => number
64
+ getMembers: (channel: string) => PresenceMember[]
65
+ handleClose: (ws: WS) => void
66
+ handleMessage: (ws: WS, raw: string | Uint8Array) => Promise<void>
67
+ handleOpen: (ws: WS) => void
68
+ send: (event: BroadcastEvent, opts?: { exceptSocketId?: string;}) => void
69
+ setAuthSecret: (secret: string) => void
70
+ signAuth: (socketId: string, channel: string, channelData?: string) => string
71
+ subscriberCount: (channel: string) => number
72
+ subscriptionsFor: (connectionId: string) => string[]
73
+ to: (channel: string, eventName: string, data?: unknown, opts?: { exceptSocketId?: string;}) => void
74
+ upgradeData: (req: Request) => Record<string, unknown>
75
+ verifyAuth: (socketId: string, channel: string, auth: string, channelData?: string) => boolean
76
+ wsHandlers: { open: (ws: WS) => void; message: (ws: WS, msg: string | Uint8Array) => undefined; close: (ws: WS) => void;}
77
+ }
78
+
79
+ class BroadcastProvider = {
80
+ new (app: Application): BroadcastProvider
81
+ static dependsOn?: (new (app: Application) => ServiceProvider)[]
82
+ static environments: AppEnvironment[]
83
+ static priority?: number
84
+ static provides: readonly ['broadcast']
85
+ devProcesses: () => DevProcessDefinition[]
86
+ doctorChecks: () => DoctorCheck[]
87
+ onBooted: () => Promise<void>
88
+ onBooting: () => Promise<void>
89
+ onRegister: () => void
90
+ onRequestProcessed: (_ctx: HttpContext) => Promise<void>
91
+ onRequestReceived: (_ctx: HttpContext) => Promise<void>
92
+ onResponseSent: (_ctx: HttpContext) => Promise<void>
93
+ onStarted: () => Promise<void>
94
+ onStarting: () => Promise<void>
95
+ onStopped: () => Promise<void>
96
+ onStopping: () => Promise<void>
97
+ replContext: () => Record<string, unknown>
98
+ }
99
+
100
+ class BroadcastProviderNotRegisteredError = {
101
+ new (): BroadcastProviderNotRegisteredError
102
+ readonly code: string
103
+ readonly context?: Record<string, unknown> | undefined
104
+ readonly status: number
105
+ }
106
+
107
+ class ChannelRegistry = {
108
+ new (): ChannelRegistry
109
+ all: () => { pattern: string; paramNames: string[];}[]
110
+ authorize: (channelName: string, user: unknown) => Promise<AuthorizeResult>
111
+ clear: () => void
112
+ register: (pattern: string, callback: ChannelCallback) => void
113
+ }
114
+
115
+ class MissingChannelParameterError = {
116
+ new (key: string): MissingChannelParameterError
117
+ readonly code: string
118
+ readonly context?: Record<string, unknown> | undefined
119
+ readonly status: number
120
+ }
121
+
122
+ class PendingBroadcast = {
123
+ new (event: BroadcastEvent): PendingBroadcast
124
+ send: () => void
125
+ then: <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null) => PromiseLike<TResult1 | TResult2>
126
+ toOthers: () => PendingBroadcast
127
+ }
128
+
129
+ class PusherCompatManager = {
130
+ new (_appKey: string, _appSecret: string): PusherCompatManager
131
+ authorizePresenceWith: (fn: PresenceAuthFn) => void
132
+ authorizeWith: (fn: ChannelAuthFn) => void
133
+ connectionCount: () => number
134
+ getMembers: (channel: string) => PresenceMember[]
135
+ handleClose: (ws: WS) => void
136
+ handleMessage: (ws: WS, raw: string | Uint8Array) => Promise<void>
137
+ handleOpen: (ws: WS) => void
138
+ resolvePresence: (req: Request, channel: string) => Promise<{ id: string | number; info?: Record<string, unknown>;} | false>
139
+ resolvePresenceWith: (fn: PusherPresenceResolver) => void
140
+ send: (event: BroadcastEvent, opts?: { exceptSocketId?: string;}) => void
141
+ setAuthSecret: (secret: string) => void
142
+ signAuth: (socketId: string, channel: string, channelData?: string) => string
143
+ subscriberCount: (channel: string) => number
144
+ subscriptionsFor: (connectionId: string) => string[]
145
+ to: (channel: string, eventName: string, data?: unknown, opts?: { exceptSocketId?: string;}) => void
146
+ upgradeData: (req: Request) => Record<string, unknown>
147
+ verifyAuth: (socketId: string, channel: string, auth: string, channelData?: string) => boolean
148
+ wsHandlers: { open: (ws: ServerWebSocket<WsConnectionData>) => void; message: (ws: ServerWebSocket<WsConnectionData>, msg: string | Uint8Array) => undefined; close: (ws: ServerWebSocket<WsConnectionData>) => void;}
149
+ }
150
+
151
+ class RedisBroadcastDriver = {
152
+ new (_url: string): RedisBroadcastDriver
153
+ authorizePresenceWith: (fn: PresenceAuthFn) => void
154
+ authorizeWith: (fn: ChannelAuthFn) => void
155
+ boot: () => Promise<void>
156
+ connectionCount: () => number
157
+ getMembers: (channel: string) => PresenceMember[]
158
+ handleClose: (ws: ServerWebSocket<WsConnectionData>) => void
159
+ handleMessage: (ws: ServerWebSocket<WsConnectionData>, raw: string | Uint8Array) => Promise<void>
160
+ handleOpen: (ws: ServerWebSocket<WsConnectionData>) => void
161
+ send: (event: BroadcastEvent, opts?: { exceptSocketId?: string;}) => void
162
+ setAuthSecret: (secret: string) => void
163
+ signAuth: (socketId: string, channel: string, channelData?: string) => string
164
+ stop: () => Promise<void>
165
+ subscriberCount: (channel: string) => number
166
+ subscriptionsFor: (connectionId: string) => string[]
167
+ to: (channel: string, event: string, data?: unknown, opts?: { exceptSocketId?: string;}) => void
168
+ upgradeData: (req: Request) => Record<string, unknown>
169
+ verifyAuth: (socketId: string, channel: string, auth: string, channelData?: string) => boolean
170
+ wsHandlers: { open: (ws: ServerWebSocket<WsConnectionData>) => void; message: (ws: ServerWebSocket<WsConnectionData>, msg: string | Uint8Array) => undefined; close: (ws: ServerWebSocket<WsConnectionData>) => void;}
171
+ }
172
+
173
+ class TypedBroadcastManager = {
174
+ new <Channels extends BroadcastChannelMap>(): TypedBroadcastManager<Channels>
175
+ authorizePresenceWith: (fn: PresenceAuthFn) => void
176
+ authorizeWith: (fn: ChannelAuthFn) => void
177
+ connectionCount: () => number
178
+ getMembers: (channel: string) => PresenceMember[]
179
+ handleClose: (ws: ServerWebSocket<WsConnectionData>) => void
180
+ handleMessage: (ws: ServerWebSocket<WsConnectionData>, raw: string | Uint8Array) => Promise<void>
181
+ handleOpen: (ws: ServerWebSocket<WsConnectionData>) => void
182
+ send: (event: TypedBroadcastEvent<Channels, keyof Channels & string> | BroadcastEvent) => void
183
+ setAuthSecret: (secret: string) => void
184
+ signAuth: (socketId: string, channel: string, channelData?: string) => string
185
+ subscriberCount: (channel: string) => number
186
+ subscriptionsFor: (connectionId: string) => string[]
187
+ to: { <Ch extends StaticChannels<Channels>, Ev extends EventsOf<Channels, Ch>>(channel: Ch, event: Ev, data: PayloadOf<Channels, Ch, Ev>, opts?: { exceptSocketId?: string; }): void; (channel: string, event: string, data?: unknown, opts?: { exceptSocketId?: string; }): void;}
188
+ toChannel: <Pattern extends ParameterizedChannels<Channels>, Ev extends EventsOf<Channels, Pattern>>(pattern: Pattern, params: ChannelParamRecord<Pattern>, event: Ev, data: PayloadOf<Channels, Pattern, Ev>) => void
189
+ upgradeData: (req: Request) => Record<string, unknown>
190
+ verifyAuth: (socketId: string, channel: string, auth: string, channelData?: string) => boolean
191
+ wsHandlers: { open: (ws: ServerWebSocket<WsConnectionData>) => void; message: (ws: ServerWebSocket<WsConnectionData>, msg: string | Uint8Array) => undefined; close: (ws: ServerWebSocket<WsConnectionData>) => void;}
192
+ }
193
+
194
+ const channelRegistry = ChannelRegistry
195
+
196
+ function broadcast = (event: BroadcastEvent) => PendingBroadcast
197
+
198
+ function BroadcastConfig = (overrides?: Partial<BroadcastConfigShape>) => BroadcastConfigShape
199
+
200
+ function broadcastOnce = (event: BroadcastEvent) => void
201
+
202
+ function broadcastsModelEvents = <M extends object>(ModelClass: ModelClassWithEvents<M>, options: BroadcastsModelEventsOptions<M>) => void
203
+
204
+ function channel = (name: string) => string
205
+
206
+ function compileChannelPattern = (pattern: string) => { regex: RegExp; paramNames: string[];}
207
+
208
+ function isPrivateChannel = (name: string) => boolean
209
+
210
+ function presenceChannel = (name: string) => string
211
+
212
+ function privateChannel = (name: string) => string
213
+
214
+ interface BroadcastEvent = {
215
+ broadcastAs?: () => string
216
+ broadcastOn: () => string | string[]
217
+ broadcastWith?: () => object
218
+ }
219
+
220
+ interface BroadcastRecord = {
221
+ channel: string
222
+ data: Record<string, unknown>
223
+ event: string
224
+ }
225
+
226
+ interface BroadcastsModelEventsOptions = {
227
+ as?: (modelName: string, event: ModelBroadcastEventName) => string
228
+ channels: (model: M, event: ModelBroadcastEventName) => string | string[]
229
+ events?: ModelBroadcastEventName[]
230
+ with?: (model: M, event: ModelBroadcastEventName) => object
231
+ }
232
+
233
+ interface PresenceMember = {
234
+ id: string | number
235
+ info: Record<string, unknown>
236
+ }
237
+
238
+ interface PresenceMemberData = {
239
+ [key: string]: unknown
240
+ id: string | number
241
+ }
242
+
243
+ interface RecordedBroadcast = {
244
+ channel: string
245
+ data: Record<string, unknown>
246
+ event: string
247
+ }
248
+
249
+ interface TypedBroadcastEvent = {
250
+ broadcastAs: () => Ev
251
+ broadcastOn: () => Ch | Ch[]
252
+ broadcastWith: () => PayloadOf<M, Ch, Ev>
253
+ }
254
+
255
+ interface WsConnectionData = {
256
+ id: string
257
+ token?: string
258
+ userId?: string | number
259
+ }
260
+
261
+ type AuthorizeResult = { matched: false;} | { matched: true; result: boolean | PresenceMemberData | null | undefined;}
262
+
263
+ type BroadcastChannelMap = { [x: string]: Record<string, object>;}
264
+
265
+ type ChannelAuthFn = (channel: string, ws: ServerWebSocket<WsConnectionData>) => boolean | Promise<boolean>
266
+
267
+ type ChannelCallback = (user: unknown, ...params: string[]) => boolean | PresenceMemberData | null | undefined | Promise<boolean | PresenceMemberData | null | undefined>
268
+
269
+ type ChannelParamRecord = [ChannelParams<Pattern>] extends [never] ? undefined : { [K in ChannelParams<Pattern>]: string | number; }
270
+
271
+ type ChannelParams = Pattern extends `${string}[${infer Param}]${infer Tail}` ? Param | ChannelParams<Tail> : never
272
+
273
+ type EventsOf = keyof M[Ch] & string
274
+
275
+ type ModelBroadcastEventName = 'created' | 'updated' | 'deleted'
276
+
277
+ type ParameterizedChannels = { [K in keyof M & string]: [ChannelParams<K>] extends [never] ? never : K; }[keyof M & string]
278
+
279
+ type PayloadOf = M[Ch][Ev]
280
+
281
+ type PresenceAuthFn = (channel: string, ws: ServerWebSocket<WsConnectionData>) => Promise<PresenceMember | false> | PresenceMember | false
282
+
283
+ type PusherPresenceResolver = (req: Request, channel: string) => Promise<{ id: string | number; info?: Record<string, unknown>;} | false> | { id: string | number; info?: Record<string, unknown>;} | false
284
+
285
+ type StaticChannels = { [K in keyof M & string]: [ChannelParams<K>] extends [never] ? K : never; }[keyof M & string]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerotal/broadcasting",
3
- "version": "1.6.3",
3
+ "version": "1.7.0",
4
4
  "license": "MIT",
5
5
  "maturity": "stable",
6
6
  "private": false,
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "files": [
14
14
  "CHANGELOG.md",
15
+ "api-surface.md",
15
16
  "src",
16
17
  "!src/**/*.test.ts",
17
18
  "!src/**/*.test.tsx",
@@ -29,7 +30,7 @@
29
30
  "typecheck": "tsc --noEmit"
30
31
  },
31
32
  "dependencies": {
32
- "@zerotal/core": "1.6.3"
33
+ "@zerotal/core": "1.7.0"
33
34
  },
34
35
  "devDependencies": {
35
36
  "typescript": "^5.8.0"