insite-ws 2.2.3 → 2.3.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.
- package/dist/client/WS.d.ts +40 -25
- package/dist/client/WS.d.ts.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +4 -4
- package/dist/client/node/global.d.ts +5 -0
- package/dist/client/node/global.d.ts.map +1 -0
- package/dist/client/node/index.d.ts +3 -0
- package/dist/client/node/index.d.ts.map +1 -0
- package/dist/client/node/index.js +2 -0
- package/dist/client/node/index.js.map +7 -0
- package/dist/client/types.d.ts +19 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/common.d.ts +18 -5
- package/dist/common.d.ts.map +1 -1
- package/dist/server/WSServer.d.ts +17 -8
- package/dist/server/WSServer.d.ts.map +1 -1
- package/dist/server/WSServerClient.d.ts +22 -16
- package/dist/server/WSServerClient.d.ts.map +1 -1
- package/dist/server/common.d.ts +2 -0
- package/dist/server/common.d.ts.map +1 -0
- package/dist/server/index.js +4 -4
- package/dist/server/index.js.map +4 -4
- package/dist/server/symbols.d.ts +5 -1
- package/dist/server/symbols.d.ts.map +1 -1
- package/dist/server/types.d.ts +2 -1
- package/dist/server/types.d.ts.map +1 -1
- package/package.json +39 -38
package/dist/client/WS.d.ts
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import EventEmitter from "eventemitter3";
|
|
2
|
-
|
|
3
|
-
var __insite: {
|
|
4
|
-
wss_url?: string;
|
|
5
|
-
} | undefined;
|
|
6
|
-
}
|
|
7
|
-
export type Options = {
|
|
8
|
-
url?: URL | string;
|
|
9
|
-
name?: string;
|
|
10
|
-
protocols?: string[];
|
|
11
|
-
immediately?: boolean;
|
|
12
|
-
reconnectAfter?: number | null;
|
|
13
|
-
on?: Record<string, (...args: any[]) => void>;
|
|
14
|
-
quiet?: boolean;
|
|
15
|
-
};
|
|
16
|
-
type RequestListener = (...args: any[]) => Promise<any> | any;
|
|
2
|
+
import type { ConnectionQuality, Options, RequestListener } from "./types";
|
|
17
3
|
export declare class WS extends EventEmitter {
|
|
18
4
|
#private;
|
|
19
5
|
constructor(options?: Options);
|
|
6
|
+
on(event: "connecting" | "destroy" | "open" | "responsive" | "unresponsive", callback: (this: this) => void): this;
|
|
7
|
+
on<T extends unknown[]>(event: "message", callback: (this: this, kind: string, ...rest: T) => void): this;
|
|
8
|
+
on<T extends unknown[]>(event: `message:${string}`, callback: (this: this, ...rest: T) => void): this;
|
|
9
|
+
on(event: "connection-quality-change", callback: (this: this, connectionQuality: ConnectionQuality, prevConnectionQuality: ConnectionQuality) => void): this;
|
|
10
|
+
on(event: "close", callback: (this: this, closeEvent: CloseEvent) => void): this;
|
|
11
|
+
on(event: "server-change", callback: (this: this, url: string, prevURL: string) => void): this;
|
|
12
|
+
on(event: "error", callback: (this: this, error: Error) => void): this;
|
|
13
|
+
on<T extends string | symbol>(event: T, fn: (...args: any[]) => void): this;
|
|
20
14
|
readonly isWebSocket = true;
|
|
21
15
|
readonly isWebSocketServer = false;
|
|
22
16
|
readonly isWebSocketServerClient = false;
|
|
@@ -25,24 +19,45 @@ export declare class WS extends EventEmitter {
|
|
|
25
19
|
protocols?: string[] | undefined;
|
|
26
20
|
reconnectAfter: number | null;
|
|
27
21
|
isUsed: boolean;
|
|
28
|
-
|
|
29
|
-
send?(data: ArrayBufferLike | ArrayBufferView | Blob | string): void;
|
|
22
|
+
connectionQuality: ConnectionQuality;
|
|
30
23
|
webSocket: WebSocket | null;
|
|
31
|
-
get
|
|
32
|
-
get
|
|
33
|
-
get
|
|
24
|
+
get state(): "connecting" | "open" | "unresponsive" | "closed" | "closing";
|
|
25
|
+
get isConnecting(): boolean;
|
|
26
|
+
get isOpen(): boolean;
|
|
27
|
+
get isClosing(): boolean;
|
|
34
28
|
get isClosed(): boolean;
|
|
29
|
+
isDestroyed: boolean;
|
|
35
30
|
open(options?: Pick<Options, "protocols" | "url">): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Alias for `open()`
|
|
33
|
+
*/
|
|
36
34
|
connect: (options?: Pick<Options, "protocols" | "url">) => Promise<void>;
|
|
37
|
-
close(code?: number, reason?: string):
|
|
38
|
-
|
|
35
|
+
close(code?: number, reason?: string, wasClean?: boolean): void;
|
|
36
|
+
/**
|
|
37
|
+
* Alias for `close()`
|
|
38
|
+
*/
|
|
39
|
+
disconnect: (code?: number, reason?: string, wasClean?: boolean) => void;
|
|
40
|
+
send(data: ArrayBufferLike | ArrayBufferView | Blob | string): void;
|
|
39
41
|
sendMessage(...args: unknown[]): void;
|
|
40
|
-
sendRequest(...args: unknown[]
|
|
42
|
+
sendRequest<T>(...args: [...unknown[], callback: (error: Error | null, result: T) => void]): this;
|
|
43
|
+
sendRequest<T>(...args: unknown[]): Promise<T>;
|
|
41
44
|
addRequestListener(kind: string, listener: RequestListener): this;
|
|
45
|
+
/**
|
|
46
|
+
* Alias for `addRequestListener()`
|
|
47
|
+
*/
|
|
42
48
|
onRequest: (kind: string, listener: RequestListener) => this;
|
|
43
49
|
removeRequestListener(kind: string): this;
|
|
50
|
+
/**
|
|
51
|
+
* Alias for `removeRequestListener()`
|
|
52
|
+
*/
|
|
44
53
|
offRequest: (kind: string) => this;
|
|
45
|
-
|
|
54
|
+
destroy(): void;
|
|
55
|
+
static CONNECTION_QUALITY: {
|
|
56
|
+
readonly CLOSED: 0;
|
|
57
|
+
readonly RECONNECTING: 1;
|
|
58
|
+
readonly UNRESPONSIVE: 2;
|
|
59
|
+
readonly CHECKING_RESPONSIVENESS: 3;
|
|
60
|
+
readonly OPEN: 4;
|
|
61
|
+
};
|
|
46
62
|
}
|
|
47
|
-
export {};
|
|
48
63
|
//# sourceMappingURL=WS.d.ts.map
|
package/dist/client/WS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WS.d.ts","sourceRoot":"","sources":["../../src/client/WS.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"WS.d.ts","sourceRoot":"","sources":["../../src/client/WS.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,cAAc,MAAM,CAAC"}
|
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,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};
|
|
1
|
+
var ae=Object.defineProperty;var ne=o=>{throw TypeError(o)};var he=(o,i,e)=>i in o?ae(o,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[i]=e;var c=(o,i,e)=>he(o,typeof i!="symbol"?i+"":i,e),z=(o,i,e)=>i.has(o)||ne("Cannot "+e);var n=(o,i,e)=>(z(o,i,"read from private field"),e?e.call(o):i.get(o)),f=(o,i,e)=>i.has(o)?ne("Cannot add the same private member more than once"):i instanceof WeakSet?i.add(o):i.set(o,e),l=(o,i,e,t)=>(z(o,i,"write to private field"),t?t.call(o,e):i.set(o,e),e),g=(o,i,e)=>(z(o,i,"access private method"),e);var oe=(o,i,e,t)=>({set _(r){l(o,i,r,e)},get _(){return n(o,i,t)}});import xe from"eventemitter3";function E(){}var q=new WeakMap,k=class o extends Promise{constructor(e,t){let r,a;super((s,u)=>{r=s,a=u});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=q.get(this);t&&(t.resolve.call(this,e),q.delete(this))}});c(this,"reject",e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=q.get(this);t&&(t.reject.call(this,e),q.delete(this))}});if(q.set(this,{resolve:r,reject:a}),t?.signal)if(t.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let s=()=>this.reject(new DOMException("Aborted","AbortError"));t.signal.addEventListener("abort",s),this.finally(()=>t.signal?.removeEventListener("abort",s))}if(typeof t?.timeout=="number"&&Number.isFinite(t.timeout)){let s=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),t.timeout);this.finally(()=>clearTimeout(s))}e?.(this.resolve,this.reject)}static resolved(e){return new o(t=>t(e))}static rejected(e){return new o((t,r)=>r(e))}};function pe(o,i=0,e={}){let{leading:t=!1,trailing:r=!0}=e,{maxWait:a=1/0}=e,s,u,h,b,w,p,R,Y,te=async()=>{let v=Date.now();v>=h?(s=void 0,h=void 0,clearTimeout(u),u=void 0,typeof R=="function"&&await R(),S.resolve(Y),p=t):(clearTimeout(s),s=setTimeout(te,h-v))},X=Number.isFinite(a)?()=>{R===I&&(R=!1),I(),u=setTimeout(X,a)}:null;async function I(){try{return Y=await o.apply(b,w),Y}catch(v){throw S.reject(v),v}}t&&typeof t=="boolean"&&(t=I),p=t,r&&typeof r=="boolean"&&(r=I),R=r;let S=Object.assign(function(...v){return w=v,b=this,h=Date.now()+i,R=r,S.promise.isPending||(S.promise=new k((ue,fe)=>{S.resolve=ue,S.reject=fe,typeof p=="function"&&(p(),p=!1,R===I&&(R=!1)),s||(s=setTimeout(te,i),X&&(u=setTimeout(X,a)))})),S.promise},{callback:o,promise:k.resolved(void 0),resolve:E,reject:E,run:I,clear:async v=>{clearTimeout(s),s=void 0,clearTimeout(u),u=void 0,S.resolve(v?await I():Y)}});return S}pe.noop=Object.assign(()=>{},{callback:E,promise:k.resolved(void 0),resolve:E,reject:E,run:E,clear:E});function re(o,i,e,t,r=!0){return Array.isArray(o)&&(o=o.length),typeof t!="string"&&(r=t??!0,t=e),(r?`${o}\xA0`:"")+re.raw(o,i,e,t)}re.raw=(o,i,e,t=e)=>{o=Math.abs(o);let r=o%10,a=o%100;return r===1&&a!==11?i:r>=2&&r<=4&&!(a>=12&&a<=15)?e:t};var ie=Number.MAX_SAFE_INTEGER/2,x={NORMAL:1e3,PROTOCOL_ERROR:1002,ABNORMAL:1006,NO_HEARTBEAT:3e3,OFFLINE:3001,MANUAL:3500,REOPEN:4e3},se=[x.PROTOCOL_ERROR,x.MANUAL,x.REOPEN],_={REQUEST:"~r-q",RESPONSE:"~r-s"};var ge=0,P,M,d,j,A,Z,T,C,O,y,m,U,F,G,Q,$,ee,B,V,L,J,D,W,K,H,N=class N extends xe{constructor(e={}){super();f(this,d);c(this,"isWebSocket",!0);c(this,"isWebSocketServer",!1);c(this,"isWebSocketServerClient",!1);c(this,"url");c(this,"name");c(this,"protocols");c(this,"reconnectAfter");f(this,P);f(this,M);c(this,"isUsed",!1);c(this,"connectionQuality",0);c(this,"webSocket",null);f(this,A);f(this,T);f(this,C,!1);f(this,O);f(this,y,!1);c(this,"isDestroyed",!1);f(this,m);f(this,U,!1);f(this,F,()=>{l(this,U,!0),n(this,m).resolve(),g(this,d,Z).call(this),this.emit("open")});f(this,G,({data:e})=>{if(g(this,d,Z).call(this),e){if(e!=="!")try{let[t,...r]=JSON.parse(e);switch(t){case _.REQUEST:n(this,K).call(this,...r);break;default:this.emit("message",t,...r),this.emit(`message:${t}`,...r)}}catch(t){n(this,Q).call(this,t)}}else this.webSocket.send("")});f(this,Q,e=>{e instanceof Event&&(e=void 0),n(this,m)?.isPending&&n(this,m).reject(e),this.emit("error",e)});f(this,$);f(this,B,e=>{let{code:t,reason:r,wasClean:a}=e;if(n(this,A)&&(clearTimeout(n(this,A)),l(this,A,void 0)),n(this,T)&&(clearTimeout(n(this,T)),l(this,T,void 0)),l(this,C,!1),n(this,O)&&(clearTimeout(n(this,O)),l(this,O,void 0)),l(this,y,!1),n(this,m)?.isPending&&n(this,m).reject(new Error("Closed")),process.env.NODE_ENV==="development"&&!n(this,P)){let u=`\u{1F50C} WS ${this.name} is closed`;switch(t&&(u+=` with code ${t}`),t&&r&&(u+=" and"),r&&(u+=` reason "${r}"`),r){case"no-heartbeat":u+=". Going offline"}!a||t===x.ABNORMAL?(u+=" [UNEXPECTED]",console.warn(u)):console.info(u)}let s=this.webSocket;s.removeEventListener("open",n(this,F)),s.removeEventListener("message",n(this,G)),s.removeEventListener("error",n(this,Q)),n(this,U)&&(this.emit("close",e),l(this,U,!1)),this.webSocket=null,g(this,d,ee).call(this,t),"navigator"in globalThis&&globalThis.removeEventListener("offline",n(this,H))});f(this,V,()=>n(this,m)?.isPending&&n(this,m).reject(new DOMException("Operation aborted","AbortError")));c(this,"connect",this.open);c(this,"disconnect",this.close);f(this,L,[]);f(this,J,()=>{for(let e of n(this,L))this.webSocket.send(e);n(this,L).length=0});f(this,D,0);f(this,W,new Map);c(this,"onRequest",this.addRequestListener);c(this,"offRequest",this.removeRequestListener);f(this,K,async(e,t,...r)=>{let a=n(this,W).get(t),s,u=null;if(a)try{s=await a.apply(this,r)}catch(h){if(h instanceof Error){let{message:b,...w}=h;u={message:b,...w}}}else u={message:`Unknown request kind "${t}"`};this.sendMessage(`${_.RESPONSE}-${e}`,u,s)});f(this,H,()=>{this.isOpen&&!n(this,C)&&(l(this,C,!0),g(this,d,j).call(this,N.CONNECTION_QUALITY.CHECKING_RESPONSIVENESS),l(this,T,setTimeout(()=>{l(this,C,!1),l(this,y,!0),g(this,d,j).call(this,N.CONNECTION_QUALITY.UNRESPONSIVE),this.emit("unresponsive"),l(this,O,setTimeout(()=>{l(this,y,!1),this.close(x.OFFLINE,"offline",!1)},4e3))},1e3)),this.webSocket.send("?"))});let{url:t=globalThis.__insite?.wss_url||"/",name:r=(ge++).toString(),protocols:a,immediately:s=!0,reconnectAfter:u=2e3,on:h,quiet:b=!1,signal:w}=e;if(this.url=t,this.name=r,this.protocols=a,this.reconnectAfter=u,h)for(let p in h)h[p]&&this.on(p,h[p]);l(this,P,b),l(this,M,w),n(this,M)?.addEventListener("abort",n(this,V),{once:!0}),this.url&&s&&this.open().catch(E),n(this,P)||this.on("error",p=>p&&console.error("\u{1F50C}\u2757\uFE0F WS",`${this.name}:`,p))}on(e,t){return super.on(e,t)}get state(){if(!this.webSocket)return"closed";switch(this.webSocket.readyState){case WebSocket.CONNECTING:return"connecting";case WebSocket.OPEN:return n(this,y)?"unresponsive":"open";case WebSocket.CLOSING:return"closing"}return"closed"}get isConnecting(){return this.webSocket?.readyState===WebSocket.CONNECTING}get isOpen(){return this.webSocket?.readyState===WebSocket.OPEN}get isClosing(){return this.webSocket?.readyState===WebSocket.CLOSING}get isClosed(){return!this.webSocket}async open(e={}){if(this.isDestroyed)throw new Error("WS has been destroyed");if(n(this,M)?.aborted)throw new DOMException("Operation aborted","AbortError");if(n(this,m)?.isPending)return n(this,m);this.isUsed?this.close(x.REOPEN,"reopen"):this.isUsed=!0;let t;return e.url&&this.url!==e.url&&(t=this.url,this.url=e.url),e.protocols&&(this.protocols=e.protocols),l(this,m,new k((r,a)=>{if(this.url){let s=new WebSocket(this.url,this.protocols);s.addEventListener("open",n(this,F),{once:!0}),s.addEventListener("message",n(this,G)),s.addEventListener("error",n(this,Q)),s.addEventListener("close",n(this,B),{once:!0}),this.webSocket=s,t&&this.emit("server-change",this.url,t),this.emit("connecting"),"navigator"in globalThis&&globalThis.addEventListener("offline",n(this,H))}else this.webSocket=null,a(new Error("url prop is not set"))})),n(this,m)}close(e=x.MANUAL,t="manual",r=!0){this.isClosed?g(this,d,ee).call(this,e):(this.webSocket.removeEventListener("close",n(this,B)),this.webSocket.close(e,t),n(this,B).call(this,Object.assign(new Event("close"),{code:e,reason:t,wasClean:r})))}send(e){this.isOpen?this.webSocket.send(e):(n(this,L).length||this.once("open",n(this,J)),n(this,L).push(e))}sendMessage(...e){return this.send(JSON.stringify(e))}sendRequest(...e){let t=oe(this,D)._++;n(this,D)>=ie&&l(this,D,0);let r=`message:${_.RESPONSE}-${t}`,a=e.at(-1);return typeof a=="function"?(this.once(r,a),this.sendMessage(_.REQUEST,t,...e.slice(0,-1)),this):new Promise((s,u)=>{this.once(r,(h,b)=>{if(h){let{message:w,...p}=h;u(Object.assign(new Error(w),p))}else s(b)}),this.sendMessage(_.REQUEST,t,...e)})}addRequestListener(e,t){return n(this,W).set(e,t),this}removeRequestListener(e){return n(this,W).delete(e),this}destroy(){this.isDestroyed=!0,n(this,L).length=0,this.close(x.NORMAL,"destroy"),this.removeAllListeners(),n(this,M)?.removeEventListener("abort",n(this,V)),this.emit("destroy")}};P=new WeakMap,M=new WeakMap,d=new WeakSet,j=function(e){if(e!==this.connectionQuality){let t=this.connectionQuality;this.connectionQuality=e,this.emit("connection-quality-change",this.connectionQuality,t)}},A=new WeakMap,Z=function(){clearTimeout(n(this,A)),l(this,A,setTimeout(()=>this.close(x.NO_HEARTBEAT,"no-heartbeat",!1),35e3)),n(this,T)&&(clearTimeout(n(this,T)),l(this,T,void 0)),l(this,C,!1),n(this,O)&&(clearTimeout(n(this,O)),l(this,O,void 0)),n(this,y)&&(l(this,y,!1),this.emit("responsive")),g(this,d,j).call(this,N.CONNECTION_QUALITY.OPEN)},T=new WeakMap,C=new WeakMap,O=new WeakMap,y=new WeakMap,m=new WeakMap,U=new WeakMap,F=new WeakMap,G=new WeakMap,Q=new WeakMap,$=new WeakMap,ee=function(e){n(this,$)&&clearTimeout(n(this,$)),this.reconnectAfter&&!se.includes(e)?(process.env.NODE_ENV==="development"&&!n(this,P)&&console.info(`\u{1F50C} WS ${this.name} will try to reconnect in ${Math.round(this.reconnectAfter/1e3)} seconds`),l(this,$,setTimeout(()=>this.open().catch(E),this.reconnectAfter)),g(this,d,j).call(this,N.CONNECTION_QUALITY.RECONNECTING)):(l(this,$,void 0),g(this,d,j).call(this,e===x.REOPEN?N.CONNECTION_QUALITY.RECONNECTING:N.CONNECTION_QUALITY.CLOSED))},B=new WeakMap,V=new WeakMap,L=new WeakMap,J=new WeakMap,D=new WeakMap,W=new WeakMap,K=new WeakMap,H=new WeakMap,c(N,"CONNECTION_QUALITY",{CLOSED:0,RECONNECTING:1,UNRESPONSIVE:2,CHECKING_RESPONSIVENESS:3,OPEN:4});var le=N;export{le as WS};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/client/WS.ts", "../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../@nesvet/npm/n/src/
|
|
4
|
-
"sourcesContent": ["import EventEmitter from \"eventemitter3\";\nimport {\n\tdebounce,\n\tnoop,\n\tStatefulPromise,\n\tuid\n} from \"@nesvet/n\";\nimport { heartbeatGap, heartbeatInterval, requestHeaders } from \"../common\";\n\n\ndeclare global {\n\tvar __insite: { // eslint-disable-line no-var\n\t\twss_url?: string;\n\t} | undefined;\n}\n\nlet i = 0;\n\nexport type Options = {\n\turl?: URL | string;\n\tname?: string;\n\tprotocols?: string[];\n\timmediately?: boolean;\n\treconnectAfter?: number | null;\n\ton?: Record<string, (...args: any[]) => void>;// eslint-disable-line @typescript-eslint/no-explicit-any\n\tquiet?: boolean;\n};\n\ntype RequestListener = (...args: any[]) => Promise<any> | any;// eslint-disable-line @typescript-eslint/no-explicit-any\n\n\nexport class WS extends EventEmitter {\n\tconstructor(options: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tconst {\n\t\t\turl = globalThis.__insite?.wss_url ?? \"/\",\n\t\t\tname = (i++).toString(),\n\t\t\tprotocols,\n\t\t\timmediately = true,\n\t\t\treconnectAfter = 2000,\n\t\t\ton,\n\t\t\tquiet = false\n\t\t} = options;\n\t\t\n\t\tthis.url = url;\n\t\tthis.name = name;\n\t\t\n\t\tthis.protocols = protocols;\n\t\t\n\t\tthis.reconnectAfter = reconnectAfter;\n\t\t\n\t\tthis.on(`message:${requestHeaders.request}`, this.#handleRequest);\n\t\t\n\t\tif (on)\n\t\t\tfor (const eventName in on)\n\t\t\t\tif (on[eventName])\n\t\t\t\t\tthis.on(eventName, on[eventName]);\n\t\t\n\t\tthis.#isQuiet = quiet;\n\t\t\n\t\tif (this.url && immediately)\n\t\t\tthis.open().catch(noop);\n\t\t\n\t\tthis.on(\"error\", (error: Error) => error && console.error(\"\uD83D\uDD0C\u2757\uFE0F WS\", `${this.name}:`, error));\n\t\t\n\t}\n\t\n\treadonly isWebSocket = true;\n\treadonly isWebSocketServer = false;\n\treadonly isWebSocketServerClient = false;\n\t\n\turl;\n\t\n\treadonly name;\n\t\n\tprotocols?;\n\t\n\treconnectAfter;\n\t\n\t#isQuiet;\n\t\n\tisUsed = false;\n\tisAutoReconnecting = false;\n\t\n\tsend?(data: ArrayBufferLike | ArrayBufferView | Blob | string): void;\n\t\n\twebSocket: WebSocket | null = null;\n\t\n\t#defib = debounce(WS.defib, heartbeatInterval + heartbeatGap);\n\t\n\tget isConnecting() {\n\t\treturn this.webSocket ? this.webSocket.readyState === WebSocket.CONNECTING : null;\n\t}\n\t\n\tget isOpen() {\n\t\treturn this.webSocket ? this.webSocket.readyState === WebSocket.OPEN : null;\n\t}\n\t\n\tget isClosing() {\n\t\treturn this.webSocket ? this.webSocket.readyState === WebSocket.CLOSING : null;\n\t}\n\t\n\tget isClosed() {\n\t\treturn !this.webSocket || this.webSocket.readyState === WebSocket.CLOSED;\n\t}\n\t\n\t#openPromise?: StatefulPromise<void>;\n\t\n\t#handleWebSocketOpen = () => {\n\t\t\n\t\tthis.#openPromise!.resolve();\n\t\t\n\t\tthis.emit(\"open\");\n\t\t\n\t\tthis.#defib();\n\t\t\n\t};\n\t\n\t#handleWebSocketMessage = ({ data: message }: MessageEvent) => {\n\t\t\n\t\tthis.#defib();\n\t\t\n\t\tif (message)\n\t\t\ttry {\n\t\t\t\tconst [ kind, ...rest ] = JSON.parse(message);\n\t\t\t\t\n\t\t\t\tthis.emit(\"message\", kind, ...rest);\n\t\t\t\tthis.emit(`message:${kind}`, ...rest);\n\t\t\t} catch (error) {\n\t\t\t\tthis.#handleWebSocketError(error as Error);\n\t\t\t}\n\t\telse\n\t\t\tthis.webSocket!.send(\"\");\n\t\t\n\t};\n\t\n\t#handleWebSocketError = (error: Error | Event | undefined) => {\n\t\tif (error instanceof Event)\n\t\t\terror = undefined;\n\t\t\n\t\tif (this.#openPromise!.isPending)\n\t\t\tthis.#openPromise!.reject(error);\n\t\t\n\t\tthis.emit(\"error\", error);\n\t\t\n\t};\n\t\n\t#reconnectTimeout?: number;\n\t\n\t#handleWebSocketClose = (event: CloseEvent) => {\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet)\n\t\t\tconsole.info(`\uD83D\uDD0C WS ${this.name} is closed ${event.code ? `with code ${event.code}` : \"\"} ${event.code && event.reason ? \"and \" : \"\"}${event.reason ? `reason \"${event.reason}\"` : \"\"}`);\n\t\t\n\t\tthis.#defib.clear();\n\t\t\n\t\tconst webSocket = this.webSocket!;\n\t\t\n\t\twebSocket.removeEventListener(\"open\", this.#handleWebSocketOpen);\n\t\twebSocket.removeEventListener(\"message\", this.#handleWebSocketMessage);\n\t\twebSocket.removeEventListener(\"error\", this.#handleWebSocketError);\n\t\twebSocket.removeEventListener(\"close\", this.#handleWebSocketClose);\n\t\t\n\t\tdelete this.send;\n\t\t\n\t\tthis.emit(\"close\", event);\n\t\t\n\t\tthis.webSocket = null;\n\t\t\n\t\tif (this.reconnectAfter && ![ 1002, 3500, 4000 ].includes(event.code)) {\n\t\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet)\n\t\t\t\tconsole.info(`\uD83D\uDD0C WS ${this.name} will try to reconnect in 2 seconds`);\n\t\t\t\n\t\t\tthis.#reconnectTimeout = setTimeout(() => this.open().catch(noop), this.reconnectAfter) as unknown as number;\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tasync open(options: Pick<Options, \"protocols\" | \"url\"> = {}): Promise<void> {\n\t\t\n\t\tclearTimeout(this.#reconnectTimeout);\n\t\t\n\t\tthis.isUsed = true;\n\t\tthis.isAutoReconnecting = !!this.reconnectAfter;\n\t\t\n\t\tawait this.close(4000, \"reopen\");\n\t\t\n\t\tlet prevURL: URL | string | undefined;\n\t\tif (options.url && this.url !== options.url) {\n\t\t\tprevURL = this.url;\n\t\t\tthis.url = options.url;\n\t\t}\n\t\t\n\t\tif (options.protocols)\n\t\t\tthis.protocols = options.protocols;\n\t\t\n\t\tthis.#openPromise = new StatefulPromise((resolve, reject) => {\n\t\t\t\n\t\t\tif (this.url) {\n\t\t\t\tconst webSocket = new WebSocket(this.url, this.protocols);\n\t\t\t\t\n\t\t\t\twebSocket.addEventListener(\"open\", this.#handleWebSocketOpen);\n\t\t\t\twebSocket.addEventListener(\"message\", this.#handleWebSocketMessage);\n\t\t\t\twebSocket.addEventListener(\"error\", this.#handleWebSocketError);\n\t\t\t\twebSocket.addEventListener(\"close\", this.#handleWebSocketClose, { once: true });\n\t\t\t\t\n\t\t\t\tthis.send = webSocket.send.bind(webSocket);\n\t\t\t\t\n\t\t\t\tthis.webSocket = webSocket;\n\t\t\t\t\n\t\t\t\tif (prevURL)\n\t\t\t\t\tthis.emit(\"server-change\", this.url, prevURL);\n\t\t\t\t\n\t\t\t\tthis.emit(\"connecting\");\n\t\t\t} else {\n\t\t\t\tthis.webSocket = null;\n\t\t\t\tdelete this.send;\n\t\t\t\treject(new Error(\"url prop is not set\"));\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\treturn this.#openPromise;\n\t}\n\t\n\tconnect = this.open;\n\t\n\tclose(code = 3500, reason = \"manual\") {\n\t\t\n\t\tclearTimeout(this.#reconnectTimeout);\n\t\t\n\t\tif (reason === \"manual\")\n\t\t\tthis.isAutoReconnecting = false;\n\t\t\n\t\treturn new Promise<void>(resolve => {\n\t\t\t\n\t\t\tif (this.isConnecting || this.isOpen) {\n\t\t\t\tthis.webSocket!.addEventListener(\"close\", () => resolve(), { once: true });\n\t\t\t\tthis.webSocket!.close(code, reason);\n\t\t\t} else\n\t\t\t\tresolve();\n\t\t\t\n\t\t});\n\t}\n\t\n\tdisconnect = this.close;\n\t\n\t#queue: string[] = [];\n\t\n\t#releaseQueue = () => {\n\t\t\n\t\tfor (const message of this.#queue)\n\t\t\tthis.webSocket!.send(message);\n\t\t\n\t\tthis.#queue.length = 0;\n\t\t\n\t};\n\t\n\tsendMessage(...args: unknown[]) {\n\t\tconst message = JSON.stringify(args);\n\t\t\n\t\tif (this.isOpen)\n\t\t\tthis.webSocket!.send(message);\n\t\telse {\n\t\t\tif (!this.#queue.length)\n\t\t\t\tthis.once(\"open\", this.#releaseQueue);\n\t\t\t\n\t\t\tthis.#queue.push(message);\n\t\t}\n\t\t\n\t}\n\t\n\tsendRequest(...args: unknown[]) {\n\t\t\n\t\tconst id = uid();\n\t\tconst eventName = `message:${requestHeaders.response}-${id}`;\n\t\t\n\t\tif (typeof args.at(-1) == \"function\") {\n\t\t\tthis.once(eventName, args.splice(-1, 1)[0] as () => void);\n\t\t\tthis.sendMessage(requestHeaders.request, id, ...args);\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tthis.once(eventName, (error, result) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\treject(Object.assign(new Error(message), restProps));\n\t\t\t\t} else\n\t\t\t\t\tresolve(result);\n\t\t\t\t\n\t\t\t});\n\t\t\tthis.sendMessage(requestHeaders.request, id, ...args);\n\t\t\t\n\t\t});\n\t}\n\t\n\t#requestListeners = new Map<string, RequestListener>();\n\t\n\taddRequestListener(kind: string, listener: RequestListener) {\n\t\tthis.#requestListeners.set(kind, listener);\n\t\t\n\t\treturn this;\n\t}\n\t\n\tonRequest = this.addRequestListener;\n\t\n\tremoveRequestListener(kind: string) {\n\t\tthis.#requestListeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toffRequest = this.removeRequestListener;\n\t\n\t#handleRequest = async (id: string, kind: string, ...rest: unknown[]) => {\n\t\tconst listener = this.#requestListeners.get(kind);\n\t\t\n\t\tlet result;\n\t\tlet requestError = null;\n\t\t\n\t\tif (listener)\n\t\t\ttry {\n\t\t\t\tresult = await listener.apply(this, rest);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\trequestError = { message, ...restProps };\n\t\t\t\t}\n\t\t\t}\n\t\telse\n\t\t\trequestError = { message: `Unknown request kind \"${kind}\"` };\n\t\t\n\t\tthis.sendMessage(`${requestHeaders.response}-${id}`, requestError, result);\n\t\t\n\t};\n\t\n\t\n\tstatic defib(this: WS) {\n\t\t\n\t\tif (this.isOpen) {\n\t\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet)\n\t\t\t\tconsole.info(`\uD83D\uDD0C WS ${this.name} has no heartbeat, going offline`);\n\t\t\t\n\t\t\tthis.webSocket!.close();\n\t\t}\n\t\t\n\t}\n\t\n}\n", "export function noop() { /**/ }\n", "import { noop } from \"./noop.js\";\n\n\ntype Callback<Result> = (...args: unknown[]) => Result;\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\ntype NumberOrUndefined = number | undefined;\n\ntype DebouncedFunction<Result> = {\n\t(this: unknown, ..._args: unknown[]): Promise<Result>;\n};\n\nexport type Debounced<Result> = {\n\tcallback: Callback<Result>;\n\tpromise: {\n\t\tisResolved: boolean;\n\t} & Promise<unknown>;\n\tresolve: (value: Result) => void;\n\trun(): Promise<Result>;\n\tclear(shouldRun?: boolean): Promise<void>;\n} & DebouncedFunction<Result>;\n\n\nexport function debounce<Result>(callback: Callback<Result>, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: NumberOrUndefined;\n\tlet maxWaitTimeout: NumberOrUndefined;\n\tlet end: NumberOrUndefined;\n\tlet context: unknown;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: Result;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\tdebounced.resolve(result);\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\trun();\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\treturn (result = await callback.apply(context, args));\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<Result> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (debounced.promise.isResolved)\n\t\t\tdebounced.promise = Object.assign(new Promise(resolve => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\tinitial = false;\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}), {\n\t\t\t\tisResolved: false\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<Result>, {\n\t\tcallback,\n\t\tpromise: Object.assign(Promise.resolve(), {\n\t\t\tisResolved: true\n\t\t}),\n\t\tresolve: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\t\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: Object.assign(Promise.resolve(), {\n\t\tisResolved: true\n\t}),\n\tresolve: noop,\n\trun: noop,\n\tclear: noop\n}) as unknown as Debounced<void>;\n\n\nexport function throttle<Result>(callback: Callback<Result>, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Value<T> = PromiseLike<T> | T;\ntype Resolve<T> = (value: Value<T>) => void;\ntype Reject = (reason?: any) => void;\n\nconst nativesMap = new WeakMap<StatefulPromise<any>, { resolve: Resolve<any>; reject: Reject }>();\n\n\nexport class StatefulPromise<T> extends Promise<T> {\n\tconstructor(executor?: (resolve: Resolve<T>, reject: Reject) => void) {\n\t\t\n\t\tlet nativeResolve: Resolve<T>;\n\t\tlet nativeReject: Reject;\n\t\t\n\t\tsuper((resolve, reject) => {\n\t\t\tnativeResolve = resolve;\n\t\t\tnativeReject = reject;\n\t\t\t\n\t\t});\n\t\t\n\t\tnativesMap.set(this, { resolve: nativeResolve!, reject: nativeReject! });\n\t\t\n\t\texecutor?.(this.resolve, this.reject);\n\t\t\n\t}\n\t\n\tisPending = true;\n\tisFulfilled = false;\n\tisRejected = false;\n\t\n\tstate: \"fulfilled\" | \"pending\" | \"rejected\" = \"pending\";\n\t\n\tresult?: any;\n\t\n\tresolve = (value: Value<T>) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isFulfilled = true;\n\t\t\tthis.state = \"fulfilled\";\n\t\t\tthis.result = value;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.resolve.call(this, value);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\treject = (reason?: any) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isRejected = true;\n\t\t\tthis.state = \"rejected\";\n\t\t\tthis.result = reason;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.reject.call(this, reason);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n}\n", "export function uid(prefix: string | undefined = \"\", postfix: string | undefined = \"\") {\n\treturn `${prefix}${Date.now().toString(36)}${Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36)}${postfix}`;\n}\n", "export const heartbeatInterval = 5_000;\nexport const heartbeatGap = 60_000;\n\nexport const requestHeaders = {\n\trequest: \"~r-q\",\n\tresponse: \"~r-s\"\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["EventEmitter", "noop", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "_args", "resolve", "noop", "shouldRun", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "
|
|
3
|
+
"sources": ["../../src/client/WS.ts", "../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../@nesvet/npm/n/src/StatefulPromise.ts", "../../../../../@nesvet/npm/n/src/debounce.ts", "../../../../../@nesvet/npm/n/src/howmuch.ts", "../../src/common.ts"],
|
|
4
|
+
"sourcesContent": ["import EventEmitter from \"eventemitter3\";\nimport { noop, StatefulPromise } from \"@nesvet/n\";\nimport {\n\tCODES,\n\tHEARTBEAT_GAP,\n\tHEARTBEAT_INTERVAL,\n\tNON_RECONNECTABLE_CODES,\n\tOFFLINE_TIMEOUT,\n\tREQUEST_COUNTER_LIMIT,\n\tREQUEST_HEADERS,\n\tRESPONSIVENESS_TIMEOUT\n} from \"../common\";\nimport type { ConnectionQuality, Options, RequestListener } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nlet i = 0;\n\n\nexport class WS extends EventEmitter {\n\tconstructor(options: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tconst {\n\t\t\turl = globalThis.__insite?.wss_url || \"/\",\n\t\t\tname = (i++).toString(),\n\t\t\tprotocols,\n\t\t\timmediately = true,\n\t\t\treconnectAfter = 2000,\n\t\t\ton,\n\t\t\tquiet = false,\n\t\t\tsignal\n\t\t} = options;\n\t\t\n\t\tthis.url = url;\n\t\tthis.name = name;\n\t\t\n\t\tthis.protocols = protocols;\n\t\t\n\t\tthis.reconnectAfter = reconnectAfter;\n\t\t\n\t\tif (on)\n\t\t\tfor (const eventName in on)\n\t\t\t\tif (on[eventName])\n\t\t\t\t\tthis.on(eventName, on[eventName]);\n\t\t\n\t\tthis.#isQuiet = quiet;\n\t\t\n\t\tthis.#abortSignal = signal;\n\t\tthis.#abortSignal?.addEventListener(\"abort\", this.#handleAbortSignalAbort, { once: true });\n\t\t\n\t\tif (this.url && immediately)\n\t\t\tthis.open().catch(noop);\n\t\t\n\t\tif (!this.#isQuiet)\n\t\t\tthis.on(\"error\", (error: Error) => error && console.error(\"\uD83D\uDD0C\u2757\uFE0F WS\", `${this.name}:`, error));\n\t\t\n\t}\n\t\n\ton(event: \"connecting\" | \"destroy\" | \"open\" | \"responsive\" | \"unresponsive\", callback: (this: this) => void): this;\n\ton<T extends unknown[]>(event: \"message\", callback: (this: this, kind: string, ...rest: T) => void): this;\n\ton<T extends unknown[]>(event: `message:${string}`, callback: (this: this, ...rest: T) => void): this;\n\ton(event: \"connection-quality-change\", callback: (this: this, connectionQuality: ConnectionQuality, prevConnectionQuality: ConnectionQuality) => void): this;\n\ton(event: \"close\", callback: (this: this, closeEvent: CloseEvent) => void): this;\n\ton(event: \"server-change\", callback: (this: this, url: string, prevURL: string) => void): this;\n\ton(event: \"error\", callback: (this: this, error: Error) => void): this;\n\t\n\ton<T extends string | symbol>(event: T, fn: (...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener);\n\t}\n\t\n\treadonly isWebSocket = true;\n\treadonly isWebSocketServer = false;\n\treadonly isWebSocketServerClient = false;\n\t\n\turl;\n\t\n\treadonly name;\n\t\n\tprotocols?;\n\t\n\treconnectAfter;\n\t\n\t#isQuiet;\n\t\n\t#abortSignal?: AbortSignal;\n\t\n\tisUsed = false;\n\t\n\tconnectionQuality: ConnectionQuality = 0;\n\t\n\t#updateConnectionQuality(connectionQuality: ConnectionQuality) {\n\t\tif (connectionQuality !== this.connectionQuality) {\n\t\t\tconst prevConnectionQuality = this.connectionQuality;\n\t\t\tthis.connectionQuality = connectionQuality;\n\t\t\t\n\t\t\tthis.emit(\"connection-quality-change\", this.connectionQuality, prevConnectionQuality);\n\t\t}\n\t\t\n\t}\n\t\n\twebSocket: WebSocket | null = null;\n\t\n\t#heartbeatTimeout?: ReturnType<typeof setTimeout>;\n\t\n\t#defib() {\n\t\t\n\t\tclearTimeout(this.#heartbeatTimeout);\n\t\tthis.#heartbeatTimeout = setTimeout(\n\t\t\t() => this.close(CODES.NO_HEARTBEAT, \"no-heartbeat\", false),\n\t\t\tHEARTBEAT_INTERVAL + HEARTBEAT_GAP\n\t\t);\n\t\t\n\t\tif (this.#unresponsiveTimeout) {\n\t\t\tclearTimeout(this.#unresponsiveTimeout);\n\t\t\tthis.#unresponsiveTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isCheckingResponsiveness = false;\n\t\t\n\t\tif (this.#offlineTimeout) {\n\t\t\tclearTimeout(this.#offlineTimeout);\n\t\t\tthis.#offlineTimeout = undefined;\n\t\t}\n\t\t\n\t\tif (this.#isUnresponsive) {\n\t\t\tthis.#isUnresponsive = false;\n\t\t\t\n\t\t\tthis.emit(\"responsive\");\n\t\t}\n\t\t\n\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.OPEN);\n\t\t\n\t}\n\t\n\t#unresponsiveTimeout?: ReturnType<typeof setTimeout>;\n\t#isCheckingResponsiveness = false;\n\t\n\t#offlineTimeout?: ReturnType<typeof setTimeout>;\n\t#isUnresponsive = false;\n\t\n\tget state() {\n\t\t\n\t\tif (!this.webSocket)\n\t\t\treturn \"closed\";\n\t\t\n\t\tswitch (this.webSocket.readyState) {\n\t\t\tcase WebSocket.CONNECTING:\n\t\t\t\treturn \"connecting\";\n\t\t\t\n\t\t\tcase WebSocket.OPEN:\n\t\t\t\treturn this.#isUnresponsive ? \"unresponsive\" : \"open\";\n\t\t\t\n\t\t\tcase WebSocket.CLOSING:\n\t\t\t\treturn \"closing\";\n\t\t}\n\t\t\n\t\treturn \"closed\";\n\t}\n\t\n\tget isConnecting() {\n\t\treturn this.webSocket?.readyState === WebSocket.CONNECTING;\n\t}\n\t\n\tget isOpen() {\n\t\treturn this.webSocket?.readyState === WebSocket.OPEN;\n\t}\n\t\n\tget isClosing() {\n\t\treturn this.webSocket?.readyState === WebSocket.CLOSING;\n\t}\n\t\n\tget isClosed() {\n\t\treturn !this.webSocket;\n\t}\n\t\n\tisDestroyed = false;\n\t\n\t#openPromise?: StatefulPromise<void>;\n\t\n\t#wasOpened = false;\n\t\n\t#handleWebSocketOpen = () => {\n\t\t\n\t\tthis.#wasOpened = true;\n\t\t\n\t\tthis.#openPromise!.resolve();\n\t\t\n\t\tthis.#defib();\n\t\t\n\t\tthis.emit(\"open\");\n\t\t\n\t};\n\t\n\t#handleWebSocketMessage = ({ data: message }: MessageEvent<string>) => {\n\t\t\n\t\tthis.#defib();\n\t\t\n\t\tif (message) {\n\t\t\tif (message !== \"!\")\n\t\t\t\ttry {\n\t\t\t\t\tconst [ kind, ...rest ] = JSON.parse(message);\n\t\t\t\t\t\n\t\t\t\t\tswitch (kind) {\n\t\t\t\t\t\tcase REQUEST_HEADERS.REQUEST:\n\t\t\t\t\t\t\tvoid this.#handleRequest(...rest as [ id: number, kind: string, ...rest: unknown[] ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthis.emit(\"message\", kind, ...rest);\n\t\t\t\t\t\t\tthis.emit(`message:${kind}`, ...rest);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.#handleWebSocketError(error as Error);\n\t\t\t\t}\n\t\t} else\n\t\t\tthis.webSocket!.send(\"\");\n\t\t\n\t};\n\t\n\t#handleWebSocketError = (error: Error | Event | undefined) => {\n\t\tif (error instanceof Event)\n\t\t\terror = undefined;\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\tthis.#openPromise.reject(error as Error);\n\t\t\n\t\tthis.emit(\"error\", error);\n\t\t\n\t};\n\t\n\t#reconnectTimeout?: ReturnType<typeof setTimeout>;\n\t\n\t#decideReconnect(code: number) {\n\t\t\n\t\tif (this.#reconnectTimeout)\n\t\t\tclearTimeout(this.#reconnectTimeout);\n\t\t\n\t\tif (this.reconnectAfter && !NON_RECONNECTABLE_CODES.includes(code as typeof NON_RECONNECTABLE_CODES[number])) {\n\t\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet)\n\t\t\t\tconsole.info(`\uD83D\uDD0C WS ${this.name} will try to reconnect in ${Math.round(this.reconnectAfter / 1000)} seconds`);\n\t\t\t\n\t\t\tthis.#reconnectTimeout = setTimeout(() => this.open().catch(noop), this.reconnectAfter);\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.RECONNECTING);\n\t\t} else {\n\t\t\tthis.#reconnectTimeout = undefined;\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(code === CODES.REOPEN ? WS.CONNECTION_QUALITY.RECONNECTING : WS.CONNECTION_QUALITY.CLOSED);\n\t\t}\n\t\t\n\t}\n\t\n\t#handleWebSocketClose = (event: CloseEvent) => {\n\t\tconst { code, reason, wasClean } = event;\n\t\t\n\t\tif (this.#heartbeatTimeout) {\n\t\t\tclearTimeout(this.#heartbeatTimeout);\n\t\t\tthis.#heartbeatTimeout = undefined;\n\t\t}\n\t\t\n\t\tif (this.#unresponsiveTimeout) {\n\t\t\tclearTimeout(this.#unresponsiveTimeout);\n\t\t\tthis.#unresponsiveTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isCheckingResponsiveness = false;\n\t\t\n\t\tif (this.#offlineTimeout) {\n\t\t\tclearTimeout(this.#offlineTimeout);\n\t\t\tthis.#offlineTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isUnresponsive = false;\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\tthis.#openPromise.reject(new Error(\"Closed\"));\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet) {\n\t\t\tlet message = `\uD83D\uDD0C WS ${this.name} is closed`;\n\t\t\t\n\t\t\tif (code)\n\t\t\t\tmessage += ` with code ${code}`;\n\t\t\t\n\t\t\tif (code && reason)\n\t\t\t\tmessage += \" and\";\n\t\t\t\n\t\t\tif (reason)\n\t\t\t\tmessage += ` reason \"${reason}\"`;\n\t\t\t\n\t\t\tswitch (reason) {\n\t\t\t\tcase \"no-heartbeat\":\n\t\t\t\t\tmessage += \". Going offline\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!wasClean || code === CODES.ABNORMAL) {\n\t\t\t\tmessage += \" [UNEXPECTED]\";\n\t\t\t\tconsole.warn(message);\n\t\t\t} else\n\t\t\t\tconsole.info(message);\n\t\t}\n\t\t\n\t\tconst webSocket = this.webSocket!;\n\t\t\n\t\twebSocket.removeEventListener(\"open\", this.#handleWebSocketOpen);\n\t\twebSocket.removeEventListener(\"message\", this.#handleWebSocketMessage);\n\t\twebSocket.removeEventListener(\"error\", this.#handleWebSocketError);\n\t\t\n\t\tif (this.#wasOpened) {\n\t\t\tthis.emit(\"close\", event);\n\t\t\t\n\t\t\tthis.#wasOpened = false;\n\t\t}\n\t\t\n\t\tthis.webSocket = null;\n\t\t\n\t\tthis.#decideReconnect(code);\n\t\t\n\t\tif (\"navigator\" in globalThis)\n\t\t\tglobalThis.removeEventListener(\"offline\", this.#handleOffline);\n\t\t\n\t};\n\t\n\t#handleAbortSignalAbort = () =>\n\t\tthis.#openPromise?.isPending &&\n\t\tthis.#openPromise.reject(new DOMException(\"Operation aborted\", \"AbortError\"));\n\t\n\tasync open(options: Pick<Options, \"protocols\" | \"url\"> = {}): Promise<void> {\n\t\t\n\t\tif (this.isDestroyed)\n\t\t\tthrow new Error(\"WS has been destroyed\");\n\t\t\n\t\tif (this.#abortSignal?.aborted)\n\t\t\tthrow new DOMException(\"Operation aborted\", \"AbortError\");\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\treturn this.#openPromise;\n\t\t\n\t\tif (this.isUsed)\n\t\t\tthis.close(CODES.REOPEN, \"reopen\");\n\t\telse\n\t\t\tthis.isUsed = true;\n\t\t\n\t\tlet prevURL: URL | string | undefined;\n\t\tif (options.url && this.url !== options.url) {\n\t\t\tprevURL = this.url;\n\t\t\tthis.url = options.url;\n\t\t}\n\t\t\n\t\tif (options.protocols)\n\t\t\tthis.protocols = options.protocols;\n\t\t\n\t\tthis.#openPromise = new StatefulPromise((_, reject) => {\n\t\t\t\n\t\t\tif (this.url) {\n\t\t\t\tconst webSocket = new WebSocket(this.url, this.protocols);\n\t\t\t\t\n\t\t\t\twebSocket.addEventListener(\"open\", this.#handleWebSocketOpen, { once: true });\n\t\t\t\twebSocket.addEventListener(\"message\", this.#handleWebSocketMessage);\n\t\t\t\twebSocket.addEventListener(\"error\", this.#handleWebSocketError);\n\t\t\t\twebSocket.addEventListener(\"close\", this.#handleWebSocketClose, { once: true });\n\t\t\t\t\n\t\t\t\tthis.webSocket = webSocket;\n\t\t\t\t\n\t\t\t\tif (prevURL)\n\t\t\t\t\tthis.emit(\"server-change\", this.url, prevURL);\n\t\t\t\t\n\t\t\t\tthis.emit(\"connecting\");\n\t\t\t\t\n\t\t\t\tif (\"navigator\" in globalThis)\n\t\t\t\t\tglobalThis.addEventListener(\"offline\", this.#handleOffline);\n\t\t\t} else {\n\t\t\t\tthis.webSocket = null;\n\t\t\t\t\n\t\t\t\treject(new Error(\"url prop is not set\"));\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\treturn this.#openPromise;\n\t}\n\t\n\t/**\n\t * Alias for `open()`\n\t */\n\tconnect = this.open;\n\t\n\tclose(code: number = CODES.MANUAL, reason = \"manual\", wasClean: boolean = true) {\n\t\t\n\t\tif (this.isClosed)\n\t\t\tthis.#decideReconnect(code);\n\t\telse {\n\t\t\tthis.webSocket!.removeEventListener(\"close\", this.#handleWebSocketClose);\n\t\t\t\n\t\t\tthis.webSocket!.close(code, reason);\n\t\t\t\n\t\t\tthis.#handleWebSocketClose(Object.assign(new Event(\"close\"), {\n\t\t\t\tcode,\n\t\t\t\treason,\n\t\t\t\twasClean\n\t\t\t}));\n\t\t}\n\t\t\n\t}\n\t\n\t/**\n\t * Alias for `close()`\n\t */\n\tdisconnect = this.close;\n\t\n\t#queue: (ArrayBufferLike | ArrayBufferView | Blob | string)[] = [];\n\t\n\t#releaseQueue = () => {\n\t\t\n\t\tfor (const message of this.#queue)\n\t\t\tthis.webSocket!.send(message);\n\t\t\n\t\tthis.#queue.length = 0;\n\t\t\n\t};\n\t\n\tsend(data: ArrayBufferLike | ArrayBufferView | Blob | string) {\n\t\t\n\t\tif (this.isOpen)\n\t\t\tthis.webSocket!.send(data);\n\t\telse {\n\t\t\tif (!this.#queue.length)\n\t\t\t\tthis.once(\"open\", this.#releaseQueue);\n\t\t\t\n\t\t\tthis.#queue.push(data);\n\t\t}\n\t\t\n\t}\n\t\n\tsendMessage(...args: unknown[]) {\n\t\treturn this.send(JSON.stringify(args));\n\t}\n\t\n\t#requestCounter = 0;\n\t\n\tsendRequest<T>(...args: [...unknown[], callback: (error: Error | null, result: T) => void]): this;\n\tsendRequest<T>(...args: unknown[]): Promise<T>;\n\tsendRequest<T>(...args: unknown[]) {\n\t\t\n\t\tconst id = this.#requestCounter++;\n\t\t\n\t\tif (this.#requestCounter >= REQUEST_COUNTER_LIMIT)\n\t\t\tthis.#requestCounter = 0;\n\t\t\n\t\tconst eventName = `message:${REQUEST_HEADERS.RESPONSE}-${id}`;\n\t\t\n\t\tconst lastArg = args.at(-1);\n\t\t\n\t\tif (typeof lastArg == \"function\") {\n\t\t\tthis.once(eventName, lastArg as (error: Error, result: T) => void);\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args.slice(0, -1));\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\t\n\t\t\tthis.once(eventName, (error, result: T) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\treject(Object.assign(new Error(message), restProps) as Error);\n\t\t\t\t} else\n\t\t\t\t\tresolve(result);\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args);\n\t\t\t\n\t\t});\n\t}\n\t\n\t#requestListeners = new Map<string, RequestListener>();\n\t\n\taddRequestListener(kind: string, listener: RequestListener) {\n\t\tthis.#requestListeners.set(kind, listener);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `addRequestListener()`\n\t */\n\tonRequest = this.addRequestListener;\n\t\n\tremoveRequestListener(kind: string) {\n\t\tthis.#requestListeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `removeRequestListener()`\n\t */\n\toffRequest = this.removeRequestListener;\n\t\n\t#handleRequest = async (id: number, kind: string, ...rest: unknown[]) => {\n\t\tconst listener = this.#requestListeners.get(kind);\n\t\t\n\t\tlet result;\n\t\tlet requestError = null;\n\t\t\n\t\tif (listener)\n\t\t\ttry {\n\t\t\t\tresult = await listener.apply(this, rest);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\trequestError = { message, ...restProps };\n\t\t\t\t}\n\t\t\t}\n\t\telse\n\t\t\trequestError = { message: `Unknown request kind \"${kind}\"` };\n\t\t\n\t\tthis.sendMessage(`${REQUEST_HEADERS.RESPONSE}-${id}`, requestError, result);\n\t\t\n\t};\n\t\n\t#handleOffline = () => {\n\t\t\n\t\tif (this.isOpen && !this.#isCheckingResponsiveness) {\n\t\t\tthis.#isCheckingResponsiveness = true;\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.CHECKING_RESPONSIVENESS);\n\t\t\t\n\t\t\tthis.#unresponsiveTimeout = setTimeout(() => {\n\t\t\t\t\n\t\t\t\tthis.#isCheckingResponsiveness = false;\n\t\t\t\tthis.#isUnresponsive = true;\n\t\t\t\t\n\t\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.UNRESPONSIVE);\n\t\t\t\t\n\t\t\t\tthis.emit(\"unresponsive\");\n\t\t\t\t\n\t\t\t\tthis.#offlineTimeout = setTimeout(() => {\n\t\t\t\t\t\n\t\t\t\t\tthis.#isUnresponsive = false;\n\t\t\t\t\t\n\t\t\t\t\tthis.close(CODES.OFFLINE, \"offline\", false);\n\t\t\t\t\t\n\t\t\t\t}, OFFLINE_TIMEOUT - RESPONSIVENESS_TIMEOUT);\n\t\t\t\t\n\t\t\t}, RESPONSIVENESS_TIMEOUT);\n\t\t\t\n\t\t\tthis.webSocket!.send(\"?\");\n\t\t}\n\t\t\n\t};\n\t\n\tdestroy() {\n\t\t\n\t\tthis.isDestroyed = true;\n\t\t\n\t\tthis.#queue.length = 0;\n\t\t\n\t\tthis.close(CODES.NORMAL, \"destroy\");\n\t\t\n\t\tthis.removeAllListeners();\n\t\t\n\t\tthis.#abortSignal?.removeEventListener(\"abort\", this.#handleAbortSignalAbort);\n\t\t\n\t\tthis.emit(\"destroy\");\n\t\t\n\t}\n\t\n\t\n\tstatic CONNECTION_QUALITY = {\n\t\tCLOSED: 0,\n\t\tRECONNECTING: 1,\n\t\tUNRESPONSIVE: 2,\n\t\tCHECKING_RESPONSIVENESS: 3,\n\t\tOPEN: 4\n\t} as const;\n\t\n}\n", "export function noop() { /**/ }\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Value<T> = PromiseLike<T> | T;\ntype Resolve<T> = (value: Value<T>) => void;\ntype Reject = (reason?: any) => void;\n\ntype Options = {\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n};\n\nconst nativesMap = new WeakMap<StatefulPromise<any>, { resolve: Resolve<any>; reject: Reject }>();\n\n\nexport class StatefulPromise<T> extends Promise<T> {\n\tconstructor(\n\t\texecutor?: (resolve: Resolve<T>, reject: Reject) => void,\n\t\toptions?: Options\n\t) {\n\t\tlet nativeResolve: Resolve<T>;\n\t\tlet nativeReject: Reject;\n\t\t\n\t\tsuper((resolve, reject) => {\n\t\t\tnativeResolve = resolve;\n\t\t\tnativeReject = reject;\n\t\t\t\n\t\t});\n\t\t\n\t\tnativesMap.set(this, { resolve: nativeResolve!, reject: nativeReject! });\n\t\t\n\t\tif (options?.signal)\n\t\t\tif (options.signal.aborted)\n\t\t\t\tthis.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\telse {\n\t\t\t\tconst abortListener = () => this.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\t\t\n\t\t\t\toptions.signal.addEventListener(\"abort\", abortListener);\n\t\t\t\t\n\t\t\t\tthis.finally(() => options.signal?.removeEventListener(\"abort\", abortListener));\n\t\t\t}\n\t\t\n\t\tif (typeof options?.timeout === \"number\" && Number.isFinite(options.timeout)) {\n\t\t\tconst timeout = setTimeout(() => this.reject(new DOMException(\"Timeout exceeded\", \"TimeoutError\")), options.timeout);\n\t\t\t\n\t\t\tthis.finally(() => clearTimeout(timeout));\n\t\t}\n\t\t\n\t\texecutor?.(this.resolve, this.reject);\n\t\t\n\t}\n\t\n\tisPending = true;\n\tisFulfilled = false;\n\tisRejected = false;\n\t\n\tstate: \"fulfilled\" | \"pending\" | \"rejected\" = \"pending\";\n\t\n\tresult?: T | unknown;\n\t\n\treadonly resolve = (value: Value<T>) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isFulfilled = true;\n\t\t\tthis.state = \"fulfilled\";\n\t\t\tthis.result = value;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.resolve.call(this, value);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\treadonly reject = (reason?: any) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isRejected = true;\n\t\t\tthis.state = \"rejected\";\n\t\t\tthis.result = reason;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.reject.call(this, reason);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic resolved<U>(value: U): StatefulPromise<U> {\n\t\treturn new StatefulPromise<U>(resolve => resolve(value));\n\t}\n\t\n\tstatic rejected(reason: unknown): StatefulPromise<never> {\n\t\treturn new StatefulPromise((_, reject) => reject(reason));\n\t}\n\t\n}\n", "import { noop } from \"./noop.js\";\nimport { StatefulPromise } from \"./StatefulPromise.js\";\n\n\ntype Callback = (...args: any[]) => unknown;// eslint-disable-line @typescript-eslint/no-explicit-any\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\n\ntype DebouncedFunction<C extends Callback> = {\n\t(this: ThisParameterType<C>, ...args: Parameters<C>): Promise<Awaited<ReturnType<C>>>;\n};\n\nexport type Debounced<C extends Callback, R extends ReturnType<C>> = DebouncedFunction<C> & {\n\tcallback: C;\n\tpromise: StatefulPromise<R>;\n\tresolve: (value: R) => void;\n\treject: (reason?: unknown) => void;\n\trun(): Promise<R>;\n\tclear(shouldRun?: boolean): Promise<void>;\n};\n\n\nexport function debounce<C extends Callback, R extends ReturnType<C>>(callback: C, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\tlet maxWaitTimeout: ReturnType<typeof setTimeout> | undefined;\n\tlet end: number | undefined;\n\tlet context: ThisParameterType<C>;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: R;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\t\n\t\t\tdebounced.resolve(result);\n\t\t\t\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\t\n\t\trun();\n\t\t\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\ttry {\n\t\t\tresult = await callback.apply(context, args) as R;\n\t\t\t\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tdebounced.reject(error);\n\t\t\t\n\t\t\tthrow error;\n\t\t}\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<C, R> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (!debounced.promise.isPending)\n\t\t\tdebounced.promise = new StatefulPromise<R>((resolve, reject) => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\tdebounced.reject = reject;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\t\n\t\t\t\t\tinitial = false;\n\t\t\t\t\t\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\t\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<C>, {\n\t\tcallback,\n\t\tpromise: StatefulPromise.resolved(undefined as unknown as R),\n\t\tresolve: noop,\n\t\treject: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: StatefulPromise.resolved(undefined), // eslint-disable-line unicorn/no-useless-undefined\n\tresolve: noop,\n\treject: noop,\n\trun: noop,\n\tclear: noop\n}) as Debounced<() => void, void>;\n\n\nexport function throttle(callback: Callback, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "export const HEARTBEAT_INTERVAL = 5_000;\nexport const HEARTBEAT_GAP = 30_000;\nexport const RESPONSIVENESS_TIMEOUT = 1000;\nexport const OFFLINE_TIMEOUT = 5000;\nexport const REQUEST_COUNTER_LIMIT = Number.MAX_SAFE_INTEGER / 2;\n\nexport const CODES = {\n\tNORMAL: 1000,\n\tPROTOCOL_ERROR: 1002,\n\tABNORMAL: 1006,\n\tNO_HEARTBEAT: 3000,\n\tOFFLINE: 3001,\n\tMANUAL: 3500,\n\tREOPEN: 4000\n} as const;\n\nexport const NON_RECONNECTABLE_CODES = [\n\tCODES.PROTOCOL_ERROR,\n\tCODES.MANUAL,\n\tCODES.REOPEN\n];\n\nexport const REQUEST_HEADERS = {\n\tREQUEST: \"~r-q\",\n\tRESPONSE: \"~r-s\"\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["EventEmitter", "noop", "nativesMap", "StatefulPromise", "_StatefulPromise", "executor", "options", "nativeResolve", "nativeReject", "resolve", "reject", "__publicField", "value", "native", "reason", "abortListener", "timeout", "_", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "error", "_args", "StatefulPromise", "resolve", "reject", "noop", "shouldRun", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "REQUEST_COUNTER_LIMIT", "CODES", "NON_RECONNECTABLE_CODES", "REQUEST_HEADERS", "i", "_isQuiet", "_abortSignal", "_WS_instances", "updateConnectionQuality_fn", "_heartbeatTimeout", "defib_fn", "_unresponsiveTimeout", "_isCheckingResponsiveness", "_offlineTimeout", "_isUnresponsive", "_openPromise", "_wasOpened", "_handleWebSocketOpen", "_handleWebSocketMessage", "_handleWebSocketError", "_reconnectTimeout", "decideReconnect_fn", "_handleWebSocketClose", "_handleAbortSignalAbort", "_queue", "_releaseQueue", "_requestCounter", "_requestListeners", "_handleRequest", "_handleOffline", "_WS", "EventEmitter", "options", "__privateAdd", "__publicField", "__privateSet", "__privateGet", "__privateMethod", "message", "kind", "rest", "REQUEST_HEADERS", "error", "event", "code", "reason", "wasClean", "CODES", "webSocket", "id", "listener", "result", "requestError", "restProps", "url", "name", "protocols", "immediately", "reconnectAfter", "on", "quiet", "signal", "eventName", "noop", "prevURL", "StatefulPromise", "_", "reject", "data", "args", "__privateWrapper", "REQUEST_COUNTER_LIMIT", "lastArg", "resolve", "connectionQuality", "prevConnectionQuality", "NON_RECONNECTABLE_CODES", "WS"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/client/node/global.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAGlB,cAAc,IAAI,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import L from"ws";globalThis.WebSocket=L;import _ from"eventemitter3";function u(){}var S=new WeakMap,E=class s extends Promise{constructor(e,t){let o,r;if(super((n,i)=>{o=n,r=i}),S.set(this,{resolve:o,reject:r}),t?.signal)if(t.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let n=()=>this.reject(new DOMException("Aborted","AbortError"));t.signal.addEventListener("abort",n),this.finally(()=>t.signal?.removeEventListener("abort",n))}if(typeof t?.timeout=="number"&&Number.isFinite(t.timeout)){let n=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),t.timeout);this.finally(()=>clearTimeout(n))}e?.(this.resolve,this.reject)}isPending=!0;isFulfilled=!1;isRejected=!1;state="pending";result;resolve=e=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=e;let t=S.get(this);t&&(t.resolve.call(this,e),S.delete(this))}};reject=e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=S.get(this);t&&(t.reject.call(this,e),S.delete(this))}};static resolved(e){return new s(t=>t(e))}static rejected(e){return new s((t,o)=>o(e))}};function I(s,e=0,t={}){let{leading:o=!1,trailing:r=!0}=t,{maxWait:n=1/0}=t,i,c,a,m,l,T,d,O,v=async()=>{let p=Date.now();p>=a?(i=void 0,a=void 0,clearTimeout(c),c=void 0,typeof d=="function"&&await d(),h.resolve(O),T=o):(clearTimeout(i),i=setTimeout(v,a-p))},b=Number.isFinite(n)?()=>{d===x&&(d=!1),x(),c=setTimeout(b,n)}:null;async function x(){try{return O=await s.apply(m,l),O}catch(p){throw h.reject(p),p}}o&&typeof o=="boolean"&&(o=x),T=o,r&&typeof r=="boolean"&&(r=x),d=r;let h=Object.assign(function(...p){return l=p,m=this,a=Date.now()+e,d=r,h.promise.isPending||(h.promise=new E((A,C)=>{h.resolve=A,h.reject=C,typeof T=="function"&&(T(),T=!1,d===x&&(d=!1)),i||(i=setTimeout(v,e),b&&(c=setTimeout(b,n)))})),h.promise},{callback:s,promise:E.resolved(void 0),resolve:u,reject:u,run:x,clear:async p=>{clearTimeout(i),i=void 0,clearTimeout(c),c=void 0,h.resolve(p?await x():O)}});return h}I.noop=Object.assign(()=>{},{callback:u,promise:E.resolved(void 0),resolve:u,reject:u,run:u,clear:u});function y(s,e,t,o,r=!0){return Array.isArray(s)&&(s=s.length),typeof o!="string"&&(r=o??!0,o=t),(r?`${s}\xA0`:"")+y.raw(s,e,t,o)}y.raw=(s,e,t,o=t)=>{s=Math.abs(s);let r=s%10,n=s%100;return r===1&&n!==11?e:r>=2&&r<=4&&!(n>=12&&n<=15)?t:o};var N=Number.MAX_SAFE_INTEGER/2,f={NORMAL:1e3,PROTOCOL_ERROR:1002,ABNORMAL:1006,NO_HEARTBEAT:3e3,OFFLINE:3001,MANUAL:3500,REOPEN:4e3},w=[f.PROTOCOL_ERROR,f.MANUAL,f.REOPEN],g={REQUEST:"~r-q",RESPONSE:"~r-s"};var j=0,k=class s extends _{constructor(e={}){super();let{url:t=globalThis.__insite?.wss_url||"/",name:o=(j++).toString(),protocols:r,immediately:n=!0,reconnectAfter:i=2e3,on:c,quiet:a=!1,signal:m}=e;if(this.url=t,this.name=o,this.protocols=r,this.reconnectAfter=i,c)for(let l in c)c[l]&&this.on(l,c[l]);this.#l=a,this.#u=m,this.#u?.addEventListener("abort",this.#S,{once:!0}),this.url&&n&&this.open().catch(u),this.#l||this.on("error",l=>l&&console.error("\u{1F50C}\u2757\uFE0F WS",`${this.name}:`,l))}on(e,t){return super.on(e,t)}isWebSocket=!0;isWebSocketServer=!1;isWebSocketServerClient=!1;url;name;protocols;reconnectAfter;#l;#u;isUsed=!1;connectionQuality=0;#r(e){if(e!==this.connectionQuality){let t=this.connectionQuality;this.connectionQuality=e,this.emit("connection-quality-change",this.connectionQuality,t)}}webSocket=null;#i;#E(){clearTimeout(this.#i),this.#i=setTimeout(()=>this.close(f.NO_HEARTBEAT,"no-heartbeat",!1),35e3),this.#t&&(clearTimeout(this.#t),this.#t=void 0),this.#s=!1,this.#o&&(clearTimeout(this.#o),this.#o=void 0),this.#n&&(this.#n=!1,this.emit("responsive")),this.#r(s.CONNECTION_QUALITY.OPEN)}#t;#s=!1;#o;#n=!1;get state(){if(!this.webSocket)return"closed";switch(this.webSocket.readyState){case WebSocket.CONNECTING:return"connecting";case WebSocket.OPEN:return this.#n?"unresponsive":"open";case WebSocket.CLOSING:return"closing"}return"closed"}get isConnecting(){return this.webSocket?.readyState===WebSocket.CONNECTING}get isOpen(){return this.webSocket?.readyState===WebSocket.OPEN}get isClosing(){return this.webSocket?.readyState===WebSocket.CLOSING}get isClosed(){return!this.webSocket}isDestroyed=!1;#e;#a=!1;#x=()=>{this.#a=!0,this.#e.resolve(),this.#E(),this.emit("open")};#g=({data:e})=>{if(this.#E(),e){if(e!=="!")try{let[t,...o]=JSON.parse(e);switch(t){case g.REQUEST:this.#v(...o);break;default:this.emit("message",t,...o),this.emit(`message:${t}`,...o)}}catch(t){this.#h(t)}}else this.webSocket.send("")};#h=e=>{e instanceof Event&&(e=void 0),this.#e?.isPending&&this.#e.reject(e),this.emit("error",e)};#f;#T(e){this.#f&&clearTimeout(this.#f),this.reconnectAfter&&!w.includes(e)?(process.env.NODE_ENV==="development"&&!this.#l&&console.info(`\u{1F50C} WS ${this.name} will try to reconnect in ${Math.round(this.reconnectAfter/1e3)} seconds`),this.#f=setTimeout(()=>this.open().catch(u),this.reconnectAfter),this.#r(s.CONNECTION_QUALITY.RECONNECTING)):(this.#f=void 0,this.#r(e===f.REOPEN?s.CONNECTION_QUALITY.RECONNECTING:s.CONNECTION_QUALITY.CLOSED))}#p=e=>{let{code:t,reason:o,wasClean:r}=e;if(this.#i&&(clearTimeout(this.#i),this.#i=void 0),this.#t&&(clearTimeout(this.#t),this.#t=void 0),this.#s=!1,this.#o&&(clearTimeout(this.#o),this.#o=void 0),this.#n=!1,this.#e?.isPending&&this.#e.reject(new Error("Closed")),process.env.NODE_ENV==="development"&&!this.#l){let i=`\u{1F50C} WS ${this.name} is closed`;switch(t&&(i+=` with code ${t}`),t&&o&&(i+=" and"),o&&(i+=` reason "${o}"`),o){case"no-heartbeat":i+=". Going offline"}!r||t===f.ABNORMAL?(i+=" [UNEXPECTED]",console.warn(i)):console.info(i)}let n=this.webSocket;n.removeEventListener("open",this.#x),n.removeEventListener("message",this.#g),n.removeEventListener("error",this.#h),this.#a&&(this.emit("close",e),this.#a=!1),this.webSocket=null,this.#T(t),"navigator"in globalThis&&globalThis.removeEventListener("offline",this.#O)};#S=()=>this.#e?.isPending&&this.#e.reject(new DOMException("Operation aborted","AbortError"));async open(e={}){if(this.isDestroyed)throw new Error("WS has been destroyed");if(this.#u?.aborted)throw new DOMException("Operation aborted","AbortError");if(this.#e?.isPending)return this.#e;this.isUsed?this.close(f.REOPEN,"reopen"):this.isUsed=!0;let t;return e.url&&this.url!==e.url&&(t=this.url,this.url=e.url),e.protocols&&(this.protocols=e.protocols),this.#e=new E((o,r)=>{if(this.url){let n=new WebSocket(this.url,this.protocols);n.addEventListener("open",this.#x,{once:!0}),n.addEventListener("message",this.#g),n.addEventListener("error",this.#h),n.addEventListener("close",this.#p,{once:!0}),this.webSocket=n,t&&this.emit("server-change",this.url,t),this.emit("connecting"),"navigator"in globalThis&&globalThis.addEventListener("offline",this.#O)}else this.webSocket=null,r(new Error("url prop is not set"))}),this.#e}connect=this.open;close(e=f.MANUAL,t="manual",o=!0){this.isClosed?this.#T(e):(this.webSocket.removeEventListener("close",this.#p),this.webSocket.close(e,t),this.#p(Object.assign(new Event("close"),{code:e,reason:t,wasClean:o})))}disconnect=this.close;#c=[];#b=()=>{for(let e of this.#c)this.webSocket.send(e);this.#c.length=0};send(e){this.isOpen?this.webSocket.send(e):(this.#c.length||this.once("open",this.#b),this.#c.push(e))}sendMessage(...e){return this.send(JSON.stringify(e))}#m=0;sendRequest(...e){let t=this.#m++;this.#m>=N&&(this.#m=0);let o=`message:${g.RESPONSE}-${t}`,r=e.at(-1);return typeof r=="function"?(this.once(o,r),this.sendMessage(g.REQUEST,t,...e.slice(0,-1)),this):new Promise((n,i)=>{this.once(o,(c,a)=>{if(c){let{message:m,...l}=c;i(Object.assign(new Error(m),l))}else n(a)}),this.sendMessage(g.REQUEST,t,...e)})}#d=new Map;addRequestListener(e,t){return this.#d.set(e,t),this}onRequest=this.addRequestListener;removeRequestListener(e){return this.#d.delete(e),this}offRequest=this.removeRequestListener;#v=async(e,t,...o)=>{let r=this.#d.get(t),n,i=null;if(r)try{n=await r.apply(this,o)}catch(c){if(c instanceof Error){let{message:a,...m}=c;i={message:a,...m}}}else i={message:`Unknown request kind "${t}"`};this.sendMessage(`${g.RESPONSE}-${e}`,i,n)};#O=()=>{this.isOpen&&!this.#s&&(this.#s=!0,this.#r(s.CONNECTION_QUALITY.CHECKING_RESPONSIVENESS),this.#t=setTimeout(()=>{this.#s=!1,this.#n=!0,this.#r(s.CONNECTION_QUALITY.UNRESPONSIVE),this.emit("unresponsive"),this.#o=setTimeout(()=>{this.#n=!1,this.close(f.OFFLINE,"offline",!1)},4e3)},1e3),this.webSocket.send("?"))};destroy(){this.isDestroyed=!0,this.#c.length=0,this.close(f.NORMAL,"destroy"),this.removeAllListeners(),this.#u?.removeEventListener("abort",this.#S),this.emit("destroy")}static CONNECTION_QUALITY={CLOSED:0,RECONNECTING:1,UNRESPONSIVE:2,CHECKING_RESPONSIVENESS:3,OPEN:4}};export{k as WS};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/client/node/global.ts", "../../../src/client/WS.ts", "../../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../../@nesvet/npm/n/src/StatefulPromise.ts", "../../../../../../@nesvet/npm/n/src/debounce.ts", "../../../../../../@nesvet/npm/n/src/howmuch.ts", "../../../src/common.ts"],
|
|
4
|
+
"sourcesContent": ["import WebSocket from \"ws\";\n\n\ndeclare global {\n\tvar WebSocket: typeof WebSocket;// eslint-disable-line no-var, @typescript-eslint/naming-convention, no-shadow\n}\n\nglobalThis.WebSocket = WebSocket as any;// eslint-disable-line @typescript-eslint/no-explicit-any\n", "import EventEmitter from \"eventemitter3\";\nimport { noop, StatefulPromise } from \"@nesvet/n\";\nimport {\n\tCODES,\n\tHEARTBEAT_GAP,\n\tHEARTBEAT_INTERVAL,\n\tNON_RECONNECTABLE_CODES,\n\tOFFLINE_TIMEOUT,\n\tREQUEST_COUNTER_LIMIT,\n\tREQUEST_HEADERS,\n\tRESPONSIVENESS_TIMEOUT\n} from \"../common\";\nimport type { ConnectionQuality, Options, RequestListener } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nlet i = 0;\n\n\nexport class WS extends EventEmitter {\n\tconstructor(options: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tconst {\n\t\t\turl = globalThis.__insite?.wss_url || \"/\",\n\t\t\tname = (i++).toString(),\n\t\t\tprotocols,\n\t\t\timmediately = true,\n\t\t\treconnectAfter = 2000,\n\t\t\ton,\n\t\t\tquiet = false,\n\t\t\tsignal\n\t\t} = options;\n\t\t\n\t\tthis.url = url;\n\t\tthis.name = name;\n\t\t\n\t\tthis.protocols = protocols;\n\t\t\n\t\tthis.reconnectAfter = reconnectAfter;\n\t\t\n\t\tif (on)\n\t\t\tfor (const eventName in on)\n\t\t\t\tif (on[eventName])\n\t\t\t\t\tthis.on(eventName, on[eventName]);\n\t\t\n\t\tthis.#isQuiet = quiet;\n\t\t\n\t\tthis.#abortSignal = signal;\n\t\tthis.#abortSignal?.addEventListener(\"abort\", this.#handleAbortSignalAbort, { once: true });\n\t\t\n\t\tif (this.url && immediately)\n\t\t\tthis.open().catch(noop);\n\t\t\n\t\tif (!this.#isQuiet)\n\t\t\tthis.on(\"error\", (error: Error) => error && console.error(\"\uD83D\uDD0C\u2757\uFE0F WS\", `${this.name}:`, error));\n\t\t\n\t}\n\t\n\ton(event: \"connecting\" | \"destroy\" | \"open\" | \"responsive\" | \"unresponsive\", callback: (this: this) => void): this;\n\ton<T extends unknown[]>(event: \"message\", callback: (this: this, kind: string, ...rest: T) => void): this;\n\ton<T extends unknown[]>(event: `message:${string}`, callback: (this: this, ...rest: T) => void): this;\n\ton(event: \"connection-quality-change\", callback: (this: this, connectionQuality: ConnectionQuality, prevConnectionQuality: ConnectionQuality) => void): this;\n\ton(event: \"close\", callback: (this: this, closeEvent: CloseEvent) => void): this;\n\ton(event: \"server-change\", callback: (this: this, url: string, prevURL: string) => void): this;\n\ton(event: \"error\", callback: (this: this, error: Error) => void): this;\n\t\n\ton<T extends string | symbol>(event: T, fn: (...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener);\n\t}\n\t\n\treadonly isWebSocket = true;\n\treadonly isWebSocketServer = false;\n\treadonly isWebSocketServerClient = false;\n\t\n\turl;\n\t\n\treadonly name;\n\t\n\tprotocols?;\n\t\n\treconnectAfter;\n\t\n\t#isQuiet;\n\t\n\t#abortSignal?: AbortSignal;\n\t\n\tisUsed = false;\n\t\n\tconnectionQuality: ConnectionQuality = 0;\n\t\n\t#updateConnectionQuality(connectionQuality: ConnectionQuality) {\n\t\tif (connectionQuality !== this.connectionQuality) {\n\t\t\tconst prevConnectionQuality = this.connectionQuality;\n\t\t\tthis.connectionQuality = connectionQuality;\n\t\t\t\n\t\t\tthis.emit(\"connection-quality-change\", this.connectionQuality, prevConnectionQuality);\n\t\t}\n\t\t\n\t}\n\t\n\twebSocket: WebSocket | null = null;\n\t\n\t#heartbeatTimeout?: ReturnType<typeof setTimeout>;\n\t\n\t#defib() {\n\t\t\n\t\tclearTimeout(this.#heartbeatTimeout);\n\t\tthis.#heartbeatTimeout = setTimeout(\n\t\t\t() => this.close(CODES.NO_HEARTBEAT, \"no-heartbeat\", false),\n\t\t\tHEARTBEAT_INTERVAL + HEARTBEAT_GAP\n\t\t);\n\t\t\n\t\tif (this.#unresponsiveTimeout) {\n\t\t\tclearTimeout(this.#unresponsiveTimeout);\n\t\t\tthis.#unresponsiveTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isCheckingResponsiveness = false;\n\t\t\n\t\tif (this.#offlineTimeout) {\n\t\t\tclearTimeout(this.#offlineTimeout);\n\t\t\tthis.#offlineTimeout = undefined;\n\t\t}\n\t\t\n\t\tif (this.#isUnresponsive) {\n\t\t\tthis.#isUnresponsive = false;\n\t\t\t\n\t\t\tthis.emit(\"responsive\");\n\t\t}\n\t\t\n\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.OPEN);\n\t\t\n\t}\n\t\n\t#unresponsiveTimeout?: ReturnType<typeof setTimeout>;\n\t#isCheckingResponsiveness = false;\n\t\n\t#offlineTimeout?: ReturnType<typeof setTimeout>;\n\t#isUnresponsive = false;\n\t\n\tget state() {\n\t\t\n\t\tif (!this.webSocket)\n\t\t\treturn \"closed\";\n\t\t\n\t\tswitch (this.webSocket.readyState) {\n\t\t\tcase WebSocket.CONNECTING:\n\t\t\t\treturn \"connecting\";\n\t\t\t\n\t\t\tcase WebSocket.OPEN:\n\t\t\t\treturn this.#isUnresponsive ? \"unresponsive\" : \"open\";\n\t\t\t\n\t\t\tcase WebSocket.CLOSING:\n\t\t\t\treturn \"closing\";\n\t\t}\n\t\t\n\t\treturn \"closed\";\n\t}\n\t\n\tget isConnecting() {\n\t\treturn this.webSocket?.readyState === WebSocket.CONNECTING;\n\t}\n\t\n\tget isOpen() {\n\t\treturn this.webSocket?.readyState === WebSocket.OPEN;\n\t}\n\t\n\tget isClosing() {\n\t\treturn this.webSocket?.readyState === WebSocket.CLOSING;\n\t}\n\t\n\tget isClosed() {\n\t\treturn !this.webSocket;\n\t}\n\t\n\tisDestroyed = false;\n\t\n\t#openPromise?: StatefulPromise<void>;\n\t\n\t#wasOpened = false;\n\t\n\t#handleWebSocketOpen = () => {\n\t\t\n\t\tthis.#wasOpened = true;\n\t\t\n\t\tthis.#openPromise!.resolve();\n\t\t\n\t\tthis.#defib();\n\t\t\n\t\tthis.emit(\"open\");\n\t\t\n\t};\n\t\n\t#handleWebSocketMessage = ({ data: message }: MessageEvent<string>) => {\n\t\t\n\t\tthis.#defib();\n\t\t\n\t\tif (message) {\n\t\t\tif (message !== \"!\")\n\t\t\t\ttry {\n\t\t\t\t\tconst [ kind, ...rest ] = JSON.parse(message);\n\t\t\t\t\t\n\t\t\t\t\tswitch (kind) {\n\t\t\t\t\t\tcase REQUEST_HEADERS.REQUEST:\n\t\t\t\t\t\t\tvoid this.#handleRequest(...rest as [ id: number, kind: string, ...rest: unknown[] ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthis.emit(\"message\", kind, ...rest);\n\t\t\t\t\t\t\tthis.emit(`message:${kind}`, ...rest);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.#handleWebSocketError(error as Error);\n\t\t\t\t}\n\t\t} else\n\t\t\tthis.webSocket!.send(\"\");\n\t\t\n\t};\n\t\n\t#handleWebSocketError = (error: Error | Event | undefined) => {\n\t\tif (error instanceof Event)\n\t\t\terror = undefined;\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\tthis.#openPromise.reject(error as Error);\n\t\t\n\t\tthis.emit(\"error\", error);\n\t\t\n\t};\n\t\n\t#reconnectTimeout?: ReturnType<typeof setTimeout>;\n\t\n\t#decideReconnect(code: number) {\n\t\t\n\t\tif (this.#reconnectTimeout)\n\t\t\tclearTimeout(this.#reconnectTimeout);\n\t\t\n\t\tif (this.reconnectAfter && !NON_RECONNECTABLE_CODES.includes(code as typeof NON_RECONNECTABLE_CODES[number])) {\n\t\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet)\n\t\t\t\tconsole.info(`\uD83D\uDD0C WS ${this.name} will try to reconnect in ${Math.round(this.reconnectAfter / 1000)} seconds`);\n\t\t\t\n\t\t\tthis.#reconnectTimeout = setTimeout(() => this.open().catch(noop), this.reconnectAfter);\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.RECONNECTING);\n\t\t} else {\n\t\t\tthis.#reconnectTimeout = undefined;\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(code === CODES.REOPEN ? WS.CONNECTION_QUALITY.RECONNECTING : WS.CONNECTION_QUALITY.CLOSED);\n\t\t}\n\t\t\n\t}\n\t\n\t#handleWebSocketClose = (event: CloseEvent) => {\n\t\tconst { code, reason, wasClean } = event;\n\t\t\n\t\tif (this.#heartbeatTimeout) {\n\t\t\tclearTimeout(this.#heartbeatTimeout);\n\t\t\tthis.#heartbeatTimeout = undefined;\n\t\t}\n\t\t\n\t\tif (this.#unresponsiveTimeout) {\n\t\t\tclearTimeout(this.#unresponsiveTimeout);\n\t\t\tthis.#unresponsiveTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isCheckingResponsiveness = false;\n\t\t\n\t\tif (this.#offlineTimeout) {\n\t\t\tclearTimeout(this.#offlineTimeout);\n\t\t\tthis.#offlineTimeout = undefined;\n\t\t}\n\t\t\n\t\tthis.#isUnresponsive = false;\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\tthis.#openPromise.reject(new Error(\"Closed\"));\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\" && !this.#isQuiet) {\n\t\t\tlet message = `\uD83D\uDD0C WS ${this.name} is closed`;\n\t\t\t\n\t\t\tif (code)\n\t\t\t\tmessage += ` with code ${code}`;\n\t\t\t\n\t\t\tif (code && reason)\n\t\t\t\tmessage += \" and\";\n\t\t\t\n\t\t\tif (reason)\n\t\t\t\tmessage += ` reason \"${reason}\"`;\n\t\t\t\n\t\t\tswitch (reason) {\n\t\t\t\tcase \"no-heartbeat\":\n\t\t\t\t\tmessage += \". Going offline\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!wasClean || code === CODES.ABNORMAL) {\n\t\t\t\tmessage += \" [UNEXPECTED]\";\n\t\t\t\tconsole.warn(message);\n\t\t\t} else\n\t\t\t\tconsole.info(message);\n\t\t}\n\t\t\n\t\tconst webSocket = this.webSocket!;\n\t\t\n\t\twebSocket.removeEventListener(\"open\", this.#handleWebSocketOpen);\n\t\twebSocket.removeEventListener(\"message\", this.#handleWebSocketMessage);\n\t\twebSocket.removeEventListener(\"error\", this.#handleWebSocketError);\n\t\t\n\t\tif (this.#wasOpened) {\n\t\t\tthis.emit(\"close\", event);\n\t\t\t\n\t\t\tthis.#wasOpened = false;\n\t\t}\n\t\t\n\t\tthis.webSocket = null;\n\t\t\n\t\tthis.#decideReconnect(code);\n\t\t\n\t\tif (\"navigator\" in globalThis)\n\t\t\tglobalThis.removeEventListener(\"offline\", this.#handleOffline);\n\t\t\n\t};\n\t\n\t#handleAbortSignalAbort = () =>\n\t\tthis.#openPromise?.isPending &&\n\t\tthis.#openPromise.reject(new DOMException(\"Operation aborted\", \"AbortError\"));\n\t\n\tasync open(options: Pick<Options, \"protocols\" | \"url\"> = {}): Promise<void> {\n\t\t\n\t\tif (this.isDestroyed)\n\t\t\tthrow new Error(\"WS has been destroyed\");\n\t\t\n\t\tif (this.#abortSignal?.aborted)\n\t\t\tthrow new DOMException(\"Operation aborted\", \"AbortError\");\n\t\t\n\t\tif (this.#openPromise?.isPending)\n\t\t\treturn this.#openPromise;\n\t\t\n\t\tif (this.isUsed)\n\t\t\tthis.close(CODES.REOPEN, \"reopen\");\n\t\telse\n\t\t\tthis.isUsed = true;\n\t\t\n\t\tlet prevURL: URL | string | undefined;\n\t\tif (options.url && this.url !== options.url) {\n\t\t\tprevURL = this.url;\n\t\t\tthis.url = options.url;\n\t\t}\n\t\t\n\t\tif (options.protocols)\n\t\t\tthis.protocols = options.protocols;\n\t\t\n\t\tthis.#openPromise = new StatefulPromise((_, reject) => {\n\t\t\t\n\t\t\tif (this.url) {\n\t\t\t\tconst webSocket = new WebSocket(this.url, this.protocols);\n\t\t\t\t\n\t\t\t\twebSocket.addEventListener(\"open\", this.#handleWebSocketOpen, { once: true });\n\t\t\t\twebSocket.addEventListener(\"message\", this.#handleWebSocketMessage);\n\t\t\t\twebSocket.addEventListener(\"error\", this.#handleWebSocketError);\n\t\t\t\twebSocket.addEventListener(\"close\", this.#handleWebSocketClose, { once: true });\n\t\t\t\t\n\t\t\t\tthis.webSocket = webSocket;\n\t\t\t\t\n\t\t\t\tif (prevURL)\n\t\t\t\t\tthis.emit(\"server-change\", this.url, prevURL);\n\t\t\t\t\n\t\t\t\tthis.emit(\"connecting\");\n\t\t\t\t\n\t\t\t\tif (\"navigator\" in globalThis)\n\t\t\t\t\tglobalThis.addEventListener(\"offline\", this.#handleOffline);\n\t\t\t} else {\n\t\t\t\tthis.webSocket = null;\n\t\t\t\t\n\t\t\t\treject(new Error(\"url prop is not set\"));\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\treturn this.#openPromise;\n\t}\n\t\n\t/**\n\t * Alias for `open()`\n\t */\n\tconnect = this.open;\n\t\n\tclose(code: number = CODES.MANUAL, reason = \"manual\", wasClean: boolean = true) {\n\t\t\n\t\tif (this.isClosed)\n\t\t\tthis.#decideReconnect(code);\n\t\telse {\n\t\t\tthis.webSocket!.removeEventListener(\"close\", this.#handleWebSocketClose);\n\t\t\t\n\t\t\tthis.webSocket!.close(code, reason);\n\t\t\t\n\t\t\tthis.#handleWebSocketClose(Object.assign(new Event(\"close\"), {\n\t\t\t\tcode,\n\t\t\t\treason,\n\t\t\t\twasClean\n\t\t\t}));\n\t\t}\n\t\t\n\t}\n\t\n\t/**\n\t * Alias for `close()`\n\t */\n\tdisconnect = this.close;\n\t\n\t#queue: (ArrayBufferLike | ArrayBufferView | Blob | string)[] = [];\n\t\n\t#releaseQueue = () => {\n\t\t\n\t\tfor (const message of this.#queue)\n\t\t\tthis.webSocket!.send(message);\n\t\t\n\t\tthis.#queue.length = 0;\n\t\t\n\t};\n\t\n\tsend(data: ArrayBufferLike | ArrayBufferView | Blob | string) {\n\t\t\n\t\tif (this.isOpen)\n\t\t\tthis.webSocket!.send(data);\n\t\telse {\n\t\t\tif (!this.#queue.length)\n\t\t\t\tthis.once(\"open\", this.#releaseQueue);\n\t\t\t\n\t\t\tthis.#queue.push(data);\n\t\t}\n\t\t\n\t}\n\t\n\tsendMessage(...args: unknown[]) {\n\t\treturn this.send(JSON.stringify(args));\n\t}\n\t\n\t#requestCounter = 0;\n\t\n\tsendRequest<T>(...args: [...unknown[], callback: (error: Error | null, result: T) => void]): this;\n\tsendRequest<T>(...args: unknown[]): Promise<T>;\n\tsendRequest<T>(...args: unknown[]) {\n\t\t\n\t\tconst id = this.#requestCounter++;\n\t\t\n\t\tif (this.#requestCounter >= REQUEST_COUNTER_LIMIT)\n\t\t\tthis.#requestCounter = 0;\n\t\t\n\t\tconst eventName = `message:${REQUEST_HEADERS.RESPONSE}-${id}`;\n\t\t\n\t\tconst lastArg = args.at(-1);\n\t\t\n\t\tif (typeof lastArg == \"function\") {\n\t\t\tthis.once(eventName, lastArg as (error: Error, result: T) => void);\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args.slice(0, -1));\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\t\n\t\t\tthis.once(eventName, (error, result: T) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\treject(Object.assign(new Error(message), restProps) as Error);\n\t\t\t\t} else\n\t\t\t\t\tresolve(result);\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args);\n\t\t\t\n\t\t});\n\t}\n\t\n\t#requestListeners = new Map<string, RequestListener>();\n\t\n\taddRequestListener(kind: string, listener: RequestListener) {\n\t\tthis.#requestListeners.set(kind, listener);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `addRequestListener()`\n\t */\n\tonRequest = this.addRequestListener;\n\t\n\tremoveRequestListener(kind: string) {\n\t\tthis.#requestListeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `removeRequestListener()`\n\t */\n\toffRequest = this.removeRequestListener;\n\t\n\t#handleRequest = async (id: number, kind: string, ...rest: unknown[]) => {\n\t\tconst listener = this.#requestListeners.get(kind);\n\t\t\n\t\tlet result;\n\t\tlet requestError = null;\n\t\t\n\t\tif (listener)\n\t\t\ttry {\n\t\t\t\tresult = await listener.apply(this, rest);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\trequestError = { message, ...restProps };\n\t\t\t\t}\n\t\t\t}\n\t\telse\n\t\t\trequestError = { message: `Unknown request kind \"${kind}\"` };\n\t\t\n\t\tthis.sendMessage(`${REQUEST_HEADERS.RESPONSE}-${id}`, requestError, result);\n\t\t\n\t};\n\t\n\t#handleOffline = () => {\n\t\t\n\t\tif (this.isOpen && !this.#isCheckingResponsiveness) {\n\t\t\tthis.#isCheckingResponsiveness = true;\n\t\t\t\n\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.CHECKING_RESPONSIVENESS);\n\t\t\t\n\t\t\tthis.#unresponsiveTimeout = setTimeout(() => {\n\t\t\t\t\n\t\t\t\tthis.#isCheckingResponsiveness = false;\n\t\t\t\tthis.#isUnresponsive = true;\n\t\t\t\t\n\t\t\t\tthis.#updateConnectionQuality(WS.CONNECTION_QUALITY.UNRESPONSIVE);\n\t\t\t\t\n\t\t\t\tthis.emit(\"unresponsive\");\n\t\t\t\t\n\t\t\t\tthis.#offlineTimeout = setTimeout(() => {\n\t\t\t\t\t\n\t\t\t\t\tthis.#isUnresponsive = false;\n\t\t\t\t\t\n\t\t\t\t\tthis.close(CODES.OFFLINE, \"offline\", false);\n\t\t\t\t\t\n\t\t\t\t}, OFFLINE_TIMEOUT - RESPONSIVENESS_TIMEOUT);\n\t\t\t\t\n\t\t\t}, RESPONSIVENESS_TIMEOUT);\n\t\t\t\n\t\t\tthis.webSocket!.send(\"?\");\n\t\t}\n\t\t\n\t};\n\t\n\tdestroy() {\n\t\t\n\t\tthis.isDestroyed = true;\n\t\t\n\t\tthis.#queue.length = 0;\n\t\t\n\t\tthis.close(CODES.NORMAL, \"destroy\");\n\t\t\n\t\tthis.removeAllListeners();\n\t\t\n\t\tthis.#abortSignal?.removeEventListener(\"abort\", this.#handleAbortSignalAbort);\n\t\t\n\t\tthis.emit(\"destroy\");\n\t\t\n\t}\n\t\n\t\n\tstatic CONNECTION_QUALITY = {\n\t\tCLOSED: 0,\n\t\tRECONNECTING: 1,\n\t\tUNRESPONSIVE: 2,\n\t\tCHECKING_RESPONSIVENESS: 3,\n\t\tOPEN: 4\n\t} as const;\n\t\n}\n", "export function noop() { /**/ }\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Value<T> = PromiseLike<T> | T;\ntype Resolve<T> = (value: Value<T>) => void;\ntype Reject = (reason?: any) => void;\n\ntype Options = {\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n};\n\nconst nativesMap = new WeakMap<StatefulPromise<any>, { resolve: Resolve<any>; reject: Reject }>();\n\n\nexport class StatefulPromise<T> extends Promise<T> {\n\tconstructor(\n\t\texecutor?: (resolve: Resolve<T>, reject: Reject) => void,\n\t\toptions?: Options\n\t) {\n\t\tlet nativeResolve: Resolve<T>;\n\t\tlet nativeReject: Reject;\n\t\t\n\t\tsuper((resolve, reject) => {\n\t\t\tnativeResolve = resolve;\n\t\t\tnativeReject = reject;\n\t\t\t\n\t\t});\n\t\t\n\t\tnativesMap.set(this, { resolve: nativeResolve!, reject: nativeReject! });\n\t\t\n\t\tif (options?.signal)\n\t\t\tif (options.signal.aborted)\n\t\t\t\tthis.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\telse {\n\t\t\t\tconst abortListener = () => this.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\t\t\n\t\t\t\toptions.signal.addEventListener(\"abort\", abortListener);\n\t\t\t\t\n\t\t\t\tthis.finally(() => options.signal?.removeEventListener(\"abort\", abortListener));\n\t\t\t}\n\t\t\n\t\tif (typeof options?.timeout === \"number\" && Number.isFinite(options.timeout)) {\n\t\t\tconst timeout = setTimeout(() => this.reject(new DOMException(\"Timeout exceeded\", \"TimeoutError\")), options.timeout);\n\t\t\t\n\t\t\tthis.finally(() => clearTimeout(timeout));\n\t\t}\n\t\t\n\t\texecutor?.(this.resolve, this.reject);\n\t\t\n\t}\n\t\n\tisPending = true;\n\tisFulfilled = false;\n\tisRejected = false;\n\t\n\tstate: \"fulfilled\" | \"pending\" | \"rejected\" = \"pending\";\n\t\n\tresult?: T | unknown;\n\t\n\treadonly resolve = (value: Value<T>) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isFulfilled = true;\n\t\t\tthis.state = \"fulfilled\";\n\t\t\tthis.result = value;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.resolve.call(this, value);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\treadonly reject = (reason?: any) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isRejected = true;\n\t\t\tthis.state = \"rejected\";\n\t\t\tthis.result = reason;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.reject.call(this, reason);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic resolved<U>(value: U): StatefulPromise<U> {\n\t\treturn new StatefulPromise<U>(resolve => resolve(value));\n\t}\n\t\n\tstatic rejected(reason: unknown): StatefulPromise<never> {\n\t\treturn new StatefulPromise((_, reject) => reject(reason));\n\t}\n\t\n}\n", "import { noop } from \"./noop.js\";\nimport { StatefulPromise } from \"./StatefulPromise.js\";\n\n\ntype Callback = (...args: any[]) => unknown;// eslint-disable-line @typescript-eslint/no-explicit-any\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\n\ntype DebouncedFunction<C extends Callback> = {\n\t(this: ThisParameterType<C>, ...args: Parameters<C>): Promise<Awaited<ReturnType<C>>>;\n};\n\nexport type Debounced<C extends Callback, R extends ReturnType<C>> = DebouncedFunction<C> & {\n\tcallback: C;\n\tpromise: StatefulPromise<R>;\n\tresolve: (value: R) => void;\n\treject: (reason?: unknown) => void;\n\trun(): Promise<R>;\n\tclear(shouldRun?: boolean): Promise<void>;\n};\n\n\nexport function debounce<C extends Callback, R extends ReturnType<C>>(callback: C, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\tlet maxWaitTimeout: ReturnType<typeof setTimeout> | undefined;\n\tlet end: number | undefined;\n\tlet context: ThisParameterType<C>;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: R;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\t\n\t\t\tdebounced.resolve(result);\n\t\t\t\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\t\n\t\trun();\n\t\t\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\ttry {\n\t\t\tresult = await callback.apply(context, args) as R;\n\t\t\t\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tdebounced.reject(error);\n\t\t\t\n\t\t\tthrow error;\n\t\t}\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<C, R> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (!debounced.promise.isPending)\n\t\t\tdebounced.promise = new StatefulPromise<R>((resolve, reject) => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\tdebounced.reject = reject;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\t\n\t\t\t\t\tinitial = false;\n\t\t\t\t\t\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\t\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<C>, {\n\t\tcallback,\n\t\tpromise: StatefulPromise.resolved(undefined as unknown as R),\n\t\tresolve: noop,\n\t\treject: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: StatefulPromise.resolved(undefined), // eslint-disable-line unicorn/no-useless-undefined\n\tresolve: noop,\n\treject: noop,\n\trun: noop,\n\tclear: noop\n}) as Debounced<() => void, void>;\n\n\nexport function throttle(callback: Callback, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "export const HEARTBEAT_INTERVAL = 5_000;\nexport const HEARTBEAT_GAP = 30_000;\nexport const RESPONSIVENESS_TIMEOUT = 1000;\nexport const OFFLINE_TIMEOUT = 5000;\nexport const REQUEST_COUNTER_LIMIT = Number.MAX_SAFE_INTEGER / 2;\n\nexport const CODES = {\n\tNORMAL: 1000,\n\tPROTOCOL_ERROR: 1002,\n\tABNORMAL: 1006,\n\tNO_HEARTBEAT: 3000,\n\tOFFLINE: 3001,\n\tMANUAL: 3500,\n\tREOPEN: 4000\n} as const;\n\nexport const NON_RECONNECTABLE_CODES = [\n\tCODES.PROTOCOL_ERROR,\n\tCODES.MANUAL,\n\tCODES.REOPEN\n];\n\nexport const REQUEST_HEADERS = {\n\tREQUEST: \"~r-q\",\n\tRESPONSE: \"~r-s\"\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["WebSocket", "EventEmitter", "noop", "nativesMap", "StatefulPromise", "_StatefulPromise", "executor", "options", "nativeResolve", "nativeReject", "resolve", "reject", "abortListener", "timeout", "value", "native", "reason", "_", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "error", "_args", "StatefulPromise", "resolve", "reject", "noop", "shouldRun", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "REQUEST_COUNTER_LIMIT", "CODES", "NON_RECONNECTABLE_CODES", "REQUEST_HEADERS", "i", "WS", "_WS", "EventEmitter", "options", "url", "name", "protocols", "immediately", "reconnectAfter", "on", "quiet", "signal", "eventName", "#isQuiet", "#abortSignal", "#handleAbortSignalAbort", "noop", "error", "event", "listener", "#updateConnectionQuality", "connectionQuality", "prevConnectionQuality", "#heartbeatTimeout", "#defib", "CODES", "#unresponsiveTimeout", "#isCheckingResponsiveness", "#offlineTimeout", "#isUnresponsive", "#openPromise", "#wasOpened", "#handleWebSocketOpen", "#handleWebSocketMessage", "message", "kind", "rest", "REQUEST_HEADERS", "#handleRequest", "#handleWebSocketError", "#reconnectTimeout", "#decideReconnect", "code", "NON_RECONNECTABLE_CODES", "#handleWebSocketClose", "reason", "wasClean", "webSocket", "#handleOffline", "prevURL", "StatefulPromise", "_", "reject", "#queue", "#releaseQueue", "data", "args", "#requestCounter", "id", "REQUEST_COUNTER_LIMIT", "lastArg", "resolve", "result", "restProps", "#requestListeners", "requestError"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WS } from "./WS";
|
|
2
|
+
declare global {
|
|
3
|
+
var __insite: {
|
|
4
|
+
wss_url?: string;
|
|
5
|
+
} | undefined;
|
|
6
|
+
}
|
|
7
|
+
export type Options = {
|
|
8
|
+
url?: URL | string;
|
|
9
|
+
name?: string;
|
|
10
|
+
protocols?: string[];
|
|
11
|
+
immediately?: boolean;
|
|
12
|
+
reconnectAfter?: number | null;
|
|
13
|
+
on?: Record<string, (...args: any[]) => void>;
|
|
14
|
+
quiet?: boolean;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
};
|
|
17
|
+
export type RequestListener = (...args: any[]) => unknown;
|
|
18
|
+
export type ConnectionQuality = typeof WS["CONNECTION_QUALITY"][keyof typeof WS["CONNECTION_QUALITY"]];
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAM/B,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,QAAQ,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,SAAS,CAAC;CACd;AAED,MAAM,MAAM,OAAO,GAAG;IACrB,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC"}
|
package/dist/common.d.ts
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export declare const HEARTBEAT_INTERVAL = 5000;
|
|
2
|
+
export declare const HEARTBEAT_GAP = 30000;
|
|
3
|
+
export declare const RESPONSIVENESS_TIMEOUT = 1000;
|
|
4
|
+
export declare const OFFLINE_TIMEOUT = 5000;
|
|
5
|
+
export declare const REQUEST_COUNTER_LIMIT: number;
|
|
6
|
+
export declare const CODES: {
|
|
7
|
+
readonly NORMAL: 1000;
|
|
8
|
+
readonly PROTOCOL_ERROR: 1002;
|
|
9
|
+
readonly ABNORMAL: 1006;
|
|
10
|
+
readonly NO_HEARTBEAT: 3000;
|
|
11
|
+
readonly OFFLINE: 3001;
|
|
12
|
+
readonly MANUAL: 3500;
|
|
13
|
+
readonly REOPEN: 4000;
|
|
14
|
+
};
|
|
15
|
+
export declare const NON_RECONNECTABLE_CODES: (1002 | 3500 | 4000)[];
|
|
16
|
+
export declare const REQUEST_HEADERS: {
|
|
17
|
+
REQUEST: string;
|
|
18
|
+
RESPONSE: string;
|
|
6
19
|
};
|
|
7
20
|
//# sourceMappingURL=common.d.ts.map
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,qBAAqB,QAA8B,CAAC;AAEjE,eAAO,MAAM,KAAK;;;;;;;;CAQR,CAAC;AAEX,eAAO,MAAM,uBAAuB,wBAInC,CAAC;AAEF,eAAO,MAAM,eAAe;;;CAG3B,CAAC"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import type http from "node:http";
|
|
2
2
|
import type https from "node:https";
|
|
3
3
|
import { WebSocketServer } from "ws";
|
|
4
|
+
import { isQuietSymbol, requestListenersSymbol } from "./symbols";
|
|
4
5
|
import { WSServerClient } from "./WSServerClient";
|
|
5
6
|
import type { Options, RequestListener } from "./types";
|
|
6
7
|
export declare class WSServer<WSSC extends WSServerClient = WSServerClient> extends WebSocketServer<typeof WSServerClient> {
|
|
7
8
|
#private;
|
|
8
9
|
constructor(options: Options<WSSC>);
|
|
9
|
-
on(event: "connection", callback: (this:
|
|
10
|
-
on(event: "error", callback: (this:
|
|
11
|
-
on(event: "headers", callback: (this:
|
|
12
|
-
on(event: "close" | "listening", callback: (this:
|
|
13
|
-
on(event: "client-connect", listener: (this:
|
|
14
|
-
on(event: "client-error", listener: (this:
|
|
15
|
-
on(event: `client-${string}`, listener: (this:
|
|
16
|
-
on(event: string | symbol, listener: (this:
|
|
10
|
+
on(event: "connection", callback: (this: this, socket: WSSC, request: http.IncomingMessage) => void): this;
|
|
11
|
+
on(event: "error", callback: (this: this, error: Error) => void): this;
|
|
12
|
+
on(event: "headers", callback: (this: this, headers: string[], request: http.IncomingMessage) => void): this;
|
|
13
|
+
on(event: "close" | "listening", callback: (this: this) => void): this;
|
|
14
|
+
on(event: "client-connect", listener: (this: this, wscc: WSSC, request: http.IncomingMessage) => void): this;
|
|
15
|
+
on(event: "client-error", listener: (this: this, wscc: WSSC, error: Error | undefined) => void): this;
|
|
16
|
+
on(event: `client-${string}`, listener: (this: this, wscc: WSSC, ...args: any[]) => void): this;
|
|
17
|
+
on(event: string | symbol, listener: (this: this, ...args: any[]) => void): this;
|
|
17
18
|
readonly isWebSocketServer = true;
|
|
18
19
|
readonly isWebSocketServerClient = false;
|
|
19
20
|
readonly isWebSocket = false;
|
|
@@ -22,9 +23,17 @@ export declare class WSServer<WSSC extends WSServerClient = WSServerClient> exte
|
|
|
22
23
|
get protocol(): string;
|
|
23
24
|
server: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | https.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
|
|
24
25
|
get isS(): boolean;
|
|
26
|
+
[isQuietSymbol]: boolean;
|
|
27
|
+
[requestListenersSymbol]: Map<string, RequestListener<WSSC>>;
|
|
25
28
|
addRequestListener(kind: string, listener: RequestListener<WSSC>): this;
|
|
29
|
+
/**
|
|
30
|
+
* Alias for `addRequestListener()`
|
|
31
|
+
*/
|
|
26
32
|
onRequest: (kind: string, listener: RequestListener<WSSC>) => this;
|
|
27
33
|
removeRequestListener(kind: string): this;
|
|
34
|
+
/**
|
|
35
|
+
* Alias for `removeRequestListener()`
|
|
36
|
+
*/
|
|
28
37
|
offRequest: (kind: string) => this;
|
|
29
38
|
static makeProps<SWSSC extends WSServerClient>({ ssl }: Options<SWSSC>): http.ServerOptions | https.ServerOptions;
|
|
30
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WSServer.d.ts","sourceRoot":"","sources":["../../src/server/WSServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"WSServer.d.ts","sourceRoot":"","sources":["../../src/server/WSServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAOrC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAMxD,qBAAa,QAAQ,CAAC,IAAI,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,eAAe,CAAC,OAAO,cAAc,CAAC;;gBACrG,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;IA2ClC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,GAAG,IAAI;IAC1G,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IACtE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,GAAG,IAAI;IAC5G,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAEtE,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,GAAG,IAAI;IAC5G,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,GAAG,IAAI;IACrG,EAAE,CAAC,KAAK,EAAE,UAAU,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAE/F,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAKhF,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,QAAQ,CAAC,uBAAuB,SAAS;IACzC,QAAQ,CAAC,WAAW,SAAS;IAE7B,IAAI,SAAQ;IACZ,IAAI,SAAQ;IACZ,IAAI,QAAQ,WAEX;IAED,MAAM,+IAAC;IAEP,IAAI,GAAG,YAEN;IAED,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAEzB,CAAC,sBAAsB,CAAC,qCAA4C;IAEpE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC;IAMhE;;OAEG;IACH,SAAS,SATgB,MAAM,YAAY,eAAe,CAAC,IAAI,CAAC,UAS5B;IAEpC,qBAAqB,CAAC,IAAI,EAAE,MAAM;IAMlC;;OAEG;IACH,UAAU,SATkB,MAAM,UASM;IA4BxC,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;CAMjH"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { ClientRequest, IncomingMessage } from "node:http";
|
|
2
2
|
import { RawData, WebSocket } from "ws";
|
|
3
|
-
import { defibSymbol, heartbeatIntervalSymbol,
|
|
3
|
+
import { defibSymbol, heartbeatIntervalSymbol, heartbeatTimeoutSymbol, heartbeatTsSymbol, requestCounterSymbol } from "./symbols";
|
|
4
4
|
import { WSServer } from "./WSServer";
|
|
5
|
-
export declare class WSServerClient
|
|
6
|
-
on(event: "close", listener: (this:
|
|
7
|
-
on(event: "error", listener: (this:
|
|
8
|
-
on(event: "upgrade", listener: (this:
|
|
9
|
-
on(event: "message", listener: (this:
|
|
10
|
-
on(event: "open", listener: (this:
|
|
11
|
-
on(event: "
|
|
12
|
-
on(event:
|
|
13
|
-
on(event: string | symbol, listener: (this: WSSC, ...args: any[]) => void): this;
|
|
5
|
+
export declare class WSServerClient extends WebSocket {
|
|
6
|
+
on(event: "close", listener: (this: this, code: number, reason: Buffer) => void): this;
|
|
7
|
+
on(event: "error", listener: (this: this, error: Error) => void): this;
|
|
8
|
+
on(event: "upgrade", listener: (this: this, request: IncomingMessage) => void): this;
|
|
9
|
+
on(event: "message", listener: (this: this, data: RawData, isBinary: boolean) => void): this;
|
|
10
|
+
on(event: "open", listener: (this: this) => void): this;
|
|
11
|
+
on(event: "unexpected-response", listener: (this: this, request: ClientRequest, response: IncomingMessage) => void): this;
|
|
12
|
+
on(event: string | symbol, listener: (this: this, ...args: any[]) => void): this;
|
|
14
13
|
get isConnecting(): boolean;
|
|
15
14
|
get isOpen(): boolean;
|
|
16
15
|
get isClosing(): boolean;
|
|
@@ -18,16 +17,23 @@ export declare class WSServerClient<WSSC extends WSServerClient = any> extends W
|
|
|
18
17
|
readonly isWebSocketServerClient = true;
|
|
19
18
|
readonly isWebSocketServer = false;
|
|
20
19
|
readonly isWebSocket = false;
|
|
21
|
-
wss: WSServer<
|
|
20
|
+
wss: WSServer<this>;
|
|
22
21
|
userAgent: string;
|
|
23
22
|
remoteAddress: string;
|
|
24
|
-
[
|
|
23
|
+
[heartbeatTimeoutSymbol]?: ReturnType<typeof setTimeout>;
|
|
24
|
+
[defibSymbol](): void;
|
|
25
25
|
latency: number;
|
|
26
|
-
[
|
|
26
|
+
[heartbeatTsSymbol]?: number;
|
|
27
27
|
[heartbeatIntervalSymbol]: NodeJS.Timeout;
|
|
28
28
|
sendMessage(...args: unknown[]): void;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
static makeHeartbeatInterval(this: WSServerClient
|
|
29
|
+
[requestCounterSymbol]: number;
|
|
30
|
+
sendRequest(...args: unknown[]): this | Promise<unknown>;
|
|
31
|
+
static makeHeartbeatInterval(this: WSServerClient): NodeJS.Timeout;
|
|
32
|
+
static extend(this: WSServerClient): void;
|
|
33
|
+
static handleConnect(this: WSServerClient): void;
|
|
34
|
+
static handleMessage(this: WSServerClient, data: RawData): void;
|
|
35
|
+
static handleRequest(this: WSServerClient, id: number, kind: string, ...rest: unknown[]): Promise<void>;
|
|
36
|
+
static handleError(this: WSServerClient, error: Error | Event | undefined): void;
|
|
37
|
+
static handleClose(this: WSServerClient, code: number, reason: Buffer): void;
|
|
32
38
|
}
|
|
33
39
|
//# sourceMappingURL=WSServerClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WSServerClient.d.ts","sourceRoot":"","sources":["../../src/server/WSServerClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"WSServerClient.d.ts","sourceRoot":"","sources":["../../src/server/WSServerClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/server/common.ts"],"names":[],"mappings":""}
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{WebSocketServer as
|
|
1
|
+
import{WebSocketServer as H}from"ws";import{createServer as V,getRemoteAddress as G,resolveSSL as J,showServerListeningMessage as q}from"insite-common/backend";var a=Symbol("isQuiet"),S=Symbol("requestListeners"),$=Symbol("heartbeatInterval"),O=Symbol("heartbeatTimeout"),g=Symbol("defib"),v=Symbol("heartbeatTs"),T=Symbol("requestCounter");import{WebSocket as Q}from"ws";function m(){}var w=new WeakMap,y=class r extends Promise{constructor(e,t){let o,n;if(super((s,i)=>{o=s,n=i}),w.set(this,{resolve:o,reject:n}),t?.signal)if(t.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let s=()=>this.reject(new DOMException("Aborted","AbortError"));t.signal.addEventListener("abort",s),this.finally(()=>t.signal?.removeEventListener("abort",s))}if(typeof t?.timeout=="number"&&Number.isFinite(t.timeout)){let s=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),t.timeout);this.finally(()=>clearTimeout(s))}e?.(this.resolve,this.reject)}isPending=!0;isFulfilled=!1;isRejected=!1;state="pending";result;resolve=e=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=e;let t=w.get(this);t&&(t.resolve.call(this,e),w.delete(this))}};reject=e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=w.get(this);t&&(t.reject.call(this,e),w.delete(this))}};static resolved(e){return new r(t=>t(e))}static rejected(e){return new r((t,o)=>o(e))}};function _(r,e=0,t={}){let{leading:o=!1,trailing:n=!0}=t,{maxWait:s=1/0}=t,i,c,f,x,M,b,p,R,W=async()=>{let u=Date.now();u>=f?(i=void 0,f=void 0,clearTimeout(c),c=void 0,typeof p=="function"&&await p(),l.resolve(R),b=o):(clearTimeout(i),i=setTimeout(W,f-u))},C=Number.isFinite(s)?()=>{p===h&&(p=!1),h(),c=setTimeout(C,s)}:null;async function h(){try{return R=await r.apply(x,M),R}catch(u){throw l.reject(u),u}}o&&typeof o=="boolean"&&(o=h),b=o,n&&typeof n=="boolean"&&(n=h),p=n;let l=Object.assign(function(...u){return M=u,x=this,f=Date.now()+e,p=n,l.promise.isPending||(l.promise=new y((B,D)=>{l.resolve=B,l.reject=D,typeof b=="function"&&(b(),b=!1,p===h&&(p=!1)),i||(i=setTimeout(W,e),C&&(c=setTimeout(C,s)))})),l.promise},{callback:r,promise:y.resolved(void 0),resolve:m,reject:m,run:h,clear:async u=>{clearTimeout(i),i=void 0,clearTimeout(c),c=void 0,l.resolve(u?await h():R)}});return l}_.noop=Object.assign(()=>{},{callback:m,promise:y.resolved(void 0),resolve:m,reject:m,run:m,clear:m});function A(r,e=" ",t=1){if(!r)return r;let o=e.repeat(t);return r.split(`
|
|
2
2
|
`).map(n=>`${o}${n}`).join(`
|
|
3
|
-
`)}function
|
|
4
|
-
${
|
|
5
|
-
schemaRulesNotSatisfied: ${JSON.stringify(
|
|
3
|
+
`)}function U(r){return!!r&&typeof r=="object"&&"errorResponse"in r&&!!r.errorResponse&&typeof r.errorResponse=="object"&&"errInfo"in r.errorResponse}function N(r){return U(r)&&r.errorResponse.errmsg==="Document failed validation"&&(r.message=`${r.errorResponse.errmsg}
|
|
4
|
+
${A(`failingDocumentId: ${r.errorResponse.errInfo?.failingDocumentId}
|
|
5
|
+
schemaRulesNotSatisfied: ${JSON.stringify(r.errorResponse.errInfo?.details?.schemaRulesNotSatisfied,null," ")}`," ")}`),r}function I(r,e,t,o,n=!0){return Array.isArray(r)&&(r=r.length),typeof o!="string"&&(n=o??!0,o=t),(n?`${r}\xA0`:"")+I.raw(r,e,t,o)}I.raw=(r,e,t,o=t)=>{r=Math.abs(r);let n=r%10,s=r%100;return n===1&&s!==11?e:n>=2&&n<=4&&!(s>=12&&s<=15)?t:o};var j=Number.MAX_SAFE_INTEGER/2,k={NORMAL:1e3,PROTOCOL_ERROR:1002,ABNORMAL:1006,NO_HEARTBEAT:3e3,OFFLINE:3001,MANUAL:3500,REOPEN:4e3},Pr=[k.PROTOCOL_ERROR,k.MANUAL,k.REOPEN],E={REQUEST:"~r-q",RESPONSE:"~r-s"};var d=class r extends Q{on(e,t){return super.on(e,t)}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="";[O];[g](){clearTimeout(this[O]),this[O]=setTimeout(()=>this.terminate(),35e3)}latency=0;[v];[$]=r.makeHeartbeatInterval.call(this);sendMessage(...e){return this.send(JSON.stringify(e))}[T]=0;sendRequest(...e){let t=this[T]++;this[T]>=j&&(this[T]=0);let o=`message:${E.RESPONSE}-${t}`;return typeof e.at(-1)=="function"?(this.once(o,e.splice(-1,1)[0]),this.sendMessage(E.REQUEST,t,...e),this):new Promise((n,s)=>{this.once(o,(i,c)=>{if(i){let{message:f,...x}=i;s(Object.assign(new Error(f),x))}else n(c)}),this.sendMessage(E.REQUEST,t,...e)})}static makeHeartbeatInterval(){return setInterval(()=>{this[v]=Date.now(),this.send("")},5e3)}static extend(){Object.defineProperties(this,{isConnecting:{get:Object.getOwnPropertyDescriptor(r.prototype,"isConnecting").get},isOpen:{get:Object.getOwnPropertyDescriptor(r.prototype,"isOpen").get},isClosing:{get:Object.getOwnPropertyDescriptor(r.prototype,"isClosing").get},isClosed:{get:Object.getOwnPropertyDescriptor(r.prototype,"isClosed").get}});let{terminate:e}=this;Object.assign(this,{isWebSocketServerClient:!0,isWebSocketServer:!1,isWebSocket:!1,[g]:r.prototype[g],latency:0,[$]:r.makeHeartbeatInterval.call(this),sendMessage:r.prototype.sendMessage,sendRequest:r.prototype.sendRequest,terminate(){try{e.call(this)}catch(t){console.error(t)}}})}static handleConnect(){this.on("message",r.handleMessage),this.on("error",r.handleError),this.on("close",r.handleClose),this[g]()}static handleMessage(e){let t=e.toString();if(this[g](),t)if(t==="?")this.send("!");else try{let[o,...n]=JSON.parse(t);switch(o){case E.REQUEST:r.handleRequest.call(this,...n);break;default:this.emit(`message:${o}`,...n),this.wss.emit("client-message",this,o,...n),this.wss.emit(`client-message:${o}`,this,...n)}}catch(o){r.handleError.call(this,o)}else this[v]&&(this.latency=Date.now()-this[v],this[v]=void 0)}static async handleRequest(e,t,...o){let n=this.wss[S].get(t),s,i=null;if(n)try{s=await n.call(this.wss,this,...o)}catch(c){if(process.env.NODE_ENV==="development"&&N(c),c instanceof Error){let{message:f,...x}=c;i={message:f,...x}}process.env.NODE_ENV==="development"&&!this.wss[a]&&console.error(`${this.wss.icon}\u2757\uFE0F WS Server request "${t}" (${e}):`,c)}else i={message:`Unknown request kind "${t}"`};this.sendMessage(`${E.RESPONSE}-${e}`,i,s)}static handleError(e){e instanceof Event&&(e=void 0),this.wss[a]||console.error(`${this.wss.icon}\u2757\uFE0F WS Server client`,"user"in this?`\x1B[1m${this.user.email}\x1B[0m:`:"\x1B[3manonymous\x1B[0m:",e),this.wss.emit("client-error",this,e)}static handleClose(e,t){if(process.env.NODE_ENV==="development"){let o=t.toString();this.wss[a]||console.info(`${this.wss.icon} WS Server:`,"user"in this?`\x1B[1m${this.user.email}\x1B[0m`:"\x1B[3manonymous\x1B[0m",`disconnected ${e?`with code ${e}`:""} ${e&&o?"and ":""}${o?`reason "${o}"`:""}`)}clearTimeout(this[O]),clearInterval(this[$]),this.wss.emit("client-close",this),this.wss.emit("client-closed",this)}};var L=class r extends H{constructor(e){let{ssl:t,port:o,server:n=V(r.makeProps(e)),quiet:s=!1,...i}=e;super({WebSocket:d,...i,server:n}),this.server=n,e.server?new Promise(c=>void(n.listening?c():n.on("listening",c))).then(()=>q(this)):this.server.listen(typeof o=="string"?Number.parseInt(o):o??(this.isS?443:80),()=>q(this)),this[a]=s,this.on("connection",this.#e),this[a]||(this.on("error",c=>console.error(`${this.icon}\u2757\uFE0F WS Server:`,c)),this.on("close",()=>console.error(`${this.icon}\u2757\uFE0F WS Server closed`)))}on(e,t){return super.on(e,t)}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}[a];[S]=new Map;addRequestListener(e,t){return this[S].set(e,t),this}onRequest=this.addRequestListener;removeRequestListener(e){return this[S].delete(e),this}offRequest=this.removeRequestListener;#e(e,t){e instanceof d||d.extend.call(e),Object.assign(e,{wss:this,userAgent:t.headers["user-agent"]??"",remoteAddress:G(t)}),d.handleConnect.call(e),this.emit("client-connect",e,t),process.env.NODE_ENV==="development"&&!this[a]&&console.info(`${this.icon} WS Server:`,"user"in e?`\x1B[1m${e.user.email}\x1B[0m`:"\x1B[3manonymous\x1B[0m","connected")}static makeProps({ssl:e}){return{...J(e)}}};export{L as WSServer,d as WSServerClient};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/server/WSServer.ts", "
|
|
4
|
-
"sourcesContent": ["import type http from \"node:http\";\nimport type https from \"node:https\";\nimport { WebSocketServer, type RawData, type WebSocket } from \"ws\";\nimport { handleMongoError } from \"@nesvet/n\";\nimport {\n\tcreateServer,\n\tgetRemoteAddress,\n\tresolveSSL,\n\tshowServerListeningMessage\n} from \"insite-common/backend\";\nimport { requestHeaders } from \"../common\";\nimport { defibSymbol, heartbeatIntervalSymbol, pingTsSymbol } from \"./symbols\";\nimport { WSServerClient } from \"./WSServerClient\";\nimport type { Options, RequestListener } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class WSServer<WSSC extends WSServerClient = WSServerClient> extends WebSocketServer<typeof WSServerClient> {\n\tconstructor(options: Options<WSSC>) {\n\t\tconst {\n\t\t\tssl: _,\n\t\t\tport,\n\t\t\tserver = createServer(WSServer.makeProps(options)),\n\t\t\t...wssOptions\n\t\t} = options;\n\t\t\n\t\tsuper({\n\t\t\tWebSocket: WSServerClient<WSSC>,\n\t\t\t...wssOptions,\n\t\t\tserver\n\t\t});\n\t\t\n\t\tthis.server = server;\n\t\t\n\t\tif (options.server)\n\t\t\tnew Promise<void>(resolve => void (\n\t\t\t\tserver.listening ?\n\t\t\t\t\tresolve() :\n\t\t\t\t\tserver.on(\"listening\", resolve)\n\t\t\t)).then(() => showServerListeningMessage(this));\n\t\telse\n\t\t\tthis.server.listen(\n\t\t\t\ttypeof port == \"string\" ?\n\t\t\t\t\tNumber.parseInt(port) :\n\t\t\t\t\tport ?? (this.isS ? 443 : 80),\n\t\t\t\t() => showServerListeningMessage(this)\n\t\t\t);\n\t\t\n\t\tthis.on(\"connection\", this.#handleConnection);\n\t\t\n\t\tthis.on(`client-message:${requestHeaders.request}`, this.#handleRequest);\n\t\t\n\t\tthis.on(\"error\", (error: Error) => console.error(`${this.icon}\u2757\uFE0F WS Server:`, error));\n\t\t\n\t\tthis.on(\"close\", () => console.error(`${this.icon}\u2757\uFE0F WS Server closed`));\n\t\t\n\t}\n\t\n\ton(event: \"connection\", callback: (this: WSServer<WSSC>, socket: WSSC, request: http.IncomingMessage) => void): this;\n\ton(event: \"error\", callback: (this: WSServer<WSSC>, error: Error) => void): this;\n\ton(event: \"headers\", callback: (this: WSServer<WSSC>, headers: string[], request: http.IncomingMessage) => void): this;\n\ton(event: \"close\" | \"listening\", callback: (this: WSServer<WSSC>) => void): this;\n\t\n\ton(event: \"client-connect\", listener: (this: WSServer<WSSC>, wscc: WSSC, request: http.IncomingMessage) => void): this;\n\ton(event: \"client-error\", listener: (this: WSServer<WSSC>, wscc: WSSC, error: Error | undefined) => void): this;\n\ton(event: `client-${string}`, listener: (this: WSServer<WSSC>, wscc: WSSC, ...args: any[]) => void): this;\n\t\n\ton(event: string | symbol, listener: (this: WSServer<WSSC>, ...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: WSServer<WSSC>, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener as unknown as (this: WebSocketServer, ...args: any[]) => void);\n\t}\n\t\n\treadonly isWebSocketServer = true;\n\treadonly isWebSocketServerClient = false;\n\treadonly isWebSocket = false;\n\t\n\ticon = \"\uD83D\uDD0C\";\n\tname = \"WS\";\n\tget protocol() {\n\t\treturn `ws${this.isS ? \"s\" : \"\"}`;\n\t}\n\t\n\tserver;\n\t\n\tget isS() {\n\t\treturn \"setSecureContext\" in this.server;\n\t}\n\t\n\t#requestListeners = new Map<string, RequestListener<WSSC>>();\n\t\n\taddRequestListener(kind: string, listener: RequestListener<WSSC>) {\n\t\tthis.#requestListeners.set(kind, listener);\n\t\t\n\t\treturn this;\n\t}\n\t\n\tonRequest = this.addRequestListener;\n\t\n\tremoveRequestListener(kind: string) {\n\t\tthis.#requestListeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toffRequest = this.removeRequestListener;\n\t\n\t#handleRequest = async (wssc: WSSC, id: string, kind: string, ...rest: unknown[]) => {\n\t\tconst listener = this.#requestListeners.get(kind);\n\t\t\n\t\tlet result;\n\t\tlet requestError = null;\n\t\t\n\t\tif (listener)\n\t\t\ttry {\n\t\t\t\tresult = await listener.call(this, wssc, ...rest);\n\t\t\t} catch (error) {\n\t\t\t\tif (process.env.NODE_ENV === \"development\")\n\t\t\t\t\thandleMongoError(error);\n\t\t\t\t\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\trequestError = { message, ...restProps };\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (process.env.NODE_ENV === \"development\")\n\t\t\t\t\tconsole.error(`${this.icon}\u2757\uFE0F WS Server request \"${kind}\" (${id}):`, error);\n\t\t\t}\n\t\telse\n\t\t\trequestError = { message: `Unknown request kind \"${kind}\"` };\n\t\t\n\t\twssc.sendMessage(`${requestHeaders.response}-${id}`, requestError, result);\n\t\t\n\t};\n\t\n\t#handleConnection(wssc: WSSC, request: http.IncomingMessage) {\n\t\tif (!(wssc instanceof WSServerClient)) { /* Compatibility with Bun */\n\t\t\tObject.defineProperties(wssc, {\n\t\t\t\tisConnecting: {\n\t\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isConnecting\")!.get\n\t\t\t\t},\n\t\t\t\tisOpen: {\n\t\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isOpen\")!.get\n\t\t\t\t},\n\t\t\t\tisClosing: {\n\t\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isClosing\")!.get\n\t\t\t\t},\n\t\t\t\tisClosed: {\n\t\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isClosed\")!.get\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tconst { terminate } = wssc as WebSocket;\n\t\t\t\n\t\t\tObject.assign(wssc, {\n\t\t\t\tisWebSocketServerClient: true,\n\t\t\t\tisWebSocketServer: false,\n\t\t\t\tisWebSocket: false,\n\t\t\t\t[defibSymbol]: WSServerClient.makeDefib.call(wssc),\n\t\t\t\tlatency: 0,\n\t\t\t\t[heartbeatIntervalSymbol]: WSServerClient.makeHeartbeatInterval.call(wssc),\n\t\t\t\tsendMessage: WSServerClient.prototype.sendMessage,\n\t\t\t\tsendRequest: WSServerClient.prototype.sendRequest,\n\t\t\t\tterminate() { /* Workaround Bun's WebSocket#terminate bug */\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tterminate.call(wssc);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.assign(wssc, {\n\t\t\twss: this,\n\t\t\tuserAgent: request.headers[\"user-agent\"] ?? \"\",\n\t\t\tremoteAddress: getRemoteAddress(request)\n\t\t});\n\t\t\n\t\twssc[defibSymbol]();\n\t\t\n\t\twssc.on(\"message\", data => this.#handleClientMessage(wssc, data));\n\t\twssc.on(\"error\", error => this.#handleClientError(wssc, error));\n\t\twssc.on(\"close\", (...args) => this.#handleClientClose(wssc, ...args));\n\t\t\n\t\tthis.emit(\"client-connect\", wssc, request);\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\")\n\t\t\tconsole.info(\n\t\t\t\t`${this.icon} WS Server:`,\n\t\t\t\t\"user\" in wssc ? `\\x1B[1m${(wssc.user as { email: string }).email}\\x1B[0m` : \"\\x1B[3manonymous\\x1B[0m\",\n\t\t\t\t\"connected\"\n\t\t\t);\n\t\t\n\t\t\n\t}\n\t\n\t\n\t#handleClientMessage(wssc: WSSC, data: RawData) {\n\t\tconst message = data.toString();\n\t\t\n\t\twssc[defibSymbol]();\n\t\t\n\t\tif (message)\n\t\t\ttry {\n\t\t\t\tconst [ kind, ...rest ] = JSON.parse(message);\n\t\t\t\t\n\t\t\t\twssc.emit(`message:${kind}`, ...rest);\n\t\t\t\tthis.emit(\"client-message\", wssc, kind, ...rest);\n\t\t\t\tthis.emit(`client-message:${kind}`, wssc, ...rest);\n\t\t\t} catch (error) {\n\t\t\t\tthis.#handleClientError(wssc, error as Error);\n\t\t\t}\n\t\telse if (wssc[pingTsSymbol]) {\n\t\t\twssc.latency = Date.now() - wssc[pingTsSymbol];\n\t\t\tdelete wssc[pingTsSymbol];\n\t\t}\n\t\t\n\t}\n\t\n\t#handleClientError(wssc: WSSC, error: Error | Event | undefined) {\n\t\tif (error instanceof Event)\n\t\t\terror = undefined;\n\t\t\n\t\tconsole.error(\n\t\t\t`${this.icon}\u2757\uFE0F WS Server client`,\n\t\t\t\"user\" in wssc ? `\\x1B[1m${(wssc.user as { email: string }).email}\\x1B[0m:` : \"\\x1B[3manonymous\\x1B[0m:\",\n\t\t\terror\n\t\t);\n\t\t\n\t\tthis.emit(\"client-error\", wssc, error);\n\t\t\n\t}\n\t\n\t#handleClientClose(wssc: WSSC, code: number, reason: Buffer) {\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\tconst reasonString = reason.toString();\n\t\t\t\n\t\t\tconsole.info(\n\t\t\t\t`${this.icon} WS Server:`,\n\t\t\t\t\"user\" in wssc ? `\\x1B[1m${(wssc.user as { email: string }).email}\\x1B[0m` : \"\\x1B[3manonymous\\x1B[0m\",\n\t\t\t\t`disconnected ${code ? `with code ${code}` : \"\"} ${code && reasonString ? \"and \" : \"\"}${reasonString ? `reason \"${reasonString}\"` : \"\"}`\n\t\t\t);\n\t\t}\n\t\t\n\t\twssc[defibSymbol].clear();\n\t\tclearInterval(wssc[heartbeatIntervalSymbol]);\n\t\t\n\t\tthis.emit(\"client-close\", wssc);\n\t\tthis.emit(\"client-closed\", wssc);\n\t\t\n\t}\n\t\n\t\n\tstatic makeProps<SWSSC extends WSServerClient>({ ssl }: Options<SWSSC>): http.ServerOptions | https.ServerOptions {\n\t\treturn {\n\t\t\t...resolveSSL(ssl)\n\t\t};\n\t}\n\t\n}\n", "export function noop() { /**/ }\n", "import { noop } from \"./noop.js\";\n\n\ntype Callback<Result> = (...args: unknown[]) => Result;\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\ntype NumberOrUndefined = number | undefined;\n\ntype DebouncedFunction<Result> = {\n\t(this: unknown, ..._args: unknown[]): Promise<Result>;\n};\n\nexport type Debounced<Result> = {\n\tcallback: Callback<Result>;\n\tpromise: {\n\t\tisResolved: boolean;\n\t} & Promise<unknown>;\n\tresolve: (value: Result) => void;\n\trun(): Promise<Result>;\n\tclear(shouldRun?: boolean): Promise<void>;\n} & DebouncedFunction<Result>;\n\n\nexport function debounce<Result>(callback: Callback<Result>, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: NumberOrUndefined;\n\tlet maxWaitTimeout: NumberOrUndefined;\n\tlet end: NumberOrUndefined;\n\tlet context: unknown;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: Result;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\tdebounced.resolve(result);\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\trun();\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\treturn (result = await callback.apply(context, args));\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<Result> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (debounced.promise.isResolved)\n\t\t\tdebounced.promise = Object.assign(new Promise(resolve => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\tinitial = false;\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}), {\n\t\t\t\tisResolved: false\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<Result>, {\n\t\tcallback,\n\t\tpromise: Object.assign(Promise.resolve(), {\n\t\t\tisResolved: true\n\t\t}),\n\t\tresolve: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\t\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: Object.assign(Promise.resolve(), {\n\t\tisResolved: true\n\t}),\n\tresolve: noop,\n\trun: noop,\n\tclear: noop\n}) as unknown as Debounced<void>;\n\n\nexport function throttle<Result>(callback: Callback<Result>, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function indent(string: string, indentation: string = \"\\t\", times: number = 1): string {\n\tif (!string)\n\t\treturn string;\n\t\n\tconst prefix = indentation.repeat(times);\n\t\n\treturn string.split(\"\\n\").map(line => `${prefix}${line}`).join(\"\\n\");\n}\n", "import { indent } from \"./indent.js\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype MongoServerError = {\n\terrorResponse: {\n\t\terrmsg: string;\n\t\terrInfo?: {\n\t\t\t[key: string]: any;\n\t\t};\n\t};\n\t[key: string]: any;\n};\n\nfunction isMongoServerError(error: unknown): error is MongoServerError {\n\treturn (\n\t\t!!error &&\n\t\ttypeof error == \"object\" &&\n\t\t\"errorResponse\" in error &&\n\t\t!!error.errorResponse &&\n\t\ttypeof error.errorResponse == \"object\" &&\n\t\t\"errInfo\" in error.errorResponse\n\t);\n}\n\nexport function handleMongoError<E extends MongoServerError>(error: E): E;\nexport function handleMongoError(error: any): any;\nexport function handleMongoError(error: any) {\n\tif (isMongoServerError(error) && error.errorResponse.errmsg === \"Document failed validation\")\n\t\terror.message = `${error.errorResponse.errmsg}\\n${indent(`failingDocumentId: ${error.errorResponse.errInfo?.failingDocumentId}\\nschemaRulesNotSatisfied: ${JSON.stringify(error.errorResponse.errInfo?.details?.schemaRulesNotSatisfied, null, \" \")}`, \" \")}`;\n\t\n\treturn error;\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "export function uid(prefix: string | undefined = \"\", postfix: string | undefined = \"\") {\n\treturn `${prefix}${Date.now().toString(36)}${Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36)}${postfix}`;\n}\n", "export const heartbeatInterval = 5_000;\nexport const heartbeatGap = 60_000;\n\nexport const requestHeaders = {\n\trequest: \"~r-q\",\n\tresponse: \"~r-s\"\n};\n", "export const heartbeatIntervalSymbol = Symbol(\"heartbeatInterval\");\nexport const defibSymbol = Symbol(\"defib\");\nexport const pingTsSymbol = Symbol(\"pingTs\");\n", "import { ClientRequest, IncomingMessage } from \"node:http\";\nimport { RawData, WebSocket } from \"ws\";\nimport { debounce, uid } from \"@nesvet/n\";\nimport { heartbeatGap, heartbeatInterval, requestHeaders } from \"../common\";\nimport { defibSymbol, heartbeatIntervalSymbol, pingTsSymbol } from \"./symbols\";\nimport { WSServer } from \"./WSServer\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class WSServerClient<WSSC extends WSServerClient = any> extends WebSocket {\n\ton(event: \"close\", listener: (this: WSSC, code: number, reason: Buffer) => void): this;\n\ton(event: \"error\", listener: (this: WSSC, error: Error) => void): this;\n\ton(event: \"upgrade\", listener: (this: WSSC, request: IncomingMessage) => void): this;\n\ton(event: \"message\", listener: (this: WSSC, data: RawData, isBinary: boolean) => void): this;\n\ton(event: \"open\", listener: (this: WSSC) => void): this;\n\ton(event: \"ping\" | \"pong\", listener: (this: WSSC, data: Buffer) => void): this;\n\ton(event: \"unexpected-response\", listener: (this: WSSC, request: ClientRequest, response: IncomingMessage) => void): this;\n\ton(event: string | symbol, listener: (this: WSSC, ...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: WSSC, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener as (this: WebSocket, ...args: any[]) => void);\n\t}\n\t\n\tget isConnecting() {\n\t\treturn this.readyState === this.CONNECTING;\n\t}\n\t\n\tget isOpen() {\n\t\treturn this.readyState === this.OPEN;\n\t}\n\t\n\tget isClosing() {\n\t\treturn this.readyState === this.CLOSING;\n\t}\n\t\n\tget isClosed() {\n\t\treturn this.readyState === this.CLOSED;\n\t}\n\t\n\treadonly isWebSocketServerClient = true;\n\treadonly isWebSocketServer = false;\n\treadonly isWebSocket = false;\n\t\n\twss!: WSServer<WSSC>;\n\t\n\tuserAgent = \"\";\n\t\n\tremoteAddress = \"\";\n\t\n\t[defibSymbol] = WSServerClient.makeDefib.call(this);\n\t\n\tlatency = 0;\n\t\n\t[pingTsSymbol]?: number;\n\t\n\t[heartbeatIntervalSymbol] = WSServerClient.makeHeartbeatInterval.call(this);\n\t\n\tsendMessage(...args: unknown[]) {\n\t\treturn this.send(JSON.stringify(args));\n\t}\n\t\n\tsendRequest(...args: unknown[]) {\n\t\t\n\t\tconst id = uid();\n\t\tconst eventName = `message:${requestHeaders.response}-${id}`;\n\t\t\n\t\tif (typeof args.at(-1) == \"function\") {\n\t\t\tthis.once(eventName, args.splice(-1, 1)[0] as () => void);\n\t\t\tthis.sendMessage(requestHeaders.request, id, ...args);\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tthis.once(eventName, (error, result) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\treject(Object.assign(new Error(message), restProps));\n\t\t\t\t} else\n\t\t\t\t\tresolve(result);\n\t\t\t\t\n\t\t\t});\n\t\t\tthis.sendMessage(requestHeaders.request, id, ...args);\n\t\t\t\n\t\t});\n\t}\n\t\n\t\n\tstatic makeDefib(this: WSServerClient<any>) {\n\t\treturn debounce(() => this.terminate(), heartbeatInterval + heartbeatGap);\n\t}\n\t\n\tstatic makeHeartbeatInterval(this: WSServerClient<any>) {\n\t\treturn setInterval(() => {\n\t\t\t\n\t\t\tthis[pingTsSymbol] = Date.now();\n\t\t\tthis.send(\"\");\n\t\t\t\n\t\t}, heartbeatInterval);\n\t}\n\t\n}\n"],
|
|
5
|
-
"mappings": "AAEA,OAAS,mBAAAA,
|
|
6
|
-
"names": ["WebSocketServer", "
|
|
3
|
+
"sources": ["../../src/server/WSServer.ts", "../../src/server/symbols.ts", "../../src/server/WSServerClient.ts", "../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../@nesvet/npm/n/src/StatefulPromise.ts", "../../../../../@nesvet/npm/n/src/debounce.ts", "../../../../../@nesvet/npm/n/src/indent.ts", "../../../../../@nesvet/npm/n/src/handleMongoError.ts", "../../../../../@nesvet/npm/n/src/howmuch.ts", "../../src/common.ts"],
|
|
4
|
+
"sourcesContent": ["import type http from \"node:http\";\nimport type https from \"node:https\";\nimport { WebSocketServer } from \"ws\";\nimport {\n\tcreateServer,\n\tgetRemoteAddress,\n\tresolveSSL,\n\tshowServerListeningMessage\n} from \"insite-common/backend\";\nimport { isQuietSymbol, requestListenersSymbol } from \"./symbols\";\nimport { WSServerClient } from \"./WSServerClient\";\nimport type { Options, RequestListener } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class WSServer<WSSC extends WSServerClient = WSServerClient> extends WebSocketServer<typeof WSServerClient> {\n\tconstructor(options: Options<WSSC>) {\n\t\tconst {\n\t\t\tssl: _,\n\t\t\tport,\n\t\t\tserver = createServer(WSServer.makeProps(options)),\n\t\t\tquiet = false,\n\t\t\t...wssOptions\n\t\t} = options;\n\t\t\n\t\tsuper({\n\t\t\tWebSocket: WSServerClient,\n\t\t\t...wssOptions,\n\t\t\tserver\n\t\t});\n\t\t\n\t\tthis.server = server;\n\t\t\n\t\tif (options.server)\n\t\t\tvoid new Promise<void>(resolve => void (\n\t\t\t\tserver.listening ?\n\t\t\t\t\tresolve() :\n\t\t\t\t\tserver.on(\"listening\", resolve)\n\t\t\t)).then(() => showServerListeningMessage(this));\n\t\telse\n\t\t\tthis.server.listen(\n\t\t\t\ttypeof port == \"string\" ?\n\t\t\t\t\tNumber.parseInt(port) :\n\t\t\t\t\tport ?? (this.isS ? 443 : 80),\n\t\t\t\t() => showServerListeningMessage(this)\n\t\t\t);\n\t\t\n\t\tthis[isQuietSymbol] = quiet;\n\t\t\n\t\tthis.on(\"connection\", this.#handleConnection);\n\t\t\n\t\tif (!this[isQuietSymbol]) {\n\t\t\tthis.on(\"error\", (error: Error) => console.error(`${this.icon}\u2757\uFE0F WS Server:`, error));\n\t\t\t\n\t\t\tthis.on(\"close\", () => console.error(`${this.icon}\u2757\uFE0F WS Server closed`));\n\t\t}\n\t\t\n\t}\n\t\n\ton(event: \"connection\", callback: (this: this, socket: WSSC, request: http.IncomingMessage) => void): this;\n\ton(event: \"error\", callback: (this: this, error: Error) => void): this;\n\ton(event: \"headers\", callback: (this: this, headers: string[], request: http.IncomingMessage) => void): this;\n\ton(event: \"close\" | \"listening\", callback: (this: this) => void): this;\n\t\n\ton(event: \"client-connect\", listener: (this: this, wscc: WSSC, request: http.IncomingMessage) => void): this;\n\ton(event: \"client-error\", listener: (this: this, wscc: WSSC, error: Error | undefined) => void): this;\n\ton(event: `client-${string}`, listener: (this: this, wscc: WSSC, ...args: any[]) => void): this;\n\t\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener as (this: WebSocketServer, ...args: any[]) => void);\n\t}\n\t\n\treadonly isWebSocketServer = true;\n\treadonly isWebSocketServerClient = false;\n\treadonly isWebSocket = false;\n\t\n\ticon = \"\uD83D\uDD0C\";\n\tname = \"WS\";\n\tget protocol() {\n\t\treturn `ws${this.isS ? \"s\" : \"\"}`;\n\t}\n\t\n\tserver;\n\t\n\tget isS() {\n\t\treturn \"setSecureContext\" in this.server;\n\t}\n\t\n\t[isQuietSymbol]: boolean;\n\t\n\t[requestListenersSymbol] = new Map<string, RequestListener<WSSC>>();\n\t\n\taddRequestListener(kind: string, listener: RequestListener<WSSC>) {\n\t\tthis[requestListenersSymbol].set(kind, listener);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `addRequestListener()`\n\t */\n\tonRequest = this.addRequestListener;\n\t\n\tremoveRequestListener(kind: string) {\n\t\tthis[requestListenersSymbol].delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Alias for `removeRequestListener()`\n\t */\n\toffRequest = this.removeRequestListener;\n\t\n\t#handleConnection(wssc: WSSC, request: http.IncomingMessage) {\n\t\t\n\t\t/* Compatibility with Bun */\n\t\tif (!(wssc instanceof WSServerClient))\n\t\t\tWSServerClient.extend.call(wssc);\n\t\t\n\t\tObject.assign(wssc, {\n\t\t\twss: this,\n\t\t\tuserAgent: request.headers[\"user-agent\"] ?? \"\",\n\t\t\tremoteAddress: getRemoteAddress(request)\n\t\t});\n\t\t\n\t\tWSServerClient.handleConnect.call(wssc);\n\t\t\n\t\tthis.emit(\"client-connect\", wssc, request);\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\" && !this[isQuietSymbol])\n\t\t\tconsole.info(\n\t\t\t\t`${this.icon} WS Server:`,\n\t\t\t\t\"user\" in wssc ? `\\x1B[1m${(wssc.user as { email: string }).email}\\x1B[0m` : \"\\x1B[3manonymous\\x1B[0m\",\n\t\t\t\t\"connected\"\n\t\t\t);\n\t\t\n\t}\n\t\n\t\n\tstatic makeProps<SWSSC extends WSServerClient>({ ssl }: Options<SWSSC>): http.ServerOptions | https.ServerOptions {\n\t\treturn {\n\t\t\t...resolveSSL(ssl)\n\t\t};\n\t}\n\t\n}\n", "export const isQuietSymbol = Symbol(\"isQuiet\");\nexport const requestListenersSymbol = Symbol(\"requestListeners\");\nexport const heartbeatIntervalSymbol = Symbol(\"heartbeatInterval\");\nexport const heartbeatTimeoutSymbol = Symbol(\"heartbeatTimeout\");\nexport const defibSymbol = Symbol(\"defib\");\nexport const heartbeatTsSymbol = Symbol(\"heartbeatTs\");\nexport const requestCounterSymbol = Symbol(\"requestCounter\");\n", "import { ClientRequest, IncomingMessage } from \"node:http\";\nimport { RawData, WebSocket } from \"ws\";\nimport { handleMongoError } from \"@nesvet/n\";\nimport {\n\tHEARTBEAT_GAP,\n\tHEARTBEAT_INTERVAL,\n\tREQUEST_COUNTER_LIMIT,\n\tREQUEST_HEADERS\n} from \"../common\";\nimport {\n\tdefibSymbol,\n\theartbeatIntervalSymbol,\n\theartbeatTimeoutSymbol,\n\theartbeatTsSymbol,\n\tisQuietSymbol,\n\trequestCounterSymbol,\n\trequestListenersSymbol\n} from \"./symbols\";\nimport { WSServer } from \"./WSServer\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class WSServerClient extends WebSocket {\n\ton(event: \"close\", listener: (this: this, code: number, reason: Buffer) => void): this;\n\ton(event: \"error\", listener: (this: this, error: Error) => void): this;\n\ton(event: \"upgrade\", listener: (this: this, request: IncomingMessage) => void): this;\n\ton(event: \"message\", listener: (this: this, data: RawData, isBinary: boolean) => void): this;\n\ton(event: \"open\", listener: (this: this) => void): this;\n\ton(event: \"unexpected-response\", listener: (this: this, request: ClientRequest, response: IncomingMessage) => void): this;\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this;\n\ton(event: string | symbol, listener: (this: this, ...args: any[]) => void): this {\n\t\treturn super.on(event, listener as (this: WebSocket, ...args: any[]) => void);\n\t}\n\t\n\tget isConnecting() {\n\t\treturn this.readyState === this.CONNECTING;\n\t}\n\t\n\tget isOpen() {\n\t\treturn this.readyState === this.OPEN;\n\t}\n\t\n\tget isClosing() {\n\t\treturn this.readyState === this.CLOSING;\n\t}\n\t\n\tget isClosed() {\n\t\treturn this.readyState === this.CLOSED;\n\t}\n\t\n\treadonly isWebSocketServerClient = true;\n\treadonly isWebSocketServer = false;\n\treadonly isWebSocket = false;\n\t\n\twss!: WSServer<this>;\n\t\n\tuserAgent = \"\";\n\t\n\tremoteAddress = \"\";\n\t\n\t[heartbeatTimeoutSymbol]?: ReturnType<typeof setTimeout>;\n\t\n\t[defibSymbol]() {\n\t\t\n\t\tclearTimeout(this[heartbeatTimeoutSymbol]);\n\t\t\n\t\tthis[heartbeatTimeoutSymbol] = setTimeout(\n\t\t\t() => this.terminate(),\n\t\t\tHEARTBEAT_INTERVAL + HEARTBEAT_GAP\n\t\t);\n\t\t\n\t}\n\t\n\tlatency = 0;\n\t\n\t[heartbeatTsSymbol]?: number;\n\t\n\t[heartbeatIntervalSymbol] = WSServerClient.makeHeartbeatInterval.call(this);\n\t\n\tsendMessage(...args: unknown[]) {\n\t\treturn this.send(JSON.stringify(args));\n\t}\n\t\n\t[requestCounterSymbol]: number = 0;\n\t\n\tsendRequest(...args: unknown[]) {\n\t\t\n\t\tconst id = this[requestCounterSymbol]++;\n\t\t\n\t\tif (this[requestCounterSymbol] >= REQUEST_COUNTER_LIMIT)\n\t\t\tthis[requestCounterSymbol] = 0;\n\t\t\n\t\tconst eventName = `message:${REQUEST_HEADERS.RESPONSE}-${id}`;\n\t\t\n\t\tif (typeof args.at(-1) == \"function\") {\n\t\t\tthis.once(eventName, args.splice(-1, 1)[0] as () => void);\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args);\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tthis.once(eventName, (error, result) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\treject(Object.assign(new Error(message), restProps) as Error);\n\t\t\t\t} else\n\t\t\t\t\tresolve(result);\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\tthis.sendMessage(REQUEST_HEADERS.REQUEST, id, ...args);\n\t\t\t\n\t\t});\n\t}\n\t\n\t\n\tstatic makeHeartbeatInterval(this: WSServerClient) {\n\t\treturn setInterval(() => {\n\t\t\t\n\t\t\tthis[heartbeatTsSymbol] = Date.now();\n\t\t\t\n\t\t\tthis.send(\"\");\n\t\t\t\n\t\t}, HEARTBEAT_INTERVAL);\n\t}\n\t\n\t/* Compatibility with Bun */\n\tstatic extend(this: WSServerClient) {\n\t\t\n\t\tObject.defineProperties(this, {\n\t\t\tisConnecting: {\n\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isConnecting\")!.get\n\t\t\t},\n\t\t\tisOpen: {\n\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isOpen\")!.get\n\t\t\t},\n\t\t\tisClosing: {\n\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isClosing\")!.get\n\t\t\t},\n\t\t\tisClosed: {\n\t\t\t\tget: Object.getOwnPropertyDescriptor(WSServerClient.prototype, \"isClosed\")!.get\n\t\t\t}\n\t\t});\n\t\t\n\t\tconst { terminate } = this as WebSocket;\n\t\t\n\t\tObject.assign(this, {\n\t\t\tisWebSocketServerClient: true,\n\t\t\tisWebSocketServer: false,\n\t\t\tisWebSocket: false,\n\t\t\t[defibSymbol]: WSServerClient.prototype[defibSymbol],\n\t\t\tlatency: 0,\n\t\t\t[heartbeatIntervalSymbol]: WSServerClient.makeHeartbeatInterval.call(this),\n\t\t\tsendMessage: WSServerClient.prototype.sendMessage,\n\t\t\tsendRequest: WSServerClient.prototype.sendRequest,\n\t\t\tterminate() { /* Workaround Bun's WebSocket#terminate bug */\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tterminate.call(this);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n\tstatic handleConnect(this: WSServerClient) {\n\t\t\n\t\tthis.on(\"message\", WSServerClient.handleMessage);\n\t\tthis.on(\"error\", WSServerClient.handleError);\n\t\tthis.on(\"close\", WSServerClient.handleClose);\n\t\t\n\t\tthis[defibSymbol]();\n\t\t\n\t}\n\t\n\tstatic handleMessage(this: WSServerClient, data: RawData) {\n\t\tconst message = data.toString();// eslint-disable-line @typescript-eslint/no-base-to-string\n\t\t\n\t\tthis[defibSymbol]();\n\t\t\n\t\tif (message)\n\t\t\tif (message === \"?\")\n\t\t\t\tthis.send(\"!\");\n\t\t\telse\n\t\t\t\ttry {\n\t\t\t\t\tconst [ kind, ...rest ] = JSON.parse(message);\n\t\t\t\t\t\n\t\t\t\t\tswitch (kind) {\n\t\t\t\t\t\tcase REQUEST_HEADERS.REQUEST:\n\t\t\t\t\t\t\tvoid WSServerClient.handleRequest.call(this, ...rest as [ id: number, kind: string, ...rest: unknown[] ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthis.emit(`message:${kind}`, ...rest);\n\t\t\t\t\t\t\tthis.wss.emit(\"client-message\", this, kind, ...rest);\n\t\t\t\t\t\t\tthis.wss.emit(`client-message:${kind}`, this, ...rest);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tWSServerClient.handleError.call(this, error as Error);\n\t\t\t\t}\n\t\telse if (this[heartbeatTsSymbol]) {\n\t\t\tthis.latency = Date.now() - this[heartbeatTsSymbol];\n\t\t\tthis[heartbeatTsSymbol] = undefined;\n\t\t}\n\t\t\n\t}\n\t\n\tstatic async handleRequest(this: WSServerClient, id: number, kind: string, ...rest: unknown[]) {\n\t\tconst listener = this.wss[requestListenersSymbol].get(kind);\n\t\t\n\t\tlet result;\n\t\tlet requestError = null;\n\t\t\n\t\tif (listener)\n\t\t\ttry {\n\t\t\t\tresult = await listener.call(this.wss, this, ...rest);\n\t\t\t} catch (error) {\n\t\t\t\tif (process.env.NODE_ENV === \"development\")\n\t\t\t\t\thandleMongoError(error);\n\t\t\t\t\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tconst { message, ...restProps } = error;\n\t\t\t\t\trequestError = { message, ...restProps };\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (process.env.NODE_ENV === \"development\" && !this.wss[isQuietSymbol])\n\t\t\t\t\tconsole.error(`${this.wss.icon}\u2757\uFE0F WS Server request \"${kind}\" (${id}):`, error);\n\t\t\t}\n\t\telse\n\t\t\trequestError = { message: `Unknown request kind \"${kind}\"` };\n\t\t\n\t\tthis.sendMessage(`${REQUEST_HEADERS.RESPONSE}-${id}`, requestError, result);\n\t\t\n\t}\n\t\n\tstatic handleError(this: WSServerClient, error: Error | Event | undefined) {\n\t\tif (error instanceof Event)\n\t\t\terror = undefined;\n\t\t\n\t\tif (!this.wss[isQuietSymbol])\n\t\t\tconsole.error(\n\t\t\t\t`${this.wss.icon}\u2757\uFE0F WS Server client`,\n\t\t\t\t\"user\" in this ? `\\x1B[1m${(this.user as { email: string }).email}\\x1B[0m:` : \"\\x1B[3manonymous\\x1B[0m:\",\n\t\t\t\terror\n\t\t\t);\n\t\t\n\t\tthis.wss.emit(\"client-error\", this, error);\n\t\t\n\t}\n\t\n\tstatic handleClose(this: WSServerClient, code: number, reason: Buffer) {\n\t\t\n\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\tconst reasonString = reason.toString();\n\t\t\t\n\t\t\tif (!this.wss[isQuietSymbol])\n\t\t\t\tconsole.info(\n\t\t\t\t\t`${this.wss.icon} WS Server:`,\n\t\t\t\t\t\"user\" in this ? `\\x1B[1m${(this.user as { email: string }).email}\\x1B[0m` : \"\\x1B[3manonymous\\x1B[0m\",\n\t\t\t\t\t`disconnected ${code ? `with code ${code}` : \"\"} ${code && reasonString ? \"and \" : \"\"}${reasonString ? `reason \"${reasonString}\"` : \"\"}`\n\t\t\t\t);\n\t\t}\n\t\t\n\t\tclearTimeout(this[heartbeatTimeoutSymbol]);\n\t\tclearInterval(this[heartbeatIntervalSymbol]);\n\t\t\n\t\tthis.wss.emit(\"client-close\", this);\n\t\tthis.wss.emit(\"client-closed\", this);\n\t\t\n\t}\n\t\n}\n", "export function noop() { /**/ }\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Value<T> = PromiseLike<T> | T;\ntype Resolve<T> = (value: Value<T>) => void;\ntype Reject = (reason?: any) => void;\n\ntype Options = {\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n};\n\nconst nativesMap = new WeakMap<StatefulPromise<any>, { resolve: Resolve<any>; reject: Reject }>();\n\n\nexport class StatefulPromise<T> extends Promise<T> {\n\tconstructor(\n\t\texecutor?: (resolve: Resolve<T>, reject: Reject) => void,\n\t\toptions?: Options\n\t) {\n\t\tlet nativeResolve: Resolve<T>;\n\t\tlet nativeReject: Reject;\n\t\t\n\t\tsuper((resolve, reject) => {\n\t\t\tnativeResolve = resolve;\n\t\t\tnativeReject = reject;\n\t\t\t\n\t\t});\n\t\t\n\t\tnativesMap.set(this, { resolve: nativeResolve!, reject: nativeReject! });\n\t\t\n\t\tif (options?.signal)\n\t\t\tif (options.signal.aborted)\n\t\t\t\tthis.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\telse {\n\t\t\t\tconst abortListener = () => this.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\t\t\n\t\t\t\toptions.signal.addEventListener(\"abort\", abortListener);\n\t\t\t\t\n\t\t\t\tthis.finally(() => options.signal?.removeEventListener(\"abort\", abortListener));\n\t\t\t}\n\t\t\n\t\tif (typeof options?.timeout === \"number\" && Number.isFinite(options.timeout)) {\n\t\t\tconst timeout = setTimeout(() => this.reject(new DOMException(\"Timeout exceeded\", \"TimeoutError\")), options.timeout);\n\t\t\t\n\t\t\tthis.finally(() => clearTimeout(timeout));\n\t\t}\n\t\t\n\t\texecutor?.(this.resolve, this.reject);\n\t\t\n\t}\n\t\n\tisPending = true;\n\tisFulfilled = false;\n\tisRejected = false;\n\t\n\tstate: \"fulfilled\" | \"pending\" | \"rejected\" = \"pending\";\n\t\n\tresult?: T | unknown;\n\t\n\treadonly resolve = (value: Value<T>) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isFulfilled = true;\n\t\t\tthis.state = \"fulfilled\";\n\t\t\tthis.result = value;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.resolve.call(this, value);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\treadonly reject = (reason?: any) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isRejected = true;\n\t\t\tthis.state = \"rejected\";\n\t\t\tthis.result = reason;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.reject.call(this, reason);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic resolved<U>(value: U): StatefulPromise<U> {\n\t\treturn new StatefulPromise<U>(resolve => resolve(value));\n\t}\n\t\n\tstatic rejected(reason: unknown): StatefulPromise<never> {\n\t\treturn new StatefulPromise((_, reject) => reject(reason));\n\t}\n\t\n}\n", "import { noop } from \"./noop.js\";\nimport { StatefulPromise } from \"./StatefulPromise.js\";\n\n\ntype Callback = (...args: any[]) => unknown;// eslint-disable-line @typescript-eslint/no-explicit-any\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\n\ntype DebouncedFunction<C extends Callback> = {\n\t(this: ThisParameterType<C>, ...args: Parameters<C>): Promise<Awaited<ReturnType<C>>>;\n};\n\nexport type Debounced<C extends Callback, R extends ReturnType<C>> = DebouncedFunction<C> & {\n\tcallback: C;\n\tpromise: StatefulPromise<R>;\n\tresolve: (value: R) => void;\n\treject: (reason?: unknown) => void;\n\trun(): Promise<R>;\n\tclear(shouldRun?: boolean): Promise<void>;\n};\n\n\nexport function debounce<C extends Callback, R extends ReturnType<C>>(callback: C, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\tlet maxWaitTimeout: ReturnType<typeof setTimeout> | undefined;\n\tlet end: number | undefined;\n\tlet context: ThisParameterType<C>;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: R;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\t\n\t\t\tdebounced.resolve(result);\n\t\t\t\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\t\n\t\trun();\n\t\t\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\ttry {\n\t\t\tresult = await callback.apply(context, args) as R;\n\t\t\t\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tdebounced.reject(error);\n\t\t\t\n\t\t\tthrow error;\n\t\t}\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<C, R> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (!debounced.promise.isPending)\n\t\t\tdebounced.promise = new StatefulPromise<R>((resolve, reject) => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\tdebounced.reject = reject;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\t\n\t\t\t\t\tinitial = false;\n\t\t\t\t\t\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\t\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<C>, {\n\t\tcallback,\n\t\tpromise: StatefulPromise.resolved(undefined as unknown as R),\n\t\tresolve: noop,\n\t\treject: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: StatefulPromise.resolved(undefined), // eslint-disable-line unicorn/no-useless-undefined\n\tresolve: noop,\n\treject: noop,\n\trun: noop,\n\tclear: noop\n}) as Debounced<() => void, void>;\n\n\nexport function throttle(callback: Callback, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function indent(string: string, indentation: string = \"\\t\", times: number = 1): string {\n\tif (!string)\n\t\treturn string;\n\t\n\tconst prefix = indentation.repeat(times);\n\t\n\treturn string.split(\"\\n\").map(line => `${prefix}${line}`).join(\"\\n\");\n}\n", "import { indent } from \"./indent.js\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype MongoServerError = {\n\terrorResponse: {\n\t\terrmsg: string;\n\t\terrInfo?: {\n\t\t\t[key: string]: any;\n\t\t};\n\t};\n\t[key: string]: any;\n};\n\nfunction isMongoServerError(error: unknown): error is MongoServerError {\n\treturn (\n\t\t!!error &&\n\t\ttypeof error == \"object\" &&\n\t\t\"errorResponse\" in error &&\n\t\t!!error.errorResponse &&\n\t\ttypeof error.errorResponse == \"object\" &&\n\t\t\"errInfo\" in error.errorResponse\n\t);\n}\n\nexport function handleMongoError<E extends MongoServerError>(error: E): E;\nexport function handleMongoError(error: any): any;\nexport function handleMongoError(error: any) {\n\tif (isMongoServerError(error) && error.errorResponse.errmsg === \"Document failed validation\")\n\t\terror.message = `${error.errorResponse.errmsg}\\n${indent(`failingDocumentId: ${error.errorResponse.errInfo?.failingDocumentId}\\nschemaRulesNotSatisfied: ${JSON.stringify(error.errorResponse.errInfo?.details?.schemaRulesNotSatisfied, null, \" \")}`, \" \")}`;\n\t\n\treturn error;\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "export const HEARTBEAT_INTERVAL = 5_000;\nexport const HEARTBEAT_GAP = 30_000;\nexport const RESPONSIVENESS_TIMEOUT = 1000;\nexport const OFFLINE_TIMEOUT = 5000;\nexport const REQUEST_COUNTER_LIMIT = Number.MAX_SAFE_INTEGER / 2;\n\nexport const CODES = {\n\tNORMAL: 1000,\n\tPROTOCOL_ERROR: 1002,\n\tABNORMAL: 1006,\n\tNO_HEARTBEAT: 3000,\n\tOFFLINE: 3001,\n\tMANUAL: 3500,\n\tREOPEN: 4000\n} as const;\n\nexport const NON_RECONNECTABLE_CODES = [\n\tCODES.PROTOCOL_ERROR,\n\tCODES.MANUAL,\n\tCODES.REOPEN\n];\n\nexport const REQUEST_HEADERS = {\n\tREQUEST: \"~r-q\",\n\tRESPONSE: \"~r-s\"\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["WebSocketServer", "createServer", "getRemoteAddress", "resolveSSL", "showServerListeningMessage", "isQuietSymbol", "requestListenersSymbol", "heartbeatIntervalSymbol", "heartbeatTimeoutSymbol", "defibSymbol", "heartbeatTsSymbol", "requestCounterSymbol", "WebSocket", "noop", "nativesMap", "StatefulPromise", "_StatefulPromise", "executor", "options", "nativeResolve", "nativeReject", "resolve", "reject", "abortListener", "timeout", "value", "native", "reason", "_", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "error", "_args", "StatefulPromise", "resolve", "reject", "noop", "shouldRun", "indent", "string", "indentation", "times", "prefix", "line", "isMongoServerError", "error", "handleMongoError", "indent", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "REQUEST_COUNTER_LIMIT", "CODES", "NON_RECONNECTABLE_CODES", "REQUEST_HEADERS", "WSServerClient", "_WSServerClient", "WebSocket", "event", "listener", "heartbeatTimeoutSymbol", "defibSymbol", "heartbeatTsSymbol", "heartbeatIntervalSymbol", "args", "requestCounterSymbol", "id", "REQUEST_COUNTER_LIMIT", "eventName", "REQUEST_HEADERS", "resolve", "reject", "error", "result", "message", "restProps", "terminate", "data", "kind", "rest", "requestListenersSymbol", "requestError", "handleMongoError", "isQuietSymbol", "code", "reason", "reasonString", "WSServer", "_WSServer", "WebSocketServer", "options", "_", "port", "server", "createServer", "quiet", "wssOptions", "WSServerClient", "resolve", "showServerListeningMessage", "isQuietSymbol", "#handleConnection", "error", "event", "listener", "requestListenersSymbol", "kind", "wssc", "request", "getRemoteAddress", "ssl", "resolveSSL"]
|
|
7
7
|
}
|
package/dist/server/symbols.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
export declare const isQuietSymbol: unique symbol;
|
|
2
|
+
export declare const requestListenersSymbol: unique symbol;
|
|
1
3
|
export declare const heartbeatIntervalSymbol: unique symbol;
|
|
4
|
+
export declare const heartbeatTimeoutSymbol: unique symbol;
|
|
2
5
|
export declare const defibSymbol: unique symbol;
|
|
3
|
-
export declare const
|
|
6
|
+
export declare const heartbeatTsSymbol: unique symbol;
|
|
7
|
+
export declare const requestCounterSymbol: unique symbol;
|
|
4
8
|
//# sourceMappingURL=symbols.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/server/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,eAA8B,CAAC;AACnE,eAAO,MAAM,WAAW,eAAkB,CAAC;AAC3C,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/server/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,eAAoB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,eAA6B,CAAC;AACjE,eAAO,MAAM,uBAAuB,eAA8B,CAAC;AACnE,eAAO,MAAM,sBAAsB,eAA6B,CAAC;AACjE,eAAO,MAAM,WAAW,eAAkB,CAAC;AAC3C,eAAO,MAAM,iBAAiB,eAAwB,CAAC;AACvD,eAAO,MAAM,oBAAoB,eAA2B,CAAC"}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -9,7 +9,8 @@ export type Options<WSSC extends WSServerClient> = Omit<ServerOptions<typeof WSS
|
|
|
9
9
|
WebSocket?: typeof WSServerClient & {
|
|
10
10
|
new (...args: any[]): WSSC;
|
|
11
11
|
};
|
|
12
|
+
quiet?: boolean;
|
|
12
13
|
};
|
|
13
|
-
export type RequestListener<WSSC extends WSServerClient> = (wscc: WSSC, ...args: any[]) =>
|
|
14
|
+
export type RequestListener<WSSC extends WSServerClient> = (wscc: WSSC, ...args: any[]) => any;
|
|
14
15
|
export type CompatibleListener = () => void;
|
|
15
16
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,MAAM,MAAM,OAAO,CAAC,IAAI,SAAS,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,GAAG;IACvG,GAAG,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,cAAc,GAAG;QACnC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;KAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,MAAM,MAAM,OAAO,CAAC,IAAI,SAAS,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,GAAG;IACvG,GAAG,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,cAAc,GAAG;QACnC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,IAAI,SAAS,cAAc,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAE/F,MAAM,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
2
|
+
"name": "insite-ws",
|
|
3
|
+
"version": "2.3.0",
|
|
4
|
+
"description": "inSite WebSockets",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
"./server": "./dist/server/index.js",
|
|
8
|
+
"./client": "./dist/client/index.js",
|
|
9
|
+
"./client/node": "./dist/client/node/index.js"
|
|
10
|
+
},
|
|
11
|
+
"packageManager": "bun@1.2.11",
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
14
|
+
"build": "bun .conveyer.js",
|
|
15
|
+
"postbuild": "tsc -p ."
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/nesvet/insite-ws.git"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"insite",
|
|
23
|
+
"ws",
|
|
24
|
+
"websockets"
|
|
25
|
+
],
|
|
26
|
+
"author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@nesvet/n": "^1.2.0",
|
|
30
|
+
"eventemitter3": "^5.0.1",
|
|
31
|
+
"insite-common": "^2.3.0",
|
|
32
|
+
"ws": "^8.18.2"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@nesvet/conveyer": "^2.5.2",
|
|
36
|
+
"@nesvet/eslint-config": "^2.1.1",
|
|
37
|
+
"@types/node": "^22.15.3",
|
|
38
|
+
"@types/ws": "^8.18.1",
|
|
39
|
+
"typescript": "^5.8.3"
|
|
40
|
+
}
|
|
40
41
|
}
|