@holo-js/broadcast 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,177 @@
1
+ import { BroadcastChannelAuthRuntimeBindings, BroadcastRuntimeBindings, BroadcastDriver, RegisteredBroadcastDriver, RegisterBroadcastDriverOptions, channel, defineBroadcast, defineChannel, presenceChannel, privateChannel } from './contracts.js';
2
+ export { BroadcastAuthEndpointBody, BroadcastAuthEndpointErrorBody, BroadcastAuthEndpointOptions, BroadcastAuthEndpointPayload, BroadcastAuthEndpointSuccessBody, BroadcastAuthorizeResult, BroadcastChannelAuthFailure, BroadcastChannelAuthRequest, BroadcastChannelAuthResult, BroadcastChannelAuthSuccess, BroadcastChannelTarget, BroadcastChannelType, BroadcastChannelsFor, BroadcastDefinition, BroadcastDefinitionInput, BroadcastDelayValue, BroadcastDispatchOptions, BroadcastDriverExecutionContext, BroadcastDriverName, BroadcastJsonObject, BroadcastJsonPrimitive, BroadcastJsonValue, BroadcastPayloadFor, BroadcastQueueOptions, BroadcastRuntimeFacade, BroadcastSendInput, BroadcastSendResult, BroadcastTargetParamInput, BroadcastWhisperDefinitions, BroadcastWhisperSchema, BroadcastWhisperValidationResult, BuiltInBroadcastDriverRegistry, ChannelDefinition, ChannelDefinitionFor, ChannelDefinitionInput, ChannelPatternParams, ChannelPresenceMemberFor, ChannelWhisperPayloadFor, ExportedBroadcastDefinition, ExportedChannelDefinition, GeneratedBroadcastManifest, GeneratedBroadcastManifestChannel, GeneratedBroadcastManifestEvent, GeneratedChannelAuthRegistryEntry, HoloBroadcastDriverRegistry, HoloBroadcastRegistry, HoloChannelRegistry, InferBroadcastWhisperPayload, InferChannelPresenceMember, InferChannelWhisperPayload, InferSchemaOutput, PendingBroadcastDispatch, RawBroadcastSendInput, ResolvedRawBroadcastSendInput, broadcastInternals, isBroadcastDefinition, isChannelDefinition } from './contracts.js';
3
+ import { authorizeBroadcastChannel, parseBroadcastAuthEndpointPayload, renderBroadcastAuthResponse, resolveBroadcastWhisperSchema, validateBroadcastWhisperPayload } from './auth.js';
4
+ export { broadcastAuthInternals } from './auth.js';
5
+ import { NormalizedHoloBroadcastConfig, NormalizedHoloQueueConfig, NormalizedHoloRedisConfig } from '@holo-js/config';
6
+ export { HoloBroadcastConfig, NormalizedHoloBroadcastConfig, defineBroadcastConfig } from '@holo-js/config';
7
+ import { broadcast, broadcastRaw, configureBroadcastRuntime, getBroadcastRuntime, getBroadcastRuntimeBindings, resetBroadcastRuntime } from './runtime.js';
8
+ export { broadcastRuntimeInternals } from './runtime.js';
9
+ import '@holo-js/validation';
10
+
11
+ type WorkerConnectionInfo = {
12
+ readonly socketId: string;
13
+ readonly app: BroadcastWorkerApp;
14
+ readonly headers: Headers;
15
+ };
16
+ type WorkerWebSocketConnection = WorkerConnectionInfo & {
17
+ readonly send: (payload: string) => void;
18
+ readonly close: (code?: number, reason?: string) => void;
19
+ };
20
+ type PublishBody = {
21
+ readonly name: string;
22
+ readonly channels: readonly string[];
23
+ readonly data: string;
24
+ readonly socket_id?: string;
25
+ };
26
+ type BroadcastWorkerApp = {
27
+ readonly connection: string;
28
+ readonly appId: string;
29
+ readonly key: string;
30
+ readonly secret: string;
31
+ readonly authEndpoint?: string;
32
+ };
33
+ type PresenceMember = Readonly<Record<string, unknown>>;
34
+ type WorkerRuntimeOptions = {
35
+ readonly config: NormalizedHoloBroadcastConfig;
36
+ readonly channelAuth?: BroadcastChannelAuthRuntimeBindings;
37
+ readonly fetch?: typeof fetch;
38
+ readonly now?: () => number;
39
+ readonly scaling?: BroadcastWorkerScalingRuntime;
40
+ readonly scalingAutoSubscribe?: boolean;
41
+ readonly scalingUnsubscribe?: () => Promise<void> | void;
42
+ };
43
+ interface BroadcastWorkerRuntime {
44
+ readonly fetch: (request: Request) => Promise<Response>;
45
+ readonly connectWebSocket: (connection: WorkerWebSocketConnection) => void;
46
+ readonly receiveWebSocketMessage: (socketId: string, rawMessage: string) => Promise<void>;
47
+ readonly receiveScalingMessage: (payload: string) => Promise<void>;
48
+ readonly disconnectWebSocket: (socketId: string) => void;
49
+ readonly getStats: () => BroadcastWorkerStats;
50
+ readonly close: () => Promise<void>;
51
+ }
52
+ interface BroadcastWorkerStats {
53
+ readonly nodeId: string;
54
+ readonly uptimeMs: number;
55
+ readonly apps: readonly string[];
56
+ readonly appScopes: readonly {
57
+ readonly connection: string;
58
+ readonly appId: string;
59
+ readonly key: string;
60
+ }[];
61
+ readonly connectionCount: number;
62
+ readonly subscribedChannelCount: number;
63
+ readonly presenceChannelCount: number;
64
+ readonly scaling: false | {
65
+ readonly driver: 'redis';
66
+ readonly connection: string;
67
+ readonly eventChannel: string;
68
+ };
69
+ }
70
+ interface StartedBroadcastWorker {
71
+ readonly host: string;
72
+ readonly port: number;
73
+ readonly stop: () => Promise<void>;
74
+ }
75
+ type BroadcastRedisScalingConnection = {
76
+ readonly url?: string;
77
+ readonly clusters?: readonly {
78
+ readonly url?: string;
79
+ readonly host: string;
80
+ readonly port: number;
81
+ }[];
82
+ readonly host: string;
83
+ readonly port: number;
84
+ readonly username?: string;
85
+ readonly password?: string;
86
+ readonly db: number;
87
+ };
88
+ type BroadcastScalingAdapter = {
89
+ publish(channel: string, payload: string): Promise<void>;
90
+ subscribe(channel: string, onMessage: (payload: string) => void): Promise<() => Promise<void> | void>;
91
+ hashSet(key: string, field: string, value: string): Promise<void>;
92
+ hashDelete(key: string, field: string): Promise<void>;
93
+ hashGetAll(key: string): Promise<Readonly<Record<string, string>>>;
94
+ close(): Promise<void>;
95
+ };
96
+ type BroadcastWorkerScalingRuntime = {
97
+ readonly driver: 'redis';
98
+ readonly connection: string;
99
+ readonly nodeId: string;
100
+ readonly eventChannel: string;
101
+ readonly adapter: BroadcastScalingAdapter;
102
+ };
103
+ declare function parseSocketMessage(rawMessage: string): {
104
+ readonly event: string;
105
+ readonly channel?: string;
106
+ readonly data: Record<string, unknown>;
107
+ };
108
+ declare function normalizePublishBody(value: unknown): PublishBody;
109
+ declare function createPusherSignature(secret: string, method: string, pathname: string, params: URLSearchParams): string;
110
+ declare function parseChannelKind(channel: string): {
111
+ readonly kind: 'public' | 'private' | 'presence';
112
+ readonly canonical: string;
113
+ };
114
+ declare function createSocketId(): string;
115
+ declare function createScalingNodeId(): string;
116
+ declare function resolveScalingEventChannel(connection: string): string;
117
+ declare function parsePresenceHashMembers(values: Readonly<Record<string, string>>): Map<string, PresenceMember>;
118
+ declare function resolveRedisScalingConnection(queueConfig: NormalizedHoloQueueConfig | undefined, connectionName: string, redisConfig?: NormalizedHoloRedisConfig): BroadcastRedisScalingConnection;
119
+ declare function createRedisScalingAdapter(connection: BroadcastRedisScalingConnection, dependencies?: {
120
+ readonly loadRedisModule?: () => Promise<unknown>;
121
+ }): Promise<BroadcastScalingAdapter>;
122
+ declare function buildWorkerApps(config: NormalizedHoloBroadcastConfig): Readonly<Record<string, BroadcastWorkerApp>>;
123
+ declare function createBroadcastWorkerRuntime(options: WorkerRuntimeOptions): BroadcastWorkerRuntime;
124
+ declare function startBroadcastWorker(runtimeBindings: Pick<BroadcastRuntimeBindings, 'config' | 'channelAuth'> & {
125
+ readonly queue?: NormalizedHoloQueueConfig;
126
+ readonly redis?: NormalizedHoloRedisConfig;
127
+ readonly nodeId?: string;
128
+ readonly fetch?: typeof fetch;
129
+ readonly createScalingAdapter?: (connection: BroadcastRedisScalingConnection) => Promise<BroadcastScalingAdapter>;
130
+ readonly loadRedisModule?: () => Promise<unknown>;
131
+ readonly loadWebSocketModule?: () => Promise<unknown>;
132
+ }): Promise<StartedBroadcastWorker>;
133
+ declare const workerInternals: {
134
+ buildWorkerApps: typeof buildWorkerApps;
135
+ createScalingNodeId: typeof createScalingNodeId;
136
+ createRedisScalingAdapter: typeof createRedisScalingAdapter;
137
+ createPusherSignature: typeof createPusherSignature;
138
+ createSocketId: typeof createSocketId;
139
+ resolveRedisScalingConnection: typeof resolveRedisScalingConnection;
140
+ resolveScalingEventChannel: typeof resolveScalingEventChannel;
141
+ normalizePublishBody: typeof normalizePublishBody;
142
+ parseChannelKind: typeof parseChannelKind;
143
+ parsePresenceHashMembers: typeof parsePresenceHashMembers;
144
+ parseSocketMessage: typeof parseSocketMessage;
145
+ };
146
+
147
+ declare function normalizeDriverName(name: string): string;
148
+ declare function registerBroadcastDriver(name: string, driver: BroadcastDriver, options?: RegisterBroadcastDriverOptions): RegisteredBroadcastDriver;
149
+ declare function getRegisteredBroadcastDriver(name: string): BroadcastDriver | undefined;
150
+ declare function listRegisteredBroadcastDrivers(): readonly RegisteredBroadcastDriver[];
151
+ declare function resetBroadcastDriverRegistry(): void;
152
+ declare const broadcastRegistryInternals: {
153
+ normalizeDriverName: typeof normalizeDriverName;
154
+ };
155
+
156
+ declare const broadcastPackage: Readonly<{
157
+ authorizeBroadcastChannel: typeof authorizeBroadcastChannel;
158
+ broadcast: typeof broadcast;
159
+ broadcastRaw: typeof broadcastRaw;
160
+ channel: typeof channel;
161
+ configureBroadcastRuntime: typeof configureBroadcastRuntime;
162
+ defineBroadcast: typeof defineBroadcast;
163
+ defineChannel: typeof defineChannel;
164
+ getBroadcastRuntime: typeof getBroadcastRuntime;
165
+ getBroadcastRuntimeBindings: typeof getBroadcastRuntimeBindings;
166
+ parseBroadcastAuthEndpointPayload: typeof parseBroadcastAuthEndpointPayload;
167
+ presenceChannel: typeof presenceChannel;
168
+ privateChannel: typeof privateChannel;
169
+ renderBroadcastAuthResponse: typeof renderBroadcastAuthResponse;
170
+ resetBroadcastRuntime: typeof resetBroadcastRuntime;
171
+ resolveBroadcastWhisperSchema: typeof resolveBroadcastWhisperSchema;
172
+ startBroadcastWorker: typeof startBroadcastWorker;
173
+ validateBroadcastWhisperPayload: typeof validateBroadcastWhisperPayload;
174
+ createBroadcastWorkerRuntime: typeof createBroadcastWorkerRuntime;
175
+ }>;
176
+
177
+ export { BroadcastChannelAuthRuntimeBindings, BroadcastDriver, BroadcastRuntimeBindings, type BroadcastWorkerRuntime, type BroadcastWorkerStats, RegisterBroadcastDriverOptions, RegisteredBroadcastDriver, type StartedBroadcastWorker, authorizeBroadcastChannel, broadcast, broadcastRaw, broadcastRegistryInternals, channel, configureBroadcastRuntime, createBroadcastWorkerRuntime, broadcastPackage as default, defineBroadcast, defineChannel, getBroadcastRuntime, getBroadcastRuntimeBindings, getRegisteredBroadcastDriver, listRegisteredBroadcastDrivers, parseBroadcastAuthEndpointPayload, presenceChannel, privateChannel, registerBroadcastDriver, renderBroadcastAuthResponse, resetBroadcastDriverRegistry, resetBroadcastRuntime, resolveBroadcastWhisperSchema, startBroadcastWorker, validateBroadcastWhisperPayload, workerInternals };