@gravito/ripple 1.0.0 → 3.0.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.
@@ -15,7 +15,7 @@ interface PlanetCore {
15
15
  info: (msg: string) => void;
16
16
  };
17
17
  adapter: {
18
- use: (path: string, handler: (ctx: any, next: () => Promise<void>) => Promise<any>) => void;
18
+ use: (path: string, handler: (ctx: any, next: () => Promise<Response | undefined>) => Promise<any>) => void;
19
19
  };
20
20
  hooks: {
21
21
  addAction: (hook: string, callback: (args: unknown) => Promise<void>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"OrbitRipple.d.ts","sourceRoot":"","sources":["../src/OrbitRipple.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAA;IACvC,OAAO,EAAE;QACP,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;KAC5F,CAAA;IACD,KAAK,EAAE;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;KAC9E,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,GAAE,YAAiB;IAKrC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAuB/B;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU;CAGX"}
1
+ {"version":3,"file":"OrbitRipple.d.ts","sourceRoot":"","sources":["../src/OrbitRipple.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAA;IACvC,OAAO,EAAE;QACP,GAAG,EAAE,CACH,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,KAC3E,IAAI,CAAA;KACV,CAAA;IACD,KAAK,EAAE;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;KAC9E,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,GAAE,YAAiB;IAKrC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAuB/B;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU;CAGX"}
package/dist/index.js CHANGED
@@ -505,7 +505,7 @@ class OrbitRipple {
505
505
  setRippleServer(this.server);
506
506
  core.adapter.use("*", async (ctx, next) => {
507
507
  ctx.set("ripple", this.server);
508
- await next();
508
+ return await next();
509
509
  });
510
510
  this.server.init().then(() => {
511
511
  core.logger.info(`\uD83C\uDF0A Ripple WebSocket ready at ${this.config.path || "/ws"}`);
@@ -539,4 +539,4 @@ export {
539
539
  BroadcastEvent
540
540
  };
541
541
 
542
- //# debugId=FDAC75CC384E2A3664756E2164756E21
542
+ //# debugId=C01083FD591F41A164756E2164756E21
package/dist/index.js.map CHANGED
@@ -8,9 +8,9 @@
8
8
  "/**\n * @fileoverview Broadcast Event base class\n *\n * Events that can be broadcast to WebSocket channels.\n *\n * @module @gravito/ripple/events\n */\n\nimport type { Channel } from '../types'\n\n/**\n * Abstract base class for broadcast events\n *\n * @example\n * ```typescript\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) {\n * super()\n * }\n *\n * broadcastOn() {\n * return new PrivateChannel(`orders.${this.order.userId}`)\n * }\n *\n * broadcastAs() {\n * return 'OrderShipped'\n * }\n * }\n *\n * // Broadcast\n * broadcast(new OrderShipped(order))\n * ```\n */\nexport abstract class BroadcastEvent {\n /**\n * The channels to broadcast this event on\n */\n abstract broadcastOn(): Channel | Channel[]\n\n /**\n * The event name to use when broadcasting\n * Defaults to the class name\n */\n broadcastAs(): string {\n return this.constructor.name\n }\n\n /**\n * Socket IDs to exclude from the broadcast\n */\n broadcastExcept(): string[] {\n return []\n }\n\n /**\n * Get the event data payload\n * Override to customize the broadcast payload\n */\n broadcastWith(): Record<string, unknown> {\n // By default, return all public properties\n const data: Record<string, unknown> = {}\n for (const key of Object.keys(this)) {\n data[key] = (this as Record<string, unknown>)[key]\n }\n return data\n }\n}\n",
9
9
  "/**\n * @fileoverview Broadcaster for sending events to channels\n *\n * @module @gravito/ripple/events\n */\n\nimport type { RippleServer } from '../RippleServer'\nimport type { BroadcastEvent } from './BroadcastEvent'\n\n/**\n * Global Ripple server instance holder\n */\nlet globalRippleServer: RippleServer | null = null\n\n/**\n * Set the global Ripple server instance\n */\nexport function setRippleServer(server: RippleServer): void {\n globalRippleServer = server\n}\n\n/**\n * Get the global Ripple server instance\n */\nexport function getRippleServer(): RippleServer | null {\n return globalRippleServer\n}\n\n/**\n * Broadcast an event to its channels\n *\n * @example\n * ```typescript\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n * broadcastOn() { return new PrivateChannel(`orders.${this.order.userId}`) }\n * }\n *\n * broadcast(new OrderShipped(order))\n * ```\n */\nexport function broadcast(event: BroadcastEvent): void {\n if (!globalRippleServer) {\n console.warn('[Ripple] No server configured. Event not broadcast.')\n return\n }\n\n const channels = event.broadcastOn()\n const eventName = event.broadcastAs()\n const data = event.broadcastWith()\n const _except = event.broadcastExcept()\n\n const channelList = Array.isArray(channels) ? channels : [channels]\n\n for (const channel of channelList) {\n // For each subscriber in the channel, excluding specified sockets\n globalRippleServer.broadcast(channel.fullName, eventName, data)\n }\n}\n\n/**\n * Fluent Broadcaster API for more control\n *\n * @example\n * ```typescript\n * Broadcaster.to('orders.123')\n * .emit('OrderUpdated', { status: 'shipped' })\n *\n * Broadcaster.toPrivate('orders.123')\n * .except(socketId)\n * .emit('OrderUpdated', { status: 'shipped' })\n * ```\n */\nexport class Broadcaster {\n private _channel: string\n private _except: string[] = []\n\n private constructor(channel: string) {\n this._channel = channel\n }\n\n /**\n * Target a public channel\n */\n static to(channel: string): Broadcaster {\n return new Broadcaster(channel)\n }\n\n /**\n * Target a private channel\n */\n static toPrivate(channel: string): Broadcaster {\n return new Broadcaster(`private-${channel}`)\n }\n\n /**\n * Target a presence channel\n */\n static toPresence(channel: string): Broadcaster {\n return new Broadcaster(`presence-${channel}`)\n }\n\n /**\n * Exclude specific socket IDs from broadcast\n */\n except(socketIds: string | string[]): this {\n const ids = Array.isArray(socketIds) ? socketIds : [socketIds]\n this._except.push(...ids)\n return this\n }\n\n /**\n * Emit an event to the channel\n */\n emit(event: string, data: unknown): void {\n if (!globalRippleServer) {\n console.warn('[Ripple] No server configured. Event not broadcast.')\n return\n }\n\n globalRippleServer.broadcast(this._channel, event, data)\n }\n}\n",
10
10
  "/**\n * @fileoverview Ripple WebSocket Server\n *\n * Core WebSocket server implementation using Bun's native WebSocket API.\n *\n * @module @gravito/ripple\n */\n\nimport type { Server } from 'bun'\nimport { ChannelManager, requiresAuth } from './channels'\nimport { LocalDriver } from './drivers'\nimport type {\n ChannelAuthorizer,\n ClientData,\n ClientMessage,\n RippleConfig,\n RippleDriver,\n RippleWebSocket,\n ServerMessage,\n WebSocketHandlerConfig,\n} from './types'\n\n/**\n * Ripple WebSocket Server\n *\n * Provides channel-based real-time communication using Bun's native WebSocket.\n *\n * @example\n * ```typescript\n * const ripple = new RippleServer({\n * path: '/ws',\n * authorizer: async (channel, userId) => {\n * // Custom authorization logic\n * return true\n * }\n * })\n *\n * Bun.serve({\n * fetch: (req, server) => {\n * if (ripple.upgrade(req, server)) return\n * return new Response('Not found', { status: 404 })\n * },\n * websocket: ripple.getHandler()\n * })\n * ```\n */\nexport class RippleServer {\n private channels: ChannelManager\n private driver: RippleDriver\n private authorizer?: ChannelAuthorizer\n private pingInterval?: ReturnType<typeof setInterval>\n private eventListeners: Map<string, ((socket: RippleWebSocket, data: any) => void)[]> = new Map()\n\n readonly config: Required<Pick<RippleConfig, 'path' | 'authEndpoint' | 'pingInterval'>> &\n RippleConfig\n\n constructor(config: RippleConfig = {}) {\n this.config = {\n path: '/ws',\n authEndpoint: '/broadcasting/auth',\n pingInterval: 30000,\n ...config,\n }\n\n this.channels = new ChannelManager()\n this.driver = config.driver === 'redis' ? new LocalDriver() : new LocalDriver() // TODO: RedisDriver\n this.authorizer = config.authorizer\n }\n\n /**\n * Register an event listener for client messages.\n *\n * @param event - The event name to listen for.\n * @param handler - The callback function.\n */\n on(event: string, handler: (socket: RippleWebSocket, data: any) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, [])\n }\n this.eventListeners.get(event)!.push(handler)\n }\n\n /**\n * Fluent API for broadcasting to a channel.\n *\n * @param channel - The channel name.\n */\n to(channel: string) {\n return {\n emit: (event: string, data: unknown) => this.broadcast(channel, event, data),\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Bun.serve Integration\n // ─────────────────────────────────────────────────────────────\n\n /**\n * Attempt to upgrade an HTTP request to WebSocket.\n *\n * @param req - The HTTP request.\n * @param server - The Bun server instance.\n * @returns True if the request was upgraded, false otherwise.\n */\n upgrade(req: Request, server: Server<ClientData>): boolean {\n const url = new URL(req.url)\n\n if (url.pathname !== this.config.path) {\n return false\n }\n\n const success = server.upgrade(req, {\n data: {\n id: crypto.randomUUID(),\n channels: new Set<string>(),\n } satisfies ClientData,\n })\n\n return success\n }\n\n /**\n * Get WebSocket handler configuration for Bun.serve.\n *\n * @returns An object containing the WebSocket event handlers.\n */\n getHandler(): WebSocketHandlerConfig {\n return {\n open: (ws) => this.handleOpen(ws),\n message: (ws, message) => this.handleMessage(ws, message),\n close: (ws, code, reason) => this.handleClose(ws, code, reason),\n drain: (ws) => this.handleDrain(ws),\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // WebSocket Event Handlers\n // ─────────────────────────────────────────────────────────────\n\n private handleOpen(ws: RippleWebSocket): void {\n this.channels.addClient(ws)\n\n // Send connection confirmation with socket ID\n this.send(ws, {\n type: 'connected',\n socketId: ws.data.id,\n })\n }\n\n private async handleMessage(ws: RippleWebSocket, message: string | Buffer): Promise<void> {\n try {\n const data: ClientMessage = JSON.parse(message.toString())\n\n switch (data.type) {\n case 'subscribe':\n await this.handleSubscribe(ws, data.channel, data.auth)\n break\n\n case 'unsubscribe':\n this.handleUnsubscribe(ws, data.channel)\n break\n\n case 'whisper':\n this.handleWhisper(ws, data.channel, data.event, data.data)\n break\n\n case 'ping':\n this.send(ws, { type: 'pong' })\n break\n }\n } catch (error) {\n this.send(ws, {\n type: 'error',\n message: error instanceof Error ? error.message : 'Invalid message',\n })\n }\n }\n\n private handleClose(ws: RippleWebSocket, _code: number, _reason: string): void {\n const leftChannels = this.channels.removeClient(ws.data.id)\n\n // Notify presence channels about user leaving\n for (const channel of leftChannels) {\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(channel, 'presence', {\n event: 'leave',\n data: {\n id: ws.data.userId,\n info: ws.data.userInfo,\n },\n })\n }\n }\n }\n\n private handleDrain(_ws: RippleWebSocket): void {\n // Called when backpressure is relieved\n // Currently no-op, but useful for flow control\n }\n\n // ─────────────────────────────────────────────────────────────\n // Subscription Handlers\n // ─────────────────────────────────────────────────────────────\n\n private async handleSubscribe(\n ws: RippleWebSocket,\n channel: string,\n _auth?: { socketId: string; signature: string }\n ): Promise<void> {\n // Check if channel requires authentication\n if (requiresAuth(channel)) {\n if (!this.authorizer) {\n this.send(ws, {\n type: 'error',\n message: 'No authorizer configured for private channels',\n channel,\n })\n return\n }\n\n const result = await this.authorizer(channel, ws.data.userId, ws.data.id)\n\n if (result === false) {\n this.send(ws, {\n type: 'error',\n message: 'Unauthorized',\n channel,\n })\n return\n }\n\n // For presence channels, result contains user info\n if (typeof result === 'object' && 'id' in result) {\n this.channels.subscribe(ws.data.id, channel, result)\n\n // Notify other members about join\n this.broadcastToChannel(\n channel,\n 'presence',\n {\n event: 'join',\n data: result,\n },\n ws.data.id\n )\n\n // Send current members to new subscriber\n this.send(ws, {\n type: 'presence',\n channel,\n event: 'members',\n data: this.channels.getPresenceMembers(channel),\n })\n } else {\n this.channels.subscribe(ws.data.id, channel)\n }\n } else {\n this.channels.subscribe(ws.data.id, channel)\n }\n\n this.send(ws, { type: 'subscribed', channel })\n }\n\n private handleUnsubscribe(ws: RippleWebSocket, channel: string): void {\n // Notify presence channel before leaving\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(\n channel,\n 'presence',\n {\n event: 'leave',\n data: {\n id: ws.data.userId,\n info: ws.data.userInfo,\n },\n },\n ws.data.id\n )\n }\n\n this.channels.unsubscribe(ws.data.id, channel)\n this.send(ws, { type: 'unsubscribed', channel })\n }\n\n private handleWhisper(ws: RippleWebSocket, channel: string, event: string, data: unknown): void {\n // Trigger server-side listeners\n const listeners = this.eventListeners.get(event)\n if (listeners && listeners.length > 0) {\n listeners.forEach((handler) => {\n handler(ws, data)\n })\n }\n\n // Whispers are client-to-client messages, excluding sender\n if (!this.channels.isSubscribed(ws.data.id, channel)) {\n this.send(ws, {\n type: 'error',\n message: 'Not subscribed to channel',\n channel,\n })\n return\n }\n\n this.broadcastToChannel(channel, event, data, ws.data.id)\n }\n\n // ─────────────────────────────────────────────────────────────\n // Broadcasting\n // ─────────────────────────────────────────────────────────────\n\n /**\n * Broadcast an event to a channel.\n *\n * @param channel - The channel name.\n * @param event - The event name.\n * @param data - The event data.\n */\n broadcast(channel: string, event: string, data: unknown): void {\n this.broadcastToChannel(channel, event, data)\n }\n\n /**\n * Broadcast to specific client IDs.\n *\n * @param clientIds - An array of client IDs.\n * @param event - The event name.\n * @param data - The event data.\n */\n broadcastToClients(clientIds: string[], event: string, data: unknown): void {\n for (const clientId of clientIds) {\n const ws = this.channels.getClient(clientId)\n if (ws) {\n this.send(ws, {\n type: 'event',\n channel: '',\n event,\n data,\n })\n }\n }\n }\n\n private broadcastToChannel(\n channel: string,\n event: string,\n data: unknown,\n excludeClientId?: string\n ): void {\n const subscribers = this.channels.getSubscribers(channel)\n\n for (const ws of subscribers) {\n if (excludeClientId && ws.data.id === excludeClientId) {\n continue\n }\n\n if (event === 'presence') {\n this.send(ws, {\n type: 'presence',\n channel,\n event: (data as { event: 'join' | 'leave' | 'members' }).event,\n data: (data as { data: unknown }).data,\n })\n } else {\n this.send(ws, {\n type: 'event',\n channel,\n event,\n data,\n })\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────\n\n private send(ws: RippleWebSocket, message: ServerMessage): void {\n try {\n ws.send(JSON.stringify(message))\n } catch {\n // Connection might be closed\n }\n }\n\n /**\n * Get server statistics.\n *\n * @returns An object containing connection and channel statistics.\n */\n getStats() {\n return this.channels.getStats()\n }\n\n /**\n * Initialize the server.\n *\n * Initializes the driver and starts the ping interval.\n *\n * @returns A promise that resolves when initialization is complete.\n */\n async init(): Promise<void> {\n await this.driver.init?.()\n\n // Start ping interval\n if (this.config.pingInterval > 0) {\n this.pingInterval = setInterval(() => {\n for (const ws of this.channels.getAllClients()) {\n this.send(ws, { type: 'pong' })\n }\n }, this.config.pingInterval)\n }\n }\n\n /**\n * Shutdown the server.\n *\n * Clears the ping interval and shuts down the driver.\n *\n * @returns A promise that resolves when shutdown is complete.\n */\n async shutdown(): Promise<void> {\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n await this.driver.shutdown?.()\n }\n}\n",
11
- "/**\n * @fileoverview OrbitRipple - Gravito module wrapper for Ripple WebSocket\n *\n * Integrates RippleServer with Gravito's PlanetCore.\n *\n * @module @gravito/ripple\n */\n\nimport { setRippleServer } from './events/Broadcaster'\nimport { RippleServer } from './RippleServer'\nimport type { RippleConfig } from './types'\n\n/**\n * PlanetCore interface for type safety without importing\n */\ninterface PlanetCore {\n logger: { info: (msg: string) => void }\n adapter: {\n use: (path: string, handler: (ctx: any, next: () => Promise<void>) => Promise<any>) => void\n }\n hooks: {\n addAction: (hook: string, callback: (args: unknown) => Promise<void>) => void\n }\n}\n\n/**\n * OrbitRipple - Gravito module for real-time WebSocket communication\n *\n * @example\n * ```typescript\n * import { OrbitRipple } from '@gravito/ripple'\n *\n * const core = new PlanetCore()\n *\n * core.install(new OrbitRipple({\n * path: '/ws',\n * authorizer: async (channel, userId, socketId) => {\n * // Return true for authorized, false for denied\n * // For presence channels, return { id: userId, info: { name: '...' } }\n * return true\n * }\n * }))\n *\n * // The WebSocket is automatically integrated with Bun.serve\n * core.boot()\n * ```\n */\nexport class OrbitRipple {\n private server: RippleServer\n private config: RippleConfig\n\n constructor(config: RippleConfig = {}) {\n this.config = config\n this.server = new RippleServer(config)\n }\n\n /**\n * Install the module into PlanetCore\n */\n install(core: PlanetCore): void {\n core.logger.info('🌊 Orbit Ripple installed')\n\n // Store reference globally for broadcast() function\n setRippleServer(this.server)\n\n // Expose Ripple server via context variable\n core.adapter.use('*', async (ctx, next) => {\n ctx.set('ripple' as any, this.server)\n await next()\n })\n\n // Initialize server immediately\n this.server.init().then(() => {\n core.logger.info(`🌊 Ripple WebSocket ready at ${this.config.path || '/ws'}`)\n })\n\n // Register shutdown hook\n core.hooks.addAction('shutdown', async () => {\n await this.server.shutdown()\n })\n }\n\n /**\n * Get the underlying RippleServer instance\n */\n getServer(): RippleServer {\n return this.server\n }\n\n /**\n * Get WebSocket handler for Bun.serve integration\n *\n * @example\n * ```typescript\n * const ripple = new OrbitRipple()\n *\n * Bun.serve({\n * fetch: (req, server) => {\n * // Let Ripple handle WebSocket upgrades\n * if (ripple.getServer().upgrade(req, server)) return\n *\n * // Regular HTTP handling\n * return core.adapter.fetch(req, server)\n * },\n * websocket: ripple.getHandler()\n * })\n * ```\n */\n getHandler() {\n return this.server.getHandler()\n }\n}\n"
11
+ "/**\n * @fileoverview OrbitRipple - Gravito module wrapper for Ripple WebSocket\n *\n * Integrates RippleServer with Gravito's PlanetCore.\n *\n * @module @gravito/ripple\n */\n\nimport { setRippleServer } from './events/Broadcaster'\nimport { RippleServer } from './RippleServer'\nimport type { RippleConfig } from './types'\n\n/**\n * PlanetCore interface for type safety without importing\n */\ninterface PlanetCore {\n logger: { info: (msg: string) => void }\n adapter: {\n use: (\n path: string,\n handler: (ctx: any, next: () => Promise<Response | undefined>) => Promise<any>\n ) => void\n }\n hooks: {\n addAction: (hook: string, callback: (args: unknown) => Promise<void>) => void\n }\n}\n\n/**\n * OrbitRipple - Gravito module for real-time WebSocket communication\n *\n * @example\n * ```typescript\n * import { OrbitRipple } from '@gravito/ripple'\n *\n * const core = new PlanetCore()\n *\n * core.install(new OrbitRipple({\n * path: '/ws',\n * authorizer: async (channel, userId, socketId) => {\n * // Return true for authorized, false for denied\n * // For presence channels, return { id: userId, info: { name: '...' } }\n * return true\n * }\n * }))\n *\n * // The WebSocket is automatically integrated with Bun.serve\n * core.boot()\n * ```\n */\nexport class OrbitRipple {\n private server: RippleServer\n private config: RippleConfig\n\n constructor(config: RippleConfig = {}) {\n this.config = config\n this.server = new RippleServer(config)\n }\n\n /**\n * Install the module into PlanetCore\n */\n install(core: PlanetCore): void {\n core.logger.info('🌊 Orbit Ripple installed')\n\n // Store reference globally for broadcast() function\n setRippleServer(this.server)\n\n // Expose Ripple server via context variable\n core.adapter.use('*', async (ctx, next) => {\n ctx.set('ripple' as any, this.server)\n return await next()\n })\n\n // Initialize server immediately\n this.server.init().then(() => {\n core.logger.info(`🌊 Ripple WebSocket ready at ${this.config.path || '/ws'}`)\n })\n\n // Register shutdown hook\n core.hooks.addAction('shutdown', async () => {\n await this.server.shutdown()\n })\n }\n\n /**\n * Get the underlying RippleServer instance\n */\n getServer(): RippleServer {\n return this.server\n }\n\n /**\n * Get WebSocket handler for Bun.serve integration\n *\n * @example\n * ```typescript\n * const ripple = new OrbitRipple()\n *\n * Bun.serve({\n * fetch: (req, server) => {\n * // Let Ripple handle WebSocket upgrades\n * if (ripple.getServer().upgrade(req, server)) return\n *\n * // Regular HTTP handling\n * return core.adapter.fetch(req, server)\n * },\n * websocket: ripple.getHandler()\n * })\n * ```\n */\n getHandler() {\n return this.server.getHandler()\n }\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "FDAC75CC384E2A3664756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "C01083FD591F41A164756E2164756E21",
15
15
  "names": []
16
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravito/ripple",
3
- "version": "1.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Bun-native WebSocket broadcasting for Gravito. Channel-based real-time communication.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",