@wxn0brp/gloves-link-client 0.0.9 → 0.0.10

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.
@@ -1,2 +1,2 @@
1
- var l=class{_events={};on(s,t){let e=s;this._events[e]||(this._events[e]=[]),this._events[e].push(t)}once(s,t){let e=(...n)=>{this.off(s,e),t(...n)};this.on(s,e)}off(s,t){let e=s;this._events[e]&&(this._events[e]=this._events[e].filter(n=>n!==t))}emit(s,...t){let e=this._events[s];e&&e.length>0&&e.forEach(n=>{n(...t)})}listenerCount(s){return this._events[s]?.length||0}},h=l;var u=class{ws;ackIdCounter;ackCallbacks;handlers=new h;opts;url;connected=!1;_manuallyDisconnected=!1;messageQueue=[];constructor(s,t={}){this.ackIdCounter=1,this.ackCallbacks=new Map,this.opts={logs:!1,reConnect:!0,reConnectInterval:1e3,token:null,autoConnect:!0,...t},this.url=new URL(s,window?window.location.href.replace("http","ws"):"ws://localhost"),this.opts.token&&this.url.searchParams.set("token",this.opts.token),this.opts.autoConnect&&this.connect()}connect(){this._manuallyDisconnected=!1;let s=Date.now().toString(36)+Math.random().toString(36).substring(2,10);this.url.searchParams.set("id",s),this.opts.connectionData&&this.url.searchParams.set("data",JSON.stringify(this.opts.connectionData)),this.ws=new WebSocket(this.url.href),this.ws.onopen=()=>{this.connected=!0,this.opts.logs&&console.log("[ws] Connected");let t;for(;t=this.messageQueue.shift();)this.ws.send(t);this.handlers.emit("connect",this.ws)},this.ws.onerror=(...t)=>{this.opts.logs&&console.warn("[ws] Error:",t),this.handlers.emit("error",...t)},this.ws.onmessage=t=>{let e=t?.data?.toString()||t?.toString()||"",n;try{n=JSON.parse(e)}catch{this.opts.logs&&console.warn("[ws] Invalid JSON:",e);return}if("ack"in n){let r=n.ack,c=this.ackCallbacks.get(r);c&&(this.ackCallbacks.delete(r),c(...n.data));return}let{evt:o,data:i,ackI:a}=n;if(!(!o||i&&!Array.isArray(i))){if(Array.isArray(a))for(let r=0;r<a.length;r++){let c=a[r];if(!i[c])break;let p=i[c];i[c]=(...f)=>{this.ws.send(JSON.stringify({ack:p,data:f}))}}this.handlers.emit(o,...i)}},this.ws.onclose=async t=>{if(this.connected=!1,this.opts.logs&&console.log("[ws] Disconnected",t),this.handlers.emit("disconnect",this.ws,t),this._manuallyDisconnected){this._manuallyDisconnected=!1;return}if(t.code===1006){this.opts.logs&&console.log("[ws] Connection closed by server");let e=new URLSearchParams;e.set("id",s),e.set("path",this.url.pathname);let n=await fetch("/gloves-link/status?"+e.toString()).then(i=>i.json());if(n.err){this.opts.logs&&console.log("[ws] Status error",n.msg);return}let o=n.status;this.opts.logs&&console.log("[ws] Status",o),o.status===401?this.handlers.emit("unauthorized",this.ws):o.status===403?this.handlers.emit("forbidden",this.ws):o.status===500&&this.handlers.emit("serverError",this.ws);return}this.opts.reConnect&&setTimeout(()=>{this.connect()},this.opts.reConnectInterval)}}on(s,t){this.handlers.on(s,t)}once(s,t){this.handlers.once(s,t)}emit(s,...t){let e=t.map((o,i)=>{if(typeof o=="function")return i}).filter(o=>o!==void 0);for(let o=0;o<e.length;o++){let i=e[o],a=this.ackIdCounter++;this.ackCallbacks.set(a,t[i]),t[i]=a}let n=JSON.stringify({evt:s,data:t||void 0,ackI:e.length?e:void 0});this.connected&&this.ws?.readyState===WebSocket.OPEN?this.ws.send(n):this.messageQueue.push(n)}send(s,...t){return this.emit(s,...t)}disconnect(){this._manuallyDisconnected=!0,this.ws.close()}close(){this.ws.close()}};export{u as GLC,u as GlovesLinkClient,u as client,u as default};
1
+ var l=class{_events={};on(e,t){let s=e;this._events[s]||(this._events[s]=[]),this._events[s].push(t)}once(e,t){let s=(...n)=>{this.off(e,s),t(...n)};this.on(e,s)}off(e,t){let s=e;this._events[s]&&(this._events[s]=this._events[s].filter(n=>n!==t))}emit(e,...t){let s=this._events[e];s&&s.length>0&&s.forEach(n=>{n(...t)})}listenerCount(e){return this._events[e]?.length||0}},h=l;var u=class{ws;ackIdCounter;ackCallbacks;handlers=new h;opts;url;connected=!1;_manuallyDisconnected=!1;messageQueue=[];constructor(e,t={}){this.ackIdCounter=1,this.ackCallbacks=new Map,this.opts={logs:!1,reConnect:!0,reConnectInterval:1e3,token:null,autoConnect:!0,...t},this.url=new URL(e,window?window.location.href.replace("http","ws"):"ws://localhost"),this.opts.token&&this.url.searchParams.set("token",this.opts.token),this.opts.autoConnect&&this.connect()}connect(){this._manuallyDisconnected=!1;let e=Date.now().toString(36)+Math.random().toString(36).substring(2,10);this.url.searchParams.set("id",e),this.opts.connectionData&&this.url.searchParams.set("data",JSON.stringify(this.opts.connectionData)),this.ws=new WebSocket(this.url.href),this.ws.onopen=()=>{this.connected=!0,this.opts.logs&&console.log("[ws] Connected");let t;for(;t=this.messageQueue.shift();)this.ws.send(t);this._handlersEmit("connect",this.ws)},this.ws.onerror=(...t)=>{this.opts.logs&&console.warn("[ws] Error:",t),this._handlersEmit("error",...t)},this.ws.onmessage=t=>{let s=t?.data?.toString()||t?.toString()||"",n;try{n=JSON.parse(s)}catch{this.opts.logs&&console.warn("[ws] Invalid JSON:",s);return}if("ack"in n){let r=n.ack,c=this.ackCallbacks.get(r);c&&(this.ackCallbacks.delete(r),c(...n.data));return}let{evt:o,data:i,ackI:a}=n;if(!(!o||i&&!Array.isArray(i))){if(Array.isArray(a))for(let r=0;r<a.length;r++){let c=a[r];if(!i[c])break;let p=i[c];i[c]=(...f)=>{this.ws.send(JSON.stringify({ack:p,data:f}))}}this._handlersEmit(o,...i)}},this.ws.onclose=async t=>{if(this.connected=!1,this.opts.logs&&console.log("[ws] Disconnected",t),this._handlersEmit("disconnect",this.ws,t),this._manuallyDisconnected){this._manuallyDisconnected=!1;return}if(t.code===1006){this.opts.logs&&console.log("[ws] Connection closed by server");let s=new URLSearchParams;s.set("id",e),s.set("path",this.url.pathname);let n=await fetch("/gloves-link/status?"+s.toString()).then(i=>i.json());if(n.err){this.opts.logs&&console.log("[ws] Status error",n.msg);return}let o=n.status;this.opts.logs&&console.log("[ws] Status",o),o.status===401?this._handlersEmit("connect_unauthorized",this.ws,o.msg):o.status===403?this._handlersEmit("connect_forbidden",this.ws,o.msg):o.status===500&&this._handlersEmit("connect_serverError",this.ws,o.msg);return}this.opts.reConnect&&setTimeout(()=>{this.connect()},this.opts.reConnectInterval)}}on(e,t){this.handlers.on(e,t)}once(e,t){this.handlers.once(e,t)}emit(e,...t){let s=t.map((o,i)=>{if(typeof o=="function")return i}).filter(o=>o!==void 0);for(let o=0;o<s.length;o++){let i=s[o],a=this.ackIdCounter++;this.ackCallbacks.set(a,t[i]),t[i]=a}let n=JSON.stringify({evt:e,data:t||void 0,ackI:s.length?s:void 0});this.connected&&this.ws?.readyState===WebSocket.OPEN?this.ws.send(n):this.messageQueue.push(n)}send(e,...t){return this.emit(e,...t)}disconnect(){this._manuallyDisconnected=!0,this.ws.close()}close(){this.ws.close()}_handlersEmit(e,...t){this.handlers.emit(e,...t),this.handlers.emit("*",e,...t)}};export{u as GLC,u as GlovesLinkClient,u as client,u as default};
2
2
  //# sourceMappingURL=GlovesLinkClient.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../node_modules/@wxn0brp/event-emitter/dist/index.js", "../src/index.ts"],
4
- "sourcesContent": ["export class VEE {\n _events = {};\n /**\n * Registers an event listener\n * @param {K} event - event name\n * @param {Function} listener - function to be called when event occurs\n */\n on(event, listener) {\n const _event = event;\n if (!this._events[_event])\n this._events[_event] = [];\n this._events[_event].push(listener);\n }\n /**\n * Registers a one-time event listener\n * @param {K} event - event name\n * @param {Function} listener - function to be called once\n */\n once(event, listener) {\n const onceListener = (...args) => {\n this.off(event, onceListener);\n listener(...args);\n };\n this.on(event, onceListener);\n }\n /**\n * Removes an event listener.\n * @param {K} event - event name\n * @param {Function} listener - listener to remove\n */\n off(event, listener) {\n const _event = event;\n if (!this._events[_event])\n return;\n this._events[_event] = this._events[_event].filter(l => l !== listener);\n }\n /**\n * Emits an event\n * @param {K} event - event name\n * @param {...EventArgs<T, K>} args - arguments to be passed to listeners\n */\n emit(event, ...args) {\n const listeners = this._events[event];\n if (listeners && listeners.length > 0) {\n listeners.forEach(listener => {\n listener(...args);\n });\n }\n }\n /**\n * Returns the number of listeners for the given event\n * @param {K} event - event name\n */\n listenerCount(event) {\n return this._events[event]?.length || 0;\n }\n}\nexport default VEE;\nexport { VEE as EventEmitter };\n", "import VEE, { EventArgs, EventMap, EventName } from \"@wxn0brp/event-emitter\";\n\nexport interface GLC_Opts {\n reConnect: boolean,\n reConnectInterval: number,\n logs: boolean;\n token: string;\n autoConnect: boolean;\n connectionData?: Record<string, any>;\n}\n\nexport interface GLC_DataEvent {\n evt: string;\n data: any[];\n ackI?: number[];\n}\n\nexport interface GLC_AckEvent {\n ack: number;\n data: any[];\n}\n\nexport type InternalEvents = {\n connect: (ws: WebSocket) => void;\n error: (...err: any[]) => void;\n disconnect: (ws: WebSocket, event: CloseEvent) => void;\n unauthorized: (ws: WebSocket) => void;\n forbidden: (ws: WebSocket) => void;\n serverError: (ws: WebSocket) => void;\n}\n\nexport class GlovesLinkClient<InputEvents extends EventMap = {}, OutputEvents extends EventMap = {}> {\n public ws: WebSocket;\n public ackIdCounter: number;\n public ackCallbacks: Map<number, Function>;\n public handlers = new VEE<InputEvents>();\n public opts: GLC_Opts;\n public url: URL;\n public connected: boolean = false;\n private _manuallyDisconnected: boolean = false;\n private messageQueue: string[] = [];\n\n constructor(url: string, opts: Partial<GLC_Opts> = {}) {\n this.ackIdCounter = 1;\n this.ackCallbacks = new Map();\n this.opts = {\n logs: false,\n reConnect: true,\n reConnectInterval: 1000,\n token: null,\n autoConnect: true,\n ...opts\n }\n\n this.url = new URL(url, window ? window.location.href.replace(\"http\", \"ws\") : \"ws://localhost\");\n if (this.opts.token) this.url.searchParams.set(\"token\", this.opts.token);\n\n if (this.opts.autoConnect) this.connect();\n }\n\n connect() {\n this._manuallyDisconnected = false;\n const id = Date.now().toString(36) + Math.random().toString(36).substring(2, 10);\n this.url.searchParams.set(\"id\", id);\n\n if (this.opts.connectionData)\n this.url.searchParams.set(\"data\", JSON.stringify(this.opts.connectionData));\n\n this.ws = new WebSocket(this.url.href);\n\n this.ws.onopen = () => {\n this.connected = true;\n if (this.opts.logs) console.log(\"[ws] Connected\");\n\n let msg: string;\n while (msg = this.messageQueue.shift()) {\n this.ws.send(msg);\n }\n\n // @ts-ignore\n this.handlers.emit(\"connect\", this.ws);\n }\n\n this.ws.onerror = (...err: any) => {\n if (this.opts.logs) console.warn(\"[ws] Error:\", err);\n // @ts-ignore\n this.handlers.emit(\"error\", ...err);\n }\n\n this.ws.onmessage = (_data) => {\n const raw = _data?.data?.toString() || _data?.toString() || \"\";\n let msg: GLC_DataEvent | GLC_AckEvent;\n\n try {\n msg = JSON.parse(raw);\n } catch {\n if (this.opts.logs) console.warn(\"[ws] Invalid JSON:\", raw);\n return;\n }\n\n if (\"ack\" in msg) {\n const ackId = msg.ack;\n const ackCallback = this.ackCallbacks.get(ackId);\n if (ackCallback) {\n this.ackCallbacks.delete(ackId);\n ackCallback(...msg.data);\n }\n return;\n }\n\n const { evt, data, ackI } = msg;\n if (!evt || (data && !Array.isArray(data))) return;\n\n if (Array.isArray(ackI)) {\n for (let i = 0; i < ackI.length; i++) {\n const ackIndex = ackI[i];\n if (!data[ackIndex]) break;\n\n const ackId = data[ackIndex];\n data[ackIndex] = (...res: any) => {\n this.ws.send(JSON.stringify({\n ack: ackId,\n data: res\n }));\n };\n }\n }\n\n // @ts-ignore\n this.handlers.emit(evt, ...data);\n }\n\n this.ws.onclose = async (event: CloseEvent) => {\n this.connected = false;\n if (this.opts.logs) console.log(\"[ws] Disconnected\", event);\n // @ts-ignore\n this.handlers.emit(\"disconnect\", this.ws, event);\n\n if (this._manuallyDisconnected) {\n this._manuallyDisconnected = false;\n return;\n }\n\n if (event.code === 1006) {\n if (this.opts.logs) console.log(\"[ws] Connection closed by server\");\n\n const params = new URLSearchParams();\n params.set(\"id\", id);\n params.set(\"path\", this.url.pathname);\n\n const data = await fetch(\"/gloves-link/status?\" + params.toString()).then(res => res.json());\n if (data.err) {\n if (this.opts.logs) console.log(\"[ws] Status error\", data.msg);\n return;\n }\n\n const status = data.status as { status: number, msg?: string };\n if (this.opts.logs) console.log(\"[ws] Status\", status);\n // @ts-ignore\n if (status.status === 401) this.handlers.emit(\"unauthorized\", this.ws);\n // @ts-ignore\n else if (status.status === 403) this.handlers.emit(\"forbidden\", this.ws);\n // @ts-ignore\n else if (status.status === 500) this.handlers.emit(\"serverError\", this.ws);\n\n return;\n }\n if (!this.opts.reConnect) return;\n\n setTimeout(() => {\n this.connect();\n }, this.opts.reConnectInterval);\n }\n }\n\n on<K extends EventName<InputEvents & InternalEvents>>(event: K, listener: (InputEvents & InternalEvents)[K]) {\n this.handlers.on(event, listener as any);\n }\n\n once<K extends EventName<InputEvents & InternalEvents>>(event: K, listener: (InputEvents & InternalEvents)[K]) {\n this.handlers.once(event, listener as any);\n }\n\n emit<K extends EventName<OutputEvents>>(evt: K, ...args: EventArgs<OutputEvents, K>) {\n const ackI = args.map((data, i) => {\n if (typeof data === \"function\") return i;\n }).filter(i => i !== undefined);\n\n for (let i = 0; i < ackI.length; i++) {\n const ackIndex = ackI[i];\n const ackId = this.ackIdCounter++;\n this.ackCallbacks.set(ackId, args[ackIndex]);\n args[ackIndex] = ackId;\n }\n\n const payload = JSON.stringify({\n evt,\n data: args || undefined,\n ackI: ackI.length ? ackI : undefined\n });\n\n if (this.connected && this.ws?.readyState === WebSocket.OPEN)\n this.ws.send(payload);\n else\n this.messageQueue.push(payload);\n }\n\n send<K extends EventName<OutputEvents>>(evt: K, ...args: EventArgs<OutputEvents, K>) {\n return this.emit(evt, ...args);\n }\n\n disconnect() {\n this._manuallyDisconnected = true;\n this.ws.close();\n }\n\n close() {\n this.ws.close();\n }\n}\n\nexport {\n GlovesLinkClient as default,\n GlovesLinkClient as GLC,\n GlovesLinkClient as client,\n}"],
5
- "mappings": "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",
6
- "names": ["VEE", "event", "listener", "_event", "onceListener", "args", "l", "listeners", "dist_default", "GlovesLinkClient", "dist_default", "url", "opts", "id", "msg", "err", "_data", "raw", "ackId", "ackCallback", "evt", "data", "ackI", "i", "ackIndex", "res", "event", "params", "status", "listener", "args", "payload"]
4
+ "sourcesContent": ["export class VEE {\n _events = {};\n /**\n * Registers an event listener\n * @param {K} event - event name\n * @param {Function} listener - function to be called when event occurs\n */\n on(event, listener) {\n const _event = event;\n if (!this._events[_event])\n this._events[_event] = [];\n this._events[_event].push(listener);\n }\n /**\n * Registers a one-time event listener\n * @param {K} event - event name\n * @param {Function} listener - function to be called once\n */\n once(event, listener) {\n const onceListener = (...args) => {\n this.off(event, onceListener);\n listener(...args);\n };\n this.on(event, onceListener);\n }\n /**\n * Removes an event listener.\n * @param {K} event - event name\n * @param {Function} listener - listener to remove\n */\n off(event, listener) {\n const _event = event;\n if (!this._events[_event])\n return;\n this._events[_event] = this._events[_event].filter(l => l !== listener);\n }\n /**\n * Emits an event\n * @param {K} event - event name\n * @param {...EventArgs<T, K>} args - arguments to be passed to listeners\n */\n emit(event, ...args) {\n const listeners = this._events[event];\n if (listeners && listeners.length > 0) {\n listeners.forEach(listener => {\n listener(...args);\n });\n }\n }\n /**\n * Returns the number of listeners for the given event\n * @param {K} event - event name\n */\n listenerCount(event) {\n return this._events[event]?.length || 0;\n }\n}\nexport default VEE;\nexport { VEE as EventEmitter };\n", "import VEE, { EventArgs, EventMap, EventName } from \"@wxn0brp/event-emitter\";\n\nexport interface GLC_Opts {\n reConnect: boolean,\n reConnectInterval: number,\n logs: boolean;\n token: string;\n autoConnect: boolean;\n connectionData?: Record<string, any>;\n}\n\nexport interface GLC_DataEvent {\n evt: string;\n data: any[];\n ackI?: number[];\n}\n\nexport interface GLC_AckEvent {\n ack: number;\n data: any[];\n}\n\nexport type InternalEvents = {\n connect: (ws: WebSocket) => void;\n error: (...err: any[]) => void;\n disconnect: (ws: WebSocket, event: CloseEvent) => void;\n connect_unauthorized: (ws: WebSocket, msg: string) => void;\n connect_forbidden: (ws: WebSocket, msg: string) => void;\n connect_serverError: (ws: WebSocket, msg: string) => void;\n}\n\nexport class GlovesLinkClient<InputEvents extends EventMap = {}, OutputEvents extends EventMap = {}> {\n public ws: WebSocket;\n public ackIdCounter: number;\n public ackCallbacks: Map<number, Function>;\n public handlers = new VEE<InputEvents>();\n public opts: GLC_Opts;\n public url: URL;\n public connected: boolean = false;\n private _manuallyDisconnected: boolean = false;\n private messageQueue: string[] = [];\n\n constructor(url: string, opts: Partial<GLC_Opts> = {}) {\n this.ackIdCounter = 1;\n this.ackCallbacks = new Map();\n this.opts = {\n logs: false,\n reConnect: true,\n reConnectInterval: 1000,\n token: null,\n autoConnect: true,\n ...opts\n }\n\n this.url = new URL(url, window ? window.location.href.replace(\"http\", \"ws\") : \"ws://localhost\");\n if (this.opts.token) this.url.searchParams.set(\"token\", this.opts.token);\n\n if (this.opts.autoConnect) this.connect();\n }\n\n connect() {\n this._manuallyDisconnected = false;\n const id = Date.now().toString(36) + Math.random().toString(36).substring(2, 10);\n this.url.searchParams.set(\"id\", id);\n\n if (this.opts.connectionData)\n this.url.searchParams.set(\"data\", JSON.stringify(this.opts.connectionData));\n\n this.ws = new WebSocket(this.url.href);\n\n this.ws.onopen = () => {\n this.connected = true;\n if (this.opts.logs) console.log(\"[ws] Connected\");\n\n let msg: string;\n while (msg = this.messageQueue.shift()) {\n this.ws.send(msg);\n }\n\n this._handlersEmit(\"connect\", this.ws);\n }\n\n this.ws.onerror = (...err: any) => {\n if (this.opts.logs) console.warn(\"[ws] Error:\", err);\n this._handlersEmit(\"error\", ...err);\n }\n\n this.ws.onmessage = (_data) => {\n const raw = _data?.data?.toString() || _data?.toString() || \"\";\n let msg: GLC_DataEvent | GLC_AckEvent;\n\n try {\n msg = JSON.parse(raw);\n } catch {\n if (this.opts.logs) console.warn(\"[ws] Invalid JSON:\", raw);\n return;\n }\n\n if (\"ack\" in msg) {\n const ackId = msg.ack;\n const ackCallback = this.ackCallbacks.get(ackId);\n if (ackCallback) {\n this.ackCallbacks.delete(ackId);\n ackCallback(...msg.data);\n }\n return;\n }\n\n const { evt, data, ackI } = msg;\n if (!evt || (data && !Array.isArray(data))) return;\n\n if (Array.isArray(ackI)) {\n for (let i = 0; i < ackI.length; i++) {\n const ackIndex = ackI[i];\n if (!data[ackIndex]) break;\n\n const ackId = data[ackIndex];\n data[ackIndex] = (...res: any) => {\n this.ws.send(JSON.stringify({\n ack: ackId,\n data: res\n }));\n };\n }\n }\n\n this._handlersEmit(evt, ...data);\n }\n\n this.ws.onclose = async (event: CloseEvent) => {\n this.connected = false;\n if (this.opts.logs) console.log(\"[ws] Disconnected\", event);\n this._handlersEmit(\"disconnect\", this.ws, event);\n\n if (this._manuallyDisconnected) {\n this._manuallyDisconnected = false;\n return;\n }\n\n if (event.code === 1006) {\n if (this.opts.logs) console.log(\"[ws] Connection closed by server\");\n\n const params = new URLSearchParams();\n params.set(\"id\", id);\n params.set(\"path\", this.url.pathname);\n\n const data = await fetch(\"/gloves-link/status?\" + params.toString()).then(res => res.json());\n if (data.err) {\n if (this.opts.logs) console.log(\"[ws] Status error\", data.msg);\n return;\n }\n\n const status = data.status as { status: number, msg?: string };\n if (this.opts.logs) console.log(\"[ws] Status\", status);\n if (status.status === 401) this._handlersEmit(\"connect_unauthorized\", this.ws, status.msg);\n else if (status.status === 403) this._handlersEmit(\"connect_forbidden\", this.ws, status.msg);\n else if (status.status === 500) this._handlersEmit(\"connect_serverError\", this.ws, status.msg);\n\n return;\n }\n if (!this.opts.reConnect) return;\n\n setTimeout(() => {\n this.connect();\n }, this.opts.reConnectInterval);\n }\n }\n\n on<K extends EventName<InputEvents & InternalEvents>>(event: K, listener: (InputEvents & InternalEvents)[K]) {\n this.handlers.on(event, listener as any);\n }\n\n once<K extends EventName<InputEvents & InternalEvents>>(event: K, listener: (InputEvents & InternalEvents)[K]) {\n this.handlers.once(event, listener as any);\n }\n\n emit<K extends EventName<OutputEvents>>(evt: K, ...args: EventArgs<OutputEvents, K>) {\n const ackI = args.map((data, i) => {\n if (typeof data === \"function\") return i;\n }).filter(i => i !== undefined);\n\n for (let i = 0; i < ackI.length; i++) {\n const ackIndex = ackI[i];\n const ackId = this.ackIdCounter++;\n this.ackCallbacks.set(ackId, args[ackIndex]);\n args[ackIndex] = ackId;\n }\n\n const payload = JSON.stringify({\n evt,\n data: args || undefined,\n ackI: ackI.length ? ackI : undefined\n });\n\n if (this.connected && this.ws?.readyState === WebSocket.OPEN)\n this.ws.send(payload);\n else\n this.messageQueue.push(payload);\n }\n\n send<K extends EventName<OutputEvents>>(evt: K, ...args: EventArgs<OutputEvents, K>) {\n return this.emit(evt, ...args);\n }\n\n disconnect() {\n this._manuallyDisconnected = true;\n this.ws.close();\n }\n\n close() {\n this.ws.close();\n }\n\n _handlersEmit(evtName: string, ...args: any[]) {\n // @ts-ignore\n this.handlers.emit(evtName, ...args);\n // @ts-ignore\n this.handlers.emit(\"*\", evtName, ...args);\n }\n}\n\nexport {\n GlovesLinkClient as default,\n GlovesLinkClient as GLC,\n GlovesLinkClient as client,\n}"],
5
+ "mappings": "AAAO,IAAMA,EAAN,KAAU,CACb,QAAU,CAAC,EAMX,GAAGC,EAAOC,EAAU,CAChB,IAAMC,EAASF,EACV,KAAK,QAAQE,CAAM,IACpB,KAAK,QAAQA,CAAM,EAAI,CAAC,GAC5B,KAAK,QAAQA,CAAM,EAAE,KAAKD,CAAQ,CACtC,CAMA,KAAKD,EAAOC,EAAU,CAClB,IAAME,EAAe,IAAIC,IAAS,CAC9B,KAAK,IAAIJ,EAAOG,CAAY,EAC5BF,EAAS,GAAGG,CAAI,CACpB,EACA,KAAK,GAAGJ,EAAOG,CAAY,CAC/B,CAMA,IAAIH,EAAOC,EAAU,CACjB,IAAMC,EAASF,EACV,KAAK,QAAQE,CAAM,IAExB,KAAK,QAAQA,CAAM,EAAI,KAAK,QAAQA,CAAM,EAAE,OAAOG,GAAKA,IAAMJ,CAAQ,EAC1E,CAMA,KAAKD,KAAUI,EAAM,CACjB,IAAME,EAAY,KAAK,QAAQN,CAAK,EAChCM,GAAaA,EAAU,OAAS,GAChCA,EAAU,QAAQL,GAAY,CAC1BA,EAAS,GAAGG,CAAI,CACpB,CAAC,CAET,CAKA,cAAcJ,EAAO,CACjB,OAAO,KAAK,QAAQA,CAAK,GAAG,QAAU,CAC1C,CACJ,EACOO,EAAQR,EC1BR,IAAMS,EAAN,KAA8F,CAC1F,GACA,aACA,aACA,SAAW,IAAIC,EACf,KACA,IACA,UAAqB,GACpB,sBAAiC,GACjC,aAAyB,CAAC,EAElC,YAAYC,EAAaC,EAA0B,CAAC,EAAG,CACnD,KAAK,aAAe,EACpB,KAAK,aAAe,IAAI,IACxB,KAAK,KAAO,CACR,KAAM,GACN,UAAW,GACX,kBAAmB,IACnB,MAAO,KACP,YAAa,GACb,GAAGA,CACP,EAEA,KAAK,IAAM,IAAI,IAAID,EAAK,OAAS,OAAO,SAAS,KAAK,QAAQ,OAAQ,IAAI,EAAI,gBAAgB,EAC1F,KAAK,KAAK,OAAO,KAAK,IAAI,aAAa,IAAI,QAAS,KAAK,KAAK,KAAK,EAEnE,KAAK,KAAK,aAAa,KAAK,QAAQ,CAC5C,CAEA,SAAU,CACN,KAAK,sBAAwB,GAC7B,IAAME,EAAK,KAAK,IAAI,EAAE,SAAS,EAAE,EAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,EAC/E,KAAK,IAAI,aAAa,IAAI,KAAMA,CAAE,EAE9B,KAAK,KAAK,gBACV,KAAK,IAAI,aAAa,IAAI,OAAQ,KAAK,UAAU,KAAK,KAAK,cAAc,CAAC,EAE9E,KAAK,GAAK,IAAI,UAAU,KAAK,IAAI,IAAI,EAErC,KAAK,GAAG,OAAS,IAAM,CACnB,KAAK,UAAY,GACb,KAAK,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAEhD,IAAIC,EACJ,KAAOA,EAAM,KAAK,aAAa,MAAM,GACjC,KAAK,GAAG,KAAKA,CAAG,EAGpB,KAAK,cAAc,UAAW,KAAK,EAAE,CACzC,EAEA,KAAK,GAAG,QAAU,IAAIC,IAAa,CAC3B,KAAK,KAAK,MAAM,QAAQ,KAAK,cAAeA,CAAG,EACnD,KAAK,cAAc,QAAS,GAAGA,CAAG,CACtC,EAEA,KAAK,GAAG,UAAaC,GAAU,CAC3B,IAAMC,EAAMD,GAAO,MAAM,SAAS,GAAKA,GAAO,SAAS,GAAK,GACxDF,EAEJ,GAAI,CACAA,EAAM,KAAK,MAAMG,CAAG,CACxB,MAAQ,CACA,KAAK,KAAK,MAAM,QAAQ,KAAK,qBAAsBA,CAAG,EAC1D,MACJ,CAEA,GAAI,QAASH,EAAK,CACd,IAAMI,EAAQJ,EAAI,IACZK,EAAc,KAAK,aAAa,IAAID,CAAK,EAC3CC,IACA,KAAK,aAAa,OAAOD,CAAK,EAC9BC,EAAY,GAAGL,EAAI,IAAI,GAE3B,MACJ,CAEA,GAAM,CAAE,IAAAM,EAAK,KAAAC,EAAM,KAAAC,CAAK,EAAIR,EAC5B,GAAI,GAACM,GAAQC,GAAQ,CAAC,MAAM,QAAQA,CAAI,GAExC,IAAI,MAAM,QAAQC,CAAI,EAClB,QAASC,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAAK,CAClC,IAAMC,EAAWF,EAAKC,CAAC,EACvB,GAAI,CAACF,EAAKG,CAAQ,EAAG,MAErB,IAAMN,EAAQG,EAAKG,CAAQ,EAC3BH,EAAKG,CAAQ,EAAI,IAAIC,IAAa,CAC9B,KAAK,GAAG,KAAK,KAAK,UAAU,CACxB,IAAKP,EACL,KAAMO,CACV,CAAC,CAAC,CACN,CACJ,CAGJ,KAAK,cAAcL,EAAK,GAAGC,CAAI,EACnC,EAEA,KAAK,GAAG,QAAU,MAAOK,GAAsB,CAK3C,GAJA,KAAK,UAAY,GACb,KAAK,KAAK,MAAM,QAAQ,IAAI,oBAAqBA,CAAK,EAC1D,KAAK,cAAc,aAAc,KAAK,GAAIA,CAAK,EAE3C,KAAK,sBAAuB,CAC5B,KAAK,sBAAwB,GAC7B,MACJ,CAEA,GAAIA,EAAM,OAAS,KAAM,CACjB,KAAK,KAAK,MAAM,QAAQ,IAAI,kCAAkC,EAElE,IAAMC,EAAS,IAAI,gBACnBA,EAAO,IAAI,KAAMd,CAAE,EACnBc,EAAO,IAAI,OAAQ,KAAK,IAAI,QAAQ,EAEpC,IAAMN,EAAO,MAAM,MAAM,uBAAyBM,EAAO,SAAS,CAAC,EAAE,KAAKF,GAAOA,EAAI,KAAK,CAAC,EAC3F,GAAIJ,EAAK,IAAK,CACN,KAAK,KAAK,MAAM,QAAQ,IAAI,oBAAqBA,EAAK,GAAG,EAC7D,MACJ,CAEA,IAAMO,EAASP,EAAK,OAChB,KAAK,KAAK,MAAM,QAAQ,IAAI,cAAeO,CAAM,EACjDA,EAAO,SAAW,IAAK,KAAK,cAAc,uBAAwB,KAAK,GAAIA,EAAO,GAAG,EAChFA,EAAO,SAAW,IAAK,KAAK,cAAc,oBAAqB,KAAK,GAAIA,EAAO,GAAG,EAClFA,EAAO,SAAW,KAAK,KAAK,cAAc,sBAAuB,KAAK,GAAIA,EAAO,GAAG,EAE7F,MACJ,CACK,KAAK,KAAK,WAEf,WAAW,IAAM,CACb,KAAK,QAAQ,CACjB,EAAG,KAAK,KAAK,iBAAiB,CAClC,CACJ,CAEA,GAAsDF,EAAUG,EAA6C,CACzG,KAAK,SAAS,GAAGH,EAAOG,CAAe,CAC3C,CAEA,KAAwDH,EAAUG,EAA6C,CAC3G,KAAK,SAAS,KAAKH,EAAOG,CAAe,CAC7C,CAEA,KAAwCT,KAAWU,EAAkC,CACjF,IAAMR,EAAOQ,EAAK,IAAI,CAACT,EAAM,IAAM,CAC/B,GAAI,OAAOA,GAAS,WAAY,OAAO,CAC3C,CAAC,EAAE,OAAOE,GAAKA,IAAM,MAAS,EAE9B,QAASA,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAAK,CAClC,IAAMC,EAAWF,EAAKC,CAAC,EACjBL,EAAQ,KAAK,eACnB,KAAK,aAAa,IAAIA,EAAOY,EAAKN,CAAQ,CAAC,EAC3CM,EAAKN,CAAQ,EAAIN,CACrB,CAEA,IAAMa,EAAU,KAAK,UAAU,CAC3B,IAAAX,EACA,KAAMU,GAAQ,OACd,KAAMR,EAAK,OAASA,EAAO,MAC/B,CAAC,EAEG,KAAK,WAAa,KAAK,IAAI,aAAe,UAAU,KACpD,KAAK,GAAG,KAAKS,CAAO,EAEpB,KAAK,aAAa,KAAKA,CAAO,CACtC,CAEA,KAAwCX,KAAWU,EAAkC,CACjF,OAAO,KAAK,KAAKV,EAAK,GAAGU,CAAI,CACjC,CAEA,YAAa,CACT,KAAK,sBAAwB,GAC7B,KAAK,GAAG,MAAM,CAClB,CAEA,OAAQ,CACJ,KAAK,GAAG,MAAM,CAClB,CAEA,cAAcE,KAAoBF,EAAa,CAE3C,KAAK,SAAS,KAAKE,EAAS,GAAGF,CAAI,EAEnC,KAAK,SAAS,KAAK,IAAKE,EAAS,GAAGF,CAAI,CAC5C,CACJ",
6
+ "names": ["VEE", "event", "listener", "_event", "onceListener", "args", "l", "listeners", "dist_default", "GlovesLinkClient", "dist_default", "url", "opts", "id", "msg", "err", "_data", "raw", "ackId", "ackCallback", "evt", "data", "ackI", "i", "ackIndex", "res", "event", "params", "status", "listener", "args", "payload", "evtName"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -20,9 +20,9 @@ export type InternalEvents = {
20
20
  connect: (ws: WebSocket) => void;
21
21
  error: (...err: any[]) => void;
22
22
  disconnect: (ws: WebSocket, event: CloseEvent) => void;
23
- unauthorized: (ws: WebSocket) => void;
24
- forbidden: (ws: WebSocket) => void;
25
- serverError: (ws: WebSocket) => void;
23
+ connect_unauthorized: (ws: WebSocket, msg: string) => void;
24
+ connect_forbidden: (ws: WebSocket, msg: string) => void;
25
+ connect_serverError: (ws: WebSocket, msg: string) => void;
26
26
  };
27
27
  export declare class GlovesLinkClient<InputEvents extends EventMap = {}, OutputEvents extends EventMap = {}> {
28
28
  ws: WebSocket;
@@ -42,5 +42,6 @@ export declare class GlovesLinkClient<InputEvents extends EventMap = {}, OutputE
42
42
  send<K extends EventName<OutputEvents>>(evt: K, ...args: EventArgs<OutputEvents, K>): void;
43
43
  disconnect(): void;
44
44
  close(): void;
45
+ _handlersEmit(evtName: string, ...args: any[]): void;
45
46
  }
46
47
  export { GlovesLinkClient as default, GlovesLinkClient as GLC, GlovesLinkClient as client, };
package/dist/index.js CHANGED
@@ -41,14 +41,12 @@ export class GlovesLinkClient {
41
41
  while (msg = this.messageQueue.shift()) {
42
42
  this.ws.send(msg);
43
43
  }
44
- // @ts-ignore
45
- this.handlers.emit("connect", this.ws);
44
+ this._handlersEmit("connect", this.ws);
46
45
  };
47
46
  this.ws.onerror = (...err) => {
48
47
  if (this.opts.logs)
49
48
  console.warn("[ws] Error:", err);
50
- // @ts-ignore
51
- this.handlers.emit("error", ...err);
49
+ this._handlersEmit("error", ...err);
52
50
  };
53
51
  this.ws.onmessage = (_data) => {
54
52
  const raw = _data?.data?.toString() || _data?.toString() || "";
@@ -87,15 +85,13 @@ export class GlovesLinkClient {
87
85
  };
88
86
  }
89
87
  }
90
- // @ts-ignore
91
- this.handlers.emit(evt, ...data);
88
+ this._handlersEmit(evt, ...data);
92
89
  };
93
90
  this.ws.onclose = async (event) => {
94
91
  this.connected = false;
95
92
  if (this.opts.logs)
96
93
  console.log("[ws] Disconnected", event);
97
- // @ts-ignore
98
- this.handlers.emit("disconnect", this.ws, event);
94
+ this._handlersEmit("disconnect", this.ws, event);
99
95
  if (this._manuallyDisconnected) {
100
96
  this._manuallyDisconnected = false;
101
97
  return;
@@ -115,15 +111,12 @@ export class GlovesLinkClient {
115
111
  const status = data.status;
116
112
  if (this.opts.logs)
117
113
  console.log("[ws] Status", status);
118
- // @ts-ignore
119
114
  if (status.status === 401)
120
- this.handlers.emit("unauthorized", this.ws);
121
- // @ts-ignore
115
+ this._handlersEmit("connect_unauthorized", this.ws, status.msg);
122
116
  else if (status.status === 403)
123
- this.handlers.emit("forbidden", this.ws);
124
- // @ts-ignore
117
+ this._handlersEmit("connect_forbidden", this.ws, status.msg);
125
118
  else if (status.status === 500)
126
- this.handlers.emit("serverError", this.ws);
119
+ this._handlersEmit("connect_serverError", this.ws, status.msg);
127
120
  return;
128
121
  }
129
122
  if (!this.opts.reConnect)
@@ -170,5 +163,11 @@ export class GlovesLinkClient {
170
163
  close() {
171
164
  this.ws.close();
172
165
  }
166
+ _handlersEmit(evtName, ...args) {
167
+ // @ts-ignore
168
+ this.handlers.emit(evtName, ...args);
169
+ // @ts-ignore
170
+ this.handlers.emit("*", evtName, ...args);
171
+ }
173
172
  }
174
173
  export { GlovesLinkClient as default, GlovesLinkClient as GLC, GlovesLinkClient as client, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wxn0brp/gloves-link-client",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "wxn0brP",