verani 0.6.0 → 0.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 (33) hide show
  1. package/dist/{actor-runtime-CbquUZdU.d.mts → actor-runtime-98JPmjaf.d.cts} +1 -1
  2. package/dist/{actor-runtime-crxBqW3H.d.cts → actor-runtime-D_xHVOcH.d.mts} +1 -1
  3. package/dist/{actor-runtime-PyNnwtah.mjs → actor-runtime-DamIMiBw.mjs} +1 -1
  4. package/dist/{client-DaUp7q-P.mjs → client-oItOePHL.mjs} +1 -1
  5. package/dist/client.d.cts +3 -3
  6. package/dist/client.d.mts +3 -3
  7. package/dist/client.mjs +1 -1
  8. package/dist/{decode-Cetz5jkZ.d.cts → decode-D5ZPxqwe.d.cts} +1 -1
  9. package/dist/{decode-Cs8CEYAY.d.mts → decode-E39NapB5.d.mts} +1 -1
  10. package/dist/typed-client.d.cts +2 -2
  11. package/dist/typed-client.d.mts +2 -2
  12. package/dist/typed-client.mjs +1 -1
  13. package/dist/typed-shared.cjs +1 -0
  14. package/dist/typed-shared.d.cts +2 -0
  15. package/dist/typed-shared.d.mts +2 -0
  16. package/dist/typed-shared.mjs +1 -0
  17. package/dist/typed.cjs +1 -1
  18. package/dist/typed.d.cts +9 -9
  19. package/dist/typed.d.mts +9 -9
  20. package/dist/typed.mjs +1 -1
  21. package/dist/verani.d.cts +3 -3
  22. package/dist/verani.d.mts +3 -3
  23. package/dist/verani.mjs +1 -1
  24. package/package.json +11 -1
  25. /package/dist/{client-8ubwq_k4.d.mts → client-BaMxxGWr.d.cts} +0 -0
  26. /package/dist/{client-BNppil3J.d.cts → client-DxcWUNF7.d.mts} +0 -0
  27. /package/dist/{encode-BEipaz10.mjs → encode-BhJqnsto.mjs} +0 -0
  28. /package/dist/{types-Bs7hBgfQ.d.mts → types-BefWc1M_.d.cts} +0 -0
  29. /package/dist/{types-cugB3Mcz.d.cts → types-Ds_V-GWZ.d.mts} +0 -0
  30. /package/dist/{types-B5NT7bya.mjs → types-rZsftNPE.mjs} +0 -0
  31. /package/dist/{validation-CSmvG882.d.cts → validation-DCongzPL.d.mts} +0 -0
  32. /package/dist/{validation-D1xWZI_t.d.mts → validation-Dw-KMz9Q.d.cts} +0 -0
  33. /package/dist/{validation-DRz-ayMa.mjs → validation-NB7a2Sf1.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { n as ConnectionMeta, r as MessageFrame } from "./types-Bs7hBgfQ.mjs";
1
+ import { n as ConnectionMeta, r as MessageFrame } from "./types-BefWc1M_.cjs";
2
2
  import { Actor, ActorConfiguration } from "@cloudflare/actors";
3
3
 
4
4
  //#region src/actor/types.d.ts
@@ -1,4 +1,4 @@
1
- import { n as ConnectionMeta, r as MessageFrame } from "./types-cugB3Mcz.cjs";
1
+ import { n as ConnectionMeta, r as MessageFrame } from "./types-Ds_V-GWZ.mjs";
2
2
  import { Actor, ActorConfiguration } from "@cloudflare/actors";
3
3
 
4
4
  //#region src/actor/types.d.ts
@@ -1 +1 @@
1
- import{a as decodeFrame$1,n as encodeFrame$1}from"./encode-BEipaz10.mjs";import{Actor}from"@cloudflare/actors";var RoomEventEmitterImpl=class{constructor(){this.handlers=new Map}on(e,w){this.handlers.has(e)||this.handlers.set(e,new Set),this.handlers.get(e).add(w)}off(e,w){let T=this.handlers.get(e);T&&(w?(T.delete(w),T.size===0&&this.handlers.delete(e)):this.handlers.delete(e))}async emit(e,w,T){let E=this.handlers.get(e);if(E&&E.size>0){let e=[];for(let D of E)try{let E=D(w,T);E instanceof Promise&&e.push(E)}catch{}await Promise.all(e)}let D=this.handlers.get(`*`);if(D&&D.size>0){let e=[];for(let E of D)try{let D=E(w,T);D instanceof Promise&&e.push(D)}catch{}await Promise.all(e)}}hasHandlers(e){return this.handlers.has(e)&&this.handlers.get(e).size>0||this.handlers.has(`*`)&&this.handlers.get(`*`).size>0}getEventNames(){return Array.from(this.handlers.keys())}rebuildHandlers(e){this.handlers.clear();for(let[w,T]of e.entries())this.handlers.set(w,new Set(T))}};function createRoomEventEmitter(){return new RoomEventEmitterImpl}function defaultExtractMeta(e){let w=crypto.randomUUID(),T=crypto.randomUUID(),E=new URL(e.url).searchParams.get(`channels`);return{userId:w,clientId:T,channels:E?E.split(`,`).map(e=>e.trim()).filter(Boolean):[`default`]}}function defineRoom(e){let w=e.eventEmitter||createRoomEventEmitter(),T=e._staticHandlers||new Map;return{name:e.name,websocketPath:e.websocketPath,extractMeta:e.extractMeta||(e=>defaultExtractMeta(e)),onConnect:e.onConnect,onDisconnect:e.onDisconnect,onMessage:e.onMessage,onError:e.onError,onHibernationRestore:e.onHibernationRestore,eventEmitter:w,_staticHandlers:T,on(e,E){w.on(e,E),T.has(e)||T.set(e,new Set),T.get(e).add(E)},off(e,E){w.off(e,E);let D=T.get(e);D&&(E?(D.delete(E),D.size===0&&T.delete(e)):T.delete(e))}}}function cleanupStaleSessions(e){let w=0,T=[];for(let[w,E]of e.entries())w.readyState!==WebSocket.OPEN&&T.push(w);for(let E of T)e.delete(E),w++;return w}function decodeFrame(w){return decodeFrame$1(w)??{type:`invalid`}}function encodeFrame(e){return encodeFrame$1(e)}function broadcast(e,w,T,E){let D=0,O=encodeFrame({type:`event`,channel:w,data:T}),k=[];for(let{ws:T,meta:A}of e.values())if(A.channels.includes(w)&&!(E?.except&&T===E.except)&&!(E?.userIds&&!E.userIds.includes(A.userId))&&!(E?.clientIds&&!E.clientIds.includes(A.clientId))){if(T.readyState!==WebSocket.OPEN){k.push(T);continue}try{T.send(O),D++}catch{k.push(T)}}for(let w of k)e.delete(w);return k.length,D}function sendToUser(e,w,T,E){let D=0,O=encodeFrame({type:`event`,channel:T,data:E}),k=[];for(let{ws:E,meta:A}of e.values())if(A.userId===w&&A.channels.includes(T)){if(E.readyState!==WebSocket.OPEN){k.push(E);continue}try{E.send(O),D++}catch{k.push(E)}}for(let w of k)e.delete(w);return k.length,D}function getSessionCount(e){return e.size}function getConnectedUserIds(e){let w=new Set;for(let{meta:T}of e.values())w.add(T.userId);return Array.from(w)}function getUserSessions(e,w){let T=[];for(let{ws:E,meta:D}of e.values())D.userId===w&&T.push(E);return T}function getStorage(e){return e.storage}function sanitizeToClassName(e){return e.replace(/^\/+/,``).split(/[-_\/\s]+/).map(e=>e.replace(/[^a-zA-Z0-9]/g,``)).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)||`VeraniActor`}function createConfiguration(e){return function(w){return{locationHint:`me`,sockets:{upgradePath:e.websocketPath}}}}function isValidConnectionMeta(e){return!(!e||typeof e!=`object`||typeof e.userId!=`string`||!e.userId||typeof e.clientId!=`string`||!e.clientId||!Array.isArray(e.channels)||!e.channels.every(e=>typeof e==`string`))}function storeAttachment(e,w){e.serializeAttachment(w)}function restoreSessions(e){let w=0,T=0;for(let E of e.ctx.getWebSockets()){if(E.readyState!==WebSocket.OPEN){T++;continue}let D=E.deserializeAttachment();if(!D){T++;continue}if(!isValidConnectionMeta(D)){T++;continue}e.sessions.set(E,{ws:E,meta:D}),w++}}async function onInit(e,w){if(w.eventEmitter&&w._staticHandlers)try{w.eventEmitter.rebuildHandlers(w._staticHandlers)}catch{}try{restoreSessions(e)}catch{}if(w.onHibernationRestore&&e.sessions.size>0)try{await w.onHibernationRestore(e)}catch{}else w.onHibernationRestore&&e.sessions.size}function createUserEmitBuilder(e,w,T){return{emit(E,D){return sendToUser(w,e,T,{type:E,...D})}}}function createChannelEmitBuilder(e,w,T){return{emit(E,D){return broadcast(w,e,{type:E,...D},T)}}}function createSocketEmit(e){let w=e.meta.channels[0]||`default`;return{emit(T,E){if(e.ws.readyState===WebSocket.OPEN)try{let D={type:`event`,channel:w,data:{type:T,...E}};e.ws.send(encodeFrame(D))}catch{}},to(T){return e.meta.channels.includes(T)?createChannelEmitBuilder(T,e.actor.sessions,{except:e.ws}):createUserEmitBuilder(T,e.actor.sessions,w)}}}function createActorEmit(e){return{emit(w,T){let E={type:w,...T};return broadcast(e.sessions,`default`,E)},to(w){return createChannelEmitBuilder(w,e.sessions)}}}async function onWebSocketConnect(e,w,T,E){let D;try{D=w.extractMeta?await w.extractMeta(E):{userId:`anonymous`,clientId:crypto.randomUUID(),channels:[`default`]},storeAttachment(T,D);let O={actor:e,ws:T,meta:D,frame:{type:`connect`}};if(w.onConnect){let E={actor:e,ws:T,meta:D,emit:createSocketEmit(O)};await w.onConnect(E)}e.sessions.set(T,{ws:T,meta:D})}catch(E){if(w.onError&&D)try{let O={actor:e,ws:T,meta:D,frame:{type:`error`}};await w.onError(E,{actor:e,ws:T,meta:D,emit:createSocketEmit(O)})}catch{}T.close(1011,`Internal server error`)}}async function onWebSocketMessage(e,w,T,E){let D;try{let O=decodeFrame(E);if(O&&O.type===`ping`){if(T.readyState===WebSocket.OPEN)try{T.send(encodeFrame({type:`pong`}))}catch{}return}if(!O||O.type===`invalid`||(D=e.sessions.get(T),!D))return;let k={actor:e,ws:T,meta:D.meta,frame:O,emit:createSocketEmit({actor:e,ws:T,meta:D.meta,frame:O})},A=w.eventEmitter;A&&A.hasHandlers&&A.hasHandlers(O.type)?await A.emit(O.type,k,O.data||{}):w.onMessage&&await w.onMessage(k,O)}catch(E){if(w.onError&&D)try{await w.onError(E,{actor:e,ws:T,meta:D.meta,emit:createSocketEmit({actor:e,ws:T,meta:D.meta,frame:{type:`error`}})})}catch{}}}async function onWebSocketDisconnect(e,w,T){try{let E=e.sessions.get(T);if(e.sessions.delete(T),E&&w.onDisconnect){let D={actor:e,ws:T,meta:E.meta,frame:{type:`disconnect`}},O={actor:e,ws:T,meta:E.meta,emit:createSocketEmit(D)};await w.onDisconnect(O)}}catch{}}function createFetch(e,w){return async function(T){let E=new URL(T.url),D=T.headers.get(`Upgrade`);return E.pathname===e.websocketPath&&D===`websocket`&&await w.shouldUpgradeWebSocket(T)?w.onWebSocketUpgrade(T):w.onRequest(T)}}function createActorHandler(e){let w=sanitizeToClassName(e.name||e.websocketPath||`VeraniActor`);class E extends Actor{constructor(...w){super(...w),this.sessions=new Map,this.emit=createActorEmit(this),this.fetch=createFetch(e,this)}static{this.configuration=createConfiguration(e)}async shouldUpgradeWebSocket(e){return!0}async onInit(){await onInit(this,e)}async onWebSocketConnect(w,T){await onWebSocketConnect(this,e,w,T)}async onWebSocketMessage(w,T){await onWebSocketMessage(this,e,w,T)}async onWebSocketDisconnect(w){await onWebSocketDisconnect(this,e,w)}cleanupStaleSessions(){return cleanupStaleSessions(this.sessions)}broadcast(e,w,T){return broadcast(this.sessions,e,w,T)}getSessionCount(){return getSessionCount(this.sessions)}getConnectedUserIds(){return getConnectedUserIds(this.sessions)}getUserSessions(e){return getUserSessions(this.sessions,e)}sendToUser(e,w,T){return sendToUser(this.sessions,e,w,T)}emitToChannel(e,w,T){let E={type:w,...T};return broadcast(this.sessions,e,E)}emitToUser(e,w,T){let E=encodeFrame({type:`event`,channel:`default`,data:{type:w,...T}}),D=0,O=[];for(let{ws:w,meta:T}of this.sessions.values())if(T.userId===e){if(w.readyState!==WebSocket.OPEN){O.push(w);continue}try{w.send(E),D++}catch{O.push(w)}}for(let e of O)this.sessions.delete(e);return D}getStorage(){return getStorage(this.ctx)}}return Object.defineProperty(E,`name`,{value:w,writable:!1,configurable:!0}),E}export{defineRoom as i,restoreSessions as n,storeAttachment as r,createActorHandler as t};
1
+ import{a as decodeFrame$1,n as encodeFrame$1}from"./encode-BhJqnsto.mjs";import{Actor}from"@cloudflare/actors";var RoomEventEmitterImpl=class{constructor(){this.handlers=new Map}on(e,w){this.handlers.has(e)||this.handlers.set(e,new Set),this.handlers.get(e).add(w)}off(e,w){let T=this.handlers.get(e);T&&(w?(T.delete(w),T.size===0&&this.handlers.delete(e)):this.handlers.delete(e))}async emit(e,w,T){let E=this.handlers.get(e);if(E&&E.size>0){let e=[];for(let D of E)try{let E=D(w,T);E instanceof Promise&&e.push(E)}catch{}await Promise.all(e)}let D=this.handlers.get(`*`);if(D&&D.size>0){let e=[];for(let E of D)try{let D=E(w,T);D instanceof Promise&&e.push(D)}catch{}await Promise.all(e)}}hasHandlers(e){return this.handlers.has(e)&&this.handlers.get(e).size>0||this.handlers.has(`*`)&&this.handlers.get(`*`).size>0}getEventNames(){return Array.from(this.handlers.keys())}rebuildHandlers(e){this.handlers.clear();for(let[w,T]of e.entries())this.handlers.set(w,new Set(T))}};function createRoomEventEmitter(){return new RoomEventEmitterImpl}function defaultExtractMeta(e){let w=crypto.randomUUID(),T=crypto.randomUUID(),E=new URL(e.url).searchParams.get(`channels`);return{userId:w,clientId:T,channels:E?E.split(`,`).map(e=>e.trim()).filter(Boolean):[`default`]}}function defineRoom(e){let w=e.eventEmitter||createRoomEventEmitter(),T=e._staticHandlers||new Map;return{name:e.name,websocketPath:e.websocketPath,extractMeta:e.extractMeta||(e=>defaultExtractMeta(e)),onConnect:e.onConnect,onDisconnect:e.onDisconnect,onMessage:e.onMessage,onError:e.onError,onHibernationRestore:e.onHibernationRestore,eventEmitter:w,_staticHandlers:T,on(e,E){w.on(e,E),T.has(e)||T.set(e,new Set),T.get(e).add(E)},off(e,E){w.off(e,E);let D=T.get(e);D&&(E?(D.delete(E),D.size===0&&T.delete(e)):T.delete(e))}}}function cleanupStaleSessions(e){let w=0,T=[];for(let[w,E]of e.entries())w.readyState!==WebSocket.OPEN&&T.push(w);for(let E of T)e.delete(E),w++;return w}function decodeFrame(w){return decodeFrame$1(w)??{type:`invalid`}}function encodeFrame(e){return encodeFrame$1(e)}function broadcast(e,w,T,E){let D=0,O=encodeFrame({type:`event`,channel:w,data:T}),k=[];for(let{ws:T,meta:A}of e.values())if(A.channels.includes(w)&&!(E?.except&&T===E.except)&&!(E?.userIds&&!E.userIds.includes(A.userId))&&!(E?.clientIds&&!E.clientIds.includes(A.clientId))){if(T.readyState!==WebSocket.OPEN){k.push(T);continue}try{T.send(O),D++}catch{k.push(T)}}for(let w of k)e.delete(w);return k.length,D}function sendToUser(e,w,T,E){let D=0,O=encodeFrame({type:`event`,channel:T,data:E}),k=[];for(let{ws:E,meta:A}of e.values())if(A.userId===w&&A.channels.includes(T)){if(E.readyState!==WebSocket.OPEN){k.push(E);continue}try{E.send(O),D++}catch{k.push(E)}}for(let w of k)e.delete(w);return k.length,D}function getSessionCount(e){return e.size}function getConnectedUserIds(e){let w=new Set;for(let{meta:T}of e.values())w.add(T.userId);return Array.from(w)}function getUserSessions(e,w){let T=[];for(let{ws:E,meta:D}of e.values())D.userId===w&&T.push(E);return T}function getStorage(e){return e.storage}function sanitizeToClassName(e){return e.replace(/^\/+/,``).split(/[-_\/\s]+/).map(e=>e.replace(/[^a-zA-Z0-9]/g,``)).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)||`VeraniActor`}function createConfiguration(e){return function(w){return{locationHint:`me`,sockets:{upgradePath:e.websocketPath}}}}function isValidConnectionMeta(e){return!(!e||typeof e!=`object`||typeof e.userId!=`string`||!e.userId||typeof e.clientId!=`string`||!e.clientId||!Array.isArray(e.channels)||!e.channels.every(e=>typeof e==`string`))}function storeAttachment(e,w){e.serializeAttachment(w)}function restoreSessions(e){let w=0,T=0;for(let E of e.ctx.getWebSockets()){if(E.readyState!==WebSocket.OPEN){T++;continue}let D=E.deserializeAttachment();if(!D){T++;continue}if(!isValidConnectionMeta(D)){T++;continue}e.sessions.set(E,{ws:E,meta:D}),w++}}async function onInit(e,w){if(w.eventEmitter&&w._staticHandlers)try{w.eventEmitter.rebuildHandlers(w._staticHandlers)}catch{}try{restoreSessions(e)}catch{}if(w.onHibernationRestore&&e.sessions.size>0)try{await w.onHibernationRestore(e)}catch{}else w.onHibernationRestore&&e.sessions.size}function createUserEmitBuilder(e,w,T){return{emit(E,D){return sendToUser(w,e,T,{type:E,...D})}}}function createChannelEmitBuilder(e,w,T){return{emit(E,D){return broadcast(w,e,{type:E,...D},T)}}}function createSocketEmit(e){let w=e.meta.channels[0]||`default`;return{emit(T,E){if(e.ws.readyState===WebSocket.OPEN)try{let D={type:`event`,channel:w,data:{type:T,...E}};e.ws.send(encodeFrame(D))}catch{}},to(T){return e.meta.channels.includes(T)?createChannelEmitBuilder(T,e.actor.sessions,{except:e.ws}):createUserEmitBuilder(T,e.actor.sessions,w)}}}function createActorEmit(e){return{emit(w,T){let E={type:w,...T};return broadcast(e.sessions,`default`,E)},to(w){return createChannelEmitBuilder(w,e.sessions)}}}async function onWebSocketConnect(e,w,T,E){let D;try{D=w.extractMeta?await w.extractMeta(E):{userId:`anonymous`,clientId:crypto.randomUUID(),channels:[`default`]},storeAttachment(T,D);let O={actor:e,ws:T,meta:D,frame:{type:`connect`}};if(w.onConnect){let E={actor:e,ws:T,meta:D,emit:createSocketEmit(O)};await w.onConnect(E)}e.sessions.set(T,{ws:T,meta:D})}catch(E){if(w.onError&&D)try{let O={actor:e,ws:T,meta:D,frame:{type:`error`}};await w.onError(E,{actor:e,ws:T,meta:D,emit:createSocketEmit(O)})}catch{}T.close(1011,`Internal server error`)}}async function onWebSocketMessage(e,w,T,E){let D;try{let O=decodeFrame(E);if(O&&O.type===`ping`){if(T.readyState===WebSocket.OPEN)try{T.send(encodeFrame({type:`pong`}))}catch{}return}if(!O||O.type===`invalid`||(D=e.sessions.get(T),!D))return;let k={actor:e,ws:T,meta:D.meta,frame:O,emit:createSocketEmit({actor:e,ws:T,meta:D.meta,frame:O})},A=w.eventEmitter;A&&A.hasHandlers&&A.hasHandlers(O.type)?await A.emit(O.type,k,O.data||{}):w.onMessage&&await w.onMessage(k,O)}catch(E){if(w.onError&&D)try{await w.onError(E,{actor:e,ws:T,meta:D.meta,emit:createSocketEmit({actor:e,ws:T,meta:D.meta,frame:{type:`error`}})})}catch{}}}async function onWebSocketDisconnect(e,w,T){try{let E=e.sessions.get(T);if(e.sessions.delete(T),E&&w.onDisconnect){let D={actor:e,ws:T,meta:E.meta,frame:{type:`disconnect`}},O={actor:e,ws:T,meta:E.meta,emit:createSocketEmit(D)};await w.onDisconnect(O)}}catch{}}function createFetch(e,w){return async function(T){let E=new URL(T.url),D=T.headers.get(`Upgrade`);return E.pathname===e.websocketPath&&D===`websocket`&&await w.shouldUpgradeWebSocket(T)?w.onWebSocketUpgrade(T):w.onRequest(T)}}function createActorHandler(e){let w=sanitizeToClassName(e.name||e.websocketPath||`VeraniActor`);class E extends Actor{constructor(...w){super(...w),this.sessions=new Map,this.emit=createActorEmit(this),this.fetch=createFetch(e,this)}static{this.configuration=createConfiguration(e)}async shouldUpgradeWebSocket(e){return!0}async onInit(){await onInit(this,e)}async onWebSocketConnect(w,T){await onWebSocketConnect(this,e,w,T)}async onWebSocketMessage(w,T){await onWebSocketMessage(this,e,w,T)}async onWebSocketDisconnect(w){await onWebSocketDisconnect(this,e,w)}cleanupStaleSessions(){return cleanupStaleSessions(this.sessions)}broadcast(e,w,T){return broadcast(this.sessions,e,w,T)}getSessionCount(){return getSessionCount(this.sessions)}getConnectedUserIds(){return getConnectedUserIds(this.sessions)}getUserSessions(e){return getUserSessions(this.sessions,e)}sendToUser(e,w,T){return sendToUser(this.sessions,e,w,T)}emitToChannel(e,w,T){let E={type:w,...T};return broadcast(this.sessions,e,E)}emitToUser(e,w,T){let E=encodeFrame({type:`event`,channel:`default`,data:{type:w,...T}}),D=0,O=[];for(let{ws:w,meta:T}of this.sessions.values())if(T.userId===e){if(w.readyState!==WebSocket.OPEN){O.push(w);continue}try{w.send(E),D++}catch{O.push(w)}}for(let e of O)this.sessions.delete(e);return D}getStorage(){return getStorage(this.ctx)}}return Object.defineProperty(E,`name`,{value:w,writable:!1,configurable:!0}),E}export{defineRoom as i,restoreSessions as n,storeAttachment as r,createActorHandler as t};
@@ -1 +1 @@
1
- import{o as decodeServerMessage$1,t as encodeClientMessage$1}from"./encode-BEipaz10.mjs";function encodeClientMessage(e){return encodeClientMessage$1(e)}function decodeServerMessage(u){return decodeServerMessage$1(u)}const DEFAULT_RECONNECTION_CONFIG={enabled:!0,maxAttempts:10,initialDelay:1e3,maxDelay:3e4,backoffMultiplier:1.5};var ConnectionManager=class{constructor(e=DEFAULT_RECONNECTION_CONFIG,u){this.config=e,this.onStateChange=u,this.state=`disconnected`,this.reconnectAttempts=0,this.currentDelay=e.initialDelay}getState(){return this.state}isValidStateTransition(e,u){return{disconnected:[`connecting`,`reconnecting`],connecting:[`connected`,`disconnected`,`error`,`reconnecting`],connected:[`disconnected`,`reconnecting`],reconnecting:[`connecting`,`disconnected`,`error`],error:[`reconnecting`,`disconnected`,`connecting`]}[e]?.includes(u)??!1}setState(e){this.state!==e&&(this.isValidStateTransition(this.state,e),this.state=e,this.onStateChange?.(e))}resetReconnection(){this.reconnectAttempts=0,this.currentDelay=this.config.initialDelay,this.clearReconnectTimer()}scheduleReconnect(e){return this.config.enabled?this.config.maxAttempts>0&&this.reconnectAttempts>=this.config.maxAttempts?(this.setState(`error`),!1):(this.clearReconnectTimer(),this.setState(`reconnecting`),this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{e(),this.currentDelay=Math.min(this.currentDelay*this.config.backoffMultiplier,this.config.maxDelay)},this.currentDelay),!0):!1}cancelReconnect(){this.clearReconnectTimer(),this.state===`reconnecting`&&this.setState(`disconnected`)}clearReconnectTimer(){this.reconnectTimer!==void 0&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}getReconnectAttempts(){return this.reconnectAttempts}getNextDelay(){return this.currentDelay}destroy(){this.clearReconnectTimer()}};function resolveClientOptions(e){return{reconnection:{enabled:e.reconnection?.enabled??DEFAULT_RECONNECTION_CONFIG.enabled,maxAttempts:e.reconnection?.maxAttempts??DEFAULT_RECONNECTION_CONFIG.maxAttempts,initialDelay:e.reconnection?.initialDelay??DEFAULT_RECONNECTION_CONFIG.initialDelay,maxDelay:e.reconnection?.maxDelay??DEFAULT_RECONNECTION_CONFIG.maxDelay,backoffMultiplier:e.reconnection?.backoffMultiplier??DEFAULT_RECONNECTION_CONFIG.backoffMultiplier},maxQueueSize:e.maxQueueSize??100,connectionTimeout:e.connectionTimeout??1e4,pingInterval:e.pingInterval??5e3,pongTimeout:e.pongTimeout??5e3}}var MessageQueue=class{constructor(e){this.maxQueueSize=e,this.queue=[]}queueMessage(e){this.queue.length>=this.maxQueueSize&&this.queue.shift(),this.queue.push(e)}flushMessageQueue(e){if(!(!e||e.readyState!==WebSocket.OPEN))for(;this.queue.length>0;){let u=this.queue.shift();try{e.send(encodeClientMessage(u))}catch{}}}clear(){this.queue=[]}getLength(){return this.queue.length}};function isBrowserEnvironment(){return typeof globalThis<`u`&&`document`in globalThis&&globalThis.document!==void 0&&globalThis.document.hidden!==void 0&&typeof globalThis.document.addEventListener==`function`}function getDocument(){return isBrowserEnvironment()&&`document`in globalThis?globalThis.document:null}function isPageVisible(){let e=getDocument();return e?!e.hidden:!0}function onVisibilityChange(e){let u=getDocument();if(!u)return null;let d=()=>{e(isPageVisible())};return u.addEventListener(`visibilitychange`,d),()=>{u.removeEventListener(`visibilitychange`,d)}}var KeepaliveManager=class{constructor(e,u,d){this.options=e,this.getWebSocket=u,this.onTimeout=d,this.lastPongReceived=0}startPingInterval(){this.options.pingInterval===0||this.pingInterval!==void 0||(this.lastPongReceived=Date.now(),this.visibilityCleanup=onVisibilityChange(e=>{e&&this.resyncPingInterval()}),this.pingInterval=setInterval(()=>{let e=this.getWebSocket();if(!e||e.readyState!==WebSocket.OPEN){this.stopPingInterval();return}if(Date.now()-this.lastPongReceived>this.options.pongTimeout+this.options.pingInterval){this.stopPingInterval(),e.close(1006,`Pong timeout`);return}try{e.send(encodeClientMessage({type:`ping`}))}catch{}},this.options.pingInterval))}resyncPingInterval(){let e=this.getWebSocket();if(!(!e||e.readyState!==WebSocket.OPEN)){this.pingInterval!==void 0&&(clearInterval(this.pingInterval),this.pingInterval=void 0);try{e.send(encodeClientMessage({type:`ping`}))}catch{}this.lastPongReceived=Date.now(),this.pingInterval=setInterval(()=>{let e=this.getWebSocket();if(!e||e.readyState!==WebSocket.OPEN){this.stopPingInterval();return}if(Date.now()-this.lastPongReceived>this.options.pongTimeout+this.options.pingInterval){this.stopPingInterval(),e.close(1006,`Pong timeout`);return}try{e.send(encodeClientMessage({type:`ping`}))}catch{}},this.options.pingInterval)}}stopPingInterval(){this.pingInterval!==void 0&&(clearInterval(this.pingInterval),this.pingInterval=void 0),this.pongTimeout!==void 0&&(clearTimeout(this.pongTimeout),this.pongTimeout=void 0),this.visibilityCleanup&&=(this.visibilityCleanup(),void 0)}recordPong(){this.lastPongReceived=Date.now()}},EventEmitter=class{constructor(){this.listeners=new Map}on(e,u){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(u)}off(e,u){let d=this.listeners.get(e);d&&(d.delete(u),d.size===0&&this.listeners.delete(e))}once(e,u){let d=f=>{this.off(e,d),u(f)};this.on(e,d)}emitLifecycleEvent(e,u){let d=this.listeners.get(e);if(d)for(let e of d)try{e(u)}catch{}}dispatch(e,u){let d=this.listeners.get(e);if(d)for(let e of d)try{e(u)}catch{}}clear(){this.listeners.clear()}};function handleWebSocketOpen(e,u,d,f,p,m,h,g){e.clear(),u.setState(`connected`),u.resetReconnection(),d.startPingInterval(),f.flushMessageQueue(p),m.resolve&&(m.resolve(),m.clear()),h.emitLifecycleEvent(`open`),h.emitLifecycleEvent(`connected`),g?.()}function handleWebSocketMessage(e,u,d){let p=decodeServerMessage(e.data);if(!p)return;if(p.type===`pong`){u.recordPong();return}let m=p.type,h=p.data;p.type===`event`&&p.data&&typeof p.data==`object`&&`type`in p.data&&(m=p.data.type,h=p.data),d.dispatch(m,h)}function handleWebSocketClose(e,u,d,f,p,m,h,g){h&&(h.value=!1),u.clear(),d.setState(`disconnected`),f.reject&&(f.reject(Error(`Connection closed: ${e.reason||`Unknown reason`}`)),f.clear()),p.emitLifecycleEvent(`close`,e),p.emitLifecycleEvent(`disconnected`,e),g?.(e),e.code!==1e3&&e.code!==1001&&d.scheduleReconnect(m)&&p.emitLifecycleEvent(`reconnecting`)}function handleWebSocketError(e,u,d,f,p,m){p&&(p.value=!1),u.clear(),d.emitLifecycleEvent(`error`,e),m?.(e),f(Error(`WebSocket error`))}function handleConnectionError(e,u,d,f,p,m,h){h&&(h.value=!1),u.clear(),d.reject&&(d.reject(e),d.clear()),p.emitLifecycleEvent(`error`,e),f.scheduleReconnect(m)&&p.emitLifecycleEvent(`reconnecting`)}var ConnectionHandler=class{constructor(e,u,d,f,p,m,h,g,_,v,y,b){this.url=e,this.options=u,this.connectionManager=d,this.keepalive=f,this.eventEmitter=p,this.messageQueue=m,this.connectionPromise=h,this.isConnectingRef=g,this.isConnectedFn=_,this.onOpenCallback=v,this.onCloseCallback=y,this.onErrorCallback=b,this.connectionId=0,this.connectionTimeoutState={value:void 0,clear:()=>{this.connectionTimeoutState.value!==void 0&&(clearTimeout(this.connectionTimeoutState.value),this.connectionTimeoutState.value=void 0)}}}connect(){if(!this.isConnectingRef.value&&!this.isConnectedFn()){this.cleanupWebSocket();try{this.isConnectingRef.value=!0,this.connectionId++;let e=this.connectionId;this.connectionManager.setState(`connecting`),this.eventEmitter.emitLifecycleEvent(`connecting`),this.ws=new WebSocket(this.url),this.connectionTimeoutState.value=setTimeout(()=>{this.isConnectingRef.value&&this.connectionId===e&&(this.ws?.close(),this.handleConnectionErrorInternal(Error(`Connection timeout`)))},this.options.connectionTimeout),this.ws.addEventListener(`open`,()=>{this.connectionId===e&&this.handleOpenInternal()}),this.ws.addEventListener(`message`,u=>{this.connectionId===e&&handleWebSocketMessage(u,this.keepalive,this.eventEmitter)}),this.ws.addEventListener(`close`,u=>{this.connectionId===e&&handleWebSocketClose(u,this.connectionTimeoutState,this.connectionManager,this.connectionPromise,this.eventEmitter,()=>this.connect(),this.isConnectingRef,this.onCloseCallback)}),this.ws.addEventListener(`error`,u=>{this.connectionId===e&&handleWebSocketError(u,this.connectionTimeoutState,this.eventEmitter,e=>this.handleConnectionErrorInternal(e),this.isConnectingRef,this.onErrorCallback)})}catch(e){this.isConnectingRef.value=!1,this.handleConnectionErrorInternal(e)}}}cleanupWebSocket(){if(this.keepalive.stopPingInterval(),this.connectionTimeoutState.clear(),this.ws){let e=this.ws;if(this.ws=void 0,e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)try{e.close(1e3,`Cleanup`)}catch{}}}getWebSocket(){return this.ws}getConnectionId(){return this.connectionId}handleOpenInternal(){handleWebSocketOpen(this.connectionTimeoutState,this.connectionManager,this.keepalive,this.messageQueue,this.ws,this.connectionPromise,this.eventEmitter,this.onOpenCallback),this.isConnectingRef.value=!1}handleConnectionErrorInternal(e){handleConnectionError(e,this.connectionTimeoutState,this.connectionPromise,this.connectionManager,this.eventEmitter,()=>this.connect(),this.isConnectingRef)}},VeraniClient=class{constructor(e,u={}){this.url=e,this.connectionPromiseState={promise:void 0,resolve:void 0,reject:void 0,clear:()=>{this.connectionPromiseState.promise=void 0,this.connectionPromiseState.resolve=void 0,this.connectionPromiseState.reject=void 0}},this.options=resolveClientOptions(u),this.connectionManager=new ConnectionManager(this.options.reconnection,e=>{this.onStateChangeCallback?.(e)}),this.messageQueue=new MessageQueue(this.options.maxQueueSize),this.eventEmitter=new EventEmitter,this.isConnectingRef={value:!1},this.keepalive=new KeepaliveManager(this.options,()=>this.connectionHandler.getWebSocket(),()=>{let e=this.connectionHandler.getWebSocket();e&&e.close(1006,`Pong timeout`)}),this.connectionHandler=new ConnectionHandler(this.url,this.options,this.connectionManager,this.keepalive,this.eventEmitter,this.messageQueue,this.connectionPromiseState,this.isConnectingRef,()=>this.isConnected(),this.onOpenCallback,this.onCloseCallback,this.onErrorCallback),Object.defineProperty(this,`isConnecting`,{get:()=>this.isConnectingRef.value,enumerable:!0,configurable:!0}),this.connect()}connect(){this.connectionHandler.connect()}cleanupWebSocket(){this.connectionHandler.cleanupWebSocket()}getState(){return this.connectionManager.getState()}isConnected(){return this.connectionHandler.getWebSocket()?.readyState===WebSocket.OPEN&&this.connectionManager.getState()===`connected`}getConnectionState(){return{state:this.connectionManager.getState(),isConnected:this.isConnected(),isConnecting:this.isConnectingRef.value,reconnectAttempts:this.connectionManager.getReconnectAttempts(),connectionId:this.connectionHandler.getConnectionId()}}waitForConnection(){return this.isConnected()?Promise.resolve():(this.connectionPromiseState.promise||(this.connectionPromiseState.promise=new Promise((e,u)=>{this.connectionPromiseState.resolve=e,this.connectionPromiseState.reject=u;let d=setTimeout(()=>{this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Connection wait timeout`)),this.connectionPromiseState.clear())},this.options.connectionTimeout*2);this.connectionPromiseState.promise&&this.connectionPromiseState.promise.finally(()=>{clearTimeout(d)})})),this.connectionPromiseState.promise)}on(e,u){this.eventEmitter.on(e,u)}off(e,u){this.eventEmitter.off(e,u)}once(e,u){this.eventEmitter.once(e,u)}emit(e,u){let f={type:e,data:u};if(this.isConnected()){let e=this.connectionHandler.getWebSocket();if(e)try{e.send(encodeClientMessage(f))}catch{this.messageQueue.queueMessage(f)}}else this.messageQueue.queueMessage(f)}onOpen(e){this.onOpenCallback=e}onClose(e){this.onCloseCallback=e}onError(e){this.onErrorCallback=e}onStateChange(e){this.onStateChangeCallback=e}reconnect(){this.connectionManager.resetReconnection(),this.connectionManager.cancelReconnect(),this.cleanupWebSocket(),this.isConnectingRef.value=!1,this.connectionManager.setState(`disconnected`),this.connect()}disconnect(){this.connectionManager.cancelReconnect(),this.isConnectingRef.value=!1,this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Connection disconnected`)),this.connectionPromiseState.clear()),this.cleanupWebSocket(),this.connectionManager.setState(`disconnected`)}close(){this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Client closed`)),this.connectionPromiseState.clear()),this.disconnect(),this.eventEmitter.clear(),this.messageQueue.clear(),this.connectionManager.destroy()}};export{ConnectionManager as n,DEFAULT_RECONNECTION_CONFIG as r,VeraniClient as t};
1
+ import{o as decodeServerMessage$1,t as encodeClientMessage$1}from"./encode-BhJqnsto.mjs";function encodeClientMessage(e){return encodeClientMessage$1(e)}function decodeServerMessage(u){return decodeServerMessage$1(u)}const DEFAULT_RECONNECTION_CONFIG={enabled:!0,maxAttempts:10,initialDelay:1e3,maxDelay:3e4,backoffMultiplier:1.5};var ConnectionManager=class{constructor(e=DEFAULT_RECONNECTION_CONFIG,u){this.config=e,this.onStateChange=u,this.state=`disconnected`,this.reconnectAttempts=0,this.currentDelay=e.initialDelay}getState(){return this.state}isValidStateTransition(e,u){return{disconnected:[`connecting`,`reconnecting`],connecting:[`connected`,`disconnected`,`error`,`reconnecting`],connected:[`disconnected`,`reconnecting`],reconnecting:[`connecting`,`disconnected`,`error`],error:[`reconnecting`,`disconnected`,`connecting`]}[e]?.includes(u)??!1}setState(e){this.state!==e&&(this.isValidStateTransition(this.state,e),this.state=e,this.onStateChange?.(e))}resetReconnection(){this.reconnectAttempts=0,this.currentDelay=this.config.initialDelay,this.clearReconnectTimer()}scheduleReconnect(e){return this.config.enabled?this.config.maxAttempts>0&&this.reconnectAttempts>=this.config.maxAttempts?(this.setState(`error`),!1):(this.clearReconnectTimer(),this.setState(`reconnecting`),this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{e(),this.currentDelay=Math.min(this.currentDelay*this.config.backoffMultiplier,this.config.maxDelay)},this.currentDelay),!0):!1}cancelReconnect(){this.clearReconnectTimer(),this.state===`reconnecting`&&this.setState(`disconnected`)}clearReconnectTimer(){this.reconnectTimer!==void 0&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}getReconnectAttempts(){return this.reconnectAttempts}getNextDelay(){return this.currentDelay}destroy(){this.clearReconnectTimer()}};function resolveClientOptions(e){return{reconnection:{enabled:e.reconnection?.enabled??DEFAULT_RECONNECTION_CONFIG.enabled,maxAttempts:e.reconnection?.maxAttempts??DEFAULT_RECONNECTION_CONFIG.maxAttempts,initialDelay:e.reconnection?.initialDelay??DEFAULT_RECONNECTION_CONFIG.initialDelay,maxDelay:e.reconnection?.maxDelay??DEFAULT_RECONNECTION_CONFIG.maxDelay,backoffMultiplier:e.reconnection?.backoffMultiplier??DEFAULT_RECONNECTION_CONFIG.backoffMultiplier},maxQueueSize:e.maxQueueSize??100,connectionTimeout:e.connectionTimeout??1e4,pingInterval:e.pingInterval??5e3,pongTimeout:e.pongTimeout??5e3}}var MessageQueue=class{constructor(e){this.maxQueueSize=e,this.queue=[]}queueMessage(e){this.queue.length>=this.maxQueueSize&&this.queue.shift(),this.queue.push(e)}flushMessageQueue(e){if(!(!e||e.readyState!==WebSocket.OPEN))for(;this.queue.length>0;){let u=this.queue.shift();try{e.send(encodeClientMessage(u))}catch{}}}clear(){this.queue=[]}getLength(){return this.queue.length}};function isBrowserEnvironment(){return typeof globalThis<`u`&&`document`in globalThis&&globalThis.document!==void 0&&globalThis.document.hidden!==void 0&&typeof globalThis.document.addEventListener==`function`}function getDocument(){return isBrowserEnvironment()&&`document`in globalThis?globalThis.document:null}function isPageVisible(){let e=getDocument();return e?!e.hidden:!0}function onVisibilityChange(e){let u=getDocument();if(!u)return null;let d=()=>{e(isPageVisible())};return u.addEventListener(`visibilitychange`,d),()=>{u.removeEventListener(`visibilitychange`,d)}}var KeepaliveManager=class{constructor(e,u,d){this.options=e,this.getWebSocket=u,this.onTimeout=d,this.lastPongReceived=0}startPingInterval(){this.options.pingInterval===0||this.pingInterval!==void 0||(this.lastPongReceived=Date.now(),this.visibilityCleanup=onVisibilityChange(e=>{e&&this.resyncPingInterval()}),this.pingInterval=setInterval(()=>{let e=this.getWebSocket();if(!e||e.readyState!==WebSocket.OPEN){this.stopPingInterval();return}if(Date.now()-this.lastPongReceived>this.options.pongTimeout+this.options.pingInterval){this.stopPingInterval(),e.close(1006,`Pong timeout`);return}try{e.send(encodeClientMessage({type:`ping`}))}catch{}},this.options.pingInterval))}resyncPingInterval(){let e=this.getWebSocket();if(!(!e||e.readyState!==WebSocket.OPEN)){this.pingInterval!==void 0&&(clearInterval(this.pingInterval),this.pingInterval=void 0);try{e.send(encodeClientMessage({type:`ping`}))}catch{}this.lastPongReceived=Date.now(),this.pingInterval=setInterval(()=>{let e=this.getWebSocket();if(!e||e.readyState!==WebSocket.OPEN){this.stopPingInterval();return}if(Date.now()-this.lastPongReceived>this.options.pongTimeout+this.options.pingInterval){this.stopPingInterval(),e.close(1006,`Pong timeout`);return}try{e.send(encodeClientMessage({type:`ping`}))}catch{}},this.options.pingInterval)}}stopPingInterval(){this.pingInterval!==void 0&&(clearInterval(this.pingInterval),this.pingInterval=void 0),this.pongTimeout!==void 0&&(clearTimeout(this.pongTimeout),this.pongTimeout=void 0),this.visibilityCleanup&&=(this.visibilityCleanup(),void 0)}recordPong(){this.lastPongReceived=Date.now()}},EventEmitter=class{constructor(){this.listeners=new Map}on(e,u){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(u)}off(e,u){let d=this.listeners.get(e);d&&(d.delete(u),d.size===0&&this.listeners.delete(e))}once(e,u){let d=f=>{this.off(e,d),u(f)};this.on(e,d)}emitLifecycleEvent(e,u){let d=this.listeners.get(e);if(d)for(let e of d)try{e(u)}catch{}}dispatch(e,u){let d=this.listeners.get(e);if(d)for(let e of d)try{e(u)}catch{}}clear(){this.listeners.clear()}};function handleWebSocketOpen(e,u,d,f,p,m,h,g){e.clear(),u.setState(`connected`),u.resetReconnection(),d.startPingInterval(),f.flushMessageQueue(p),m.resolve&&(m.resolve(),m.clear()),h.emitLifecycleEvent(`open`),h.emitLifecycleEvent(`connected`),g?.()}function handleWebSocketMessage(e,u,d){let p=decodeServerMessage(e.data);if(!p)return;if(p.type===`pong`){u.recordPong();return}let m=p.type,h=p.data;p.type===`event`&&p.data&&typeof p.data==`object`&&`type`in p.data&&(m=p.data.type,h=p.data),d.dispatch(m,h)}function handleWebSocketClose(e,u,d,f,p,m,h,g){h&&(h.value=!1),u.clear(),d.setState(`disconnected`),f.reject&&(f.reject(Error(`Connection closed: ${e.reason||`Unknown reason`}`)),f.clear()),p.emitLifecycleEvent(`close`,e),p.emitLifecycleEvent(`disconnected`,e),g?.(e),e.code!==1e3&&e.code!==1001&&d.scheduleReconnect(m)&&p.emitLifecycleEvent(`reconnecting`)}function handleWebSocketError(e,u,d,f,p,m){p&&(p.value=!1),u.clear(),d.emitLifecycleEvent(`error`,e),m?.(e),f(Error(`WebSocket error`))}function handleConnectionError(e,u,d,f,p,m,h){h&&(h.value=!1),u.clear(),d.reject&&(d.reject(e),d.clear()),p.emitLifecycleEvent(`error`,e),f.scheduleReconnect(m)&&p.emitLifecycleEvent(`reconnecting`)}var ConnectionHandler=class{constructor(e,u,d,f,p,m,h,g,_,v,y,b){this.url=e,this.options=u,this.connectionManager=d,this.keepalive=f,this.eventEmitter=p,this.messageQueue=m,this.connectionPromise=h,this.isConnectingRef=g,this.isConnectedFn=_,this.onOpenCallback=v,this.onCloseCallback=y,this.onErrorCallback=b,this.connectionId=0,this.connectionTimeoutState={value:void 0,clear:()=>{this.connectionTimeoutState.value!==void 0&&(clearTimeout(this.connectionTimeoutState.value),this.connectionTimeoutState.value=void 0)}}}connect(){if(!this.isConnectingRef.value&&!this.isConnectedFn()){this.cleanupWebSocket();try{this.isConnectingRef.value=!0,this.connectionId++;let e=this.connectionId;this.connectionManager.setState(`connecting`),this.eventEmitter.emitLifecycleEvent(`connecting`),this.ws=new WebSocket(this.url),this.connectionTimeoutState.value=setTimeout(()=>{this.isConnectingRef.value&&this.connectionId===e&&(this.ws?.close(),this.handleConnectionErrorInternal(Error(`Connection timeout`)))},this.options.connectionTimeout),this.ws.addEventListener(`open`,()=>{this.connectionId===e&&this.handleOpenInternal()}),this.ws.addEventListener(`message`,u=>{this.connectionId===e&&handleWebSocketMessage(u,this.keepalive,this.eventEmitter)}),this.ws.addEventListener(`close`,u=>{this.connectionId===e&&handleWebSocketClose(u,this.connectionTimeoutState,this.connectionManager,this.connectionPromise,this.eventEmitter,()=>this.connect(),this.isConnectingRef,this.onCloseCallback)}),this.ws.addEventListener(`error`,u=>{this.connectionId===e&&handleWebSocketError(u,this.connectionTimeoutState,this.eventEmitter,e=>this.handleConnectionErrorInternal(e),this.isConnectingRef,this.onErrorCallback)})}catch(e){this.isConnectingRef.value=!1,this.handleConnectionErrorInternal(e)}}}cleanupWebSocket(){if(this.keepalive.stopPingInterval(),this.connectionTimeoutState.clear(),this.ws){let e=this.ws;if(this.ws=void 0,e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)try{e.close(1e3,`Cleanup`)}catch{}}}getWebSocket(){return this.ws}getConnectionId(){return this.connectionId}handleOpenInternal(){handleWebSocketOpen(this.connectionTimeoutState,this.connectionManager,this.keepalive,this.messageQueue,this.ws,this.connectionPromise,this.eventEmitter,this.onOpenCallback),this.isConnectingRef.value=!1}handleConnectionErrorInternal(e){handleConnectionError(e,this.connectionTimeoutState,this.connectionPromise,this.connectionManager,this.eventEmitter,()=>this.connect(),this.isConnectingRef)}},VeraniClient=class{constructor(e,u={}){this.url=e,this.connectionPromiseState={promise:void 0,resolve:void 0,reject:void 0,clear:()=>{this.connectionPromiseState.promise=void 0,this.connectionPromiseState.resolve=void 0,this.connectionPromiseState.reject=void 0}},this.options=resolveClientOptions(u),this.connectionManager=new ConnectionManager(this.options.reconnection,e=>{this.onStateChangeCallback?.(e)}),this.messageQueue=new MessageQueue(this.options.maxQueueSize),this.eventEmitter=new EventEmitter,this.isConnectingRef={value:!1},this.keepalive=new KeepaliveManager(this.options,()=>this.connectionHandler.getWebSocket(),()=>{let e=this.connectionHandler.getWebSocket();e&&e.close(1006,`Pong timeout`)}),this.connectionHandler=new ConnectionHandler(this.url,this.options,this.connectionManager,this.keepalive,this.eventEmitter,this.messageQueue,this.connectionPromiseState,this.isConnectingRef,()=>this.isConnected(),this.onOpenCallback,this.onCloseCallback,this.onErrorCallback),Object.defineProperty(this,`isConnecting`,{get:()=>this.isConnectingRef.value,enumerable:!0,configurable:!0}),this.connect()}connect(){this.connectionHandler.connect()}cleanupWebSocket(){this.connectionHandler.cleanupWebSocket()}getState(){return this.connectionManager.getState()}isConnected(){return this.connectionHandler.getWebSocket()?.readyState===WebSocket.OPEN&&this.connectionManager.getState()===`connected`}getConnectionState(){return{state:this.connectionManager.getState(),isConnected:this.isConnected(),isConnecting:this.isConnectingRef.value,reconnectAttempts:this.connectionManager.getReconnectAttempts(),connectionId:this.connectionHandler.getConnectionId()}}waitForConnection(){return this.isConnected()?Promise.resolve():(this.connectionPromiseState.promise||(this.connectionPromiseState.promise=new Promise((e,u)=>{this.connectionPromiseState.resolve=e,this.connectionPromiseState.reject=u;let d=setTimeout(()=>{this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Connection wait timeout`)),this.connectionPromiseState.clear())},this.options.connectionTimeout*2);this.connectionPromiseState.promise&&this.connectionPromiseState.promise.finally(()=>{clearTimeout(d)})})),this.connectionPromiseState.promise)}on(e,u){this.eventEmitter.on(e,u)}off(e,u){this.eventEmitter.off(e,u)}once(e,u){this.eventEmitter.once(e,u)}emit(e,u){let f={type:e,data:u};if(this.isConnected()){let e=this.connectionHandler.getWebSocket();if(e)try{e.send(encodeClientMessage(f))}catch{this.messageQueue.queueMessage(f)}}else this.messageQueue.queueMessage(f)}onOpen(e){this.onOpenCallback=e}onClose(e){this.onCloseCallback=e}onError(e){this.onErrorCallback=e}onStateChange(e){this.onStateChangeCallback=e}reconnect(){this.connectionManager.resetReconnection(),this.connectionManager.cancelReconnect(),this.cleanupWebSocket(),this.isConnectingRef.value=!1,this.connectionManager.setState(`disconnected`),this.connect()}disconnect(){this.connectionManager.cancelReconnect(),this.isConnectingRef.value=!1,this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Connection disconnected`)),this.connectionPromiseState.clear()),this.cleanupWebSocket(),this.connectionManager.setState(`disconnected`)}close(){this.connectionPromiseState.reject&&(this.connectionPromiseState.reject(Error(`Client closed`)),this.connectionPromiseState.clear()),this.disconnect(),this.eventEmitter.clear(),this.messageQueue.clear(),this.connectionManager.destroy()}};export{ConnectionManager as n,DEFAULT_RECONNECTION_CONFIG as r,VeraniClient as t};
package/dist/client.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as DEFAULT_RECONNECTION_CONFIG, i as ConnectionState, n as VeraniClientOptions, o as ReconnectionConfig, r as ConnectionManager, t as VeraniClient } from "./client-BNppil3J.cjs";
2
- import { a as ServerMessage, i as PROTOCOL_VERSION, o as VeraniMessage, t as ClientMessage } from "./types-cugB3Mcz.cjs";
3
- import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-Cetz5jkZ.cjs";
1
+ import { a as DEFAULT_RECONNECTION_CONFIG, i as ConnectionState, n as VeraniClientOptions, o as ReconnectionConfig, r as ConnectionManager, t as VeraniClient } from "./client-BaMxxGWr.cjs";
2
+ import { a as ServerMessage, i as PROTOCOL_VERSION, o as VeraniMessage, t as ClientMessage } from "./types-BefWc1M_.cjs";
3
+ import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-D5ZPxqwe.cjs";
4
4
  export { type ClientMessage, ConnectionManager, type ConnectionState, DEFAULT_RECONNECTION_CONFIG, PROTOCOL_VERSION, type ReconnectionConfig, type ServerMessage, VeraniClient, type VeraniClientOptions, type VeraniMessage, decodeClientMessage, decodeFrame, decodeServerMessage, encodeClientMessage, encodeFrame, encodeServerMessage };
package/dist/client.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as DEFAULT_RECONNECTION_CONFIG, i as ConnectionState, n as VeraniClientOptions, o as ReconnectionConfig, r as ConnectionManager, t as VeraniClient } from "./client-8ubwq_k4.mjs";
2
- import { a as ServerMessage, i as PROTOCOL_VERSION, o as VeraniMessage, t as ClientMessage } from "./types-Bs7hBgfQ.mjs";
3
- import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-Cs8CEYAY.mjs";
1
+ import { a as DEFAULT_RECONNECTION_CONFIG, i as ConnectionState, n as VeraniClientOptions, o as ReconnectionConfig, r as ConnectionManager, t as VeraniClient } from "./client-DxcWUNF7.mjs";
2
+ import { a as ServerMessage, i as PROTOCOL_VERSION, o as VeraniMessage, t as ClientMessage } from "./types-Ds_V-GWZ.mjs";
3
+ import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-E39NapB5.mjs";
4
4
  export { type ClientMessage, ConnectionManager, type ConnectionState, DEFAULT_RECONNECTION_CONFIG, PROTOCOL_VERSION, type ReconnectionConfig, type ServerMessage, VeraniClient, type VeraniClientOptions, type VeraniMessage, decodeClientMessage, decodeFrame, decodeServerMessage, encodeClientMessage, encodeFrame, encodeServerMessage };
package/dist/client.mjs CHANGED
@@ -1 +1 @@
1
- import{a as decodeFrame,i as decodeClientMessage,n as encodeFrame,o as decodeServerMessage,r as encodeServerMessage,t as encodeClientMessage}from"./encode-BEipaz10.mjs";import{t as PROTOCOL_VERSION}from"./types-B5NT7bya.mjs";import{n as ConnectionManager,r as DEFAULT_RECONNECTION_CONFIG,t as VeraniClient}from"./client-DaUp7q-P.mjs";export{ConnectionManager,DEFAULT_RECONNECTION_CONFIG,PROTOCOL_VERSION,VeraniClient,decodeClientMessage,decodeFrame,decodeServerMessage,encodeClientMessage,encodeFrame,encodeServerMessage};
1
+ import{a as decodeFrame,i as decodeClientMessage,n as encodeFrame,o as decodeServerMessage,r as encodeServerMessage,t as encodeClientMessage}from"./encode-BhJqnsto.mjs";import{t as PROTOCOL_VERSION}from"./types-rZsftNPE.mjs";import{n as ConnectionManager,r as DEFAULT_RECONNECTION_CONFIG,t as VeraniClient}from"./client-oItOePHL.mjs";export{ConnectionManager,DEFAULT_RECONNECTION_CONFIG,PROTOCOL_VERSION,VeraniClient,decodeClientMessage,decodeFrame,decodeServerMessage,encodeClientMessage,encodeFrame,encodeServerMessage};
@@ -1,4 +1,4 @@
1
- import { r as MessageFrame } from "./types-cugB3Mcz.cjs";
1
+ import { r as MessageFrame } from "./types-BefWc1M_.cjs";
2
2
 
3
3
  //#region src/shared/encode.d.ts
4
4
 
@@ -1,4 +1,4 @@
1
- import { r as MessageFrame } from "./types-Bs7hBgfQ.mjs";
1
+ import { r as MessageFrame } from "./types-Ds_V-GWZ.mjs";
2
2
 
3
3
  //#region src/shared/encode.d.ts
4
4
 
@@ -1,5 +1,5 @@
1
- import { i as ConnectionState, n as VeraniClientOptions, t as VeraniClient } from "./client-BNppil3J.cjs";
2
- import { B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, d as getServerValidator, g as AllEventNames, h as withValidation, i as ValidationIssue, l as createValidatedListener, m as validateData, o as Validator, p as isValidatedContract, r as ValidationError, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-CSmvG882.cjs";
1
+ import { i as ConnectionState, n as VeraniClientOptions, t as VeraniClient } from "./client-BaMxxGWr.cjs";
2
+ import { B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, d as getServerValidator, g as AllEventNames, h as withValidation, i as ValidationIssue, l as createValidatedListener, m as validateData, o as Validator, p as isValidatedContract, r as ValidationError, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-Dw-KMz9Q.cjs";
3
3
 
4
4
  //#region src/typed/client.d.ts
5
5
 
@@ -1,5 +1,5 @@
1
- import { i as ConnectionState, n as VeraniClientOptions, t as VeraniClient } from "./client-8ubwq_k4.mjs";
2
- import { B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, d as getServerValidator, g as AllEventNames, h as withValidation, i as ValidationIssue, l as createValidatedListener, m as validateData, o as Validator, p as isValidatedContract, r as ValidationError, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-D1xWZI_t.mjs";
1
+ import { i as ConnectionState, n as VeraniClientOptions, t as VeraniClient } from "./client-DxcWUNF7.mjs";
2
+ import { B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, d as getServerValidator, g as AllEventNames, h as withValidation, i as ValidationIssue, l as createValidatedListener, m as validateData, o as Validator, p as isValidatedContract, r as ValidationError, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-DCongzPL.mjs";
3
3
 
4
4
  //#region src/typed/client.d.ts
5
5
 
@@ -1 +1 @@
1
- import"./encode-BEipaz10.mjs";import{t as VeraniClient}from"./client-DaUp7q-P.mjs";import{a as getValidationErrorHandler,c as withValidation,d as payload,i as getServerValidator,l as defineContract,n as createValidatedListener,o as isValidatedContract,s as validateData,u as isContract}from"./validation-DRz-ayMa.mjs";function createTypedClient(a,o,s){let c=new VeraniClient(o,s),l=new Map,u=isValidatedContract(a),d=u?getValidationErrorHandler(a):void 0;return{on(e,i){l.has(e)||l.set(e,new Map);let o=o=>{if(u){let s=getServerValidator(a,e);if(s){let a=validateData(s,o,e,`server`,d);if(a===void 0)return;i(a);return}}i(o)};return l.get(e).set(i,o),c.on(e,o),()=>{let a=l.get(e),o=a?.get(i);o&&(c.off(e,o),a?.delete(i))}},off(e,i){let a=l.get(e),o=a?.get(i);o&&(c.off(e,o),a?.delete(i))},once(e,i){c.once(e,e=>{i(e)})},emit(e,i){c.emit(e,i)},onOpen(e){c.onOpen(e)},onClose(e){c.onClose(e)},onError(e){c.onError(e)},onStateChange(e){c.onStateChange(e)},getState(){return c.getState()},isConnected(){return c.isConnected()},get isConnecting(){return c.isConnecting},getConnectionState(){return c.getConnectionState()},waitForConnection(){return c.waitForConnection()},reconnect(){c.reconnect()},disconnect(){c.disconnect()},close(){c.close(),l.clear()},get _client(){return c},contract:a}}export{createTypedClient,createValidatedListener,defineContract,getServerValidator,isContract,isValidatedContract,payload,validateData,withValidation};
1
+ import"./encode-BhJqnsto.mjs";import{t as VeraniClient}from"./client-oItOePHL.mjs";import{a as getValidationErrorHandler,c as withValidation,d as payload,i as getServerValidator,l as defineContract,n as createValidatedListener,o as isValidatedContract,s as validateData,u as isContract}from"./validation-NB7a2Sf1.mjs";function createTypedClient(a,o,s){let c=new VeraniClient(o,s),l=new Map,u=isValidatedContract(a),d=u?getValidationErrorHandler(a):void 0;return{on(e,i){l.has(e)||l.set(e,new Map);let o=o=>{if(u){let s=getServerValidator(a,e);if(s){let a=validateData(s,o,e,`server`,d);if(a===void 0)return;i(a);return}}i(o)};return l.get(e).set(i,o),c.on(e,o),()=>{let a=l.get(e),o=a?.get(i);o&&(c.off(e,o),a?.delete(i))}},off(e,i){let a=l.get(e),o=a?.get(i);o&&(c.off(e,o),a?.delete(i))},once(e,i){c.once(e,e=>{i(e)})},emit(e,i){c.emit(e,i)},onOpen(e){c.onOpen(e)},onClose(e){c.onClose(e)},onError(e){c.onError(e)},onStateChange(e){c.onStateChange(e)},getState(){return c.getState()},isConnected(){return c.isConnected()},get isConnecting(){return c.isConnecting},getConnectionState(){return c.getConnectionState()},waitForConnection(){return c.waitForConnection()},reconnect(){c.reconnect()},disconnect(){c.disconnect()},close(){c.close(),l.clear()},get _client(){return c},contract:a}}export{createTypedClient,createValidatedListener,defineContract,getServerValidator,isContract,isValidatedContract,payload,validateData,withValidation};
@@ -0,0 +1 @@
1
+ const require_validation=require(`./validation-DvWPGkXK.cjs`);exports.defineContract=require_validation.l,exports.isContract=require_validation.u,exports.isValidatedContract=require_validation.o,exports.payload=require_validation.d,exports.validateData=require_validation.s,exports.withValidation=require_validation.c;
@@ -0,0 +1,2 @@
1
+ import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-Dw-KMz9Q.cjs";
2
+ export { type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedClientEmit, type TypedClientListener, type TypedServerEmit, type TypedServerListener, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, defineContract, isContract, isValidatedContract, payload, validateData, withValidation };
@@ -0,0 +1,2 @@
1
+ import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-DCongzPL.mjs";
2
+ export { type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedClientEmit, type TypedClientListener, type TypedServerEmit, type TypedServerListener, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, defineContract, isContract, isValidatedContract, payload, validateData, withValidation };
@@ -0,0 +1 @@
1
+ import{c as withValidation,d as payload,l as defineContract,o as isValidatedContract,s as validateData,u as isContract}from"./validation-NB7a2Sf1.mjs";export{defineContract,isContract,isValidatedContract,payload,validateData,withValidation};
package/dist/typed.cjs CHANGED
@@ -1 +1 @@
1
- const require_actor_runtime=require(`./actor-runtime-v4YHMnw9.cjs`);require(`./encode-BYFW_6TI.cjs`);const require_validation=require(`./validation-DvWPGkXK.cjs`);function createTypedSocketEmit(e){let n=((n,r)=>{e.emit(n,r)});return n.to=n=>{let r=e.to(n);return{emit:(e,n)=>r.emit(e,n)}},n}function createTypedActorEmit(e){let n=((n,r)=>e.emit.emit(n,r));return n.to=n=>{let r=e.emit.to(n);return{emit:(e,n)=>r.emit(e,n)}},n}function wrapContext(e){return{actor:Object.assign({},e.actor,{emit:createTypedActorEmit(e.actor)}),ws:e.ws,meta:e.meta,emit:createTypedSocketEmit(e.emit)}}function wrapMessageContext(e){return{...wrapContext(e),frame:e.frame}}function createTypedRoom(r,i){let o=require_actor_runtime.i({name:i.name,websocketPath:i.websocketPath??`/ws`,extractMeta:i.extractMeta,onConnect:i.onConnect?e=>i.onConnect(wrapContext(e)):void 0,onDisconnect:i.onDisconnect?e=>i.onDisconnect(wrapContext(e)):void 0,onError:i.onError?(e,n)=>i.onError(e,wrapContext(n)):void 0,onHibernationRestore:i.onHibernationRestore}),s=require_validation.o(r),c=s?require_validation.a(r):void 0;return{handle(e,i){o.on(e,(a,o)=>{let l=wrapMessageContext(a);if(s){let a=require_validation.r(r,e);if(a){let r=require_validation.s(a,o,e,`client`,c);return r===void 0?void 0:i(l,r)}}return i(l,o)})},off(e,n){o.off(e)},get definition(){return o},contract:r}}exports.createActorHandler=require_actor_runtime.t,exports.createTypedRoom=createTypedRoom,exports.createValidatedHandler=require_validation.t,exports.createValidatedListener=require_validation.n,exports.defineContract=require_validation.l,exports.getClientValidator=require_validation.r,exports.getServerValidator=require_validation.i,exports.getValidationErrorHandler=require_validation.a,exports.isContract=require_validation.u,exports.isValidatedContract=require_validation.o,exports.payload=require_validation.d,exports.validateData=require_validation.s,exports.withValidation=require_validation.c;
1
+ const require_actor_runtime=require(`./actor-runtime-v4YHMnw9.cjs`);require(`./encode-BYFW_6TI.cjs`);const require_validation=require(`./validation-DvWPGkXK.cjs`);function createTypedSocketEmit(e){let n=((n,r)=>{e.emit(n,r)});return n.to=n=>{let r=e.to(n);return{emit:(e,n)=>r.emit(e,n)}},n}function createTypedActorEmit(e){let n=((n,r)=>e.emit.emit(n,r));return n.to=n=>{let r=e.emit.to(n);return{emit:(e,n)=>r.emit(e,n)}},n}function wrapContext(e){return{actor:Object.assign({},e.actor,{emit:createTypedActorEmit(e.actor)}),ws:e.ws,meta:e.meta,emit:createTypedSocketEmit(e.emit)}}function wrapMessageContext(e){return{...wrapContext(e),frame:e.frame}}function createTypedRoom(r,i){let o=require_actor_runtime.i({name:i.name,websocketPath:i.websocketPath??`/ws`,extractMeta:i.extractMeta,onConnect:i.onConnect?e=>i.onConnect(wrapContext(e)):void 0,onDisconnect:i.onDisconnect?e=>i.onDisconnect(wrapContext(e)):void 0,onError:i.onError?(e,n)=>i.onError(e,wrapContext(n)):void 0,onHibernationRestore:i.onHibernationRestore}),s=require_validation.o(r),c=s?require_validation.a(r):void 0;return{on(e,i){o.on(e,(a,o)=>{let l=wrapMessageContext(a);if(s){let a=require_validation.r(r,e);if(a){let r=require_validation.s(a,o,e,`client`,c);return r===void 0?void 0:i(l,r)}}return i(l,o)})},off(e,n){o.off(e)},get definition(){return o},contract:r}}exports.createActorHandler=require_actor_runtime.t,exports.createTypedRoom=createTypedRoom,exports.createValidatedHandler=require_validation.t,exports.defineContract=require_validation.l,exports.getClientValidator=require_validation.r,exports.getValidationErrorHandler=require_validation.a,exports.isContract=require_validation.u,exports.isValidatedContract=require_validation.o,exports.payload=require_validation.d,exports.validateData=require_validation.s,exports.withValidation=require_validation.c;
package/dist/typed.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { n as ConnectionMeta } from "./types-cugB3Mcz.cjs";
2
- import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, c as createValidatedHandler, d as getServerValidator, f as getValidationErrorHandler, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, l as createValidatedListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, u as getClientValidator, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-CSmvG882.cjs";
3
- import { c as RoomDefinition, n as createActorHandler, r as ActorStub, u as VeraniActor } from "./actor-runtime-crxBqW3H.cjs";
1
+ import { n as ConnectionMeta } from "./types-BefWc1M_.cjs";
2
+ import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, c as createValidatedHandler, f as getValidationErrorHandler, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, u as getClientValidator, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-Dw-KMz9Q.cjs";
3
+ import { c as RoomDefinition, n as createActorHandler, r as ActorStub, u as VeraniActor } from "./actor-runtime-98JPmjaf.cjs";
4
4
 
5
5
  //#region src/typed/server.d.ts
6
6
 
@@ -110,7 +110,7 @@ interface TypedRoomConfig<C extends Contract, TMeta extends ConnectionMeta = Con
110
110
  */
111
111
  type TypedEventHandler<C extends Contract, E extends ClientEventNames<C>, TMeta extends ConnectionMeta = ConnectionMeta, TEnv = unknown> = (ctx: TypedMessageContext<C, TMeta, TEnv>, data: ClientPayload<C, E>) => void | Promise<void>;
112
112
  /**
113
- * Typed room with contract-aware handle method.
113
+ * Typed room with contract-aware event handling (Socket.io-like API).
114
114
  */
115
115
  interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = ConnectionMeta, E = unknown> {
116
116
  /**
@@ -122,13 +122,13 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
122
122
  *
123
123
  * @example
124
124
  * ```typescript
125
- * room.handle("message.send", (ctx, data) => {
125
+ * room.on("message.send", (ctx, data) => {
126
126
  * // data: { text: string } - inferred from contract!
127
127
  * ctx.emit("chat.message", { from: ctx.meta.userId, text: data.text });
128
128
  * });
129
129
  * ```
130
130
  */
131
- handle<TEvent extends ClientEventNames<C>>(event: TEvent, handler: TypedEventHandler<C, TEvent, TMeta, E>): void;
131
+ on<TEvent extends ClientEventNames<C>>(event: TEvent, handler: TypedEventHandler<C, TEvent, TMeta, E>): void;
132
132
  /**
133
133
  * Remove an event handler.
134
134
  * @param event - Event name
@@ -148,7 +148,7 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
148
148
  * Creates a type-safe room based on a contract definition.
149
149
  *
150
150
  * This wraps the base `defineRoom()` function and adds:
151
- * - Typed `handle()` method for registering event handlers
151
+ * - Typed `on()` method for registering event handlers
152
152
  * - Typed `emit` on context for sending server events
153
153
  * - Compile-time validation of event names and payloads
154
154
  *
@@ -174,7 +174,7 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
174
174
  * },
175
175
  * });
176
176
  *
177
- * room.handle("message.send", (ctx, data) => {
177
+ * room.on("message.send", (ctx, data) => {
178
178
  * ctx.emit("chat.message", { from: ctx.meta.userId, text: data.text });
179
179
  * });
180
180
  *
@@ -183,4 +183,4 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
183
183
  */
184
184
  declare function createTypedRoom<C extends Contract, TMeta extends ConnectionMeta = ConnectionMeta, E = unknown>(contract: C, config: TypedRoomConfig<C, TMeta, E>): TypedRoom<C, TMeta, E>;
185
185
  //#endregion
186
- export { type ActorStub, type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type ConnectionMeta, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type RoomDefinition, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedActorEmit, type TypedClientEmit, type TypedClientListener, type TypedEmitBuilder, type TypedEventHandler, type TypedMessageContext, type TypedRoom, type TypedRoomConfig, type TypedRoomContext, type TypedServerEmit, type TypedServerListener, type TypedSocketEmit, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, type VeraniActor, createActorHandler, createTypedRoom, createValidatedHandler, createValidatedListener, defineContract, getClientValidator, getServerValidator, getValidationErrorHandler, isContract, isValidatedContract, payload, validateData, withValidation };
186
+ export { type ActorStub, type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type ConnectionMeta, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type RoomDefinition, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedActorEmit, type TypedClientEmit, type TypedClientListener, type TypedEmitBuilder, type TypedEventHandler, type TypedMessageContext, type TypedRoom, type TypedRoomConfig, type TypedRoomContext, type TypedServerEmit, type TypedServerListener, type TypedSocketEmit, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, type VeraniActor, createActorHandler, createTypedRoom, createValidatedHandler, defineContract, getClientValidator, getValidationErrorHandler, isContract, isValidatedContract, payload, validateData, withValidation };
package/dist/typed.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { n as ConnectionMeta } from "./types-Bs7hBgfQ.mjs";
2
- import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, c as createValidatedHandler, d as getServerValidator, f as getValidationErrorHandler, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, l as createValidatedListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, u as getClientValidator, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-D1xWZI_t.mjs";
3
- import { c as RoomDefinition, n as createActorHandler, r as ActorStub, u as VeraniActor } from "./actor-runtime-CbquUZdU.mjs";
1
+ import { n as ConnectionMeta } from "./types-Ds_V-GWZ.mjs";
2
+ import { A as TypedServerEmit, B as payload, C as InferServerEvents, D as ServerPayloadMap, E as ServerPayload, F as EventPayloads, I as ExtractPayload, L as PayloadMarker, M as Contract, N as ContractDefinition, O as TypedClientEmit, P as EventMap, R as defineContract, S as InferClientEvents, T as ServerEventNames, _ as ClientEventHandler, a as ValidationResult, b as ClientPayloadMap, c as createValidatedHandler, f as getValidationErrorHandler, g as AllEventNames, h as withValidation, i as ValidationIssue, j as TypedServerListener, k as TypedClientListener, m as validateData, n as ValidationConfig, o as Validator, p as isValidatedContract, r as ValidationError, s as ValidatorMap, t as ValidatedContract, u as getClientValidator, v as ClientEventNames, w as ServerEventHandler, x as InferChannels, y as ClientPayload, z as isContract } from "./validation-DCongzPL.mjs";
3
+ import { c as RoomDefinition, n as createActorHandler, r as ActorStub, u as VeraniActor } from "./actor-runtime-D_xHVOcH.mjs";
4
4
 
5
5
  //#region src/typed/server.d.ts
6
6
 
@@ -110,7 +110,7 @@ interface TypedRoomConfig<C extends Contract, TMeta extends ConnectionMeta = Con
110
110
  */
111
111
  type TypedEventHandler<C extends Contract, E extends ClientEventNames<C>, TMeta extends ConnectionMeta = ConnectionMeta, TEnv = unknown> = (ctx: TypedMessageContext<C, TMeta, TEnv>, data: ClientPayload<C, E>) => void | Promise<void>;
112
112
  /**
113
- * Typed room with contract-aware handle method.
113
+ * Typed room with contract-aware event handling (Socket.io-like API).
114
114
  */
115
115
  interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = ConnectionMeta, E = unknown> {
116
116
  /**
@@ -122,13 +122,13 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
122
122
  *
123
123
  * @example
124
124
  * ```typescript
125
- * room.handle("message.send", (ctx, data) => {
125
+ * room.on("message.send", (ctx, data) => {
126
126
  * // data: { text: string } - inferred from contract!
127
127
  * ctx.emit("chat.message", { from: ctx.meta.userId, text: data.text });
128
128
  * });
129
129
  * ```
130
130
  */
131
- handle<TEvent extends ClientEventNames<C>>(event: TEvent, handler: TypedEventHandler<C, TEvent, TMeta, E>): void;
131
+ on<TEvent extends ClientEventNames<C>>(event: TEvent, handler: TypedEventHandler<C, TEvent, TMeta, E>): void;
132
132
  /**
133
133
  * Remove an event handler.
134
134
  * @param event - Event name
@@ -148,7 +148,7 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
148
148
  * Creates a type-safe room based on a contract definition.
149
149
  *
150
150
  * This wraps the base `defineRoom()` function and adds:
151
- * - Typed `handle()` method for registering event handlers
151
+ * - Typed `on()` method for registering event handlers
152
152
  * - Typed `emit` on context for sending server events
153
153
  * - Compile-time validation of event names and payloads
154
154
  *
@@ -174,7 +174,7 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
174
174
  * },
175
175
  * });
176
176
  *
177
- * room.handle("message.send", (ctx, data) => {
177
+ * room.on("message.send", (ctx, data) => {
178
178
  * ctx.emit("chat.message", { from: ctx.meta.userId, text: data.text });
179
179
  * });
180
180
  *
@@ -183,4 +183,4 @@ interface TypedRoom<C extends Contract, TMeta extends ConnectionMeta = Connectio
183
183
  */
184
184
  declare function createTypedRoom<C extends Contract, TMeta extends ConnectionMeta = ConnectionMeta, E = unknown>(contract: C, config: TypedRoomConfig<C, TMeta, E>): TypedRoom<C, TMeta, E>;
185
185
  //#endregion
186
- export { type ActorStub, type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type ConnectionMeta, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type RoomDefinition, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedActorEmit, type TypedClientEmit, type TypedClientListener, type TypedEmitBuilder, type TypedEventHandler, type TypedMessageContext, type TypedRoom, type TypedRoomConfig, type TypedRoomContext, type TypedServerEmit, type TypedServerListener, type TypedSocketEmit, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, type VeraniActor, createActorHandler, createTypedRoom, createValidatedHandler, createValidatedListener, defineContract, getClientValidator, getServerValidator, getValidationErrorHandler, isContract, isValidatedContract, payload, validateData, withValidation };
186
+ export { type ActorStub, type AllEventNames, type ClientEventHandler, type ClientEventNames, type ClientPayload, type ClientPayloadMap, type ConnectionMeta, type Contract, type ContractDefinition, type EventMap, type EventPayloads, type ExtractPayload, type InferChannels, type InferClientEvents, type InferServerEvents, type PayloadMarker, type RoomDefinition, type ServerEventHandler, type ServerEventNames, type ServerPayload, type ServerPayloadMap, type TypedActorEmit, type TypedClientEmit, type TypedClientListener, type TypedEmitBuilder, type TypedEventHandler, type TypedMessageContext, type TypedRoom, type TypedRoomConfig, type TypedRoomContext, type TypedServerEmit, type TypedServerListener, type TypedSocketEmit, type ValidatedContract, type ValidationConfig, type ValidationError, type ValidationIssue, type ValidationResult, type Validator, type ValidatorMap, type VeraniActor, createActorHandler, createTypedRoom, createValidatedHandler, defineContract, getClientValidator, getValidationErrorHandler, isContract, isValidatedContract, payload, validateData, withValidation };
package/dist/typed.mjs CHANGED
@@ -1 +1 @@
1
- import{i as defineRoom,t as createActorHandler}from"./actor-runtime-PyNnwtah.mjs";import"./encode-BEipaz10.mjs";import{a as getValidationErrorHandler,c as withValidation,d as payload,i as getServerValidator,l as defineContract,n as createValidatedListener,o as isValidatedContract,r as getClientValidator,s as validateData,t as createValidatedHandler,u as isContract}from"./validation-DRz-ayMa.mjs";function createTypedSocketEmit(e){let d=((d,f)=>{e.emit(d,f)});return d.to=d=>{let f=e.to(d);return{emit:(e,d)=>f.emit(e,d)}},d}function createTypedActorEmit(e){let d=((d,f)=>e.emit.emit(d,f));return d.to=d=>{let f=e.emit.to(d);return{emit:(e,d)=>f.emit(e,d)}},d}function wrapContext(e){return{actor:Object.assign({},e.actor,{emit:createTypedActorEmit(e.actor)}),ws:e.ws,meta:e.meta,emit:createTypedSocketEmit(e.emit)}}function wrapMessageContext(e){return{...wrapContext(e),frame:e.frame}}function createTypedRoom(d,p){let m=defineRoom({name:p.name,websocketPath:p.websocketPath??`/ws`,extractMeta:p.extractMeta,onConnect:p.onConnect?e=>p.onConnect(wrapContext(e)):void 0,onDisconnect:p.onDisconnect?e=>p.onDisconnect(wrapContext(e)):void 0,onError:p.onError?(e,d)=>p.onError(e,wrapContext(d)):void 0,onHibernationRestore:p.onHibernationRestore}),h=isValidatedContract(d),g=h?getValidationErrorHandler(d):void 0;return{handle(e,f){m.on(e,(p,m)=>{let _=wrapMessageContext(p);if(h){let p=getClientValidator(d,e);if(p){let d=validateData(p,m,e,`client`,g);return d===void 0?void 0:f(_,d)}}return f(_,m)})},off(e,d){m.off(e)},get definition(){return m},contract:d}}export{createActorHandler,createTypedRoom,createValidatedHandler,createValidatedListener,defineContract,getClientValidator,getServerValidator,getValidationErrorHandler,isContract,isValidatedContract,payload,validateData,withValidation};
1
+ import{i as defineRoom,t as createActorHandler}from"./actor-runtime-DamIMiBw.mjs";import"./encode-BhJqnsto.mjs";import{a as getValidationErrorHandler,c as withValidation,d as payload,l as defineContract,o as isValidatedContract,r as getClientValidator,s as validateData,t as createValidatedHandler,u as isContract}from"./validation-NB7a2Sf1.mjs";function createTypedSocketEmit(e){let l=((l,u)=>{e.emit(l,u)});return l.to=l=>{let u=e.to(l);return{emit:(e,l)=>u.emit(e,l)}},l}function createTypedActorEmit(e){let l=((l,u)=>e.emit.emit(l,u));return l.to=l=>{let u=e.emit.to(l);return{emit:(e,l)=>u.emit(e,l)}},l}function wrapContext(e){return{actor:Object.assign({},e.actor,{emit:createTypedActorEmit(e.actor)}),ws:e.ws,meta:e.meta,emit:createTypedSocketEmit(e.emit)}}function wrapMessageContext(e){return{...wrapContext(e),frame:e.frame}}function createTypedRoom(l,d){let f=defineRoom({name:d.name,websocketPath:d.websocketPath??`/ws`,extractMeta:d.extractMeta,onConnect:d.onConnect?e=>d.onConnect(wrapContext(e)):void 0,onDisconnect:d.onDisconnect?e=>d.onDisconnect(wrapContext(e)):void 0,onError:d.onError?(e,l)=>d.onError(e,wrapContext(l)):void 0,onHibernationRestore:d.onHibernationRestore}),p=isValidatedContract(l),h=p?getValidationErrorHandler(l):void 0;return{on(e,u){f.on(e,(d,f)=>{let m=wrapMessageContext(d);if(p){let d=getClientValidator(l,e);if(d){let l=validateData(d,f,e,`client`,h);return l===void 0?void 0:u(m,l)}}return u(m,f)})},off(e,l){f.off(e)},get definition(){return f},contract:l}}export{createActorHandler,createTypedRoom,createValidatedHandler,defineContract,getClientValidator,getValidationErrorHandler,isContract,isValidatedContract,payload,validateData,withValidation};
package/dist/verani.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { a as ServerMessage, i as PROTOCOL_VERSION, n as ConnectionMeta, o as VeraniMessage, r as MessageFrame, t as ClientMessage } from "./types-cugB3Mcz.cjs";
2
- import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-Cetz5jkZ.cjs";
3
- import { a as EventHandler, c as RoomDefinition, i as BroadcastOptions, l as RpcBroadcastOptions, n as createActorHandler, o as MessageContext, r as ActorStub, s as RoomContext, t as ActorHandlerClass, u as VeraniActor } from "./actor-runtime-crxBqW3H.cjs";
1
+ import { a as ServerMessage, i as PROTOCOL_VERSION, n as ConnectionMeta, o as VeraniMessage, r as MessageFrame, t as ClientMessage } from "./types-BefWc1M_.cjs";
2
+ import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-D5ZPxqwe.cjs";
3
+ import { a as EventHandler, c as RoomDefinition, i as BroadcastOptions, l as RpcBroadcastOptions, n as createActorHandler, o as MessageContext, r as ActorStub, s as RoomContext, t as ActorHandlerClass, u as VeraniActor } from "./actor-runtime-98JPmjaf.cjs";
4
4
 
5
5
  //#region src/actor/router.d.ts
6
6
  /**
package/dist/verani.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { a as ServerMessage, i as PROTOCOL_VERSION, n as ConnectionMeta, o as VeraniMessage, r as MessageFrame, t as ClientMessage } from "./types-Bs7hBgfQ.mjs";
2
- import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-Cs8CEYAY.mjs";
3
- import { a as EventHandler, c as RoomDefinition, i as BroadcastOptions, l as RpcBroadcastOptions, n as createActorHandler, o as MessageContext, r as ActorStub, s as RoomContext, t as ActorHandlerClass, u as VeraniActor } from "./actor-runtime-CbquUZdU.mjs";
1
+ import { a as ServerMessage, i as PROTOCOL_VERSION, n as ConnectionMeta, o as VeraniMessage, r as MessageFrame, t as ClientMessage } from "./types-Ds_V-GWZ.mjs";
2
+ import { a as encodeFrame, i as encodeClientMessage, n as decodeFrame, o as encodeServerMessage, r as decodeServerMessage, t as decodeClientMessage } from "./decode-E39NapB5.mjs";
3
+ import { a as EventHandler, c as RoomDefinition, i as BroadcastOptions, l as RpcBroadcastOptions, n as createActorHandler, o as MessageContext, r as ActorStub, s as RoomContext, t as ActorHandlerClass, u as VeraniActor } from "./actor-runtime-D_xHVOcH.mjs";
4
4
 
5
5
  //#region src/actor/router.d.ts
6
6
  /**
package/dist/verani.mjs CHANGED
@@ -1 +1 @@
1
- import{i as defineRoom,n as restoreSessions,r as storeAttachment,t as createActorHandler}from"./actor-runtime-PyNnwtah.mjs";import{a as decodeFrame,i as decodeClientMessage,n as encodeFrame,o as decodeServerMessage,r as encodeServerMessage,t as encodeClientMessage}from"./encode-BEipaz10.mjs";import{t as PROTOCOL_VERSION}from"./types-B5NT7bya.mjs";export{PROTOCOL_VERSION,createActorHandler,decodeClientMessage,decodeFrame,decodeServerMessage,defineRoom,encodeClientMessage,encodeFrame,encodeServerMessage,restoreSessions,storeAttachment};
1
+ import{i as defineRoom,n as restoreSessions,r as storeAttachment,t as createActorHandler}from"./actor-runtime-DamIMiBw.mjs";import{a as decodeFrame,i as decodeClientMessage,n as encodeFrame,o as decodeServerMessage,r as encodeServerMessage,t as encodeClientMessage}from"./encode-BhJqnsto.mjs";import{t as PROTOCOL_VERSION}from"./types-rZsftNPE.mjs";export{PROTOCOL_VERSION,createActorHandler,decodeClientMessage,decodeFrame,decodeServerMessage,defineRoom,encodeClientMessage,encodeFrame,encodeServerMessage,restoreSessions,storeAttachment};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verani",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "A simple, focused realtime SDK for Cloudflare Actors with Socket.io-like semantics",
5
5
  "license": "ISC",
6
6
  "keywords": [
@@ -54,6 +54,16 @@
54
54
  "types": "./dist/typed-client.d.cts",
55
55
  "default": "./dist/typed-client.cjs"
56
56
  }
57
+ },
58
+ "./typed/shared": {
59
+ "import": {
60
+ "types": "./dist/typed-shared.d.mts",
61
+ "default": "./dist/typed-shared.mjs"
62
+ },
63
+ "require": {
64
+ "types": "./dist/typed-shared.d.cts",
65
+ "default": "./dist/typed-shared.cjs"
66
+ }
57
67
  }
58
68
  },
59
69
  "files": [
File without changes