insite-ws 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.js +1 -1
- package/dist/server/index.js +2 -2
- package/package.json +8 -8
package/dist/client/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var H=Object.defineProperty;var D=o=>{throw TypeError(o)};var K=(o,r,e)=>r in o?H(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e;var c=(o,r,e)=>K(o,typeof r!="symbol"?r+"":r,e),F=(o,r,e)=>r.has(o)||D("Cannot "+e);var n=(o,r,e)=>(F(o,r,"read from private field"),e?e.call(o):r.get(o)),p=(o,r,e)=>r.has(o)?D("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(o):r.set(o,e),A=(o,r,e,t)=>(F(o,r,"write to private field"),t?t.call(o,e):r.set(o,e),e);import z from"eventemitter3";function h(){}function _(o,r=0,e={}){let{leading:t=!1,trailing:s=!0}=e,{maxWait:l=1/0}=e,i,f,
|
|
1
|
+
var H=Object.defineProperty;var D=o=>{throw TypeError(o)};var K=(o,r,e)=>r in o?H(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e;var c=(o,r,e)=>K(o,typeof r!="symbol"?r+"":r,e),F=(o,r,e)=>r.has(o)||D("Cannot "+e);var n=(o,r,e)=>(F(o,r,"read from private field"),e?e.call(o):r.get(o)),p=(o,r,e)=>r.has(o)?D("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(o):r.set(o,e),A=(o,r,e,t)=>(F(o,r,"write to private field"),t?t.call(o,e):r.set(o,e),e);import z from"eventemitter3";function h(){}function _(o,r=0,e={}){let{leading:t=!1,trailing:s=!0}=e,{maxWait:l=1/0}=e,i,u,f,d,a,R,x,I,B=async()=>{let b=Date.now();b>=f?(i=void 0,f=void 0,clearTimeout(u),typeof x=="function"&&await x(),m.resolve(I),m.promise.isResolved=!0,R=t):(clearTimeout(i),i=setTimeout(B,f-b))},N=Number.isFinite(l)?()=>{x===S&&(x=!1),S(),u=setTimeout(N,l)}:null;async function S(){return I=await o.apply(d,a)}t&&typeof t=="boolean"&&(t=S),R=t,s&&typeof s=="boolean"&&(s=S),x=s;let m=Object.assign(function(...b){return a=b,d=this,f=Date.now()+r,x=s,m.promise.isResolved&&(m.promise=Object.assign(new Promise(J=>{m.resolve=J,typeof R=="function"&&(R(),R=!1,x===S&&(x=!1)),i||(i=setTimeout(B,r),N&&(u=setTimeout(N,l)))}),{isResolved:!1})),m.promise},{callback:o,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:h,run:S,clear:async b=>{clearTimeout(i),i=void 0,clearTimeout(u),m.promise.isResolved=!0,m.resolve(b?await S():I)}});return m}_.noop=Object.assign(()=>{},{callback:h,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:h,run:h,clear:h});function U(o,r,e,t,s=!0){return Array.isArray(o)&&(o=o.length),typeof t!="string"&&(s=t??!0,t=e),(s?`${o}\xA0`:"")+U.raw(o,r,e,t)}U.raw=(o,r,e,t=e)=>{o=Math.abs(o);let s=o%10,l=o%100;return s===1&&l!==11?r:s>=2&&s<=4&&!(l>=12&&l<=15)?e:t};var T=new WeakMap,q=class extends Promise{constructor(e){let t,s;super((l,i)=>{t=l,s=i});c(this,"isPending",!0);c(this,"isFulfilled",!1);c(this,"isRejected",!1);c(this,"state","pending");c(this,"result");c(this,"resolve",e=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=e;let t=T.get(this);t&&(t.resolve.call(this,e),T.delete(this))}});c(this,"reject",e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=T.get(this);t&&(t.reject.call(this,e),T.delete(this))}});T.set(this,{resolve:t,reject:s}),e?.(this.resolve,this.reject)}};function V(o="",r=""){return`${o}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${r}`}var y={request:"~r-q",response:"~r-s"};var Y=0,w,k,g,P,M,$,O,j,v,L,E,W,C=class C extends z{constructor(e={}){super();c(this,"isWebSocket",!0);c(this,"isWebSocketServer",!1);c(this,"isWebSocketServerClient",!1);c(this,"url");c(this,"name");c(this,"protocols");c(this,"reconnectAfter");p(this,w);c(this,"isUsed",!1);c(this,"isAutoReconnecting",!1);c(this,"webSocket",null);p(this,k,_(C.defib,65e3));p(this,g);p(this,P,()=>{n(this,g).resolve(),this.emit("open"),n(this,k).call(this)});p(this,M,({data:e})=>{if(n(this,k).call(this),e)try{let[t,...s]=JSON.parse(e);this.emit("message",t,...s),this.emit(`message:${t}`,...s)}catch(t){n(this,$).call(this,t)}else this.webSocket.send("")});p(this,$,e=>{e instanceof Event&&(e=void 0),n(this,g).isPending&&n(this,g).reject(e),this.emit("error",e)});p(this,O);p(this,j,e=>{process.env.NODE_ENV==="development"&&!n(this,w)&&console.info(`\u{1F50C} WS ${this.name} is closed ${e.code?`with code ${e.code}`:""} ${e.code&&e.reason?"and ":""}${e.reason?`reason "${e.reason}"`:""}`),n(this,k).clear();let t=this.webSocket;t.removeEventListener("open",n(this,P)),t.removeEventListener("message",n(this,M)),t.removeEventListener("error",n(this,$)),t.removeEventListener("close",n(this,j)),delete this.send,this.emit("close",e),this.webSocket=null,this.reconnectAfter&&![1002,3500,4e3].includes(e.code)&&(process.env.NODE_ENV==="development"&&!n(this,w)&&console.info(`\u{1F50C} WS ${this.name} will try to reconnect in 2 seconds`),A(this,O,setTimeout(()=>this.open().catch(h),this.reconnectAfter)))});c(this,"connect",this.open);c(this,"disconnect",this.close);p(this,v,[]);p(this,L,()=>{for(let e of n(this,v))this.webSocket.send(e);n(this,v).length=0});p(this,E,new Map);c(this,"onRequest",this.addRequestListener);c(this,"offRequest",this.removeRequestListener);p(this,W,async(e,t,...s)=>{let l=n(this,E).get(t),i,u=null;if(l)try{i=await l.apply(this,s)}catch(f){if(f instanceof Error){let{message:d,...a}=f;u={message:d,...a}}}else u={message:`Unknown request kind "${t}"`};this.sendMessage(`${y.response}-${e}`,u,i)});let{url:t=globalThis.__insite?.wss_url??"/",name:s=(Y++).toString(),protocols:l,immediately:i=!0,reconnectAfter:u=2e3,on:f,quiet:d=!1}=e;if(this.url=t,this.name=s,this.protocols=l,this.reconnectAfter=u,this.on(`message:${y.request}`,n(this,W)),f)for(let a in f)f[a]&&this.on(a,f[a]);A(this,w,d),this.url&&i&&this.open().catch(h),this.on("error",a=>a&&console.error("\u{1F50C}\u2757\uFE0F WS",`${this.name}:`,a))}get isConnecting(){return this.webSocket?this.webSocket.readyState===WebSocket.CONNECTING:null}get isOpen(){return this.webSocket?this.webSocket.readyState===WebSocket.OPEN:null}get isClosing(){return this.webSocket?this.webSocket.readyState===WebSocket.CLOSING:null}get isClosed(){return!this.webSocket||this.webSocket.readyState===WebSocket.CLOSED}async open(e={}){clearTimeout(n(this,O)),this.isUsed=!0,this.isAutoReconnecting=!!this.reconnectAfter,await this.close(4e3,"reopen");let t;return e.url&&this.url!==e.url&&(t=this.url,this.url=e.url),e.protocols&&(this.protocols=e.protocols),A(this,g,new q((s,l)=>{if(this.url){let i=new WebSocket(this.url,this.protocols);i.addEventListener("open",n(this,P)),i.addEventListener("message",n(this,M)),i.addEventListener("error",n(this,$)),i.addEventListener("close",n(this,j),{once:!0}),this.send=i.send.bind(i),this.webSocket=i,t&&this.emit("server-change",this.url,t),this.emit("connecting")}else this.webSocket=null,delete this.send,l(new Error("url prop is not set"))})),n(this,g)}close(e=3500,t="manual"){return clearTimeout(n(this,O)),t==="manual"&&(this.isAutoReconnecting=!1),new Promise(s=>{this.isConnecting||this.isOpen?(this.webSocket.addEventListener("close",()=>s(),{once:!0}),this.webSocket.close(e,t)):s()})}sendMessage(...e){let t=JSON.stringify(e);this.isOpen?this.webSocket.send(t):(n(this,v).length||this.once("open",n(this,L)),n(this,v).push(t))}sendRequest(...e){let t=V(),s=`message:${y.response}-${t}`;return typeof e.at(-1)=="function"?(this.once(s,e.splice(-1,1)[0]),this.sendMessage(y.request,t,...e),this):new Promise((l,i)=>{this.once(s,(u,f)=>{if(u){let{message:d,...a}=u;i(Object.assign(new Error(d),a))}else l(f)}),this.sendMessage(y.request,t,...e)})}addRequestListener(e,t){return n(this,E).set(e,t),this}removeRequestListener(e){return n(this,E).delete(e),this}static defib(){this.isOpen&&(process.env.NODE_ENV==="development"&&!n(this,w)&&console.info(`\u{1F50C} WS ${this.name} has no heartbeat, going offline`),this.webSocket.close())}};w=new WeakMap,k=new WeakMap,g=new WeakMap,P=new WeakMap,M=new WeakMap,$=new WeakMap,O=new WeakMap,j=new WeakMap,v=new WeakMap,L=new WeakMap,E=new WeakMap,W=new WeakMap;var G=C;export{G as WS};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{WebSocketServer as D}from"ws";function g(){}function O(t,e=0,r={}){let{leading:o=!1,trailing:n=!0}=r,{maxWait:s=1/0}=r,i,c,
|
|
1
|
+
import{WebSocketServer as D}from"ws";function g(){}function O(t,e=0,r={}){let{leading:o=!1,trailing:n=!0}=r,{maxWait:s=1/0}=r,i,f,c,S,b,v,u,W,$=async()=>{let x=Date.now();x>=c?(i=void 0,c=void 0,clearTimeout(f),typeof u=="function"&&await u(),a.resolve(W),a.promise.isResolved=!0,v=o):(clearTimeout(i),i=setTimeout($,c-x))},C=Number.isFinite(s)?()=>{u===p&&(u=!1),p(),f=setTimeout(C,s)}:null;async function p(){return W=await t.apply(S,b)}o&&typeof o=="boolean"&&(o=p),v=o,n&&typeof n=="boolean"&&(n=p),u=n;let a=Object.assign(function(...x){return b=x,S=this,c=Date.now()+e,u=n,a.promise.isResolved&&(a.promise=Object.assign(new Promise(q=>{a.resolve=q,typeof v=="function"&&(v(),v=!1,u===p&&(u=!1)),i||(i=setTimeout($,e),C&&(f=setTimeout(C,s)))}),{isResolved:!1})),a.promise},{callback:t,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:g,run:p,clear:async x=>{clearTimeout(i),i=void 0,clearTimeout(f),a.promise.isResolved=!0,a.resolve(x?await p():W)}});return a}O.noop=Object.assign(()=>{},{callback:g,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:g,run:g,clear:g});function k(t,e=" ",r=1){if(!t)return t;let o=e.repeat(r);return t.split(`
|
|
2
2
|
`).map(n=>`${o}${n}`).join(`
|
|
3
3
|
`)}function P(t){return!!t&&typeof t=="object"&&"errorResponse"in t&&!!t.errorResponse&&typeof t.errorResponse=="object"&&"errInfo"in t.errorResponse}function R(t){return P(t)&&t.errorResponse.errmsg==="Document failed validation"&&(t.message=`${t.errorResponse.errmsg}
|
|
4
4
|
${k(`failingDocumentId: ${t.errorResponse.errInfo?.failingDocumentId}
|
|
5
|
-
schemaRulesNotSatisfied: ${JSON.stringify(t.errorResponse.errInfo?.details?.schemaRulesNotSatisfied,null," ")}`," ")}`),t}function E(t,e,r,o,n=!0){return Array.isArray(t)&&(t=t.length),typeof o!="string"&&(n=o??!0,o=r),(n?`${t}\xA0`:"")+E.raw(t,e,r,o)}E.raw=(t,e,r,o=r)=>{t=Math.abs(t);let n=t%10,s=t%100;return n===1&&s!==11?e:n>=2&&n<=4&&!(s>=12&&s<=15)?r:o};function M(t="",e=""){return`${t}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}import{createServer as N,getRemoteAddress as A,resolveSSL as L,showServerListeningMessage as T}from"insite-common/backend";var m={request:"~r-q",response:"~r-s"};var y=Symbol("heartbeatInterval"),d=Symbol("defib"),h=Symbol("pingTs");import{WebSocket as B}from"ws";var l=class t extends B{on(e,r){return super.on(e,r)}get isConnecting(){return this.readyState===this.CONNECTING}get isOpen(){return this.readyState===this.OPEN}get isClosing(){return this.readyState===this.CLOSING}get isClosed(){return this.readyState===this.CLOSED}isWebSocketServerClient=!0;isWebSocketServer=!1;isWebSocket=!1;wss;userAgent="";remoteAddress="";[d]=t.makeDefib.call(this);latency=0;[h];[y]=t.makeHeartbeatInterval.call(this);sendMessage(...e){return this.send(JSON.stringify(e))}sendRequest(...e){let r=M(),o=`message:${m.response}-${r}`;return typeof e.at(-1)=="function"?(this.once(o,e.splice(-1,1)[0]),this.sendMessage(m.request,r,...e),this):new Promise((n,s)=>{this.once(o,(i,
|
|
5
|
+
schemaRulesNotSatisfied: ${JSON.stringify(t.errorResponse.errInfo?.details?.schemaRulesNotSatisfied,null," ")}`," ")}`),t}function E(t,e,r,o,n=!0){return Array.isArray(t)&&(t=t.length),typeof o!="string"&&(n=o??!0,o=r),(n?`${t}\xA0`:"")+E.raw(t,e,r,o)}E.raw=(t,e,r,o=r)=>{t=Math.abs(t);let n=t%10,s=t%100;return n===1&&s!==11?e:n>=2&&n<=4&&!(s>=12&&s<=15)?r:o};function M(t="",e=""){return`${t}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}import{createServer as N,getRemoteAddress as A,resolveSSL as L,showServerListeningMessage as T}from"insite-common/backend";var m={request:"~r-q",response:"~r-s"};var y=Symbol("heartbeatInterval"),d=Symbol("defib"),h=Symbol("pingTs");import{WebSocket as B}from"ws";var l=class t extends B{on(e,r){return super.on(e,r)}get isConnecting(){return this.readyState===this.CONNECTING}get isOpen(){return this.readyState===this.OPEN}get isClosing(){return this.readyState===this.CLOSING}get isClosed(){return this.readyState===this.CLOSED}isWebSocketServerClient=!0;isWebSocketServer=!1;isWebSocket=!1;wss;userAgent="";remoteAddress="";[d]=t.makeDefib.call(this);latency=0;[h];[y]=t.makeHeartbeatInterval.call(this);sendMessage(...e){return this.send(JSON.stringify(e))}sendRequest(...e){let r=M(),o=`message:${m.response}-${r}`;return typeof e.at(-1)=="function"?(this.once(o,e.splice(-1,1)[0]),this.sendMessage(m.request,r,...e),this):new Promise((n,s)=>{this.once(o,(i,f)=>{if(i){let{message:c,...S}=i;s(Object.assign(new Error(c),S))}else n(f)}),this.sendMessage(m.request,r,...e)})}static makeDefib(){return O(()=>this.terminate(),65e3)}static makeHeartbeatInterval(){return setInterval(()=>{this[h]=Date.now(),this.send("")},5e3)}};var j=class t extends D{constructor(e){let{ssl:r,port:o,server:n=N(t.makeProps(e)),...s}=e;super({WebSocket:l,...s,server:n}),this.server=n,e.server?new Promise(i=>void(n.listening?i():n.on("listening",i))).then(()=>T(this)):this.server.listen(typeof o=="string"?Number.parseInt(o):o??(this.isS?443:80),()=>T(this)),this.on("connection",this.#o),this.on(`client-message:${m.request}`,this.#r),this.on("error",i=>console.error(`${this.icon}\u2757\uFE0F WS Server:`,i)),this.on("close",()=>console.error(`${this.icon}\u2757\uFE0F WS Server closed`))}on(e,r){return super.on(e,r)}isWebSocketServer=!0;isWebSocketServerClient=!1;isWebSocket=!1;icon="\u{1F50C}";name="WS";get protocol(){return`ws${this.isS?"s":""}`}server;get isS(){return"setSecureContext"in this.server}#e=new Map;addRequestListener(e,r){return this.#e.set(e,r),this}onRequest=this.addRequestListener;removeRequestListener(e){return this.#e.delete(e),this}offRequest=this.removeRequestListener;#r=async(e,r,o,...n)=>{let s=this.#e.get(o),i,f=null;if(s)try{i=await s.call(this,e,...n)}catch(c){if(process.env.NODE_ENV==="development"&&R(c),c instanceof Error){let{message:S,...b}=c;f={message:S,...b}}process.env.NODE_ENV==="development"&&console.error(`${this.icon}\u2757\uFE0F WS Server request "${o}" (${r}):`,c)}else f={message:`Unknown request kind "${o}"`};e.sendMessage(`${m.response}-${r}`,f,i)};#o(e,r){if(!(e instanceof l)){Object.defineProperties(e,{isConnecting:{get:Object.getOwnPropertyDescriptor(l.prototype,"isConnecting").get},isOpen:{get:Object.getOwnPropertyDescriptor(l.prototype,"isOpen").get},isClosing:{get:Object.getOwnPropertyDescriptor(l.prototype,"isClosing").get},isClosed:{get:Object.getOwnPropertyDescriptor(l.prototype,"isClosed").get}});let{terminate:o}=e;Object.assign(e,{isWebSocketServerClient:!0,isWebSocketServer:!1,isWebSocket:!1,[d]:l.makeDefib.call(e),latency:0,[y]:l.makeHeartbeatInterval.call(e),sendMessage:l.prototype.sendMessage,sendRequest:l.prototype.sendRequest,terminate(){try{o.call(e)}catch(n){console.error(n)}}})}Object.assign(e,{wss:this,userAgent:r.headers["user-agent"]??"",remoteAddress:A(r)}),e[d](),e.on("message",o=>this.#n(e,o)),e.on("error",o=>this.#t(e,o)),e.on("close",(...o)=>this.#s(e,...o)),this.emit("client-connect",e,r),process.env.NODE_ENV==="development"&&console.info(`${this.icon} WS Server:`,"user"in e?`\x1B[1m${e.user.email}\x1B[0m`:"\x1B[3manonymous\x1B[0m","connected")}#n(e,r){let o=r.toString();if(e[d](),o)try{let[n,...s]=JSON.parse(o);e.emit(`message:${n}`,...s),this.emit("client-message",e,n,...s),this.emit(`client-message:${n}`,e,...s)}catch(n){this.#t(e,n)}else e[h]&&(e.latency=Date.now()-e[h],delete e[h])}#t(e,r){r instanceof Event&&(r=void 0),console.error(`${this.icon}\u2757\uFE0F WS Server client`,"user"in e?`\x1B[1m${e.user.email}\x1B[0m:`:"\x1B[3manonymous\x1B[0m:",r),this.emit("client-error",e,r)}#s(e,r,o){if(process.env.NODE_ENV==="development"){let n=o.toString();console.info(`${this.icon} WS Server:`,"user"in e?`\x1B[1m${e.user.email}\x1B[0m`:"\x1B[3manonymous\x1B[0m",`disconnected ${r?`with code ${r}`:""} ${r&&n?"and ":""}${n?`reason "${n}"`:""}`)}e[d].clear(),clearInterval(e[y]),this.emit("client-close",e),this.emit("client-closed",e)}static makeProps({ssl:e}){return{...L(e)}}};export{j as WSServer,l as WSServerClient};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "insite-ws",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"description": "inSite WebSockets",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./server": "./dist/server/index.js",
|
|
8
8
|
"./client": "./dist/client/index.js"
|
|
9
9
|
},
|
|
10
|
-
"packageManager": "bun@1.2.
|
|
10
|
+
"packageManager": "bun@1.2.9",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
13
13
|
"build": "bun .conveyer.js",
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
"author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@nesvet/n": "^1.1.
|
|
28
|
+
"@nesvet/n": "^1.1.29",
|
|
29
29
|
"eventemitter3": "^5.0.1",
|
|
30
|
-
"insite-common": "^2.2.
|
|
30
|
+
"insite-common": "^2.2.3",
|
|
31
31
|
"ws": "^8.18.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@nesvet/conveyer": "^2.5.1",
|
|
35
|
-
"@nesvet/eslint-config": "^2.0.
|
|
36
|
-
"@types/node": "^22.
|
|
37
|
-
"@types/ws": "^8.18.
|
|
38
|
-
"typescript": "^5.8.
|
|
35
|
+
"@nesvet/eslint-config": "^2.0.52",
|
|
36
|
+
"@types/node": "^22.14.1",
|
|
37
|
+
"@types/ws": "^8.18.1",
|
|
38
|
+
"typescript": "^5.8.3"
|
|
39
39
|
}
|
|
40
40
|
}
|