insite-ws-transfers 2.0.16 → 2.0.17
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/IncomingTransfer.d.ts +2 -2
- package/dist/IncomingTransfer.d.ts.map +1 -1
- package/dist/IncomingTransport.d.ts +4 -3
- package/dist/IncomingTransport.d.ts.map +1 -1
- package/dist/OutgoingTransfer.d.ts +2 -2
- package/dist/OutgoingTransfer.d.ts.map +1 -1
- package/dist/OutgoingTransport.d.ts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +3 -3
- package/dist/browser/types.d.ts +16 -1
- package/dist/browser/types.d.ts.map +1 -1
- package/dist/node/incoming.d.ts +1 -1
- package/dist/node/incoming.d.ts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +3 -3
- package/dist/node/outgoing.d.ts +1 -1
- package/dist/node/outgoing.d.ts.map +1 -1
- package/dist/node/types.d.ts +16 -1
- package/dist/node/types.d.ts.map +1 -1
- package/dist/types.d.ts +14 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { InSiteWebSocket } from "insite-ws/client";
|
|
2
2
|
import type { InSiteWebSocketServerClient } from "insite-ws/server";
|
|
3
|
-
import type { IncomingChunk, IncomingData, IncomingTransferListener, IncomingTransferProps, IncomingTransferTypes,
|
|
3
|
+
import type { IncomingChunk, IncomingData, IncomingTransferHandles, IncomingTransferListener, IncomingTransferProps, IncomingTransferTypes, TransferTypes } from "./types";
|
|
4
4
|
export declare class IncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {
|
|
5
5
|
#private;
|
|
6
|
-
constructor(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, id: string, { type, collect, encoding, size, metadata }: IncomingTransferProps<TransferTypes>, handles:
|
|
6
|
+
constructor(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, id: string, { type, collect, encoding, size, metadata }: IncomingTransferProps<TransferTypes>, handles: IncomingTransferHandles, listeners: Set<IncomingTransferListener<WSORWSSC, any>>);
|
|
7
7
|
ws: InSiteWebSocket | Exclude<WSORWSSC, InSiteWebSocket>;
|
|
8
8
|
kind: string;
|
|
9
9
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncomingTransfer.d.ts","sourceRoot":"","sources":["../src/IncomingTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,wBAAwB,EAExB,qBAAqB,EACrB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"IncomingTransfer.d.ts","sourceRoot":"","sources":["../src/IncomingTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EAExB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,MAAM,SAAS,CAAC;AAMjB,qBAAa,gBAAgB,CAAC,QAAQ,SAAS,eAAe,GAAG,2BAA2B;;gBAE1F,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,eAAe,EACxD,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EACC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,EAAE,qBAAqB,CAAC,aAAa,CAAC,EACvC,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,GAAG,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAoBxD,EAAE,uDAAC;IAEH,IAAI,SAAC;IACL,EAAE,SAAC;IACH,IAAI,gBAAC;IACL,OAAO,UAAC;IACR,QAAQ,+BAAC;IACT,IAAI,SAAC;IACL,QAAQ,0BAAC;IAOT,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB,SAAS,UAAS;IAClB,iBAAiB,UAAS;IAC1B,mBAAmB,UAAS;IAC5B,YAAY,UAAS;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAQ;IAI9B,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAQ;IAC/B,cAAc,SAAK;IACnB,aAAa,SAAK;IAClB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAQ;IACjC,QAAQ,SAAK;IACb,KAAK,EAAE,IAAI,GAAG,MAAM,CAAQ;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAQ;IAE3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAkBzC,SAAS;IAIH,OAAO;IAwBb,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,SAAe;IA4CvD,UAAU;IAqCV,KAAK,CAAC,QAAQ,UAAQ;IAStB,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,UAAO;IAoB/C,SAAS;;;;;;;;;;;;;;;;;;;;;;IA0BT,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,eAAe,GAAG,2BAA2B,CAAC,EAAE,aAAa,CAAC,CAuDjH;CAEF"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { InSiteWebSocket } from "insite-ws/client";
|
|
2
2
|
import type { InSiteWebSocketServer, InSiteWebSocketServerClient } from "insite-ws/server";
|
|
3
3
|
import { IncomingTransfer } from "./IncomingTransfer";
|
|
4
|
-
import type { IncomingTransferListener, IncomingTransportOptions, TransferTypes } from "./types";
|
|
4
|
+
import type { IncomingTransferListener, IncomingTransferListenerOptions, IncomingTransportOptions, TransferTypes } from "./types";
|
|
5
5
|
export declare class IncomingTransport<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient, T extends IncomingTransfer<WSORWSSC>, Types extends TransferTypes = TransferTypes> {
|
|
6
6
|
#private;
|
|
7
7
|
constructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, options?: IncomingTransportOptions);
|
|
8
8
|
sizeLimit: number;
|
|
9
|
-
addTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T
|
|
10
|
-
on: (kind: string, listener: IncomingTransferListener<WSORWSSC, T
|
|
9
|
+
addTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: IncomingTransferListenerOptions): this;
|
|
10
|
+
on: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: IncomingTransferListenerOptions) => this;
|
|
11
|
+
once(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: Omit<IncomingTransferListenerOptions, "once">): this;
|
|
11
12
|
removeTransferListener(kind: string, listener?: IncomingTransferListener<WSORWSSC, T>): this;
|
|
12
13
|
off: (kind: string, listener?: IncomingTransferListener<WSORWSSC, T>) => this;
|
|
13
14
|
private handleRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncomingTransport.d.ts","sourceRoot":"","sources":["../src/IncomingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"IncomingTransport.d.ts","sourceRoot":"","sources":["../src/IncomingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAGX,wBAAwB,EACxB,+BAA+B,EAE/B,wBAAwB,EAExB,aAAa,EACb,MAAM,SAAS,CAAC;AAGjB,qBAAa,iBAAiB,CAC7B,QAAQ,SAAS,eAAe,GAAG,2BAA2B,EAC9D,CAAC,SAAS,gBAAgB,CAAC,QAAQ,CAAC,EACpC,KAAK,SAAS,aAAa,GAAG,aAAa;;gBAE/B,EAAE,EAAE,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,OAAO,GAAE,wBAA6B;IA2BnI,SAAS,SAAC;IAIV,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,+BAA+B;IAU5H,EAAE,SAVwB,MAAM,YAAY,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,+BAA+B,UAU9F;IAE9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC;IAI3H,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC;IAgBrF,GAAG,SAhB0B,MAAM,aAAa,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,UAgBnD;IAYlC,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;IAMnB,MAAM,CAAC,QAAQ,0BAAoB;CAEnC"}
|
|
@@ -2,10 +2,10 @@ import type { InSiteWebSocket } from "insite-ws/client";
|
|
|
2
2
|
import type { InSiteWebSocketServerClient } from "insite-ws/server";
|
|
3
3
|
import { StringStreamer } from "./StringStreamer";
|
|
4
4
|
import type { FileStreamer } from "./browser/FileStreamer";
|
|
5
|
-
import type { OutgoingChunk, OutgoingTransferProps, OutgoingTransferTypes,
|
|
5
|
+
import type { OutgoingChunk, OutgoingTransferHandles, OutgoingTransferProps, OutgoingTransferTypes, TransferTypes } from "./types";
|
|
6
6
|
export declare class OutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {
|
|
7
7
|
#private;
|
|
8
|
-
constructor(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, { data, type, incomingType, collect, metadata, size, chunkSize, encoding, incomingEncoding, onBegin, onSenderProgress, onProgress, onEnd, onError }: OutgoingTransferProps<WSORWSSC, any, any>, handles:
|
|
8
|
+
constructor(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, { data, type, incomingType, collect, metadata, size, chunkSize, encoding, incomingEncoding, onBegin, onSenderProgress, onProgress, onEnd, onError }: OutgoingTransferProps<WSORWSSC, any, any>, handles: OutgoingTransferHandles);
|
|
9
9
|
ws: InSiteWebSocket | Exclude<WSORWSSC, InSiteWebSocket>;
|
|
10
10
|
kind: string;
|
|
11
11
|
data?: import("./types").OutgoingData | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutgoingTransfer.d.ts","sourceRoot":"","sources":["../src/OutgoingTransfer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OutgoingTransfer.d.ts","sourceRoot":"","sources":["../src/OutgoingTransfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EACX,aAAa,EACb,uBAAuB,EAEvB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,MAAM,SAAS,CAAC;AASjB,qBAAa,gBAAgB,CAAC,QAAQ,SAAS,eAAe,GAAG,2BAA2B;;gBAE1F,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,eAAe,EACxD,IAAI,EAAE,MAAM,EACZ,EACC,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,KAAK,EACL,OAAO,EACP,EAAE,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5C,OAAO,EAAE,uBAAuB;IA+BjC,EAAE,uDAAC;IAEH,IAAI,SAAC;IACL,IAAI,CAAC,6CAAC;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,UAAC;IACR,QAAQ,sCAAC;IACT,IAAI,gBAAC;IACL,QAAQ,2CAAC;IACT,SAAS,SAAC;IAYV,EAAE,SAAS;IAEX,SAAS,UAAS;IAClB,YAAY,UAAS;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAQ;IAI9B,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAQ;IAC/B,cAAc,SAAK;IACnB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAQ;IACjC,cAAc,SAAK;IACnB,QAAQ,EAAE,MAAM,CAAK;IACrB,KAAK,EAAE,IAAI,GAAG,MAAM,CAAQ;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IA2BzC,SAAS;IAIH,aAAa,CAAC,eAAe,EAAE,MAAM;IAa3C,WAAW,UAAW,aAAa,UAQjC;IAkCF,IAAI,aAAoD;IAExD,cAAc,CAAC,QAAQ,EAAE,MAAM;IAOzB,eAAe;IAwBrB,KAAK,CAAC,YAAY,EAAE,MAAM;IAU1B,KAAK;IASL,SAAS;;;;;;;;;;;;;;;;;;;;IAwBT,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,eAAe,GAAG,2BAA2B,CAAC,EAAE,aAAa,CAAC,CA0DjH;IAEF,MAAM,CAAC,SAAS,SAAoB;CAEpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutgoingTransport.d.ts","sourceRoot":"","sources":["../src/OutgoingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"OutgoingTransport.d.ts","sourceRoot":"","sources":["../src/OutgoingTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAEX,qBAAqB,EAErB,aAAa,EACb,MAAM,SAAS,CAAC;AAGjB,qBAAa,iBAAiB,CAC7B,QAAQ,SAAS,eAAe,GAAG,2BAA2B,EAC9D,CAAC,SAAS,gBAAgB,CAAC,QAAQ,CAAC,EACpC,KAAK,SAAS,aAAa,GAAG,aAAa;;gBAE/B,EAAE,EAAE,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAgC3F,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;IAWjI,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAMnB,MAAM,CAAC,QAAQ,0BAAoB;CAEnC"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/browser/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Me=Object.defineProperty;var Ie=n=>{throw TypeError(n)};var Ee=(n,e,t)=>e in n?Me(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var r=(n,e,t)=>Ee(n,typeof e!="symbol"?e+"":e,t),me=(n,e,t)=>e.has(n)||Ie("Cannot "+t);var s=(n,e,t)=>(me(n,e,"read from private field"),t?t.call(n):e.get(n)),a=(n,e,t)=>e.has(n)?Ie("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),h=(n,e,t,i)=>(me(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),f=(n,e,t)=>(me(n,e,"access private method"),t);var c={request:"~t-request",confirm:"~t-confirm",chunk:"~t-c",progress:"~t-p",sent:"~t-sent",completed:"~t-completed",abort:"~t-abort",error:"~t-error"},Ce=10*1024*1024*1024,Oe=1024*256,ve=250;var C,F,O,Z,y,q,D,R,H,ee,x,ze,ge,ye,v=class{constructor(e,t,i,{type:o,collect:l,encoding:u,size:m,metadata:p},M,E){a(this,x);r(this,"ws");a(this,C);r(this,"kind");r(this,"id");r(this,"type");r(this,"collect");r(this,"encoding");r(this,"size");r(this,"metadata");a(this,F);a(this,O);a(this,Z);r(this,"data");a(this,y);r(this,"isAborted",!1);r(this,"isAbortedBySender",!1);r(this,"isAbortedByReceiver",!1);r(this,"isTransfered",!1);r(this,"confirmResponse");r(this,"beginAt",null);a(this,q,null);a(this,D,[]);a(this,R,!1);r(this,"duration",null);r(this,"transferedSize",0);r(this,"processedSize",0);r(this,"bytesPerMs",null);r(this,"progress",0);r(this,"endAt",null);r(this,"error",null);a(this,H);a(this,ee,0);this.ws=e,h(this,C,e.isWebSocket?[e]:[e.wss,e]),this.kind=t,this.id=i,this.type=o,this.collect=!!l,this.encoding=u,this.size=m,this.metadata=p,h(this,F,M),h(this,O,E),h(this,Z,f(this,x,ze).call(this))}whenSetUp(){return s(this,Z)}async confirm(){for(let{begin:e}of s(this,O))if(await e?.call(...s(this,C),this)===!1)return this.throw("Transfer was rejected by receiver");return this.beginAt=h(this,q,Date.now()),this.ws.sendMessage(c.confirm,this.id,this.confirmResponse),h(this,H,setInterval(()=>{s(this,ee)!==this.progress&&(h(this,ee,this.progress),this.ws.sendMessage(c.progress,this.id,this.progress))},ve)),null}handleChunk(e,t=e.length){let i=Date.now();this.bytesPerMs=t/(i-s(this,q)),h(this,q,i),this.transferedSize+=t,s(this,D).push([e,t]),s(this,R)||(h(this,R,!0),f(this,x,ge).call(this))}handleSent(){this.isTransfered=!0,this.size||(this.size=this.transferedSize),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,s(this,R)||f(this,x,ye).call(this)}abort(e=!1){return this.isAborted=!0,this.isAbortedBySender=e,this.isAbortedByReceiver=!e,this.throw(`Transfer is aborted by ${e?"sender":"receiver"}`,!e)}throw(e,t=!0){s(this,F).delete(this.id),clearInterval(s(this,H)),this.error=new Error(e);for(let{error:i}of s(this,O))i?.call(...s(this,C),this,this.error);t&&this.ws.sendMessage(c.error,this.id,e)}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isAbortedBySender:this.isAbortedBySender,isAbortedByReceiver:this.isAbortedByReceiver,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,processedSize:this.processedSize,bytesPerMs:this.bytesPerMs,progress:this.progress,endAt:this.endAt,error:this.error}}};C=new WeakMap,F=new WeakMap,O=new WeakMap,Z=new WeakMap,y=new WeakMap,q=new WeakMap,D=new WeakMap,R=new WeakMap,H=new WeakMap,ee=new WeakMap,x=new WeakSet,ze=async function(){if(h(this,y,this.constructor.types[this.type]),s(this,y))await s(this,y).setup.call(this);else throw new Error(`Unknown type of transfer "${String(this.type)}"`);this.confirm()},ge=async function(){let[e,t]=s(this,D).shift();s(this,y).transformChunk&&(e=await s(this,y).transformChunk.call(this,e)),this.collect&&await s(this,y).collect.call(this,e);for(let{chunk:i,progress:o}of s(this,O))await(i??o)?.call(...s(this,C),this,e);this.processedSize+=t,this.size&&(this.progress=this.processedSize/this.size),s(this,D).length?f(this,x,ge).call(this):(h(this,R,!1),this.isTransfered&&f(this,x,ye).call(this))},ye=async function(){this.progress=1,await s(this,y).done?.call(this);for(let{end:e}of s(this,O))await e?.call(...s(this,C),this);clearInterval(s(this,H)),s(this,F).delete(this.id),this.ws.sendMessage(c.completed,this.id)},r(v,"types",{object:{setup(){this.data=""},collect(e){this.data+=e},done(){this.data=JSON.parse(this.data)}},datauri:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&(this.data=`data:${this.metadata.type};base64,${this.data}`)}},string:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e}}});var b,k,le,te=class{constructor(e,t={}){r(this,"sizeLimit");a(this,b,new Map);r(this,"on",this.addTransferListener);r(this,"off",this.removeTransferListener);a(this,k,new Map);a(this,le,{delete:e=>s(this,k).delete(e)});let{sizeLimit:i=Ce}=t;this.sizeLimit=i,e.isWebSocketServer?(e.on(`client-message:${c.request}`,(o,...l)=>this.handleRequest(o,...l)),e.on(`client-message:${c.chunk}`,(o,...l)=>this.handleChunk(o,...l)),e.on(`client-message:${c.sent}`,(o,...l)=>this.handleSent(o,...l)),e.on(`client-message:${c.abort}`,(o,...l)=>this.handleAbort(o,...l))):(e.on(`message:${c.request}`,(...o)=>this.handleRequest(e,...o)),e.on(`message:${c.chunk}`,(...o)=>this.handleChunk(e,...o)),e.on(`message:${c.sent}`,(...o)=>this.handleSent(e,...o)),e.on(`message:${c.abort}`,(...o)=>this.handleAbort(e,...o)))}addTransferListener(e,t){return s(this,b).get(e)?.add(t)??s(this,b).set(e,new Set([t])),this}removeTransferListener(e,t){return t?s(this,b).get(e)?.delete(t):s(this,b).delete(e),this}handleRequest(e,t,i,{type:o,size:l,metadata:u,...m}){let{Transfer:p}=this.constructor;s(this,b).has(t)?s(this,k).has(i)?e.sendMessage(c.error,i,"Transfer already exists"):o in p.types?l>this.sizeLimit?e.sendMessage(c.error,i,`Transfer size (${l} bytes) exeeds limit of ${this.sizeLimit} bytes`):s(this,k).set(i,new p(e,t,i,{type:o,size:l,metadata:u,...m},s(this,le),s(this,b).get(t))):e.sendMessage(c.error,i,"Unknown type of transfer"):e.sendMessage(c.error,i,`Unknown kind of file "${t}"`)}handleChunk(e,t,i,o=i.length){s(this,k).get(t)?.handleChunk(i,o)}handleSent(e,t){s(this,k).get(t)?.handleSent()}handleAbort(e,t){s(this,k).get(t)?.abort(!0)}};b=new WeakMap,k=new WeakMap,le=new WeakMap,r(te,"Transfer",v);var fe=class extends v{};r(fe,"types",{file:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&this.encoding==="utf8"&&(this.data=atob(this.data))}},...v.types});var xe=class extends te{};r(xe,"Transfer",fe);function N(){}function Le(n,e=0,t={}){let{leading:i=!1,trailing:o=!0}=t,{maxWait:l=1/0}=t,u,m,p,M,E,w,d,L,Y=async()=>{let B=Date.now();B>=p?(u=void 0,p=void 0,clearTimeout(m),typeof d=="function"&&await d(),S.resolve(L),S.promise.isResolved=!0,w=i):(clearTimeout(u),u=setTimeout(Y,p-B))},j=Number.isFinite(l)?()=>{d===g&&(d=!1),g(),m=setTimeout(j,l)}:null;async function g(){return L=await n.apply(M,E)}i&&typeof i=="boolean"&&(i=g),w=i,o&&typeof o=="boolean"&&(o=g),d=o;let S=Object.assign(function(...B){return E=B,M=this,p=Date.now()+e,d=o,S.promise.isResolved&&(S.promise=Object.assign(new Promise($e=>{S.resolve=$e,typeof w=="function"&&(w(),w=!1,d===g&&(d=!1)),u||(u=setTimeout(Y,e),j&&(m=setTimeout(j,l)))}),{isResolved:!1})),S.promise},{callback:n,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:N,run:g,clear:async B=>{clearTimeout(u),u=void 0,clearTimeout(m),S.promise.isResolved=!0,S.resolve(B?await g():L)}});return S}Le.noop=Object.assign(()=>{},{callback:N,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:N,run:N,clear:N});function we(n,e,t,i,o=!0){return Array.isArray(n)&&(n=n.length),typeof i!="string"&&(o=i??!0,i=t),(o?`${n}\xA0`:"")+we.raw(n,e,t,i)}we.raw=(n,e,t,i=t)=>{n=Math.abs(n);let o=n%10,l=n%100;return o===1&&l!==11?e:o>=2&&o<=4&&!(l>=12&&l<=15)?t:i};function Re(n="",e=""){return`${n}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}var U,A,se,We,_=class{constructor(e,t={}){a(this,se);r(this,"string");r(this,"size");r(this,"chunkSize");r(this,"listener");a(this,U,0);a(this,A,0);r(this,"isAborted",!1);this.string=e,this.size=this.string.length;let{chunkSize:i=1024*256}=t;this.chunkSize=i}start(e){this.listener=e,f(this,se,We).call(this)}abort(){this.isAborted=!0}};U=new WeakMap,A=new WeakMap,se=new WeakSet,We=async function(){if(!this.isAborted){h(this,A,Math.min(s(this,U)+this.chunkSize,this.size));let e=await new Promise(t=>{t(this.string.slice(s(this,U),s(this,A)))});this.isAborted||(await this.listener(e),s(this,A)<this.size&&(h(this,U,s(this,A)),f(this,se,We).call(this)))}};var W,J,re,ie,Q,ne,oe,ae,z,G,K,X,P,Ae,be,T=class{constructor(e,t,{data:i,type:o,incomingType:l,collect:u,metadata:m,size:p,chunkSize:M,encoding:E,incomingEncoding:w,onBegin:d,onSenderProgress:L,onProgress:Y,onEnd:j,onError:g},S){a(this,P);r(this,"ws");a(this,W);r(this,"kind");r(this,"data");r(this,"type");r(this,"collect");r(this,"metadata");r(this,"size");r(this,"encoding");r(this,"chunkSize");a(this,J);a(this,re);a(this,ie);a(this,Q);a(this,ne);a(this,oe);a(this,ae);r(this,"id",Re());a(this,z);r(this,"isAborted",!1);r(this,"isTransfered",!1);r(this,"confirmResponse");r(this,"beginAt",null);a(this,G,null);a(this,K,[]);a(this,X,!1);r(this,"duration",null);r(this,"transferedSize",0);r(this,"bytesPerMs",null);r(this,"senderProgress",0);r(this,"progress",0);r(this,"endAt",null);r(this,"error",null);r(this,"stringStreamer");r(this,"fileStreamer");r(this,"handleChunk",e=>{s(this,K).push(e),s(this,X)||(h(this,X,!0),f(this,P,be).call(this))});r(this,"sent",()=>this.ws.sendMessage(c.sent,this.id));this.ws=e,h(this,W,e.isWebSocket?[e]:[e.wss,e]),this.kind=t,this.data=i,this.type=o,this.collect=u??!1,this.metadata=m,this.size=p??null,this.encoding=E,this.chunkSize=M??this.constructor.chunkSize,h(this,J,S),d&&h(this,re,d),L&&h(this,ie,L),Y&&h(this,Q,Y),j&&h(this,ne,j),g&&h(this,oe,g),h(this,ae,f(this,P,Ae).call(this,l,w))}whenSetUp(){return s(this,ae)}async handleConfirm(e){this.confirmResponse=e,this.beginAt=h(this,G,Date.now()),await s(this,re)?.call(...s(this,W),this),s(this,z).confirm.call(this)}handleProgress(e){this.progress=e,s(this,Q)?.call(...s(this,W),this)}async handleCompleted(){this.isTransfered=!0,this.size||(this.size=this.transferedSize,this.senderProgress=1),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,s(this,J).delete(this.id),this.progress!==1&&(this.progress=1,await s(this,Q)?.call(...s(this,W),this)),s(this,ne)?.call(...s(this,W),this)}throw(e){s(this,J).delete(this.id),this.error=new Error(e),s(this,oe)?.call(...s(this,W),this,this.error)}abort(){return this.isAborted=!0,this.ws.sendMessage(c.abort,this.id),this.throw("Transfer is aborted by sender")}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,bytesPerMs:this.bytesPerMs,senderProgress:this.senderProgress,progress:this.progress,endAt:this.endAt,error:this.error}}};W=new WeakMap,J=new WeakMap,re=new WeakMap,ie=new WeakMap,Q=new WeakMap,ne=new WeakMap,oe=new WeakMap,ae=new WeakMap,z=new WeakMap,G=new WeakMap,K=new WeakMap,X=new WeakMap,P=new WeakSet,Ae=async function(e,t){for(let[i,o,l]of this.constructor.types)if(this.type===i||o(this.data)){this.type=i,h(this,z,l);break}if(this.type)await s(this,z).setup.call(this),delete this.data;else throw new Error("Unknown type of transfer");this.ws.sendMessage(c.request,this.kind,this.id,{type:e??this.type,collect:this.collect,encoding:t??this.encoding,size:this.size,metadata:this.metadata})},be=async function(){let e=s(this,K).shift(),t=e.length;s(this,z).transformChunk&&(e=await s(this,z).transformChunk.call(this,e)),this.ws.sendMessage(c.chunk,this.id,e,t);let i=Date.now();this.bytesPerMs=t/(i-s(this,G)),h(this,G,i),this.transferedSize+=t,this.size&&(this.senderProgress=this.transferedSize/this.size),await s(this,ie)?.call(...s(this,W),this),s(this,K).length?f(this,P,be).call(this):(h(this,X,!1),this.senderProgress===1&&this.sent())},r(T,"types",[["object",e=>typeof e=="object",{setup(){this.stringStreamer=new _(JSON.stringify(this.data),{chunkSize:this.chunkSize}),this.collect=!0,this.size=this.stringStreamer.size,this.encoding="utf8"},confirm(){this.stringStreamer.start(this.handleChunk)}}],["datauri",e=>typeof e=="string"&&/^data:[\w-.]+\/[\w-.+,]+(?:;base64)?,/.test(e),{setup(){let[e,t]=this.data.split(/^data:|;base64,|,/).slice(1);this.stringStreamer=new _(t,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding="base64",this.metadata={...this.metadata,type:e}},confirm(){this.stringStreamer.start(this.handleChunk)}}],["string",e=>typeof e=="string",{setup(){this.stringStreamer=new _(this.data,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding||(this.encoding="utf8")},confirm(){this.stringStreamer.start(this.handleChunk)}}]]),r(T,"chunkSize",Oe);var I,ue,he=class{constructor(e){a(this,I,new Map);a(this,ue,{delete:e=>s(this,I).delete(e)});e.isWebSocketServer?(e.on(`client-message:${c.confirm}`,(t,...i)=>this.handleConfirm(t,...i)),e.on(`client-message:${c.progress}`,(t,...i)=>this.handleProgress(t,...i)),e.on(`client-message:${c.completed}`,(t,...i)=>this.handleCompleted(t,...i)),e.on(`client-message:${c.error}`,(t,...i)=>this.handleError(t,...i))):(e.on(`message:${c.confirm}`,(...t)=>this.handleConfirm(e,...t)),e.on(`message:${c.progress}`,(...t)=>this.handleProgress(e,...t)),e.on(`message:${c.completed}`,(...t)=>this.handleCompleted(e,...t)),e.on(`message:${c.error}`,(...t)=>this.handleError(e,...t)))}transfer(e,t,i){let{Transfer:o}=this.constructor,l=new o(e,t,i,s(this,ue));return s(this,I).set(l.id,l),l}handleConfirm(e,t,i){s(this,I).get(t)?.handleConfirm(i)}handleProgress(e,t,i){s(this,I).get(t)?.handleProgress(i)}handleCompleted(e,t){s(this,I).get(t)?.handleCompleted()}handleError(e,t,i){s(this,I).get(t)?.throw(i)}};I=new WeakMap,ue=new WeakMap,r(he,"Transfer",T);function Pe(n){return new Promise(e=>{let t=new FileReader;t.onload=()=>e(typeof t?.result=="string"?t.result.slice(Math.max(0,t.result.indexOf(",")+1)):""),t.readAsDataURL(new Blob([n]))})}var V,$,ce,ke,de,pe=class{constructor(e,t={}){a(this,ce);r(this,"file");r(this,"size");r(this,"chunkSize");r(this,"fileReader");r(this,"listener");a(this,V,0);a(this,$,0);r(this,"isAborted",!1);a(this,de,async()=>{if(!this.isAborted){let e=this.fileReader.result;e.length=e.byteLength,await this.listener(e),s(this,$)<this.size&&(h(this,V,s(this,$)),f(this,ce,ke).call(this))}});this.file=e,this.size=this.file.size;let{chunkSize:i=1024*256}=t;this.chunkSize=i,this.fileReader=new FileReader,this.fileReader.onload=s(this,de)}start(e){this.listener=e,f(this,ce,ke).call(this)}abort(){this.isAborted=!0}};V=new WeakMap,$=new WeakMap,ce=new WeakSet,ke=function(){this.isAborted||(h(this,$,Math.min(s(this,V)+this.chunkSize,this.size)),this.fileReader.readAsArrayBuffer(this.file.slice(s(this,V),s(this,$))))},de=new WeakMap;var Se=class extends T{};r(Se,"types",[["file",e=>typeof e=="object"&&e instanceof File,{setup(){let e=this.data;this.fileStreamer=new pe(e,{chunkSize:this.chunkSize});let t={name:e.name,type:e.type,size:e.size,modifiedAt:e.lastModified};this.metadata?Object.assign(this.metadata,t):this.metadata=t,this.size=this.fileStreamer.size,this.encoding="buffer"},confirm(){this.fileStreamer.start(this.handleChunk)},transformChunk(e){return Pe(e)}}],...T.types]);var Te=class extends he{};r(Te,"Transfer",Se);export{fe as IncomingTransfer,xe as IncomingTransport,Se as OutgoingTransfer,Te as OutgoingTransport};
|
|
1
|
+
var Me=Object.defineProperty;var Ie=n=>{throw TypeError(n)};var Le=(n,e,t)=>e in n?Me(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var r=(n,e,t)=>Le(n,typeof e!="symbol"?e+"":e,t),me=(n,e,t)=>e.has(n)||Ie("Cannot "+t);var s=(n,e,t)=>(me(n,e,"read from private field"),t?t.call(n):e.get(n)),a=(n,e,t)=>e.has(n)?Ie("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),c=(n,e,t,i)=>(me(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),u=(n,e,t)=>(me(n,e,"access private method"),t);var f={request:"~t-request",confirm:"~t-confirm",chunk:"~t-c",progress:"~t-p",sent:"~t-sent",completed:"~t-completed",abort:"~t-abort",error:"~t-error"},Oe=10*1024*1024*1024,Ce=1024*256,ve=250;var O,C,v,Z,y,q,D,P,H,ee,W,Re,ge,ye,R=class{constructor(e,t,i,{type:o,collect:h,encoding:l,size:m,metadata:p},L,E){a(this,W);r(this,"ws");a(this,O);r(this,"kind");r(this,"id");r(this,"type");r(this,"collect");r(this,"encoding");r(this,"size");r(this,"metadata");a(this,C);a(this,v);a(this,Z);r(this,"data");a(this,y);r(this,"isAborted",!1);r(this,"isAbortedBySender",!1);r(this,"isAbortedByReceiver",!1);r(this,"isTransfered",!1);r(this,"confirmResponse");r(this,"beginAt",null);a(this,q,null);a(this,D,[]);a(this,P,!1);r(this,"duration",null);r(this,"transferedSize",0);r(this,"processedSize",0);r(this,"bytesPerMs",null);r(this,"progress",0);r(this,"endAt",null);r(this,"error",null);a(this,H);a(this,ee,0);this.ws=e,c(this,O,e.isWebSocket?[e]:[e.wss,e]),this.kind=t,this.id=i,this.type=o,this.collect=!!h,this.encoding=l,this.size=m,this.metadata=p,c(this,C,L),c(this,v,E),c(this,Z,u(this,W,Re).call(this))}whenSetUp(){return s(this,Z)}async confirm(){for(let{begin:e}of s(this,v))if(await e?.call(...s(this,O),this)===!1)return this.throw("Transfer was rejected by receiver");return this.beginAt=c(this,q,Date.now()),this.ws.sendMessage(f.confirm,this.id,this.confirmResponse),c(this,H,setInterval(()=>{s(this,ee)!==this.progress&&(c(this,ee,this.progress),this.ws.sendMessage(f.progress,this.id,this.progress))},ve)),null}handleChunk(e,t=e.length){let i=Date.now();this.bytesPerMs=t/(i-s(this,q)),c(this,q,i),this.transferedSize+=t,s(this,D).push([e,t]),s(this,P)||(c(this,P,!0),u(this,W,ge).call(this))}handleSent(){this.isTransfered=!0,this.size||(this.size=this.transferedSize),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,s(this,P)||u(this,W,ye).call(this)}abort(e=!1){return this.isAborted=!0,this.isAbortedBySender=e,this.isAbortedByReceiver=!e,this.throw(`Transfer is aborted by ${e?"sender":"receiver"}`,!e)}throw(e,t=!0){s(this,C).delete(this.id),clearInterval(s(this,H)),this.error=new Error(e);for(let i of s(this,v))i.once&&s(this,C).removeListener(this.kind,i),i.error?.call(...s(this,O),this,this.error);t&&this.ws.sendMessage(f.error,this.id,e)}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isAbortedBySender:this.isAbortedBySender,isAbortedByReceiver:this.isAbortedByReceiver,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,processedSize:this.processedSize,bytesPerMs:this.bytesPerMs,progress:this.progress,endAt:this.endAt,error:this.error}}};O=new WeakMap,C=new WeakMap,v=new WeakMap,Z=new WeakMap,y=new WeakMap,q=new WeakMap,D=new WeakMap,P=new WeakMap,H=new WeakMap,ee=new WeakMap,W=new WeakSet,Re=async function(){if(c(this,y,this.constructor.types[this.type]),s(this,y))await s(this,y).setup.call(this);else throw new Error(`Unknown type of transfer "${String(this.type)}"`);this.confirm()},ge=async function(){let[e,t]=s(this,D).shift();s(this,y).transformChunk&&(e=await s(this,y).transformChunk.call(this,e)),this.collect&&await s(this,y).collect.call(this,e);for(let{chunk:i,progress:o}of s(this,v))await(i??o)?.call(...s(this,O),this,e);this.processedSize+=t,this.size&&(this.progress=this.processedSize/this.size),s(this,D).length?u(this,W,ge).call(this):(c(this,P,!1),this.isTransfered&&u(this,W,ye).call(this))},ye=async function(){this.progress=1,await s(this,y).done?.call(this);for(let e of s(this,v))e.once&&s(this,C).removeListener(this.kind,e),await e.end?.call(...s(this,O),this);clearInterval(s(this,H)),s(this,C).delete(this.id),this.ws.sendMessage(f.completed,this.id)},r(R,"types",{object:{setup(){this.data=""},collect(e){this.data+=e},done(){this.data=JSON.parse(this.data)}},datauri:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&(this.data=`data:${this.metadata.type};base64,${this.data}`)}},string:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e}}});var x,T,fe,te=class{constructor(e,t={}){r(this,"sizeLimit");a(this,x,new Map);r(this,"on",this.addTransferListener);r(this,"off",this.removeTransferListener);a(this,T,new Map);a(this,fe,{delete:e=>s(this,T).delete(e),removeListener:(e,t)=>this.removeTransferListener(e,t)});let{sizeLimit:i=Oe}=t;this.sizeLimit=i,e.isWebSocketServer?(e.on(`client-message:${f.request}`,(o,...h)=>this.handleRequest(o,...h)),e.on(`client-message:${f.chunk}`,(o,...h)=>this.handleChunk(o,...h)),e.on(`client-message:${f.sent}`,(o,...h)=>this.handleSent(o,...h)),e.on(`client-message:${f.abort}`,(o,...h)=>this.handleAbort(o,...h))):(e.on(`message:${f.request}`,(...o)=>this.handleRequest(e,...o)),e.on(`message:${f.chunk}`,(...o)=>this.handleChunk(e,...o)),e.on(`message:${f.sent}`,(...o)=>this.handleSent(e,...o)),e.on(`message:${f.abort}`,(...o)=>this.handleAbort(e,...o))),Object.assign(e,{onTransfer:(o,h,l)=>this.on(o,h,l),onceTransfer:(o,h,l)=>this.once(o,h,l)})}addTransferListener(e,t,i){return i?.once&&(t.once=!0),s(this,x).get(e)?.add(t)??s(this,x).set(e,new Set([t])),this}once(e,t,i){return this.addTransferListener(e,t,{...i,once:!0})}removeTransferListener(e,t){if(t){let i=s(this,x).get(e);i&&(i.delete(t),i.size||s(this,x).delete(e))}else s(this,x).delete(e);return this}handleRequest(e,t,i,{type:o,size:h,metadata:l,...m}){let{Transfer:p}=this.constructor;s(this,x).has(t)?s(this,T).has(i)?e.sendMessage(f.error,i,"Transfer already exists"):o in p.types?h>this.sizeLimit?e.sendMessage(f.error,i,`Transfer size (${h} bytes) exeeds limit of ${this.sizeLimit} bytes`):s(this,T).set(i,new p(e,t,i,{type:o,size:h,metadata:l,...m},s(this,fe),s(this,x).get(t))):e.sendMessage(f.error,i,"Unknown type of transfer"):e.sendMessage(f.error,i,`Unknown kind of file "${t}"`)}handleChunk(e,t,i,o=i.length){s(this,T).get(t)?.handleChunk(i,o)}handleSent(e,t){s(this,T).get(t)?.handleSent()}handleAbort(e,t){s(this,T).get(t)?.abort(!0)}};x=new WeakMap,T=new WeakMap,fe=new WeakMap,r(te,"Transfer",R);var le=class extends R{};r(le,"types",{file:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&this.encoding==="utf8"&&(this.data=atob(this.data))}},...R.types});var We=class extends te{};r(We,"Transfer",le);function N(){}function Ee(n,e=0,t={}){let{leading:i=!1,trailing:o=!0}=t,{maxWait:h=1/0}=t,l,m,p,L,E,w,d,B,Y=async()=>{let F=Date.now();F>=p?(l=void 0,p=void 0,clearTimeout(m),typeof d=="function"&&await d(),S.resolve(B),S.promise.isResolved=!0,w=i):(clearTimeout(l),l=setTimeout(Y,p-F))},j=Number.isFinite(h)?()=>{d===g&&(d=!1),g(),m=setTimeout(j,h)}:null;async function g(){return B=await n.apply(L,E)}i&&typeof i=="boolean"&&(i=g),w=i,o&&typeof o=="boolean"&&(o=g),d=o;let S=Object.assign(function(...F){return E=F,L=this,p=Date.now()+e,d=o,S.promise.isResolved&&(S.promise=Object.assign(new Promise($e=>{S.resolve=$e,typeof w=="function"&&(w(),w=!1,d===g&&(d=!1)),l||(l=setTimeout(Y,e),j&&(m=setTimeout(j,h)))}),{isResolved:!1})),S.promise},{callback:n,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:N,run:g,clear:async F=>{clearTimeout(l),l=void 0,clearTimeout(m),S.promise.isResolved=!0,S.resolve(F?await g():B)}});return S}Ee.noop=Object.assign(()=>{},{callback:N,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:N,run:N,clear:N});function ze(n,e,t,i,o=!0){return Array.isArray(n)&&(n=n.length),typeof i!="string"&&(o=i??!0,i=t),(o?`${n}\xA0`:"")+ze.raw(n,e,t,i)}ze.raw=(n,e,t,i=t)=>{n=Math.abs(n);let o=n%10,h=n%100;return o===1&&h!==11?e:o>=2&&o<=4&&!(h>=12&&h<=15)?t:i};function we(n="",e=""){return`${n}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}var U,A,se,xe,_=class{constructor(e,t={}){a(this,se);r(this,"string");r(this,"size");r(this,"chunkSize");r(this,"listener");a(this,U,0);a(this,A,0);r(this,"isAborted",!1);this.string=e,this.size=this.string.length;let{chunkSize:i=1024*256}=t;this.chunkSize=i}start(e){this.listener=e,u(this,se,xe).call(this)}abort(){this.isAborted=!0}};U=new WeakMap,A=new WeakMap,se=new WeakSet,xe=async function(){if(!this.isAborted){c(this,A,Math.min(s(this,U)+this.chunkSize,this.size));let e=await new Promise(t=>{t(this.string.slice(s(this,U),s(this,A)))});this.isAborted||(await this.listener(e),s(this,A)<this.size&&(c(this,U,s(this,A)),u(this,se,xe).call(this)))}};var b,J,re,ie,K,ne,oe,ae,z,Q,V,G,$,Pe,be,k=class{constructor(e,t,{data:i,type:o,incomingType:h,collect:l,metadata:m,size:p,chunkSize:L,encoding:E,incomingEncoding:w,onBegin:d,onSenderProgress:B,onProgress:Y,onEnd:j,onError:g},S){a(this,$);r(this,"ws");a(this,b);r(this,"kind");r(this,"data");r(this,"type");r(this,"collect");r(this,"metadata");r(this,"size");r(this,"encoding");r(this,"chunkSize");a(this,J);a(this,re);a(this,ie);a(this,K);a(this,ne);a(this,oe);a(this,ae);r(this,"id",we());a(this,z);r(this,"isAborted",!1);r(this,"isTransfered",!1);r(this,"confirmResponse");r(this,"beginAt",null);a(this,Q,null);a(this,V,[]);a(this,G,!1);r(this,"duration",null);r(this,"transferedSize",0);r(this,"bytesPerMs",null);r(this,"senderProgress",0);r(this,"progress",0);r(this,"endAt",null);r(this,"error",null);r(this,"stringStreamer");r(this,"fileStreamer");r(this,"handleChunk",e=>{s(this,V).push(e),s(this,G)||(c(this,G,!0),u(this,$,be).call(this))});r(this,"sent",()=>this.ws.sendMessage(f.sent,this.id));this.ws=e,c(this,b,e.isWebSocket?[e]:[e.wss,e]),this.kind=t,this.data=i,this.type=o,this.collect=l??!1,this.metadata=m,this.size=p??null,this.encoding=E,this.chunkSize=L??this.constructor.chunkSize,c(this,J,S),d&&c(this,re,d),B&&c(this,ie,B),Y&&c(this,K,Y),j&&c(this,ne,j),g&&c(this,oe,g),c(this,ae,u(this,$,Pe).call(this,h,w))}whenSetUp(){return s(this,ae)}async handleConfirm(e){this.confirmResponse=e,this.beginAt=c(this,Q,Date.now()),await s(this,re)?.call(...s(this,b),this),s(this,z).confirm.call(this)}handleProgress(e){this.progress=e,s(this,K)?.call(...s(this,b),this)}async handleCompleted(){this.isTransfered=!0,this.size||(this.size=this.transferedSize,this.senderProgress=1),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,s(this,J).delete(this.id),this.progress!==1&&(this.progress=1,await s(this,K)?.call(...s(this,b),this)),s(this,ne)?.call(...s(this,b),this)}throw(e){s(this,J).delete(this.id),this.error=new Error(e),s(this,oe)?.call(...s(this,b),this,this.error)}abort(){return this.isAborted=!0,this.ws.sendMessage(f.abort,this.id),this.throw("Transfer is aborted by sender")}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,bytesPerMs:this.bytesPerMs,senderProgress:this.senderProgress,progress:this.progress,endAt:this.endAt,error:this.error}}};b=new WeakMap,J=new WeakMap,re=new WeakMap,ie=new WeakMap,K=new WeakMap,ne=new WeakMap,oe=new WeakMap,ae=new WeakMap,z=new WeakMap,Q=new WeakMap,V=new WeakMap,G=new WeakMap,$=new WeakSet,Pe=async function(e,t){for(let[i,o,h]of this.constructor.types)if(this.type===i||o(this.data)){this.type=i,c(this,z,h);break}if(this.type)await s(this,z).setup.call(this),delete this.data;else throw new Error("Unknown type of transfer");this.ws.sendMessage(f.request,this.kind,this.id,{type:e??this.type,collect:this.collect,encoding:t??this.encoding,size:this.size,metadata:this.metadata})},be=async function(){let e=s(this,V).shift(),t=e.length;s(this,z).transformChunk&&(e=await s(this,z).transformChunk.call(this,e)),this.ws.sendMessage(f.chunk,this.id,e,t);let i=Date.now();this.bytesPerMs=t/(i-s(this,Q)),c(this,Q,i),this.transferedSize+=t,this.size&&(this.senderProgress=this.transferedSize/this.size),await s(this,ie)?.call(...s(this,b),this),s(this,V).length?u(this,$,be).call(this):(c(this,G,!1),this.senderProgress===1&&this.sent())},r(k,"types",[["object",e=>typeof e=="object",{setup(){this.stringStreamer=new _(JSON.stringify(this.data),{chunkSize:this.chunkSize}),this.collect=!0,this.size=this.stringStreamer.size,this.encoding="utf8"},confirm(){this.stringStreamer.start(this.handleChunk)}}],["datauri",e=>typeof e=="string"&&/^data:[\w-.]+\/[\w-.+,]+(?:;base64)?,/.test(e),{setup(){let[e,t]=this.data.split(/^data:|;base64,|,/).slice(1);this.stringStreamer=new _(t,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding="base64",this.metadata={...this.metadata,type:e}},confirm(){this.stringStreamer.start(this.handleChunk)}}],["string",e=>typeof e=="string",{setup(){this.stringStreamer=new _(this.data,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding||(this.encoding="utf8")},confirm(){this.stringStreamer.start(this.handleChunk)}}]]),r(k,"chunkSize",Ce);var I,ue,he=class{constructor(e){a(this,I,new Map);a(this,ue,{delete:e=>s(this,I).delete(e)});e.isWebSocketServer?(e.on(`client-message:${f.confirm}`,(t,...i)=>this.handleConfirm(t,...i)),e.on(`client-message:${f.progress}`,(t,...i)=>this.handleProgress(t,...i)),e.on(`client-message:${f.completed}`,(t,...i)=>this.handleCompleted(t,...i)),e.on(`client-message:${f.error}`,(t,...i)=>this.handleError(t,...i)),Object.assign(e,{transfer:(t,i,o)=>this.transfer(t,i,o)})):(e.on(`message:${f.confirm}`,(...t)=>this.handleConfirm(e,...t)),e.on(`message:${f.progress}`,(...t)=>this.handleProgress(e,...t)),e.on(`message:${f.completed}`,(...t)=>this.handleCompleted(e,...t)),e.on(`message:${f.error}`,(...t)=>this.handleError(e,...t)),Object.assign(e,{transfer:(t,i)=>this.transfer(e,t,i)}))}transfer(e,t,i){let{Transfer:o}=this.constructor,h=new o(e,t,i,s(this,ue));return s(this,I).set(h.id,h),h}handleConfirm(e,t,i){s(this,I).get(t)?.handleConfirm(i)}handleProgress(e,t,i){s(this,I).get(t)?.handleProgress(i)}handleCompleted(e,t){s(this,I).get(t)?.handleCompleted()}handleError(e,t,i){s(this,I).get(t)?.throw(i)}};I=new WeakMap,ue=new WeakMap,r(he,"Transfer",k);function Ae(n){return new Promise(e=>{let t=new FileReader;t.onload=()=>e(typeof t?.result=="string"?t.result.slice(Math.max(0,t.result.indexOf(",")+1)):""),t.readAsDataURL(new Blob([n]))})}var X,M,ce,Te,de,pe=class{constructor(e,t={}){a(this,ce);r(this,"file");r(this,"size");r(this,"chunkSize");r(this,"fileReader");r(this,"listener");a(this,X,0);a(this,M,0);r(this,"isAborted",!1);a(this,de,async()=>{if(!this.isAborted){let e=this.fileReader.result;e.length=e.byteLength,await this.listener(e),s(this,M)<this.size&&(c(this,X,s(this,M)),u(this,ce,Te).call(this))}});this.file=e,this.size=this.file.size;let{chunkSize:i=1024*256}=t;this.chunkSize=i,this.fileReader=new FileReader,this.fileReader.onload=s(this,de)}start(e){this.listener=e,u(this,ce,Te).call(this)}abort(){this.isAborted=!0}};X=new WeakMap,M=new WeakMap,ce=new WeakSet,Te=function(){this.isAborted||(c(this,M,Math.min(s(this,X)+this.chunkSize,this.size)),this.fileReader.readAsArrayBuffer(this.file.slice(s(this,X),s(this,M))))},de=new WeakMap;var Se=class extends k{};r(Se,"types",[["file",e=>typeof e=="object"&&e instanceof File,{setup(){let e=this.data;this.fileStreamer=new pe(e,{chunkSize:this.chunkSize});let t={name:e.name,type:e.type,size:e.size,modifiedAt:e.lastModified};this.metadata?Object.assign(this.metadata,t):this.metadata=t,this.size=this.fileStreamer.size,this.encoding="buffer"},confirm(){this.fileStreamer.start(this.handleChunk)},transformChunk(e){return Ae(e)}}],...k.types]);var ke=class extends he{};r(ke,"Transfer",Se);export{le as IncomingTransfer,We as IncomingTransport,Se as OutgoingTransfer,ke as OutgoingTransport};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/common.ts", "../../src/IncomingTransfer.ts", "../../src/IncomingTransport.ts", "../../src/browser/incoming.ts", "../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../@nesvet/npm/n/src/debounce.ts", "../../../../../@nesvet/npm/n/src/howmuch.ts", "../../../../../@nesvet/npm/n/src/uid.ts", "../../src/StringStreamer.ts", "../../src/OutgoingTransfer.ts", "../../src/OutgoingTransport.ts", "../../src/browser/arrayBufferToBase64.ts", "../../src/browser/FileStreamer.ts", "../../src/browser/outgoing.ts"],
|
|
4
|
-
"sourcesContent": ["export const headers = {\n\trequest: \"~t-request\",\n\tconfirm: \"~t-confirm\",\n\tchunk: \"~t-c\",\n\tprogress: \"~t-p\",\n\tsent: \"~t-sent\",\n\tcompleted: \"~t-completed\",\n\tabort: \"~t-abort\",\n\terror: \"~t-error\"\n};\n\nexport const sizeLimit = 10 * 1024 * 1024 * 1024;\n\nexport const chunkSize = 1024 * 256;\n\nexport const progressInterval = 250;\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers, progressInterval } from \"./common\";\nimport type {\n\tIncomingChunk,\n\tIncomingData,\n\tIncomingTransferListener,\n\tIncomingTransferMethods,\n\tIncomingTransferProps,\n\tIncomingTransferTypes,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class IncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{\n\t\t\ttype,\n\t\t\tcollect,\n\t\t\tencoding,\n\t\t\tsize,\n\t\t\tmetadata\n\t\t}: IncomingTransferProps<TransferTypes>,\n\t\thandles: TransferHandles,\n\t\tlisteners: Set<IncomingTransferListener<WSORWSSC, any>>\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.id = id;\n\t\tthis.type = type;\n\t\tthis.collect = !!collect;\n\t\tthis.encoding = encoding;\n\t\tthis.size = size;\n\t\tthis.metadata = metadata;\n\t\t\n\t\tthis.#handles = handles;\n\t\tthis.#listeners = listeners;\n\t\t\n\t\tthis.#setupPromise = this.#setup();\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tid;\n\ttype;\n\tcollect;\n\tencoding;\n\tsize;\n\tmetadata;\n\t\n\t#handles;\n\t#listeners;\n\t\n\t#setupPromise;\n\t\n\tdata?: IncomingData;\n\t#methods?: IncomingTransferMethods<IncomingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisAbortedBySender = false;\n\tisAbortedByReceiver = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: [ chunk: IncomingChunk, length: number ][] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tprocessedSize = 0;\n\tbytesPerMs: null | number = null;\n\tprogress = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\t#progressInterval?: NodeJS.Timeout;\n\t#lastProgress = 0;\n\t\n\tasync #setup() {\n\t\t\n\t\tthis.#methods = (this.constructor as typeof IncomingTransfer<WSORWSSC>).types[this.type];\n\t\t\n\t\tif (this.#methods)\n\t\t\tawait this.#methods.setup.call(this);\n\t\telse\n\t\t\tthrow new Error(`Unknown type of transfer \"${String(this.type)}\"`);\n\t\t\n\t\tthis.confirm();\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync confirm() {\n\t\t\n\t\tfor (const { begin } of this.#listeners)\n\t\t\tif (await (begin as any)?.call(...this.#callArgs, this) === false)\n\t\t\t\treturn this.throw(\"Transfer was rejected by receiver\");\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tthis.ws.sendMessage(headers.confirm, this.id, this.confirmResponse);\n\t\t\n\t\tthis.#progressInterval = setInterval(() => {\n\t\t\t\n\t\t\tif (this.#lastProgress !== this.progress) {\n\t\t\t\tthis.#lastProgress = this.progress;\n\t\t\t\tthis.ws.sendMessage(headers.progress, this.id, this.progress);\n\t\t\t}\n\t\t\t\n\t\t}, progressInterval);\n\t\t\n\t\treturn null;\n\t}\n\t\n\thandleChunk(chunk: IncomingChunk, length = chunk.length) {\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = length / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += length;\n\t\t\n\t\tthis.#chunksQueue.push([ chunk, length ]);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t}\n\t\n\tasync #process() {\n\t\t\n\t\tlet [ chunk, length ] = this.#chunksQueue.shift()!;// eslint-disable-line prefer-const\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tif (this.collect)\n\t\t\tawait this.#methods!.collect.call(this, chunk);\n\t\t\n\t\tfor (const { chunk: chunkListener, progress: progressListener } of this.#listeners)\n\t\t\tawait ((chunkListener ?? progressListener) as any)?.call(...this.#callArgs, this, chunk);\n\t\t\n\t\tthis.processedSize += length;\n\t\tif (this.size)\n\t\t\tthis.progress = this.processedSize / this.size;\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.isTransfered)\n\t\t\t\tthis.#complete();\n\t\t}\n\t\t\n\t}\n\t\n\thandleSent() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size)\n\t\t\tthis.size = this.transferedSize;\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tif (!this.#isProcessing)\n\t\t\tthis.#complete();\n\t\t\n\t}\n\t\n\tasync #complete() {\n\t\t\n\t\tthis.progress = 1;\n\t\t\n\t\tawait this.#methods!.done?.call(this);\n\t\t\n\t\tfor (const { end } of this.#listeners)\n\t\t\tawait (end as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.ws.sendMessage(headers.completed, this.id);\n\t\t\n\t}\n\t\n\tabort(bySender = false) {\n\t\t\n\t\tthis.isAborted = true;\n\t\tthis.isAbortedBySender = bySender;\n\t\tthis.isAbortedByReceiver = !bySender;\n\t\t\n\t\treturn this.throw(`Transfer is aborted by ${bySender ? \"sender\" : \"receiver\"}`, !bySender);\n\t}\n\t\n\tthrow(errorMessage: string, sendToSender = true) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\tfor (const { error } of this.#listeners)\n\t\t\t(error as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t\tif (sendToSender)\n\t\t\tthis.ws.sendMessage(headers.error, this.id, errorMessage);\n\t\t\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisAbortedBySender: this.isAbortedBySender,\n\t\t\tisAbortedByReceiver: this.isAbortedByReceiver,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tprocessedSize: this.processedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: IncomingTransferTypes<IncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = {\n\t\t\n\t\tobject: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\tthis.data = JSON.parse(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tdatauri: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = `data:${this.metadata.type};base64,${this.data}`;\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tstring: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { sizeLimit as defaultSizeLimit, headers } from \"./common\";\nimport { IncomingTransfer } from \"./IncomingTransfer\";\nimport type {\n\tIncomingChunk,\n\tIncomingTransferListener,\n\tIncomingTransferProps,\n\tIncomingTransportOptions,\n\tParametersWithoutFirst,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class IncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends IncomingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, options: IncomingTransportOptions = {}) {\n\t\t\n\t\tconst {\n\t\t\tsizeLimit = defaultSizeLimit\n\t\t} = options;\n\t\t\n\t\tthis.sizeLimit = sizeLimit;\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.request}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.chunk}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.sent}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.abort}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.request}`, (...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(ws, ...args));\n\t\t\tws.on(`message:${headers.chunk}`, (...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(ws, ...args));\n\t\t\tws.on(`message:${headers.sent}`, (...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(ws, ...args));\n\t\t\tws.on(`message:${headers.abort}`, (...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(ws, ...args));\n\t\t}\n\t\t\n\t}\n\t\n\tsizeLimit;\n\t\n\t#listeners = new Map<string, Set<IncomingTransferListener<WSORWSSC, T>>>();\n\t\n\taddTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T>) {\n\t\tthis.#listeners.get(kind)?.add(listener) ??\n\t\tthis.#listeners.set(kind, new Set([ listener ]));\n\t\t\n\t\treturn this;\n\t}\n\t\n\ton = this.addTransferListener;\n\t\n\tremoveTransferListener(kind: string, listener?: IncomingTransferListener<WSORWSSC, T>) {\n\t\tif (listener)\n\t\t\tthis.#listeners.get(kind)?.delete(listener);\n\t\telse\n\t\t\tthis.#listeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toff = this.removeTransferListener;\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: TransferHandles = {\n\t\t\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t\t\n\t};\n\t\n\tprivate handleRequest(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{ type, size, metadata, ...restProps }: IncomingTransferProps<Types>\n\t) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof IncomingTransport;\n\t\t\n\t\tif (!this.#listeners.has(kind))\n\t\t\tws.sendMessage(headers.error, id, `Unknown kind of file \"${kind}\"`);\n\t\telse if (this.#transfers.has(id))\n\t\t\tws.sendMessage(headers.error, id, \"Transfer already exists\");\n\t\telse if (!(type in Transfer.types))\n\t\t\tws.sendMessage(headers.error, id, \"Unknown type of transfer\");\n\t\telse if (size > this.sizeLimit)\n\t\t\tws.sendMessage(headers.error, id, `Transfer size (${size} bytes) exeeds limit of ${this.sizeLimit} bytes`);\n\t\telse\n\t\t\tthis.#transfers.set(id, new Transfer(\n\t\t\t\tws,\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\ttype: type as Exclude<TransferTypes, string>,\n\t\t\t\t\tsize,\n\t\t\t\t\tmetadata,\n\t\t\t\t\t...restProps\n\t\t\t\t},\n\t\t\t\tthis.#transferHandles,\n\t\t\t\tthis.#listeners.get(kind)!\n\t\t\t) as T);\n\t\t\n\t}\n\t\n\tprivate handleChunk(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, chunk: IncomingChunk, length = chunk.length) {\n\t\tthis.#transfers.get(id)?.handleChunk(chunk, length);\n\t\t\n\t}\n\t\n\tprivate handleSent(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleSent();\n\t\t\n\t}\n\t\n\tprivate handleAbort(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.abort(true);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = IncomingTransfer;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { IncomingTransfer } from \"../IncomingTransfer\";\nimport { IncomingTransport } from \"../IncomingTransport\";\nimport type { IncomingTransferTypes } from \"../types\";\nimport type { BrowserTransferTypes } from \"./types\";\nexport type { IncomingTransportOptions } from \"../types\";\n\n\nclass BrowserIncomingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient = InSiteWebSocket\n> extends IncomingTransfer<WSORWSSC> {\n\t\n\tstatic types: IncomingTransferTypes<BrowserIncomingTransfer<InSiteWebSocket>, BrowserTransferTypes> = {\n\t\t\n\t\tfile: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect && this.encoding === \"utf8\")\n\t\t\t\t\tthis.data = atob(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\t...IncomingTransfer.types\n\t\t\n\t};\n\t\n}\n\nclass BrowserIncomingTransport<\n\tWSORWSSC extends InSiteWebSocket = InSiteWebSocket\n> extends IncomingTransport<WSORWSSC, BrowserIncomingTransfer<WSORWSSC>, BrowserTransferTypes> {\n\t\n\tstatic Transfer = BrowserIncomingTransfer;\n\t\n}\n\n\nexport {\n\tBrowserIncomingTransfer as IncomingTransfer,\n\tBrowserIncomingTransport as IncomingTransport\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", "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", "import type { StreamerOptions } from \"./types\";\n\n\ntype Listener = {\n\t(chunk: string): Promise<void> | void;\n};\n\n\nexport class StringStreamer {\n\tconstructor(string: string, options: StreamerOptions = {}) {\n\t\tthis.string = string;\n\t\tthis.size = this.string.length;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t}\n\t\n\tstring;\n\tsize;\n\tchunkSize;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\tasync #next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\tconst chunk = await new Promise<string>(resolve => { resolve(this.string.slice(this.#start, this.#end)); });\n\t\t\t\n\t\t\tif (!this.isAborted) {\n\t\t\t\tawait this.listener!(chunk);\n\t\t\t\t\n\t\t\t\tif (this.#end < this.size) {\n\t\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\t\n\t\t\t\t\tthis.#next();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { uid } from \"@nesvet/n\";\nimport { chunkSize as defaultChunkSize, headers } from \"./common\";\nimport { StringStreamer } from \"./StringStreamer\";\nimport type { FileStreamer } from \"./browser/FileStreamer\";\nimport type {\n\tOutgoingChunk,\n\tOutgoingTransferMethods,\n\tOutgoingTransferProps,\n\tOutgoingTransferTypes,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\n// FIXME\n\n\nexport class OutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\t{\n\t\t\tdata,\n\t\t\ttype,\n\t\t\tincomingType,\n\t\t\tcollect,\n\t\t\tmetadata,\n\t\t\tsize,\n\t\t\tchunkSize,\n\t\t\tencoding,\n\t\t\tincomingEncoding,\n\t\t\tonBegin,\n\t\t\tonSenderProgress,\n\t\t\tonProgress,\n\t\t\tonEnd,\n\t\t\tonError\n\t\t}: OutgoingTransferProps<WSORWSSC, any, any>,\n\t\thandles: TransferHandles\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.data = data;\n\t\tthis.type = type;\n\t\tthis.collect = collect ?? false;\n\t\tthis.metadata = metadata;\n\t\tthis.size = size ?? null;\n\t\tthis.encoding = encoding;\n\t\tthis.chunkSize = chunkSize ?? (this.constructor as typeof OutgoingTransfer).chunkSize;\n\t\t\n\t\tthis.#handles = handles;\n\t\t\n\t\tif (onBegin)\n\t\t\tthis.#onBegin = onBegin;\n\t\tif (onSenderProgress)\n\t\t\tthis.#onSenderProgress = onSenderProgress;\n\t\tif (onProgress)\n\t\t\tthis.#onProgress = onProgress;\n\t\tif (onEnd)\n\t\t\tthis.#onEnd = onEnd;\n\t\tif (onError)\n\t\t\tthis.#onError = onError;\n\t\t\n\t\tthis.#setupPromise = this.#setup(incomingType, incomingEncoding);\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tdata?;\n\ttype?: string;\n\tcollect;\n\tmetadata;\n\tsize;\n\tencoding;\n\tchunkSize;\n\t\n\t#handles;\n\t\n\t#onBegin?;\n\t#onSenderProgress?;\n\t#onProgress?;\n\t#onEnd?;\n\t#onError?;\n\t\n\t#setupPromise;\n\t\n\tid = uid();\n\t#methods?: OutgoingTransferMethods<OutgoingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: OutgoingChunk[] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tbytesPerMs: null | number = null;\n\tsenderProgress = 0;\n\tprogress: number = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\tstringStreamer?: StringStreamer;\n\tfileStreamer?: FileStreamer;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\tasync #setup(incomingType?: string, incomingEncoding?: string) {\n\t\t\n\t\tfor (const [ availableType, test, methods ] of (this.constructor as typeof OutgoingTransfer).types)\n\t\t\tif (this.type === availableType || test(this.data as string)) {\n\t\t\t\tthis.type = availableType;\n\t\t\t\tthis.#methods = methods;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\tif (this.type) {\n\t\t\tawait this.#methods!.setup.call(this);\n\t\t\tdelete this.data;\n\t\t} else\n\t\t\tthrow new Error(\"Unknown type of transfer\");\n\t\t\n\t\tthis.ws.sendMessage(headers.request, this.kind, this.id, {\n\t\t\ttype: incomingType ?? this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: incomingEncoding ?? this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata\n\t\t});\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync handleConfirm(confirmResponse: string) {\n\t\tthis.confirmResponse = confirmResponse;\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tawait (this.#onBegin as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tthis.#methods!.confirm.call(this);\n\t\t\n\t}\n\t\n\thandleChunk = (chunk: OutgoingChunk) => {\n\t\tthis.#chunksQueue.push(chunk);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t};\n\t\n\tasync #process() {\n\t\t\n\t\tlet chunk = this.#chunksQueue.shift()!;\n\t\t\n\t\tconst chunkLength = chunk.length!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tthis.ws.sendMessage(headers.chunk, this.id, chunk, chunkLength);\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = chunkLength / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += chunkLength;\n\t\t\n\t\tif (this.size)\n\t\t\tthis.senderProgress = this.transferedSize / this.size;\n\t\t\n\t\tawait (this.#onSenderProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.senderProgress === 1)\n\t\t\t\tthis.sent();\n\t\t}\n\t\t\n\t}\n\t\n\tsent = () => this.ws.sendMessage(headers.sent, this.id);\n\t\n\thandleProgress(progress: number) {\n\t\tthis.progress = progress;\n\t\t\n\t\t(this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tasync handleCompleted() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size) {\n\t\t\tthis.size = this.transferedSize;\n\t\t\tthis.senderProgress = 1;\n\t\t}\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tif (this.progress !== 1) {\n\t\t\tthis.progress = 1;\n\t\t\tawait (this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\t(this.#onEnd as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tthrow(errorMessage: string) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\t(this.#onError as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t\tthis.ws.sendMessage(headers.abort, this.id);\n\t\t\n\t\treturn this.throw(\"Transfer is aborted by sender\");\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tsenderProgress: this.senderProgress,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = [\n\t\t\n\t\t[ \"object\", data => typeof data == \"object\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(JSON.stringify(this.data), { chunkSize: this.chunkSize });\n\t\t\t\tthis.collect = true;\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"datauri\", data => typeof data == \"string\" && /^data:[\\w-.]+\\/[\\w-.+,]+(?:;base64)?,/.test(data), {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst [ type, data ] = (this.data as string).split(/^data:|;base64,|,/).slice(1);\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(data, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"base64\";\n\t\t\t\tthis.metadata = { ...this.metadata, type };\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"string\", data => typeof data == \"string\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(this.data as string, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ]\n\t\t\n\t];\n\t\n\tstatic chunkSize = defaultChunkSize;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers } from \"./common\";\nimport { OutgoingTransfer } from \"./OutgoingTransfer\";\nimport type { OutgoingTransferProps, ParametersWithoutFirst, TransferTypes } from \"./types\";\n\n\nexport class OutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends OutgoingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>) {\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.confirm}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.progress}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.completed}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.error}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.confirm}`, (...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(ws, ...args));\n\t\t\tws.on(`message:${headers.progress}`, (...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(ws, ...args));\n\t\t\tws.on(`message:${headers.completed}`, (...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(ws, ...args));\n\t\t\tws.on(`message:${headers.error}`, (...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(ws, ...args));\n\t\t}\n\t\t\n\t}\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles = {\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t};\n\t\n\ttransfer(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof OutgoingTransport;\n\t\t\n\t\tconst transfer = new Transfer(ws, kind, props, this.#transferHandles);\n\t\t\n\t\tthis.#transfers.set(transfer.id, transfer as T);\n\t\t\n\t\treturn transfer;\n\t}\n\t\n\tprivate handleConfirm(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, confirmResponse: string) {\n\t\tthis.#transfers.get(id)?.handleConfirm(confirmResponse);\n\t\t\n\t}\n\t\n\tprivate handleProgress(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, progress: number) {\n\t\tthis.#transfers.get(id)?.handleProgress(progress);\n\t\t\n\t}\n\t\n\tprivate handleCompleted(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleCompleted();\n\t\t\n\t}\n\t\n\tprivate handleError(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, errorMessage: string) {\n\t\tthis.#transfers.get(id)?.throw(errorMessage);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = OutgoingTransfer;\n\t\n}\n", "export function arrayBufferToBase64(arrayBuffer: ArrayBuffer): Promise<string> {\n\treturn new Promise(resolve => {\n\t\t\n\t\tconst fileReader = new FileReader();\n\t\t\n\t\t// eslint-disable-next-line unicorn/prefer-add-event-listener\n\t\tfileReader.onload = () =>\n\t\t\tresolve(typeof fileReader?.result == \"string\" ? fileReader.result.slice(Math.max(0, (fileReader.result as string).indexOf(\",\") + 1)) : \"\");\n\t\t\n\t\tfileReader.readAsDataURL(new Blob([ arrayBuffer ]));\n\t\t\n\t});\n}\n", "import type { ArrayBufferWithLength, StreamerOptions } from \"../types\";\n\n\ntype Listener = {\n\t(arrayBuffer: ArrayBufferWithLength): Promise<void> | void;\n};\n\n\nexport class FileStreamer {\n\tconstructor(file: File, options: StreamerOptions = {}) {\n\t\tthis.file = file;\n\t\tthis.size = this.file.size;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t\tthis.fileReader = new FileReader();\n\t\t\n\t\t// eslint-disable-next-line unicorn/prefer-add-event-listener\n\t\tthis.fileReader.onload = this.#handleFileReaderLoad;\n\t\t\n\t}\n\t\n\tfile;\n\tsize;\n\tchunkSize;\n\tfileReader;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\t#next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\t// eslint-disable-next-line unicorn/prefer-blob-reading-methods\n\t\t\tthis.fileReader.readAsArrayBuffer(this.file.slice(this.#start, this.#end));\n\t\t}\n\t\t\n\t}\n\t\n\t#handleFileReaderLoad = async () => {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tconst arrayBuffer = this.fileReader.result as ArrayBufferWithLength;\n\t\t\tarrayBuffer.length = arrayBuffer.byteLength;\n\t\t\t\n\t\t\tawait this.listener!(arrayBuffer);\n\t\t\t\n\t\t\tif (this.#end < this.size) {\n\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\n\t\t\t\tthis.#next();\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { OutgoingTransfer } from \"../OutgoingTransfer\";\nimport { OutgoingTransport } from \"../OutgoingTransport\";\nimport type { OutgoingTransferTypes } from \"../types\";\nimport { arrayBufferToBase64 } from \"./arrayBufferToBase64\";\nimport { FileStreamer } from \"./FileStreamer\";\nimport type { BrowserTransferTypes } from \"./types\";\n\n\nclass BrowserOutgoingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient = InSiteWebSocket\n> extends OutgoingTransfer<WSORWSSC> {\n\t\n\tstatic types: OutgoingTransferTypes<BrowserOutgoingTransfer<InSiteWebSocket>, BrowserTransferTypes> = [\n\t\t\n\t\t[ \"file\", data => typeof data == \"object\" && data instanceof File, {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst file = this.data as File;\n\t\t\t\t\n\t\t\t\tthis.fileStreamer = new FileStreamer(file, { chunkSize: this.chunkSize });\n\t\t\t\t\n\t\t\t\tconst metadata = {\n\t\t\t\t\tname: file.name,\n\t\t\t\t\ttype: file.type,\n\t\t\t\t\tsize: file.size,\n\t\t\t\t\tmodifiedAt: file.lastModified\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (this.metadata)\n\t\t\t\t\tObject.assign(this.metadata, metadata);\n\t\t\t\telse\n\t\t\t\t\tthis.metadata = metadata;\n\t\t\t\t\n\t\t\t\tthis.size = this.fileStreamer.size;\n\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.fileStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn arrayBufferToBase64(chunk as ArrayBuffer);\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t...OutgoingTransfer.types as OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket>, BrowserTransferTypes>\n\t\t\n\t];\n\t\n}\n\nclass BrowserOutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket = InSiteWebSocket\n> extends OutgoingTransport<WSORWSSC, BrowserOutgoingTransfer<WSORWSSC>, BrowserTransferTypes> {\n\t\n\tstatic Transfer = BrowserOutgoingTransfer;\n\t\n}\n\n\nexport {\n\tBrowserOutgoingTransfer as OutgoingTransfer,\n\tBrowserOutgoingTransport as OutgoingTransport\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["headers", "sizeLimit", "chunkSize", "progressInterval", "_callArgs", "_handles", "_listeners", "_setupPromise", "_methods", "_prevChunkAt", "_chunksQueue", "_isProcessing", "_progressInterval", "_lastProgress", "_IncomingTransfer_instances", "setup_fn", "process_fn", "complete_fn", "IncomingTransfer", "ws", "kind", "id", "type", "collect", "encoding", "size", "metadata", "handles", "listeners", "__privateAdd", "__publicField", "__privateSet", "__privateMethod", "__privateGet", "begin", "headers", "progressInterval", "chunk", "length", "ts", "bySender", "errorMessage", "sendToSender", "
|
|
4
|
+
"sourcesContent": ["export const headers = {\n\trequest: \"~t-request\",\n\tconfirm: \"~t-confirm\",\n\tchunk: \"~t-c\",\n\tprogress: \"~t-p\",\n\tsent: \"~t-sent\",\n\tcompleted: \"~t-completed\",\n\tabort: \"~t-abort\",\n\terror: \"~t-error\"\n};\n\nexport const sizeLimit = 10 * 1024 * 1024 * 1024;\n\nexport const chunkSize = 1024 * 256;\n\nexport const progressInterval = 250;\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers, progressInterval } from \"./common\";\nimport type {\n\tIncomingChunk,\n\tIncomingData,\n\tIncomingTransferHandles,\n\tIncomingTransferListener,\n\tIncomingTransferMethods,\n\tIncomingTransferProps,\n\tIncomingTransferTypes,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class IncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{\n\t\t\ttype,\n\t\t\tcollect,\n\t\t\tencoding,\n\t\t\tsize,\n\t\t\tmetadata\n\t\t}: IncomingTransferProps<TransferTypes>,\n\t\thandles: IncomingTransferHandles,\n\t\tlisteners: Set<IncomingTransferListener<WSORWSSC, any>>\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.id = id;\n\t\tthis.type = type;\n\t\tthis.collect = !!collect;\n\t\tthis.encoding = encoding;\n\t\tthis.size = size;\n\t\tthis.metadata = metadata;\n\t\t\n\t\tthis.#handles = handles;\n\t\tthis.#listeners = listeners;\n\t\t\n\t\tthis.#setupPromise = this.#setup();\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tid;\n\ttype;\n\tcollect;\n\tencoding;\n\tsize;\n\tmetadata;\n\t\n\t#handles;\n\t#listeners;\n\t\n\t#setupPromise;\n\t\n\tdata?: IncomingData;\n\t#methods?: IncomingTransferMethods<IncomingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisAbortedBySender = false;\n\tisAbortedByReceiver = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: [ chunk: IncomingChunk, length: number ][] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tprocessedSize = 0;\n\tbytesPerMs: null | number = null;\n\tprogress = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\t#progressInterval?: NodeJS.Timeout;\n\t#lastProgress = 0;\n\t\n\tasync #setup() {\n\t\t\n\t\tthis.#methods = (this.constructor as typeof IncomingTransfer<WSORWSSC>).types[this.type];\n\t\t\n\t\tif (this.#methods)\n\t\t\tawait this.#methods.setup.call(this);\n\t\telse\n\t\t\tthrow new Error(`Unknown type of transfer \"${String(this.type)}\"`);\n\t\t\n\t\tthis.confirm();\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync confirm() {\n\t\t\n\t\tfor (const { begin } of this.#listeners)\n\t\t\tif (await (begin as any)?.call(...this.#callArgs, this) === false)\n\t\t\t\treturn this.throw(\"Transfer was rejected by receiver\");\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tthis.ws.sendMessage(headers.confirm, this.id, this.confirmResponse);\n\t\t\n\t\tthis.#progressInterval = setInterval(() => {\n\t\t\t\n\t\t\tif (this.#lastProgress !== this.progress) {\n\t\t\t\tthis.#lastProgress = this.progress;\n\t\t\t\tthis.ws.sendMessage(headers.progress, this.id, this.progress);\n\t\t\t}\n\t\t\t\n\t\t}, progressInterval);\n\t\t\n\t\treturn null;\n\t}\n\t\n\thandleChunk(chunk: IncomingChunk, length = chunk.length) {\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = length / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += length;\n\t\t\n\t\tthis.#chunksQueue.push([ chunk, length ]);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t}\n\t\n\tasync #process() {\n\t\t\n\t\tlet [ chunk, length ] = this.#chunksQueue.shift()!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tif (this.collect)\n\t\t\tawait this.#methods!.collect.call(this, chunk);\n\t\t\n\t\tfor (const { chunk: chunkListener, progress: progressListener } of this.#listeners)\n\t\t\tawait ((chunkListener ?? progressListener) as any)?.call(...this.#callArgs, this, chunk);\n\t\t\n\t\tthis.processedSize += length;\n\t\tif (this.size)\n\t\t\tthis.progress = this.processedSize / this.size;\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.isTransfered)\n\t\t\t\tthis.#complete();\n\t\t}\n\t\t\n\t}\n\t\n\thandleSent() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size)\n\t\t\tthis.size = this.transferedSize;\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tif (!this.#isProcessing)\n\t\t\tthis.#complete();\n\t\t\n\t}\n\t\n\tasync #complete() {\n\t\t\n\t\tthis.progress = 1;\n\t\t\n\t\tawait this.#methods!.done?.call(this);\n\t\t\n\t\tfor (const listener of this.#listeners) {\n\t\t\tif (listener.once)\n\t\t\t\tthis.#handles.removeListener(this.kind, listener);\n\t\t\t\n\t\t\tawait (listener.end as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.ws.sendMessage(headers.completed, this.id);\n\t\t\n\t}\n\t\n\tabort(bySender = false) {\n\t\t\n\t\tthis.isAborted = true;\n\t\tthis.isAbortedBySender = bySender;\n\t\tthis.isAbortedByReceiver = !bySender;\n\t\t\n\t\treturn this.throw(`Transfer is aborted by ${bySender ? \"sender\" : \"receiver\"}`, !bySender);\n\t}\n\t\n\tthrow(errorMessage: string, sendToSender = true) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\tfor (const listener of this.#listeners) {\n\t\t\tif (listener.once)\n\t\t\t\tthis.#handles.removeListener(this.kind, listener);\n\t\t\t\n\t\t\t(listener.error as any)?.call(...this.#callArgs, this, this.error);\n\t\t}\n\t\t\n\t\tif (sendToSender)\n\t\t\tthis.ws.sendMessage(headers.error, this.id, errorMessage);\n\t\t\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisAbortedBySender: this.isAbortedBySender,\n\t\t\tisAbortedByReceiver: this.isAbortedByReceiver,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tprocessedSize: this.processedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: IncomingTransferTypes<IncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = {\n\t\t\n\t\tobject: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\tthis.data = JSON.parse(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tdatauri: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = `data:${this.metadata.type};base64,${this.data}`;\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tstring: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { sizeLimit as defaultSizeLimit, headers } from \"./common\";\nimport { IncomingTransfer } from \"./IncomingTransfer\";\nimport type {\n\tIncomingChunk,\n\tIncomingTransferHandles,\n\tIncomingTransferListener,\n\tIncomingTransferListenerOptions,\n\tIncomingTransferProps,\n\tIncomingTransportOptions,\n\tParametersWithoutFirst,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class IncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends IncomingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, options: IncomingTransportOptions = {}) {\n\t\t\n\t\tconst {\n\t\t\tsizeLimit = defaultSizeLimit\n\t\t} = options;\n\t\t\n\t\tthis.sizeLimit = sizeLimit;\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.request}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.chunk}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.sent}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.abort}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.request}`, (...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(ws, ...args));\n\t\t\tws.on(`message:${headers.chunk}`, (...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(ws, ...args));\n\t\t\tws.on(`message:${headers.sent}`, (...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(ws, ...args));\n\t\t\tws.on(`message:${headers.abort}`, (...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(ws, ...args));\n\t\t}\n\t\t\n\t\tObject.assign(ws, {\n\t\t\tonTransfer: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>, listenerOptions?: IncomingTransferListenerOptions) => this.on(kind, listener, listenerOptions),\n\t\t\tonceTransfer: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>, listenerOptions?: Omit<IncomingTransferListenerOptions, \"once\">) => this.once(kind, listener, listenerOptions)\n\t\t});\n\t\t\n\t}\n\t\n\tsizeLimit;\n\t\n\t#listeners = new Map<string, Set<IncomingTransferListener<WSORWSSC, T>>>();\n\t\n\taddTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: IncomingTransferListenerOptions) {\n\t\tif (options?.once)\n\t\t\tlistener.once = true;\n\t\t\n\t\tthis.#listeners.get(kind)?.add(listener) ??\n\t\tthis.#listeners.set(kind, new Set([ listener ]));\n\t\t\n\t\treturn this;\n\t}\n\t\n\ton = this.addTransferListener;\n\t\n\tonce(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: Omit<IncomingTransferListenerOptions, \"once\">) {\n\t\treturn this.addTransferListener(kind, listener, { ...options, once: true });\n\t}\n\t\n\tremoveTransferListener(kind: string, listener?: IncomingTransferListener<WSORWSSC, T>) {\n\t\tif (listener) {\n\t\t\tconst listeners = this.#listeners.get(kind);\n\t\t\t\n\t\t\tif (listeners) {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t\t\n\t\t\t\tif (!listeners.size)\n\t\t\t\t\tthis.#listeners.delete(kind);\n\t\t\t}\n\t\t} else\n\t\t\tthis.#listeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toff = this.removeTransferListener;\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: IncomingTransferHandles = {\n\t\t\n\t\tdelete: (id: string) => this.#transfers.delete(id),\n\t\t\n\t\tremoveListener: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>) => this.removeTransferListener(kind, listener)\n\t\t\n\t};\n\t\n\tprivate handleRequest(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{ type, size, metadata, ...restProps }: IncomingTransferProps<Types>\n\t) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof IncomingTransport;\n\t\t\n\t\tif (!this.#listeners.has(kind))\n\t\t\tws.sendMessage(headers.error, id, `Unknown kind of file \"${kind}\"`);\n\t\telse if (this.#transfers.has(id))\n\t\t\tws.sendMessage(headers.error, id, \"Transfer already exists\");\n\t\telse if (!(type in Transfer.types))\n\t\t\tws.sendMessage(headers.error, id, \"Unknown type of transfer\");\n\t\telse if (size > this.sizeLimit)\n\t\t\tws.sendMessage(headers.error, id, `Transfer size (${size} bytes) exeeds limit of ${this.sizeLimit} bytes`);\n\t\telse\n\t\t\tthis.#transfers.set(id, new Transfer(\n\t\t\t\tws,\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\ttype: type as Exclude<TransferTypes, string>,\n\t\t\t\t\tsize,\n\t\t\t\t\tmetadata,\n\t\t\t\t\t...restProps\n\t\t\t\t},\n\t\t\t\tthis.#transferHandles,\n\t\t\t\tthis.#listeners.get(kind)!\n\t\t\t) as T);\n\t\t\n\t}\n\t\n\tprivate handleChunk(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, chunk: IncomingChunk, length = chunk.length) {\n\t\tthis.#transfers.get(id)?.handleChunk(chunk, length);\n\t\t\n\t}\n\t\n\tprivate handleSent(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleSent();\n\t\t\n\t}\n\t\n\tprivate handleAbort(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.abort(true);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = IncomingTransfer;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { IncomingTransfer } from \"../IncomingTransfer\";\nimport { IncomingTransport } from \"../IncomingTransport\";\nimport type { IncomingTransferTypes } from \"../types\";\nimport type { BrowserTransferTypes } from \"./types\";\nexport type { IncomingTransportOptions } from \"../types\";\n\n\nclass BrowserIncomingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient = InSiteWebSocket\n> extends IncomingTransfer<WSORWSSC> {\n\t\n\tstatic types: IncomingTransferTypes<BrowserIncomingTransfer<InSiteWebSocket>, BrowserTransferTypes> = {\n\t\t\n\t\tfile: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect && this.encoding === \"utf8\")\n\t\t\t\t\tthis.data = atob(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\t...IncomingTransfer.types\n\t\t\n\t};\n\t\n}\n\nclass BrowserIncomingTransport<\n\tWSORWSSC extends InSiteWebSocket = InSiteWebSocket\n> extends IncomingTransport<WSORWSSC, BrowserIncomingTransfer<WSORWSSC>, BrowserTransferTypes> {\n\t\n\tstatic Transfer = BrowserIncomingTransfer;\n\t\n}\n\n\nexport {\n\tBrowserIncomingTransfer as IncomingTransfer,\n\tBrowserIncomingTransport as IncomingTransport\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", "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", "import type { StreamerOptions } from \"./types\";\n\n\ntype Listener = {\n\t(chunk: string): Promise<void> | void;\n};\n\n\nexport class StringStreamer {\n\tconstructor(string: string, options: StreamerOptions = {}) {\n\t\tthis.string = string;\n\t\tthis.size = this.string.length;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t}\n\t\n\tstring;\n\tsize;\n\tchunkSize;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\tasync #next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\tconst chunk = await new Promise<string>(resolve => { resolve(this.string.slice(this.#start, this.#end)); });\n\t\t\t\n\t\t\tif (!this.isAborted) {\n\t\t\t\tawait this.listener!(chunk);\n\t\t\t\t\n\t\t\t\tif (this.#end < this.size) {\n\t\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\t\n\t\t\t\t\tthis.#next();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import { uid } from \"@nesvet/n\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { chunkSize as defaultChunkSize, headers } from \"./common\";\nimport { StringStreamer } from \"./StringStreamer\";\nimport type { FileStreamer } from \"./browser/FileStreamer\";\nimport type {\n\tOutgoingChunk,\n\tOutgoingTransferHandles,\n\tOutgoingTransferMethods,\n\tOutgoingTransferProps,\n\tOutgoingTransferTypes,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\n// FIXME\n\n\nexport class OutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\t{\n\t\t\tdata,\n\t\t\ttype,\n\t\t\tincomingType,\n\t\t\tcollect,\n\t\t\tmetadata,\n\t\t\tsize,\n\t\t\tchunkSize,\n\t\t\tencoding,\n\t\t\tincomingEncoding,\n\t\t\tonBegin,\n\t\t\tonSenderProgress,\n\t\t\tonProgress,\n\t\t\tonEnd,\n\t\t\tonError\n\t\t}: OutgoingTransferProps<WSORWSSC, any, any>,\n\t\thandles: OutgoingTransferHandles\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.data = data;\n\t\tthis.type = type;\n\t\tthis.collect = collect ?? false;\n\t\tthis.metadata = metadata;\n\t\tthis.size = size ?? null;\n\t\tthis.encoding = encoding;\n\t\tthis.chunkSize = chunkSize ?? (this.constructor as typeof OutgoingTransfer).chunkSize;\n\t\t\n\t\tthis.#handles = handles;\n\t\t\n\t\tif (onBegin)\n\t\t\tthis.#onBegin = onBegin;\n\t\tif (onSenderProgress)\n\t\t\tthis.#onSenderProgress = onSenderProgress;\n\t\tif (onProgress)\n\t\t\tthis.#onProgress = onProgress;\n\t\tif (onEnd)\n\t\t\tthis.#onEnd = onEnd;\n\t\tif (onError)\n\t\t\tthis.#onError = onError;\n\t\t\n\t\tthis.#setupPromise = this.#setup(incomingType, incomingEncoding);\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tdata?;\n\ttype?: string;\n\tcollect;\n\tmetadata;\n\tsize;\n\tencoding;\n\tchunkSize;\n\t\n\t#handles;\n\t\n\t#onBegin?;\n\t#onSenderProgress?;\n\t#onProgress?;\n\t#onEnd?;\n\t#onError?;\n\t\n\t#setupPromise;\n\t\n\tid = uid();\n\t#methods?: OutgoingTransferMethods<OutgoingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: OutgoingChunk[] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tbytesPerMs: null | number = null;\n\tsenderProgress = 0;\n\tprogress: number = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\tstringStreamer?: StringStreamer;\n\tfileStreamer?: FileStreamer;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\tasync #setup(incomingType?: string, incomingEncoding?: string) {\n\t\t\n\t\tfor (const [ availableType, test, methods ] of (this.constructor as typeof OutgoingTransfer).types)\n\t\t\tif (this.type === availableType || test(this.data as string)) {\n\t\t\t\tthis.type = availableType;\n\t\t\t\tthis.#methods = methods;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\tif (this.type) {\n\t\t\tawait this.#methods!.setup.call(this);\n\t\t\tdelete this.data;\n\t\t} else\n\t\t\tthrow new Error(\"Unknown type of transfer\");\n\t\t\n\t\tthis.ws.sendMessage(headers.request, this.kind, this.id, {\n\t\t\ttype: incomingType ?? this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: incomingEncoding ?? this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata\n\t\t});\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync handleConfirm(confirmResponse: string) {\n\t\tthis.confirmResponse = confirmResponse;\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tawait (this.#onBegin as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tthis.#methods!.confirm.call(this);\n\t\t\n\t}\n\t\n\thandleChunk = (chunk: OutgoingChunk) => {\n\t\tthis.#chunksQueue.push(chunk);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t};\n\t\n\tasync #process() {\n\t\t\n\t\tlet chunk = this.#chunksQueue.shift()!;\n\t\t\n\t\tconst chunkLength = chunk.length!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tthis.ws.sendMessage(headers.chunk, this.id, chunk, chunkLength);\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = chunkLength / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += chunkLength;\n\t\t\n\t\tif (this.size)\n\t\t\tthis.senderProgress = this.transferedSize / this.size;\n\t\t\n\t\tawait (this.#onSenderProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.senderProgress === 1)\n\t\t\t\tthis.sent();\n\t\t}\n\t\t\n\t}\n\t\n\tsent = () => this.ws.sendMessage(headers.sent, this.id);\n\t\n\thandleProgress(progress: number) {\n\t\tthis.progress = progress;\n\t\t\n\t\t(this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tasync handleCompleted() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size) {\n\t\t\tthis.size = this.transferedSize;\n\t\t\tthis.senderProgress = 1;\n\t\t}\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tif (this.progress !== 1) {\n\t\t\tthis.progress = 1;\n\t\t\tawait (this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\t(this.#onEnd as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tthrow(errorMessage: string) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\t(this.#onError as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t\tthis.ws.sendMessage(headers.abort, this.id);\n\t\t\n\t\treturn this.throw(\"Transfer is aborted by sender\");\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tsenderProgress: this.senderProgress,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = [\n\t\t\n\t\t[ \"object\", data => typeof data == \"object\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(JSON.stringify(this.data), { chunkSize: this.chunkSize });\n\t\t\t\tthis.collect = true;\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"datauri\", data => typeof data == \"string\" && /^data:[\\w-.]+\\/[\\w-.+,]+(?:;base64)?,/.test(data), {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst [ type, data ] = (this.data as string).split(/^data:|;base64,|,/).slice(1);\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(data, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"base64\";\n\t\t\t\tthis.metadata = { ...this.metadata, type };\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"string\", data => typeof data == \"string\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(this.data as string, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ]\n\t\t\n\t];\n\t\n\tstatic chunkSize = defaultChunkSize;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers } from \"./common\";\nimport { OutgoingTransfer } from \"./OutgoingTransfer\";\nimport type {\n\tOutgoingTransferHandles,\n\tOutgoingTransferProps,\n\tParametersWithoutFirst,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class OutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends OutgoingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>) {\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.confirm}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.progress}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.completed}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.error}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(wssc, ...args));\n\t\t\t\n\t\t\tObject.assign(ws, {\n\t\t\t\ttransfer: (wssc: Exclude<WSORWSSC, InSiteWebSocket>, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) =>\n\t\t\t\t\tthis.transfer(wssc, kind, props)\n\t\t\t});\n\t\t} else {\n\t\t\tws.on(`message:${headers.confirm}`, (...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(ws, ...args));\n\t\t\tws.on(`message:${headers.progress}`, (...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(ws, ...args));\n\t\t\tws.on(`message:${headers.completed}`, (...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(ws, ...args));\n\t\t\tws.on(`message:${headers.error}`, (...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(ws, ...args));\n\t\t\t\n\t\t\tObject.assign(ws, {\n\t\t\t\ttransfer: (kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) =>\n\t\t\t\t\tthis.transfer(ws, kind, props)\n\t\t\t});\n\t\t}\n\t\t\n\t}\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: OutgoingTransferHandles = {\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t};\n\t\n\ttransfer(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof OutgoingTransport;\n\t\t\n\t\tconst transfer = new Transfer(ws, kind, props, this.#transferHandles);\n\t\t\n\t\tthis.#transfers.set(transfer.id, transfer as T);\n\t\t\n\t\treturn transfer;\n\t}\n\t\n\tprivate handleConfirm(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, confirmResponse: string) {\n\t\tthis.#transfers.get(id)?.handleConfirm(confirmResponse);\n\t\t\n\t}\n\t\n\tprivate handleProgress(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, progress: number) {\n\t\tthis.#transfers.get(id)?.handleProgress(progress);\n\t\t\n\t}\n\t\n\tprivate handleCompleted(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleCompleted();\n\t\t\n\t}\n\t\n\tprivate handleError(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, errorMessage: string) {\n\t\tthis.#transfers.get(id)?.throw(errorMessage);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = OutgoingTransfer;\n\t\n}\n", "export function arrayBufferToBase64(arrayBuffer: ArrayBuffer): Promise<string> {\n\treturn new Promise(resolve => {\n\t\t\n\t\tconst fileReader = new FileReader();\n\t\t\n\t\t// eslint-disable-next-line unicorn/prefer-add-event-listener\n\t\tfileReader.onload = () =>\n\t\t\tresolve(typeof fileReader?.result == \"string\" ? fileReader.result.slice(Math.max(0, (fileReader.result as string).indexOf(\",\") + 1)) : \"\");\n\t\t\n\t\tfileReader.readAsDataURL(new Blob([ arrayBuffer ]));\n\t\t\n\t});\n}\n", "import type { ArrayBufferWithLength, StreamerOptions } from \"../types\";\n\n\ntype Listener = {\n\t(arrayBuffer: ArrayBufferWithLength): Promise<void> | void;\n};\n\n\nexport class FileStreamer {\n\tconstructor(file: File, options: StreamerOptions = {}) {\n\t\tthis.file = file;\n\t\tthis.size = this.file.size;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t\tthis.fileReader = new FileReader();\n\t\t\n\t\t// eslint-disable-next-line unicorn/prefer-add-event-listener\n\t\tthis.fileReader.onload = this.#handleFileReaderLoad;\n\t\t\n\t}\n\t\n\tfile;\n\tsize;\n\tchunkSize;\n\tfileReader;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\t#next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\t// eslint-disable-next-line unicorn/prefer-blob-reading-methods\n\t\t\tthis.fileReader.readAsArrayBuffer(this.file.slice(this.#start, this.#end));\n\t\t}\n\t\t\n\t}\n\t\n\t#handleFileReaderLoad = async () => {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tconst arrayBuffer = this.fileReader.result as ArrayBufferWithLength;\n\t\t\tarrayBuffer.length = arrayBuffer.byteLength;\n\t\t\t\n\t\t\tawait this.listener!(arrayBuffer);\n\t\t\t\n\t\t\tif (this.#end < this.size) {\n\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\n\t\t\t\tthis.#next();\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { OutgoingTransfer } from \"../OutgoingTransfer\";\nimport { OutgoingTransport } from \"../OutgoingTransport\";\nimport type { OutgoingTransferTypes } from \"../types\";\nimport { arrayBufferToBase64 } from \"./arrayBufferToBase64\";\nimport { FileStreamer } from \"./FileStreamer\";\nimport type { BrowserTransferTypes } from \"./types\";\n\n\nclass BrowserOutgoingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient = InSiteWebSocket\n> extends OutgoingTransfer<WSORWSSC> {\n\t\n\tstatic types: OutgoingTransferTypes<BrowserOutgoingTransfer<InSiteWebSocket>, BrowserTransferTypes> = [\n\t\t\n\t\t[ \"file\", data => typeof data == \"object\" && data instanceof File, {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst file = this.data as File;\n\t\t\t\t\n\t\t\t\tthis.fileStreamer = new FileStreamer(file, { chunkSize: this.chunkSize });\n\t\t\t\t\n\t\t\t\tconst metadata = {\n\t\t\t\t\tname: file.name,\n\t\t\t\t\ttype: file.type,\n\t\t\t\t\tsize: file.size,\n\t\t\t\t\tmodifiedAt: file.lastModified\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (this.metadata)\n\t\t\t\t\tObject.assign(this.metadata, metadata);\n\t\t\t\telse\n\t\t\t\t\tthis.metadata = metadata;\n\t\t\t\t\n\t\t\t\tthis.size = this.fileStreamer.size;\n\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.fileStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn arrayBufferToBase64(chunk as ArrayBuffer);\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t...OutgoingTransfer.types as OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket>, BrowserTransferTypes>\n\t\t\n\t];\n\t\n}\n\nclass BrowserOutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket = InSiteWebSocket\n> extends OutgoingTransport<WSORWSSC, BrowserOutgoingTransfer<WSORWSSC>, BrowserTransferTypes> {\n\t\n\tstatic Transfer = BrowserOutgoingTransfer;\n\t\n}\n\n\nexport {\n\tBrowserOutgoingTransfer as OutgoingTransfer,\n\tBrowserOutgoingTransport as OutgoingTransport\n};\n"],
|
|
5
|
+
"mappings": "oiBAAO,IAAMA,EAAU,CACtB,QAAS,aACT,QAAS,aACT,MAAO,OACP,SAAU,OACV,KAAM,UACN,UAAW,eACX,MAAO,WACP,MAAO,UACR,EAEaC,GAAY,GAAK,KAAO,KAAO,KAE/BC,GAAY,KAAO,IAEnBC,GAAmB,ICfhC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAkBaC,EAAN,KAAuF,CAC7F,YACCC,EACAC,EACAC,EACA,CACC,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,KAAAC,EACA,SAAAC,CACD,EACAC,EACAC,EACC,CAdIC,EAAA,KAAAf,GAiCNgB,EAAA,WACAD,EAAA,KAAAzB,GACA0B,EAAA,aACAA,EAAA,WACAA,EAAA,aACAA,EAAA,gBACAA,EAAA,iBACAA,EAAA,aACAA,EAAA,iBAEAD,EAAA,KAAAxB,GACAwB,EAAA,KAAAvB,GAEAuB,EAAA,KAAAtB,GAEAuB,EAAA,aACAD,EAAA,KAAArB,GACAsB,EAAA,iBAAY,IACZA,EAAA,yBAAoB,IACpBA,EAAA,2BAAsB,IACtBA,EAAA,oBAAe,IACfA,EAAA,wBACAA,EAAA,eAAyB,MACzBD,EAAA,KAAApB,EAA8B,MAC9BoB,EAAA,KAAAnB,EAA2D,CAAC,GAC5DmB,EAAA,KAAAlB,EAAgB,IAChBmB,EAAA,gBAA0B,MAC1BA,EAAA,sBAAiB,GACjBA,EAAA,qBAAgB,GAChBA,EAAA,kBAA4B,MAC5BA,EAAA,gBAAW,GACXA,EAAA,aAAuB,MACvBA,EAAA,aAAsB,MAItBD,EAAA,KAAAjB,GACAiB,EAAA,KAAAhB,GAAgB,GAtDf,KAAK,GAAKM,EACVY,EAAA,KAAK3B,EAAYe,EAAG,YAAc,CAAEA,CAAG,EAAa,CAAEA,EAAG,IAAKA,CAAG,GACjE,KAAK,KAAOC,EACZ,KAAK,GAAKC,EACV,KAAK,KAAOC,EACZ,KAAK,QAAU,CAAC,CAACC,EACjB,KAAK,SAAWC,EAChB,KAAK,KAAOC,EACZ,KAAK,SAAWC,EAEhBK,EAAA,KAAK1B,EAAWsB,GAChBI,EAAA,KAAKzB,EAAasB,GAElBG,EAAA,KAAKxB,EAAgByB,EAAA,KAAKlB,EAAAC,IAAL,WAEtB,CAsDA,WAAY,CACX,OAAOkB,EAAA,KAAK1B,EACb,CAEA,MAAM,SAAU,CAEf,OAAW,CAAE,MAAA2B,CAAM,IAAKD,EAAA,KAAK3B,GAC5B,GAAI,MAAO4B,GAAe,KAAK,GAAGD,EAAA,KAAK7B,GAAW,IAAI,IAAM,GAC3D,OAAO,KAAK,MAAM,mCAAmC,EAEvD,YAAK,QACJ2B,EAAA,KAAKtB,EACJ,KAAK,IAAI,GAEX,KAAK,GAAG,YAAY0B,EAAQ,QAAS,KAAK,GAAI,KAAK,eAAe,EAElEJ,EAAA,KAAKnB,EAAoB,YAAY,IAAM,CAEtCqB,EAAA,KAAKpB,MAAkB,KAAK,WAC/BkB,EAAA,KAAKlB,GAAgB,KAAK,UAC1B,KAAK,GAAG,YAAYsB,EAAQ,SAAU,KAAK,GAAI,KAAK,QAAQ,EAG9D,EAAGC,EAAgB,GAEZ,IACR,CAEA,YAAYC,EAAsBC,EAASD,EAAM,OAAQ,CAExD,IAAME,EAAK,KAAK,IAAI,EACpB,KAAK,WAAaD,GAAUC,EAAKN,EAAA,KAAKxB,IACtCsB,EAAA,KAAKtB,EAAe8B,GACpB,KAAK,gBAAkBD,EAEvBL,EAAA,KAAKvB,GAAa,KAAK,CAAE2B,EAAOC,CAAO,CAAC,EAEnCL,EAAA,KAAKtB,KACToB,EAAA,KAAKpB,EAAgB,IACrBqB,EAAA,KAAKlB,EAAAE,IAAL,WAGF,CA8BA,YAAa,CAEZ,KAAK,aAAe,GAEf,KAAK,OACT,KAAK,KAAO,KAAK,gBAElB,KAAK,MAAQ,KAAK,IAAI,EACtB,KAAK,SAAW,KAAK,MAAQ,KAAK,QAClC,KAAK,WAAa,KAAK,KAAO,KAAK,SAE9BiB,EAAA,KAAKtB,IACTqB,EAAA,KAAKlB,EAAAG,IAAL,UAEF,CAuBA,MAAMuB,EAAW,GAAO,CAEvB,YAAK,UAAY,GACjB,KAAK,kBAAoBA,EACzB,KAAK,oBAAsB,CAACA,EAErB,KAAK,MAAM,0BAA0BA,EAAW,SAAW,UAAU,GAAI,CAACA,CAAQ,CAC1F,CAEA,MAAMC,EAAsBC,EAAe,GAAM,CAEhDT,EAAA,KAAK5B,GAAS,OAAO,KAAK,EAAE,EAE5B,cAAc4B,EAAA,KAAKrB,EAAiB,EAEpC,KAAK,MAAQ,IAAI,MAAM6B,CAAY,EAEnC,QAAWE,KAAYV,EAAA,KAAK3B,GACvBqC,EAAS,MACZV,EAAA,KAAK5B,GAAS,eAAe,KAAK,KAAMsC,CAAQ,EAEhDA,EAAS,OAAe,KAAK,GAAGV,EAAA,KAAK7B,GAAW,KAAM,KAAK,KAAK,EAG9DsC,GACH,KAAK,GAAG,YAAYP,EAAQ,MAAO,KAAK,GAAIM,CAAY,CAE1D,CAEA,WAAY,CACX,MAAO,CACN,GAAI,KAAK,GACT,KAAM,KAAK,KACX,KAAM,KAAK,KACX,QAAS,KAAK,QACd,SAAU,KAAK,SACf,KAAM,KAAK,KACX,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,kBAAmB,KAAK,kBACxB,oBAAqB,KAAK,oBAC1B,aAAc,KAAK,aACnB,gBAAiB,KAAK,gBACtB,QAAS,KAAK,QACd,SAAU,KAAK,SACf,eAAgB,KAAK,eACrB,cAAe,KAAK,cACpB,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,MAAO,KAAK,KACb,CACD,CA4DD,EAhRCrC,EAAA,YASAC,EAAA,YACAC,EAAA,YAEAC,EAAA,YAGAC,EAAA,YAOAC,EAAA,YACAC,EAAA,YACAC,EAAA,YAWAC,EAAA,YACAC,GAAA,YAtEMC,EAAA,YAwEAC,GAAM,gBAAG,CAId,GAFAgB,EAAA,KAAKvB,EAAY,KAAK,YAAkD,MAAM,KAAK,IAAI,GAEnFyB,EAAA,KAAKzB,GACR,MAAMyB,EAAA,KAAKzB,GAAS,MAAM,KAAK,IAAI,MAEnC,OAAM,IAAI,MAAM,6BAA6B,OAAO,KAAK,IAAI,CAAC,GAAG,EAElE,KAAK,QAAQ,CAEd,EA8CMQ,GAAQ,gBAAG,CAEhB,GAAI,CAAEqB,EAAOC,CAAO,EAAIL,EAAA,KAAKvB,GAAa,MAAM,EAE5CuB,EAAA,KAAKzB,GAAU,iBAClB6B,EAAQ,MAAMJ,EAAA,KAAKzB,GAAU,eAAe,KAAK,KAAM6B,CAAK,GAEzD,KAAK,SACR,MAAMJ,EAAA,KAAKzB,GAAU,QAAQ,KAAK,KAAM6B,CAAK,EAE9C,OAAW,CAAE,MAAOO,EAAe,SAAUC,CAAiB,IAAKZ,EAAA,KAAK3B,GACvE,MAAQsC,GAAiBC,IAA2B,KAAK,GAAGZ,EAAA,KAAK7B,GAAW,KAAMiC,CAAK,EAExF,KAAK,eAAiBC,EAClB,KAAK,OACR,KAAK,SAAW,KAAK,cAAgB,KAAK,MAEvCL,EAAA,KAAKvB,GAAa,OACrBsB,EAAA,KAAKlB,EAAAE,IAAL,YAEAe,EAAA,KAAKpB,EAAgB,IAEjB,KAAK,cACRqB,EAAA,KAAKlB,EAAAG,IAAL,WAGH,EAkBMA,GAAS,gBAAG,CAEjB,KAAK,SAAW,EAEhB,MAAMgB,EAAA,KAAKzB,GAAU,MAAM,KAAK,IAAI,EAEpC,QAAWmC,KAAYV,EAAA,KAAK3B,GACvBqC,EAAS,MACZV,EAAA,KAAK5B,GAAS,eAAe,KAAK,KAAMsC,CAAQ,EAEjD,MAAOA,EAAS,KAAa,KAAK,GAAGV,EAAA,KAAK7B,GAAW,IAAI,EAG1D,cAAc6B,EAAA,KAAKrB,EAAiB,EAEpCqB,EAAA,KAAK5B,GAAS,OAAO,KAAK,EAAE,EAE5B,KAAK,GAAG,YAAY8B,EAAQ,UAAW,KAAK,EAAE,CAE/C,EAyDAL,EAzPYZ,EAyPL,QAA+G,CAErH,OAAQ,CACP,OAAQ,CAEP,KAAK,KAAO,EAEb,EAEA,QAAQmB,EAAO,CACd,KAAK,MAAQA,CAEd,EAEA,MAAO,CACN,KAAK,KAAO,KAAK,MAAM,KAAK,IAAc,CAE3C,CACD,EAEA,QAAS,CACR,OAAQ,CAEH,KAAK,UACR,KAAK,KAAO,GAEd,EAEA,QAAQA,EAAO,CACd,KAAK,MAAQA,CAEd,EAEA,MAAO,CAEF,KAAK,UACR,KAAK,KAAO,QAAQ,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,GAE5D,CACD,EAEA,OAAQ,CACP,OAAQ,CAEH,KAAK,UACR,KAAK,KAAO,GAEd,EAEA,QAAQA,EAAO,CACd,KAAK,MAAQA,CAEd,CACD,CAED,GClUD,IAAAS,EAAAC,EAAAC,GAgBaC,GAAN,KAIL,CACD,YAAYC,EAAiFC,EAAoC,CAAC,EAAG,CA2BrIC,EAAA,kBAEAC,EAAA,KAAAP,EAAa,IAAI,KAYjBM,EAAA,UAAK,KAAK,qBAsBVA,EAAA,WAAM,KAAK,wBAEXC,EAAA,KAAAN,EAAa,IAAI,KAEjBM,EAAA,KAAAL,GAA4C,CAE3C,OAASM,GAAeC,EAAA,KAAKR,GAAW,OAAOO,CAAE,EAEjD,eAAgB,CAACE,EAAcC,IAAoD,KAAK,uBAAuBD,EAAMC,CAAQ,CAE9H,GAvEC,GAAM,CACL,UAAAC,EAAYA,EACb,EAAIP,EAEJ,KAAK,UAAYO,EAEbR,EAAG,mBACNA,EAAG,GAAG,kBAAkBS,EAAQ,OAAO,GAAI,CAACC,KAA6CC,IAA4D,KAAK,cAAcD,EAAM,GAAGC,CAAI,CAAC,EACtLX,EAAG,GAAG,kBAAkBS,EAAQ,KAAK,GAAI,CAACC,KAA6CC,IAA0D,KAAK,YAAYD,EAAM,GAAGC,CAAI,CAAC,EAChLX,EAAG,GAAG,kBAAkBS,EAAQ,IAAI,GAAI,CAACC,KAA6CC,IAAyD,KAAK,WAAWD,EAAM,GAAGC,CAAI,CAAC,EAC7KX,EAAG,GAAG,kBAAkBS,EAAQ,KAAK,GAAI,CAACC,KAA6CC,IAA0D,KAAK,YAAYD,EAAM,GAAGC,CAAI,CAAC,IAEhLX,EAAG,GAAG,WAAWS,EAAQ,OAAO,GAAI,IAAIE,IAA4D,KAAK,cAAcX,EAAI,GAAGW,CAAI,CAAC,EACnIX,EAAG,GAAG,WAAWS,EAAQ,KAAK,GAAI,IAAIE,IAA0D,KAAK,YAAYX,EAAI,GAAGW,CAAI,CAAC,EAC7HX,EAAG,GAAG,WAAWS,EAAQ,IAAI,GAAI,IAAIE,IAAyD,KAAK,WAAWX,EAAI,GAAGW,CAAI,CAAC,EAC1HX,EAAG,GAAG,WAAWS,EAAQ,KAAK,GAAI,IAAIE,IAA0D,KAAK,YAAYX,EAAI,GAAGW,CAAI,CAAC,GAG9H,OAAO,OAAOX,EAAI,CACjB,WAAY,CAACM,EAAcC,EAAiDK,IAAsD,KAAK,GAAGN,EAAMC,EAAUK,CAAe,EACzK,aAAc,CAACN,EAAcC,EAAiDK,IAAoE,KAAK,KAAKN,EAAMC,EAAUK,CAAe,CAC5L,CAAC,CAEF,CAMA,oBAAoBN,EAAcC,EAAiDN,EAA2C,CAC7H,OAAIA,GAAS,OACZM,EAAS,KAAO,IAEjBF,EAAA,KAAKT,GAAW,IAAIU,CAAI,GAAG,IAAIC,CAAQ,GACvCF,EAAA,KAAKT,GAAW,IAAIU,EAAM,IAAI,IAAI,CAAEC,CAAS,CAAC,CAAC,EAExC,IACR,CAIA,KAAKD,EAAcC,EAAiDN,EAAyD,CAC5H,OAAO,KAAK,oBAAoBK,EAAMC,EAAU,CAAE,GAAGN,EAAS,KAAM,EAAK,CAAC,CAC3E,CAEA,uBAAuBK,EAAcC,EAAkD,CACtF,GAAIA,EAAU,CACb,IAAMM,EAAYR,EAAA,KAAKT,GAAW,IAAIU,CAAI,EAEtCO,IACHA,EAAU,OAAON,CAAQ,EAEpBM,EAAU,MACdR,EAAA,KAAKT,GAAW,OAAOU,CAAI,EAE9B,MACCD,EAAA,KAAKT,GAAW,OAAOU,CAAI,EAE5B,OAAO,IACR,CAcQ,cACPN,EACAM,EACAF,EACA,CAAE,KAAAU,EAAM,KAAAC,EAAM,SAAAC,EAAU,GAAGC,CAAU,EACpC,CAED,GAAM,CAAE,SAAAC,CAAS,EAAI,KAAK,YAErBb,EAAA,KAAKT,GAAW,IAAIU,CAAI,EAEpBD,EAAA,KAAKR,GAAW,IAAIO,CAAE,EAC9BJ,EAAG,YAAYS,EAAQ,MAAOL,EAAI,yBAAyB,EACjDU,KAAQI,EAAS,MAEnBH,EAAO,KAAK,UACpBf,EAAG,YAAYS,EAAQ,MAAOL,EAAI,kBAAkBW,CAAI,2BAA2B,KAAK,SAAS,QAAQ,EAEzGV,EAAA,KAAKR,GAAW,IAAIO,EAAI,IAAIc,EAC3BlB,EACAM,EACAF,EACA,CACC,KAAMU,EACN,KAAAC,EACA,SAAAC,EACA,GAAGC,CACJ,EACAZ,EAAA,KAAKP,IACLO,EAAA,KAAKT,GAAW,IAAIU,CAAI,CACzB,CAAM,EAhBNN,EAAG,YAAYS,EAAQ,MAAOL,EAAI,0BAA0B,EAJ5DJ,EAAG,YAAYS,EAAQ,MAAOL,EAAI,yBAAyBE,CAAI,GAAG,CAsBpE,CAEQ,YAAYN,EAA0DI,EAAYe,EAAsBC,EAASD,EAAM,OAAQ,CACtId,EAAA,KAAKR,GAAW,IAAIO,CAAE,GAAG,YAAYe,EAAOC,CAAM,CAEnD,CAEQ,WAAWpB,EAA0DI,EAAY,CACxFC,EAAA,KAAKR,GAAW,IAAIO,CAAE,GAAG,WAAW,CAErC,CAEQ,YAAYJ,EAA0DI,EAAY,CACzFC,EAAA,KAAKR,GAAW,IAAIO,CAAE,GAAG,MAAM,EAAI,CAEpC,CAKD,EAlGCR,EAAA,YAoCAC,EAAA,YAEAC,GAAA,YA0DAI,EAlIYH,GAkIL,WAAWsB,GCzInB,IAAMC,GAAN,cAEUC,CAA2B,CA6BrC,EA3BCC,EAJKF,GAIE,QAA+F,CAErG,KAAM,CACL,OAAQ,CAEH,KAAK,UACR,KAAK,KAAO,GAEd,EAEA,QAAQG,EAAO,CACd,KAAK,MAAQA,CAEd,EAEA,MAAO,CAEF,KAAK,SAAW,KAAK,WAAa,SACrC,KAAK,KAAO,KAAK,KAAK,IAAc,EAEtC,CACD,EAEA,GAAGF,EAAiB,KAErB,GAID,IAAMG,GAAN,cAEUC,EAAqF,CAI/F,EAFCH,EAJKE,GAIE,WAAWJ,IC9Cb,SAAUM,GAAI,CAAU,CCuBxB,SAAUC,GAAiBC,EAA4BC,EAAQ,EAAGC,EAAmB,CAAA,EAAE,CAC5F,GAAI,CAAE,QAAAC,EAAU,GAAO,SAAAC,EAAW,EAAI,EAAKF,EACrC,CAAE,QAAAG,EAAU,GAAQ,EAAKH,EAE3BI,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEEC,EAAU,SAAW,CAE1B,IAAMC,EAAI,KAAK,IAAG,EAEdA,GAAKP,GACRF,EAAU,OACVE,EAAM,OACN,aAAaD,CAAc,EACvB,OAAOK,GAAS,YACnB,MAAMA,EAAK,EACZI,EAAU,QAAQH,CAAM,EACxBG,EAAU,QAAQ,WAAa,GAC/BL,EAAUR,IAEV,aAAaG,CAAO,EACpBA,EAAU,WAAWQ,EAASN,EAAOO,CAAC,EAGxC,EAEME,EAAiB,OAAO,SAASZ,CAAO,EAAI,IAAK,CAElDO,IAAUM,IACbN,EAAQ,IACTM,EAAG,EACHX,EAAiB,WAAWU,EAAgCZ,CAAO,CAEpE,EAAI,KAEJ,eAAea,GAAG,CACjB,OAAQL,EAAS,MAAMb,EAAS,MAAMS,EAASC,CAAI,CACpD,CAEIP,GAAW,OAAOA,GAAW,YAChCA,EAAUe,GACXP,EAAUR,EAENC,GAAY,OAAOA,GAAY,YAClCA,EAAWc,GACZN,EAAQR,EAER,IAAMY,EAA+B,OAAO,OAAO,YAAaG,EAAK,CACpE,OAAAT,EAAOS,EACPV,EAAU,KAEVD,EAAM,KAAK,IAAG,EAAKP,EACnBW,EAAQR,EAEJY,EAAU,QAAQ,aACrBA,EAAU,QAAU,OAAO,OAAO,IAAI,QAAQI,IAAU,CACvDJ,EAAU,QAAUI,GAEhB,OAAOT,GAAW,aACrBA,EAAO,EACPA,EAAU,GACNC,IAAUM,IACbN,EAAQ,KAGLN,IACJA,EAAU,WAAWQ,EAASb,CAAK,EAC/BgB,IACHV,EAAiB,WAAWU,EAAgBZ,CAAO,GAGtD,CAAC,EAAG,CACH,WAAY,GACZ,GAEKW,EAAU,OAClB,EAAgC,CAC/B,SAAAhB,EACA,QAAS,OAAO,OAAO,QAAQ,QAAO,EAAI,CACzC,WAAY,GACZ,EACD,QAASqB,EACT,IAAAH,EACA,MAAO,MAAOI,GAAuB,CAEpC,aAAahB,CAAO,EACpBA,EAAU,OAEV,aAAaC,CAAc,EAE3BS,EAAU,QAAQ,WAAa,GAC/BA,EAAU,QAAQM,EAAY,MAAMJ,EAAG,EAAKL,CAAM,CAEnD,EACA,EAED,OAAOG,CACR,CAGAjB,GAAS,KAAO,OAAO,OAAO,IAAK,CAAQ,EAAG,CAC7C,SAAUsB,EACV,QAAS,OAAO,OAAO,QAAQ,QAAO,EAAI,CACzC,WAAY,GACZ,EACD,QAASA,EACT,IAAKA,EACL,MAAOA,EACP,EC1IK,SAAUE,GAAQC,EAAqBC,EAAaC,EAAaC,EAAwBC,EAAoB,GAAI,CACtH,OAAI,MAAM,QAAQJ,CAAM,IACvBA,EAASA,EAAO,QAEb,OAAOG,GAAQ,WAClBC,EAAoBD,GAAQ,GAC5BA,EAAOD,IAIAE,EAAoB,GAAGJ,CAAM,OAAM,IAAMD,GAAQ,IAAIC,EAAQC,EAAKC,EAAKC,CAAI,CACpF,CAEAJ,GAAQ,IAAM,CAACC,EAAgBC,EAAaC,EAAaC,EAAOD,IAAO,CACtEF,EAAS,KAAK,IAAIA,CAAM,EACxB,IAAMK,EAAIL,EAAS,GACbM,EAAIN,EAAS,IAEnB,OACEK,IAAM,GAAKC,IAAM,GACjBL,EACEI,GAAK,GAAKA,GAAK,GAAM,EAAEC,GAAK,IAAMA,GAAK,IACxCJ,EACAC,CAEJ,ECzBM,SAAUI,GAAIC,EAA6B,GAAIC,EAA8B,GAAE,CACpF,MAAO,GAAGD,CAAM,GAAG,KAAK,IAAG,EAAG,SAAS,EAAE,CAAC,GAAG,KAAK,MAAM,KAAK,OAAM,EAAK,OAAO,gBAAgB,EAAE,SAAS,EAAE,CAAC,GAAGC,CAAO,EACxH,CCFA,IAAAC,EAAAC,EAAAC,GAAAC,GAQaC,EAAN,KAAqB,CAC3B,YAAYC,EAAgBC,EAA2B,CAAC,EAAG,CADrDC,EAAA,KAAAL,IAaNM,EAAA,eACAA,EAAA,aACAA,EAAA,kBACAA,EAAA,iBAEAD,EAAA,KAAAP,EAAS,GACTO,EAAA,KAAAN,EAAO,GAEPO,EAAA,iBAAY,IAnBX,KAAK,OAASH,EACd,KAAK,KAAO,KAAK,OAAO,OAExB,GAAM,CACL,UAAAI,EAAY,KAAO,GACpB,EAAIH,EAEJ,KAAK,UAAYG,CAElB,CAYA,MAAMC,EAAoB,CACzB,KAAK,SAAWA,EAEhBC,EAAA,KAAKT,GAAAC,IAAL,UAED,CAsBA,OAAQ,CAEP,KAAK,UAAY,EAElB,CAED,EAtCCH,EAAA,YACAC,EAAA,YAnBMC,GAAA,YA8BAC,GAAK,gBAAG,CAEb,GAAI,CAAC,KAAK,UAAW,CACpBS,EAAA,KAAKX,EAAO,KAAK,IAAIY,EAAA,KAAKb,GAAS,KAAK,UAAW,KAAK,IAAI,GAE5D,IAAMc,EAAQ,MAAM,IAAI,QAAgBC,GAAW,CAAEA,EAAQ,KAAK,OAAO,MAAMF,EAAA,KAAKb,GAAQa,EAAA,KAAKZ,EAAI,CAAC,CAAG,CAAC,EAErG,KAAK,YACT,MAAM,KAAK,SAAUa,CAAK,EAEtBD,EAAA,KAAKZ,GAAO,KAAK,OACpBW,EAAA,KAAKZ,EAASa,EAAA,KAAKZ,IAEnBU,EAAA,KAAKT,GAAAC,IAAL,YAGH,CAED,ECxDD,IAAAa,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAsBaC,EAAN,KAAuF,CAC7F,YACCC,EACAC,EACA,CACC,KAAAC,EACA,KAAAC,EACA,aAAAC,EACA,QAAAC,EACA,SAAAC,EACA,KAAAC,EACA,UAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,QAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,MAAAC,EACA,QAAAC,CACD,EACAC,EACC,CArBIC,EAAA,KAAArB,GAmDNsB,EAAA,WACAD,EAAA,KAAAjC,GACAkC,EAAA,aACAA,EAAA,aACAA,EAAA,aACAA,EAAA,gBACAA,EAAA,iBACAA,EAAA,aACAA,EAAA,iBACAA,EAAA,kBAEAD,EAAA,KAAAhC,GAEAgC,EAAA,KAAA/B,IACA+B,EAAA,KAAA9B,IACA8B,EAAA,KAAA7B,GACA6B,EAAA,KAAA5B,IACA4B,EAAA,KAAA3B,IAEA2B,EAAA,KAAA1B,IAEA2B,EAAA,UAAKC,GAAI,GACTF,EAAA,KAAAzB,GACA0B,EAAA,iBAAY,IACZA,EAAA,oBAAe,IACfA,EAAA,wBACAA,EAAA,eAAyB,MACzBD,EAAA,KAAAxB,EAA8B,MAC9BwB,EAAA,KAAAvB,EAAgC,CAAC,GACjCuB,EAAA,KAAAtB,EAAgB,IAChBuB,EAAA,gBAA0B,MAC1BA,EAAA,sBAAiB,GACjBA,EAAA,kBAA4B,MAC5BA,EAAA,sBAAiB,GACjBA,EAAA,gBAAmB,GACnBA,EAAA,aAAuB,MACvBA,EAAA,aAAsB,MACtBA,EAAA,uBACAA,EAAA,qBA8CAA,EAAA,mBAAeE,GAAyB,CACvCC,EAAA,KAAK3B,GAAa,KAAK0B,CAAK,EAEvBC,EAAA,KAAK1B,KACT2B,EAAA,KAAK3B,EAAgB,IACrB4B,EAAA,KAAK3B,EAAAE,IAAL,WAGF,GAkCAoB,EAAA,YAAO,IAAM,KAAK,GAAG,YAAYM,EAAQ,KAAM,KAAK,EAAE,GA1JrD,KAAK,GAAKxB,EACVsB,EAAA,KAAKtC,EAAYgB,EAAG,YAAc,CAAEA,CAAG,EAAa,CAAEA,EAAG,IAAKA,CAAG,GACjE,KAAK,KAAOC,EACZ,KAAK,KAAOC,EACZ,KAAK,KAAOC,EACZ,KAAK,QAAUE,GAAW,GAC1B,KAAK,SAAWC,EAChB,KAAK,KAAOC,GAAQ,KACpB,KAAK,SAAWE,EAChB,KAAK,UAAYD,GAAc,KAAK,YAAwC,UAE5Ec,EAAA,KAAKrC,EAAW+B,GAEZL,GACHW,EAAA,KAAKpC,GAAWyB,GACbC,GACHU,EAAA,KAAKnC,GAAoByB,GACtBC,GACHS,EAAA,KAAKlC,EAAcyB,GAChBC,GACHQ,EAAA,KAAKjC,GAASyB,GACXC,GACHO,EAAA,KAAKhC,GAAWyB,GAEjBO,EAAA,KAAK/B,GAAgBgC,EAAA,KAAK3B,EAAAC,IAAL,UAAYO,EAAcM,GAEhD,CAqEA,WAAY,CACX,OAAOW,EAAA,KAAK9B,GACb,CAEA,MAAM,cAAckC,EAAyB,CAC5C,KAAK,gBAAkBA,EAEvB,KAAK,QACJH,EAAA,KAAK7B,EACJ,KAAK,IAAI,GAEX,MAAO4B,EAAA,KAAKnC,KAAkB,KAAK,GAAGmC,EAAA,KAAKrC,GAAW,IAAI,EAE1DqC,EAAA,KAAK7B,GAAU,QAAQ,KAAK,IAAI,CAEjC,CA8CA,eAAekC,EAAkB,CAChC,KAAK,SAAWA,EAEfL,EAAA,KAAKjC,IAAqB,KAAK,GAAGiC,EAAA,KAAKrC,GAAW,IAAI,CAExD,CAEA,MAAM,iBAAkB,CAEvB,KAAK,aAAe,GAEf,KAAK,OACT,KAAK,KAAO,KAAK,eACjB,KAAK,eAAiB,GAGvB,KAAK,MAAQ,KAAK,IAAI,EACtB,KAAK,SAAW,KAAK,MAAQ,KAAK,QAClC,KAAK,WAAa,KAAK,KAAO,KAAK,SAEnCqC,EAAA,KAAKpC,GAAS,OAAO,KAAK,EAAE,EAExB,KAAK,WAAa,IACrB,KAAK,SAAW,EAChB,MAAOoC,EAAA,KAAKjC,IAAqB,KAAK,GAAGiC,EAAA,KAAKrC,GAAW,IAAI,GAG7DqC,EAAA,KAAKhC,KAAgB,KAAK,GAAGgC,EAAA,KAAKrC,GAAW,IAAI,CAEnD,CAEA,MAAM2C,EAAsB,CAE3BN,EAAA,KAAKpC,GAAS,OAAO,KAAK,EAAE,EAE5B,KAAK,MAAQ,IAAI,MAAM0C,CAAY,EAElCN,EAAA,KAAK/B,KAAkB,KAAK,GAAG+B,EAAA,KAAKrC,GAAW,KAAM,KAAK,KAAK,CAEjE,CAEA,OAAQ,CAEP,YAAK,UAAY,GAEjB,KAAK,GAAG,YAAYwC,EAAQ,MAAO,KAAK,EAAE,EAEnC,KAAK,MAAM,+BAA+B,CAClD,CAEA,WAAY,CACX,MAAO,CACN,GAAI,KAAK,GACT,KAAM,KAAK,KACX,KAAM,KAAK,KACX,QAAS,KAAK,QACd,SAAU,KAAK,SACf,KAAM,KAAK,KACX,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,aAAc,KAAK,aACnB,gBAAiB,KAAK,gBACtB,QAAS,KAAK,QACd,SAAU,KAAK,SACf,eAAgB,KAAK,eACrB,WAAY,KAAK,WACjB,eAAgB,KAAK,eACrB,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,MAAO,KAAK,KACb,CACD,CAiED,EAvQCxC,EAAA,YAUAC,EAAA,YAEAC,GAAA,YACAC,GAAA,YACAC,EAAA,YACAC,GAAA,YACAC,GAAA,YAEAC,GAAA,YAGAC,EAAA,YAKAC,EAAA,YACAC,EAAA,YACAC,EAAA,YAhFMC,EAAA,YA6FAC,GAAM,eAACO,EAAuBM,EAA2B,CAE9D,OAAW,CAAEkB,EAAeC,EAAMC,CAAQ,IAAM,KAAK,YAAwC,MAC5F,GAAI,KAAK,OAASF,GAAiBC,EAAK,KAAK,IAAc,EAAG,CAC7D,KAAK,KAAOD,EACZN,EAAA,KAAK9B,EAAWsC,GAChB,KACD,CAED,GAAI,KAAK,KACR,MAAMT,EAAA,KAAK7B,GAAU,MAAM,KAAK,IAAI,EACpC,OAAO,KAAK,SAEZ,OAAM,IAAI,MAAM,0BAA0B,EAE3C,KAAK,GAAG,YAAYgC,EAAQ,QAAS,KAAK,KAAM,KAAK,GAAI,CACxD,KAAMpB,GAAgB,KAAK,KAC3B,QAAS,KAAK,QACd,SAAUM,GAAoB,KAAK,SACnC,KAAM,KAAK,KACX,SAAU,KAAK,QAChB,CAAC,CAEF,EA6BMZ,GAAQ,gBAAG,CAEhB,IAAIsB,EAAQC,EAAA,KAAK3B,GAAa,MAAM,EAE9BqC,EAAcX,EAAM,OAEtBC,EAAA,KAAK7B,GAAU,iBAClB4B,EAAQ,MAAMC,EAAA,KAAK7B,GAAU,eAAe,KAAK,KAAM4B,CAAK,GAE7D,KAAK,GAAG,YAAYI,EAAQ,MAAO,KAAK,GAAIJ,EAAOW,CAAW,EAE9D,IAAMC,EAAK,KAAK,IAAI,EACpB,KAAK,WAAaD,GAAeC,EAAKX,EAAA,KAAK5B,IAC3C6B,EAAA,KAAK7B,EAAeuC,GACpB,KAAK,gBAAkBD,EAEnB,KAAK,OACR,KAAK,eAAiB,KAAK,eAAiB,KAAK,MAElD,MAAOV,EAAA,KAAKlC,KAA2B,KAAK,GAAGkC,EAAA,KAAKrC,GAAW,IAAI,EAE/DqC,EAAA,KAAK3B,GAAa,OACrB6B,EAAA,KAAK3B,EAAAE,IAAL,YAEAwB,EAAA,KAAK3B,EAAgB,IAEjB,KAAK,iBAAmB,GAC3B,KAAK,KAAK,EAGb,EA8EAuB,EA7PYnB,EA6PL,QAA+G,CAErH,CAAE,SAAUG,GAAQ,OAAOA,GAAQ,SAAU,CAE5C,OAAQ,CAEP,KAAK,eAAiB,IAAI+B,EAAe,KAAK,UAAU,KAAK,IAAI,EAAG,CAAE,UAAW,KAAK,SAAU,CAAC,EACjG,KAAK,QAAU,GACf,KAAK,KAAO,KAAK,eAAe,KAChC,KAAK,SAAW,MAEjB,EAEA,SAAU,CAET,KAAK,eAAgB,MAAM,KAAK,WAAW,CAE5C,CACD,CAAE,EAEF,CAAE,UAAW/B,GAAQ,OAAOA,GAAQ,UAAY,wCAAwC,KAAKA,CAAI,EAAG,CAEnG,OAAQ,CAEP,GAAM,CAAEC,EAAMD,CAAK,EAAK,KAAK,KAAgB,MAAM,mBAAmB,EAAE,MAAM,CAAC,EAE/E,KAAK,eAAiB,IAAI+B,EAAe/B,EAAM,CAAE,UAAW,KAAK,SAAU,CAAC,EAC5E,KAAK,KAAO,KAAK,eAAe,KAChC,KAAK,SAAW,SAChB,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,KAAAC,CAAK,CAE1C,EAEA,SAAU,CAET,KAAK,eAAgB,MAAM,KAAK,WAAW,CAE5C,CACD,CAAE,EAEF,CAAE,SAAUD,GAAQ,OAAOA,GAAQ,SAAU,CAE5C,OAAQ,CAEP,KAAK,eAAiB,IAAI+B,EAAe,KAAK,KAAgB,CAAE,UAAW,KAAK,SAAU,CAAC,EAC3F,KAAK,KAAO,KAAK,eAAe,KAC3B,KAAK,WACT,KAAK,SAAW,OAElB,EAEA,SAAU,CAET,KAAK,eAAgB,MAAM,KAAK,WAAW,CAE5C,CACD,CAAE,CAEH,GAEAf,EAzTYnB,EAyTL,YAAYS,IC/UpB,IAAA0B,EAAAC,GAYaC,GAAN,KAIL,CACD,YAAYC,EAAiF,CA0B7FC,EAAA,KAAAJ,EAAa,IAAI,KAEjBI,EAAA,KAAAH,GAA4C,CAC3C,OAASI,GAAeC,EAAA,KAAKN,GAAW,OAAOK,CAAE,CAClD,GA5BKF,EAAG,mBACNA,EAAG,GAAG,kBAAkBI,EAAQ,OAAO,GAAI,CAACC,KAA6CC,IAA4D,KAAK,cAAcD,EAAM,GAAGC,CAAI,CAAC,EACtLN,EAAG,GAAG,kBAAkBI,EAAQ,QAAQ,GAAI,CAACC,KAA6CC,IAA6D,KAAK,eAAeD,EAAM,GAAGC,CAAI,CAAC,EACzLN,EAAG,GAAG,kBAAkBI,EAAQ,SAAS,GAAI,CAACC,KAA6CC,IAA8D,KAAK,gBAAgBD,EAAM,GAAGC,CAAI,CAAC,EAC5LN,EAAG,GAAG,kBAAkBI,EAAQ,KAAK,GAAI,CAACC,KAA6CC,IAA0D,KAAK,YAAYD,EAAM,GAAGC,CAAI,CAAC,EAEhL,OAAO,OAAON,EAAI,CACjB,SAAU,CAACK,EAA0CE,EAAcC,IAClE,KAAK,SAASH,EAAME,EAAMC,CAAK,CACjC,CAAC,IAEDR,EAAG,GAAG,WAAWI,EAAQ,OAAO,GAAI,IAAIE,IAA4D,KAAK,cAAcN,EAAI,GAAGM,CAAI,CAAC,EACnIN,EAAG,GAAG,WAAWI,EAAQ,QAAQ,GAAI,IAAIE,IAA6D,KAAK,eAAeN,EAAI,GAAGM,CAAI,CAAC,EACtIN,EAAG,GAAG,WAAWI,EAAQ,SAAS,GAAI,IAAIE,IAA8D,KAAK,gBAAgBN,EAAI,GAAGM,CAAI,CAAC,EACzIN,EAAG,GAAG,WAAWI,EAAQ,KAAK,GAAI,IAAIE,IAA0D,KAAK,YAAYN,EAAI,GAAGM,CAAI,CAAC,EAE7H,OAAO,OAAON,EAAI,CACjB,SAAU,CAACO,EAAcC,IACxB,KAAK,SAASR,EAAIO,EAAMC,CAAK,CAC/B,CAAC,EAGH,CAQA,SAASR,EAA0DO,EAAcC,EAAkD,CAElI,GAAM,CAAE,SAAAC,CAAS,EAAI,KAAK,YAEpBC,EAAW,IAAID,EAAST,EAAIO,EAAMC,EAAOL,EAAA,KAAKL,GAAgB,EAEpE,OAAAK,EAAA,KAAKN,GAAW,IAAIa,EAAS,GAAIA,CAAa,EAEvCA,CACR,CAEQ,cAAcV,EAA0DE,EAAYS,EAAyB,CACpHR,EAAA,KAAKN,GAAW,IAAIK,CAAE,GAAG,cAAcS,CAAe,CAEvD,CAEQ,eAAeX,EAA0DE,EAAYU,EAAkB,CAC9GT,EAAA,KAAKN,GAAW,IAAIK,CAAE,GAAG,eAAeU,CAAQ,CAEjD,CAEQ,gBAAgBZ,EAA0DE,EAAY,CAC7FC,EAAA,KAAKN,GAAW,IAAIK,CAAE,GAAG,gBAAgB,CAE1C,CAEQ,YAAYF,EAA0DE,EAAYW,EAAsB,CAC/GV,EAAA,KAAKN,GAAW,IAAIK,CAAE,GAAG,MAAMW,CAAY,CAE5C,CAKD,EAxCChB,EAAA,YAEAC,GAAA,YAoCAgB,EArEYf,GAqEL,WAAWgB,GCjFZ,SAASC,GAAoBC,EAA2C,CAC9E,OAAO,IAAI,QAAQC,GAAW,CAE7B,IAAMC,EAAa,IAAI,WAGvBA,EAAW,OAAS,IACnBD,EAAQ,OAAOC,GAAY,QAAU,SAAWA,EAAW,OAAO,MAAM,KAAK,IAAI,EAAIA,EAAW,OAAkB,QAAQ,GAAG,EAAI,CAAC,CAAC,EAAI,EAAE,EAE1IA,EAAW,cAAc,IAAI,KAAK,CAAEF,CAAY,CAAC,CAAC,CAEnD,CAAC,CACF,CCZA,IAAAG,EAAAC,EAAAC,GAAAC,GAAAC,GAQaC,GAAN,KAAmB,CACzB,YAAYC,EAAYC,EAA2B,CAAC,EAAG,CADjDC,EAAA,KAAAN,IAkBNO,EAAA,aACAA,EAAA,aACAA,EAAA,kBACAA,EAAA,mBACAA,EAAA,iBAEAD,EAAA,KAAAR,EAAS,GACTQ,EAAA,KAAAP,EAAO,GAEPQ,EAAA,iBAAY,IAoBZD,EAAA,KAAAJ,GAAwB,SAAY,CAEnC,GAAI,CAAC,KAAK,UAAW,CACpB,IAAMM,EAAc,KAAK,WAAW,OACpCA,EAAY,OAASA,EAAY,WAEjC,MAAM,KAAK,SAAUA,CAAW,EAE5BC,EAAA,KAAKV,GAAO,KAAK,OACpBW,EAAA,KAAKZ,EAASW,EAAA,KAAKV,IAEnBY,EAAA,KAAKX,GAAAC,IAAL,WAEF,CAED,GA5DC,KAAK,KAAOG,EACZ,KAAK,KAAO,KAAK,KAAK,KAEtB,GAAM,CACL,UAAAQ,EAAY,KAAO,GACpB,EAAIP,EAEJ,KAAK,UAAYO,EAEjB,KAAK,WAAa,IAAI,WAGtB,KAAK,WAAW,OAASH,EAAA,KAAKP,GAE/B,CAaA,MAAMW,EAAoB,CACzB,KAAK,SAAWA,EAEhBF,EAAA,KAAKX,GAAAC,IAAL,UAED,CA8BA,OAAQ,CAEP,KAAK,UAAY,EAElB,CAED,EA9CCH,EAAA,YACAC,EAAA,YAzBMC,GAAA,YAoCNC,GAAK,UAAG,CAEF,KAAK,YACTS,EAAA,KAAKX,EAAO,KAAK,IAAIU,EAAA,KAAKX,GAAS,KAAK,UAAW,KAAK,IAAI,GAG5D,KAAK,WAAW,kBAAkB,KAAK,KAAK,MAAMW,EAAA,KAAKX,GAAQW,EAAA,KAAKV,EAAI,CAAC,EAG3E,EAEAG,GAAA,YC7CD,IAAMY,GAAN,cAEUC,CAA2B,CA4CrC,EA1CCC,EAJKF,GAIE,QAA+F,CAErG,CAAE,OAAQG,GAAQ,OAAOA,GAAQ,UAAYA,aAAgB,KAAM,CAElE,OAAQ,CAEP,IAAMC,EAAO,KAAK,KAElB,KAAK,aAAe,IAAIC,GAAaD,EAAM,CAAE,UAAW,KAAK,SAAU,CAAC,EAExE,IAAME,EAAW,CAChB,KAAMF,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,WAAYA,EAAK,YAClB,EAEI,KAAK,SACR,OAAO,OAAO,KAAK,SAAUE,CAAQ,EAErC,KAAK,SAAWA,EAEjB,KAAK,KAAO,KAAK,aAAa,KAC9B,KAAK,SAAW,QAEjB,EAEA,SAAU,CAET,KAAK,aAAc,MAAM,KAAK,WAAW,CAE1C,EAEA,eAAeC,EAAO,CACrB,OAAOC,GAAoBD,CAAoB,CAChD,CACD,CAAE,EAEF,GAAGN,EAAiB,KAErB,GAID,IAAMQ,GAAN,cAEUC,EAAqF,CAI/F,EAFCR,EAJKO,GAIE,WAAWT",
|
|
6
|
+
"names": ["headers", "sizeLimit", "chunkSize", "progressInterval", "_callArgs", "_handles", "_listeners", "_setupPromise", "_methods", "_prevChunkAt", "_chunksQueue", "_isProcessing", "_progressInterval", "_lastProgress", "_IncomingTransfer_instances", "setup_fn", "process_fn", "complete_fn", "IncomingTransfer", "ws", "kind", "id", "type", "collect", "encoding", "size", "metadata", "handles", "listeners", "__privateAdd", "__publicField", "__privateSet", "__privateMethod", "__privateGet", "begin", "headers", "progressInterval", "chunk", "length", "ts", "bySender", "errorMessage", "sendToSender", "listener", "chunkListener", "progressListener", "_listeners", "_transfers", "_transferHandles", "IncomingTransport", "ws", "options", "__publicField", "__privateAdd", "id", "__privateGet", "kind", "listener", "sizeLimit", "headers", "wssc", "args", "listenerOptions", "listeners", "type", "size", "metadata", "restProps", "Transfer", "chunk", "length", "IncomingTransfer", "BrowserIncomingTransfer", "IncomingTransfer", "__publicField", "chunk", "BrowserIncomingTransport", "IncomingTransport", "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", "uid", "prefix", "postfix", "_start", "_end", "_StringStreamer_instances", "next_fn", "StringStreamer", "string", "options", "__privateAdd", "__publicField", "chunkSize", "listener", "__privateMethod", "__privateSet", "__privateGet", "chunk", "resolve", "_callArgs", "_handles", "_onBegin", "_onSenderProgress", "_onProgress", "_onEnd", "_onError", "_setupPromise", "_methods", "_prevChunkAt", "_chunksQueue", "_isProcessing", "_OutgoingTransfer_instances", "setup_fn", "process_fn", "OutgoingTransfer", "ws", "kind", "data", "type", "incomingType", "collect", "metadata", "size", "chunkSize", "encoding", "incomingEncoding", "onBegin", "onSenderProgress", "onProgress", "onEnd", "onError", "handles", "__privateAdd", "__publicField", "uid", "chunk", "__privateGet", "__privateSet", "__privateMethod", "headers", "confirmResponse", "progress", "errorMessage", "availableType", "test", "methods", "chunkLength", "ts", "StringStreamer", "_transfers", "_transferHandles", "OutgoingTransport", "ws", "__privateAdd", "id", "__privateGet", "headers", "wssc", "args", "kind", "props", "Transfer", "transfer", "confirmResponse", "progress", "errorMessage", "__publicField", "OutgoingTransfer", "arrayBufferToBase64", "arrayBuffer", "resolve", "fileReader", "_start", "_end", "_FileStreamer_instances", "next_fn", "_handleFileReaderLoad", "FileStreamer", "file", "options", "__privateAdd", "__publicField", "arrayBuffer", "__privateGet", "__privateSet", "__privateMethod", "chunkSize", "listener", "BrowserOutgoingTransfer", "OutgoingTransfer", "__publicField", "data", "file", "FileStreamer", "metadata", "chunk", "arrayBufferToBase64", "BrowserOutgoingTransport", "OutgoingTransport"]
|
|
7
7
|
}
|
package/dist/browser/types.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { InSiteWebSocket } from "insite-ws/client";
|
|
2
|
+
import type { IncomingTransferListener, IncomingTransferListenerOptions, OutgoingTransferProps, TransferTypes } from "../types";
|
|
3
|
+
import type { IncomingTransfer, IncomingTransport } from "./incoming";
|
|
4
|
+
import type { OutgoingTransfer } from "./outgoing";
|
|
2
5
|
export type BrowserTransferTypes = Exclude<TransferTypes, "stream">;
|
|
6
|
+
type Transfer<WS extends InSiteWebSocket> = {
|
|
7
|
+
transfer: <T extends OutgoingTransfer<WS>, TP extends BrowserTransferTypes>(ws: WS, kind: string, props: OutgoingTransferProps<WS, T, TP>) => T;
|
|
8
|
+
};
|
|
9
|
+
export type WithTransfer<WS extends InSiteWebSocket> = Transfer<WS> & WS;
|
|
10
|
+
export type WithOptionalTransfer<WS extends InSiteWebSocket> = Partial<Transfer<WS>> & WS;
|
|
11
|
+
type OnTransfer<WS extends InSiteWebSocket> = {
|
|
12
|
+
onTransfer: <T extends IncomingTransfer<WS>>(kind: string, listener: IncomingTransferListener<WS, T>, options?: IncomingTransferListenerOptions) => IncomingTransport<WS>;
|
|
13
|
+
onceTransfer: <T extends IncomingTransfer<WS>>(kind: string, listener: IncomingTransferListener<WS, T>, listenerOptions?: Omit<IncomingTransferListenerOptions, "once">) => IncomingTransport<WS>;
|
|
14
|
+
};
|
|
15
|
+
export type WithOnTransfer<WS extends InSiteWebSocket> = OnTransfer<WS> & WS;
|
|
16
|
+
export type WithOptionalOnTransfer<WS extends InSiteWebSocket> = Partial<OnTransfer<WS>> & WS;
|
|
17
|
+
export {};
|
|
3
18
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EACX,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,EACrB,aAAa,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAGpE,KAAK,QAAQ,CAAC,EAAE,SAAS,eAAe,IAAI;IAC3C,QAAQ,EAAE,CACT,CAAC,SAAS,gBAAgB,CAAC,EAAE,CAAC,EAC9B,EAAE,SAAS,oBAAoB,EAC9B,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAEzE,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAG1F,KAAK,UAAU,CAAC,EAAE,SAAS,eAAe,IAAI;IAC7C,UAAU,EAAE,CACX,CAAC,SAAS,gBAAgB,CAAC,EAAE,CAAC,EAC7B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,+BAA+B,KAAK,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC/H,YAAY,EAAE,CACb,CAAC,SAAS,gBAAgB,CAAC,EAAE,CAAC,EAC7B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,KAAK,iBAAiB,CAAC,EAAE,CAAC,CAAC;CACrJ,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,eAAe,IAAI,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAE7E,MAAM,MAAM,sBAAsB,CAAC,EAAE,SAAS,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC"}
|
package/dist/node/incoming.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ declare class TransferStream extends Readable {
|
|
|
12
12
|
promise: Promise<void>;
|
|
13
13
|
_read(): void;
|
|
14
14
|
}
|
|
15
|
-
declare class NodeIncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> extends IncomingTransfer<WSORWSSC> {
|
|
15
|
+
export declare class NodeIncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> extends IncomingTransfer<WSORWSSC> {
|
|
16
16
|
streams?: TransferStream[];
|
|
17
17
|
isBuffer?: boolean;
|
|
18
18
|
pipeTo?: (this: NodeIncomingTransfer<WSORWSSC>, writableStream: Writable) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incoming.d.ts","sourceRoot":"","sources":["../../src/node/incoming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAA2B,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGzD,cAAM,cAAe,SAAQ,QAAQ;gBACxB,cAAc,EAAE,QAAQ;IAepC,QAAQ,EAAE,QAAQ,CAAC;IAEnB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,KAAK;CAEL;AAgED,
|
|
1
|
+
{"version":3,"file":"incoming.d.ts","sourceRoot":"","sources":["../../src/node/incoming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAA2B,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGzD,cAAM,cAAe,SAAQ,QAAQ;gBACxB,cAAc,EAAE,QAAQ;IAepC,QAAQ,EAAE,QAAQ,CAAC;IAEnB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,KAAK;CAEL;AAgED,qBAAa,oBAAoB,CAChC,QAAQ,SAAS,eAAe,GAAG,2BAA2B,CAC7D,SAAQ,gBAAgB,CAAC,QAAQ,CAAC;IAEnC,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAA0B;IAC5C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,KAAK,IAAI,CAAe;IAGhG,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,eAAe,GAAG,2BAA2B,CAAC,EAAE,iBAAiB,CAAC,CAQzH;CACF;AAED,cAAM,qBAAqB,CAC1B,QAAQ,SAAS,eAAe,GAAG,2BAA2B,CAC7D,SAAQ,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAEvF,MAAM,CAAC,QAAQ,8BAAwB;CAEvC;AAGD,OAAO,EACN,oBAAoB,IAAI,gBAAgB,EACxC,qBAAqB,IAAI,iBAAiB,EAC1C,CAAC"}
|
package/dist/node/index.d.ts
CHANGED
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Readable as N}from"node:stream";var o={request:"~t-request",confirm:"~t-confirm",chunk:"~t-c",progress:"~t-p",sent:"~t-sent",completed:"~t-completed",abort:"~t-abort",error:"~t-error"},w=10*1024*1024*1024,P=1024*256,z=250;var d=class{constructor(e,t,s,{type:r,collect:n,encoding:a,size:l,metadata:h},S,g){this.ws=e,this.#e=e.isWebSocket?[e]:[e.wss,e],this.kind=t,this.id=s,this.type=r,this.collect=!!n,this.encoding=a,this.size=l,this.metadata=h,this.#t=S,this.#s=g,this.#c=this.#l()}ws;#e;kind;id;type;collect;encoding;size;metadata;#t;#s;#c;data;#r;isAborted=!1;isAbortedBySender=!1;isAbortedByReceiver=!1;isTransfered=!1;confirmResponse;beginAt=null;#o=null;#a=[];#n=!1;duration=null;transferedSize=0;processedSize=0;bytesPerMs=null;progress=0;endAt=null;error=null;#i;#h=0;async#l(){if(this.#r=this.constructor.types[this.type],this.#r)await this.#r.setup.call(this);else throw new Error(`Unknown type of transfer "${String(this.type)}"`);this.confirm()}whenSetUp(){return this.#c}async confirm(){for(let{begin:e}of this.#s)if(await e?.call(...this.#e,this)===!1)return this.throw("Transfer was rejected by receiver");return this.beginAt=this.#o=Date.now(),this.ws.sendMessage(o.confirm,this.id,this.confirmResponse),this.#i=setInterval(()=>{this.#h!==this.progress&&(this.#h=this.progress,this.ws.sendMessage(o.progress,this.id,this.progress))},z),null}handleChunk(e,t=e.length){let s=Date.now();this.bytesPerMs=t/(s-this.#o),this.#o=s,this.transferedSize+=t,this.#a.push([e,t]),this.#n||(this.#n=!0,this.#f())}async#f(){let[e,t]=this.#a.shift();this.#r.transformChunk&&(e=await this.#r.transformChunk.call(this,e)),this.collect&&await this.#r.collect.call(this,e);for(let{chunk:s,progress:r}of this.#s)await(s??r)?.call(...this.#e,this,e);this.processedSize+=t,this.size&&(this.progress=this.processedSize/this.size),this.#a.length?this.#f():(this.#n=!1,this.isTransfered&&this.#u())}handleSent(){this.isTransfered=!0,this.size||(this.size=this.transferedSize),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,this.#n||this.#u()}async#u(){this.progress=1,await this.#r.done?.call(this);for(let{end:e}of this.#s)await e?.call(...this.#e,this);clearInterval(this.#i),this.#t.delete(this.id),this.ws.sendMessage(o.completed,this.id)}abort(e=!1){return this.isAborted=!0,this.isAbortedBySender=e,this.isAbortedByReceiver=!e,this.throw(`Transfer is aborted by ${e?"sender":"receiver"}`,!e)}throw(e,t=!0){this.#t.delete(this.id),clearInterval(this.#i),this.error=new Error(e);for(let{error:s}of this.#s)s?.call(...this.#e,this,this.error);t&&this.ws.sendMessage(o.error,this.id,e)}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isAbortedBySender:this.isAbortedBySender,isAbortedByReceiver:this.isAbortedByReceiver,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,processedSize:this.processedSize,bytesPerMs:this.bytesPerMs,progress:this.progress,endAt:this.endAt,error:this.error}}static types={object:{setup(){this.data=""},collect(e){this.data+=e},done(){this.data=JSON.parse(this.data)}},datauri:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&(this.data=`data:${this.metadata.type};base64,${this.data}`)}},string:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e}}}};var I=class{constructor(e,t={}){let{sizeLimit:s=w}=t;this.sizeLimit=s,e.isWebSocketServer?(e.on(`client-message:${o.request}`,(r,...n)=>this.handleRequest(r,...n)),e.on(`client-message:${o.chunk}`,(r,...n)=>this.handleChunk(r,...n)),e.on(`client-message:${o.sent}`,(r,...n)=>this.handleSent(r,...n)),e.on(`client-message:${o.abort}`,(r,...n)=>this.handleAbort(r,...n))):(e.on(`message:${o.request}`,(...r)=>this.handleRequest(e,...r)),e.on(`message:${o.chunk}`,(...r)=>this.handleChunk(e,...r)),e.on(`message:${o.sent}`,(...r)=>this.handleSent(e,...r)),e.on(`message:${o.abort}`,(...r)=>this.handleAbort(e,...r)))}sizeLimit;#e=new Map;addTransferListener(e,t){return this.#e.get(e)?.add(t)??this.#e.set(e,new Set([t])),this}on=this.addTransferListener;removeTransferListener(e,t){return t?this.#e.get(e)?.delete(t):this.#e.delete(e),this}off=this.removeTransferListener;#t=new Map;#s={delete:e=>this.#t.delete(e)};handleRequest(e,t,s,{type:r,size:n,metadata:a,...l}){let{Transfer:h}=this.constructor;this.#e.has(t)?this.#t.has(s)?e.sendMessage(o.error,s,"Transfer already exists"):r in h.types?n>this.sizeLimit?e.sendMessage(o.error,s,`Transfer size (${n} bytes) exeeds limit of ${this.sizeLimit} bytes`):this.#t.set(s,new h(e,t,s,{type:r,size:n,metadata:a,...l},this.#s,this.#e.get(t))):e.sendMessage(o.error,s,"Unknown type of transfer"):e.sendMessage(o.error,s,`Unknown kind of file "${t}"`)}handleChunk(e,t,s,r=s.length){this.#t.get(t)?.handleChunk(s,r)}handleSent(e,t){this.#t.get(t)?.handleSent()}handleAbort(e,t){this.#t.get(t)?.abort(!0)}static Transfer=d};var O=class extends N{constructor(e){super(),this.writable=e,this.promise=new Promise((t,s)=>{e.on("close",t),e.on("error",s)}),this.pipe(e)}writable;promise;_read(){}};function q(i){let e=new O(i);return this.streams?.push(e)??(this.streams=[e]),i}var A={setup(){this.encoding||(this.encoding="buffer"),this.encoding==="buffer"&&(this.isBuffer=!0),this.collect&&(this.data=this.isBuffer?Buffer.from(""):""),this.pipeTo=q},transformChunk(i){if(i=this.isBuffer?Buffer.from(i,"base64"):Buffer.from(i,"base64").toString(this.encoding),this.streams)for(let e of this.streams)e.push(i);return i},collect(i){this.isBuffer?this.data=Buffer.concat([this.data,i]):this.data+=i},async done(){if(this.streams){let i=[];for(let e of this.streams)e.push(null),i.push(e.promise);await Promise.all(i)}}},v=class extends d{streams;isBuffer=this.isBuffer||!1;pipeTo=this.pipeTo;static types={stream:A,file:A,...d.types}},$=class extends I{static Transfer=v};import B from"node:fs";import j from"node:path";import{Readable as H}from"node:stream";import _ from"mime";function x(){}function D(i,e=0,t={}){let{leading:s=!1,trailing:r=!0}=t,{maxWait:n=1/0}=t,a,l,h,S,g,p,f,b,k=async()=>{let y=Date.now();y>=h?(a=void 0,h=void 0,clearTimeout(l),typeof f=="function"&&await f(),c.resolve(b),c.promise.isResolved=!0,p=s):(clearTimeout(a),a=setTimeout(k,h-y))},W=Number.isFinite(n)?()=>{f===u&&(f=!1),u(),l=setTimeout(W,n)}:null;async function u(){return b=await i.apply(S,g)}s&&typeof s=="boolean"&&(s=u),p=s,r&&typeof r=="boolean"&&(r=u),f=r;let c=Object.assign(function(...y){return g=y,S=this,h=Date.now()+e,f=r,c.promise.isResolved&&(c.promise=Object.assign(new Promise(L=>{c.resolve=L,typeof p=="function"&&(p(),p=!1,f===u&&(f=!1)),a||(a=setTimeout(k,e),W&&(l=setTimeout(W,n)))}),{isResolved:!1})),c.promise},{callback:i,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:x,run:u,clear:async y=>{clearTimeout(a),a=void 0,clearTimeout(l),c.promise.isResolved=!0,c.resolve(y?await u():b)}});return c}D.noop=Object.assign(()=>{},{callback:x,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:x,run:x,clear:x});function M(i,e,t,s,r=!0){return Array.isArray(i)&&(i=i.length),typeof s!="string"&&(r=s??!0,s=t),(r?`${i}\xA0`:"")+M.raw(i,e,t,s)}M.raw=(i,e,t,s=t)=>{i=Math.abs(i);let r=i%10,n=i%100;return r===1&&n!==11?e:r>=2&&r<=4&&!(n>=12&&n<=15)?t:s};function E(i="",e=""){return`${i}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}var T=class{constructor(e,t={}){this.string=e,this.size=this.string.length;let{chunkSize:s=1024*256}=t;this.chunkSize=s}string;size;chunkSize;listener;#e=0;#t=0;isAborted=!1;start(e){this.listener=e,this.#s()}async#s(){if(!this.isAborted){this.#t=Math.min(this.#e+this.chunkSize,this.size);let e=await new Promise(t=>{t(this.string.slice(this.#e,this.#t))});this.isAborted||(await this.listener(e),this.#t<this.size&&(this.#e=this.#t,this.#s()))}}abort(){this.isAborted=!0}};var m=class{constructor(e,t,{data:s,type:r,incomingType:n,collect:a,metadata:l,size:h,chunkSize:S,encoding:g,incomingEncoding:p,onBegin:f,onSenderProgress:b,onProgress:k,onEnd:W,onError:u},c){this.ws=e,this.#e=e.isWebSocket?[e]:[e.wss,e],this.kind=t,this.data=s,this.type=r,this.collect=a??!1,this.metadata=l,this.size=h??null,this.encoding=g,this.chunkSize=S??this.constructor.chunkSize,this.#t=c,f&&(this.#s=f),b&&(this.#c=b),k&&(this.#r=k),W&&(this.#o=W),u&&(this.#a=u),this.#n=this.#u(n,p)}ws;#e;kind;data;type;collect;metadata;size;encoding;chunkSize;#t;#s;#c;#r;#o;#a;#n;id=E();#i;isAborted=!1;isTransfered=!1;confirmResponse;beginAt=null;#h=null;#l=[];#f=!1;duration=null;transferedSize=0;bytesPerMs=null;senderProgress=0;progress=0;endAt=null;error=null;stringStreamer;fileStreamer;async#u(e,t){for(let[s,r,n]of this.constructor.types)if(this.type===s||r(this.data)){this.type=s,this.#i=n;break}if(this.type)await this.#i.setup.call(this),delete this.data;else throw new Error("Unknown type of transfer");this.ws.sendMessage(o.request,this.kind,this.id,{type:e??this.type,collect:this.collect,encoding:t??this.encoding,size:this.size,metadata:this.metadata})}whenSetUp(){return this.#n}async handleConfirm(e){this.confirmResponse=e,this.beginAt=this.#h=Date.now(),await this.#s?.call(...this.#e,this),this.#i.confirm.call(this)}handleChunk=e=>{this.#l.push(e),this.#f||(this.#f=!0,this.#p())};async#p(){let e=this.#l.shift(),t=e.length;this.#i.transformChunk&&(e=await this.#i.transformChunk.call(this,e)),this.ws.sendMessage(o.chunk,this.id,e,t);let s=Date.now();this.bytesPerMs=t/(s-this.#h),this.#h=s,this.transferedSize+=t,this.size&&(this.senderProgress=this.transferedSize/this.size),await this.#c?.call(...this.#e,this),this.#l.length?this.#p():(this.#f=!1,this.senderProgress===1&&this.sent())}sent=()=>this.ws.sendMessage(o.sent,this.id);handleProgress(e){this.progress=e,this.#r?.call(...this.#e,this)}async handleCompleted(){this.isTransfered=!0,this.size||(this.size=this.transferedSize,this.senderProgress=1),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,this.#t.delete(this.id),this.progress!==1&&(this.progress=1,await this.#r?.call(...this.#e,this)),this.#o?.call(...this.#e,this)}throw(e){this.#t.delete(this.id),this.error=new Error(e),this.#a?.call(...this.#e,this,this.error)}abort(){return this.isAborted=!0,this.ws.sendMessage(o.abort,this.id),this.throw("Transfer is aborted by sender")}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,bytesPerMs:this.bytesPerMs,senderProgress:this.senderProgress,progress:this.progress,endAt:this.endAt,error:this.error}}static types=[["object",e=>typeof e=="object",{setup(){this.stringStreamer=new T(JSON.stringify(this.data),{chunkSize:this.chunkSize}),this.collect=!0,this.size=this.stringStreamer.size,this.encoding="utf8"},confirm(){this.stringStreamer.start(this.handleChunk)}}],["datauri",e=>typeof e=="string"&&/^data:[\w-.]+\/[\w-.+,]+(?:;base64)?,/.test(e),{setup(){let[e,t]=this.data.split(/^data:|;base64,|,/).slice(1);this.stringStreamer=new T(t,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding="base64",this.metadata={...this.metadata,type:e}},confirm(){this.stringStreamer.start(this.handleChunk)}}],["string",e=>typeof e=="string",{setup(){this.stringStreamer=new T(this.data,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding||(this.encoding="utf8")},confirm(){this.stringStreamer.start(this.handleChunk)}}]];static chunkSize=P};var C=class{constructor(e){e.isWebSocketServer?(e.on(`client-message:${o.confirm}`,(t,...s)=>this.handleConfirm(t,...s)),e.on(`client-message:${o.progress}`,(t,...s)=>this.handleProgress(t,...s)),e.on(`client-message:${o.completed}`,(t,...s)=>this.handleCompleted(t,...s)),e.on(`client-message:${o.error}`,(t,...s)=>this.handleError(t,...s))):(e.on(`message:${o.confirm}`,(...t)=>this.handleConfirm(e,...t)),e.on(`message:${o.progress}`,(...t)=>this.handleProgress(e,...t)),e.on(`message:${o.completed}`,(...t)=>this.handleCompleted(e,...t)),e.on(`message:${o.error}`,(...t)=>this.handleError(e,...t)))}#e=new Map;#t={delete:e=>this.#e.delete(e)};transfer(e,t,s){let{Transfer:r}=this.constructor,n=new r(e,t,s,this.#t);return this.#e.set(n.id,n),n}handleConfirm(e,t,s){this.#e.get(t)?.handleConfirm(s)}handleProgress(e,t,s){this.#e.get(t)?.handleProgress(s)}handleCompleted(e,t){this.#e.get(t)?.handleCompleted()}handleError(e,t,s){this.#e.get(t)?.throw(s)}static Transfer=m};var R=class extends m{stream=this.stream;isBuffer=this.isBuffer||!1;static types=[["stream",e=>e instanceof H,{setup(){this.stream=this.data,this.encoding||(this.encoding="buffer"),this.encoding==="buffer"&&(this.isBuffer=!0)},confirm(){this.stream.on("data",this.handleChunk),this.size||this.stream.on("end",this.sent)},transformChunk(e){return(this.isBuffer?e:Buffer.from(e,this.encoding)).toString("base64")}}],["file",e=>typeof e=="string"&&/^(\/|(\/[^/]+)+)$/.test(e),{async setup(){let e=this.data,t=j.basename(e),{size:s,mtimeMs:r}=await B.promises.stat(e),n={name:t,type:_.getType(j.extname(t).slice(1)),size:s,modifiedAt:r};this.stream=B.createReadStream(e),this.size=s,this.encoding="buffer",this.metadata?Object.assign(this.metadata,n):this.metadata=n},confirm(){this.stream.on("data",this.handleChunk)},transformChunk(e){return e.toString("base64")}}],...m.types]},F=class extends C{static OutgoingTransfer=R};export{v as IncomingTransfer,$ as IncomingTransport,R as OutgoingTransfer,F as OutgoingTransport};
|
|
1
|
+
import{Readable as N}from"node:stream";var o={request:"~t-request",confirm:"~t-confirm",chunk:"~t-c",progress:"~t-p",sent:"~t-sent",completed:"~t-completed",abort:"~t-abort",error:"~t-error"},P=10*1024*1024*1024,w=1024*256,z=250;var m=class{constructor(e,t,s,{type:r,collect:n,encoding:a,size:l,metadata:h},S,g){this.ws=e,this.#e=e.isWebSocket?[e]:[e.wss,e],this.kind=t,this.id=s,this.type=r,this.collect=!!n,this.encoding=a,this.size=l,this.metadata=h,this.#t=S,this.#s=g,this.#c=this.#l()}ws;#e;kind;id;type;collect;encoding;size;metadata;#t;#s;#c;data;#r;isAborted=!1;isAbortedBySender=!1;isAbortedByReceiver=!1;isTransfered=!1;confirmResponse;beginAt=null;#o=null;#a=[];#n=!1;duration=null;transferedSize=0;processedSize=0;bytesPerMs=null;progress=0;endAt=null;error=null;#i;#h=0;async#l(){if(this.#r=this.constructor.types[this.type],this.#r)await this.#r.setup.call(this);else throw new Error(`Unknown type of transfer "${String(this.type)}"`);this.confirm()}whenSetUp(){return this.#c}async confirm(){for(let{begin:e}of this.#s)if(await e?.call(...this.#e,this)===!1)return this.throw("Transfer was rejected by receiver");return this.beginAt=this.#o=Date.now(),this.ws.sendMessage(o.confirm,this.id,this.confirmResponse),this.#i=setInterval(()=>{this.#h!==this.progress&&(this.#h=this.progress,this.ws.sendMessage(o.progress,this.id,this.progress))},z),null}handleChunk(e,t=e.length){let s=Date.now();this.bytesPerMs=t/(s-this.#o),this.#o=s,this.transferedSize+=t,this.#a.push([e,t]),this.#n||(this.#n=!0,this.#f())}async#f(){let[e,t]=this.#a.shift();this.#r.transformChunk&&(e=await this.#r.transformChunk.call(this,e)),this.collect&&await this.#r.collect.call(this,e);for(let{chunk:s,progress:r}of this.#s)await(s??r)?.call(...this.#e,this,e);this.processedSize+=t,this.size&&(this.progress=this.processedSize/this.size),this.#a.length?this.#f():(this.#n=!1,this.isTransfered&&this.#u())}handleSent(){this.isTransfered=!0,this.size||(this.size=this.transferedSize),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,this.#n||this.#u()}async#u(){this.progress=1,await this.#r.done?.call(this);for(let e of this.#s)e.once&&this.#t.removeListener(this.kind,e),await e.end?.call(...this.#e,this);clearInterval(this.#i),this.#t.delete(this.id),this.ws.sendMessage(o.completed,this.id)}abort(e=!1){return this.isAborted=!0,this.isAbortedBySender=e,this.isAbortedByReceiver=!e,this.throw(`Transfer is aborted by ${e?"sender":"receiver"}`,!e)}throw(e,t=!0){this.#t.delete(this.id),clearInterval(this.#i),this.error=new Error(e);for(let s of this.#s)s.once&&this.#t.removeListener(this.kind,s),s.error?.call(...this.#e,this,this.error);t&&this.ws.sendMessage(o.error,this.id,e)}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isAbortedBySender:this.isAbortedBySender,isAbortedByReceiver:this.isAbortedByReceiver,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,processedSize:this.processedSize,bytesPerMs:this.bytesPerMs,progress:this.progress,endAt:this.endAt,error:this.error}}static types={object:{setup(){this.data=""},collect(e){this.data+=e},done(){this.data=JSON.parse(this.data)}},datauri:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e},done(){this.collect&&(this.data=`data:${this.metadata.type};base64,${this.data}`)}},string:{setup(){this.collect&&(this.data="")},collect(e){this.data+=e}}}};var I=class{constructor(e,t={}){let{sizeLimit:s=P}=t;this.sizeLimit=s,e.isWebSocketServer?(e.on(`client-message:${o.request}`,(r,...n)=>this.handleRequest(r,...n)),e.on(`client-message:${o.chunk}`,(r,...n)=>this.handleChunk(r,...n)),e.on(`client-message:${o.sent}`,(r,...n)=>this.handleSent(r,...n)),e.on(`client-message:${o.abort}`,(r,...n)=>this.handleAbort(r,...n))):(e.on(`message:${o.request}`,(...r)=>this.handleRequest(e,...r)),e.on(`message:${o.chunk}`,(...r)=>this.handleChunk(e,...r)),e.on(`message:${o.sent}`,(...r)=>this.handleSent(e,...r)),e.on(`message:${o.abort}`,(...r)=>this.handleAbort(e,...r))),Object.assign(e,{onTransfer:(r,n,a)=>this.on(r,n,a),onceTransfer:(r,n,a)=>this.once(r,n,a)})}sizeLimit;#e=new Map;addTransferListener(e,t,s){return s?.once&&(t.once=!0),this.#e.get(e)?.add(t)??this.#e.set(e,new Set([t])),this}on=this.addTransferListener;once(e,t,s){return this.addTransferListener(e,t,{...s,once:!0})}removeTransferListener(e,t){if(t){let s=this.#e.get(e);s&&(s.delete(t),s.size||this.#e.delete(e))}else this.#e.delete(e);return this}off=this.removeTransferListener;#t=new Map;#s={delete:e=>this.#t.delete(e),removeListener:(e,t)=>this.removeTransferListener(e,t)};handleRequest(e,t,s,{type:r,size:n,metadata:a,...l}){let{Transfer:h}=this.constructor;this.#e.has(t)?this.#t.has(s)?e.sendMessage(o.error,s,"Transfer already exists"):r in h.types?n>this.sizeLimit?e.sendMessage(o.error,s,`Transfer size (${n} bytes) exeeds limit of ${this.sizeLimit} bytes`):this.#t.set(s,new h(e,t,s,{type:r,size:n,metadata:a,...l},this.#s,this.#e.get(t))):e.sendMessage(o.error,s,"Unknown type of transfer"):e.sendMessage(o.error,s,`Unknown kind of file "${t}"`)}handleChunk(e,t,s,r=s.length){this.#t.get(t)?.handleChunk(s,r)}handleSent(e,t){this.#t.get(t)?.handleSent()}handleAbort(e,t){this.#t.get(t)?.abort(!0)}static Transfer=m};var C=class extends N{constructor(e){super(),this.writable=e,this.promise=new Promise((t,s)=>{e.on("close",t),e.on("error",s)}),this.pipe(e)}writable;promise;_read(){}};function q(i){let e=new C(i);return this.streams?.push(e)??(this.streams=[e]),i}var A={setup(){this.encoding||(this.encoding="buffer"),this.encoding==="buffer"&&(this.isBuffer=!0),this.collect&&(this.data=this.isBuffer?Buffer.from(""):""),this.pipeTo=q},transformChunk(i){if(i=this.isBuffer?Buffer.from(i,"base64"):Buffer.from(i,"base64").toString(this.encoding),this.streams)for(let e of this.streams)e.push(i);return i},collect(i){this.isBuffer?this.data=Buffer.concat([this.data,i]):this.data+=i},async done(){if(this.streams){let i=[];for(let e of this.streams)e.push(null),i.push(e.promise);await Promise.all(i)}}},v=class extends m{streams;isBuffer=this.isBuffer||!1;pipeTo=this.pipeTo;static types={stream:A,file:A,...m.types}},$=class extends I{static Transfer=v};import L from"node:fs";import B from"node:path";import{Readable as H}from"node:stream";import _ from"mime";function x(){}function D(i,e=0,t={}){let{leading:s=!1,trailing:r=!0}=t,{maxWait:n=1/0}=t,a,l,h,S,g,p,f,W,k=async()=>{let y=Date.now();y>=h?(a=void 0,h=void 0,clearTimeout(l),typeof f=="function"&&await f(),c.resolve(W),c.promise.isResolved=!0,p=s):(clearTimeout(a),a=setTimeout(k,h-y))},b=Number.isFinite(n)?()=>{f===u&&(f=!1),u(),l=setTimeout(b,n)}:null;async function u(){return W=await i.apply(S,g)}s&&typeof s=="boolean"&&(s=u),p=s,r&&typeof r=="boolean"&&(r=u),f=r;let c=Object.assign(function(...y){return g=y,S=this,h=Date.now()+e,f=r,c.promise.isResolved&&(c.promise=Object.assign(new Promise(F=>{c.resolve=F,typeof p=="function"&&(p(),p=!1,f===u&&(f=!1)),a||(a=setTimeout(k,e),b&&(l=setTimeout(b,n)))}),{isResolved:!1})),c.promise},{callback:i,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:x,run:u,clear:async y=>{clearTimeout(a),a=void 0,clearTimeout(l),c.promise.isResolved=!0,c.resolve(y?await u():W)}});return c}D.noop=Object.assign(()=>{},{callback:x,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:x,run:x,clear:x});function M(i,e,t,s,r=!0){return Array.isArray(i)&&(i=i.length),typeof s!="string"&&(r=s??!0,s=t),(r?`${i}\xA0`:"")+M.raw(i,e,t,s)}M.raw=(i,e,t,s=t)=>{i=Math.abs(i);let r=i%10,n=i%100;return r===1&&n!==11?e:r>=2&&r<=4&&!(n>=12&&n<=15)?t:s};function E(i="",e=""){return`${i}${Date.now().toString(36)}${Math.round(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}${e}`}var T=class{constructor(e,t={}){this.string=e,this.size=this.string.length;let{chunkSize:s=1024*256}=t;this.chunkSize=s}string;size;chunkSize;listener;#e=0;#t=0;isAborted=!1;start(e){this.listener=e,this.#s()}async#s(){if(!this.isAborted){this.#t=Math.min(this.#e+this.chunkSize,this.size);let e=await new Promise(t=>{t(this.string.slice(this.#e,this.#t))});this.isAborted||(await this.listener(e),this.#t<this.size&&(this.#e=this.#t,this.#s()))}}abort(){this.isAborted=!0}};var d=class{constructor(e,t,{data:s,type:r,incomingType:n,collect:a,metadata:l,size:h,chunkSize:S,encoding:g,incomingEncoding:p,onBegin:f,onSenderProgress:W,onProgress:k,onEnd:b,onError:u},c){this.ws=e,this.#e=e.isWebSocket?[e]:[e.wss,e],this.kind=t,this.data=s,this.type=r,this.collect=a??!1,this.metadata=l,this.size=h??null,this.encoding=g,this.chunkSize=S??this.constructor.chunkSize,this.#t=c,f&&(this.#s=f),W&&(this.#c=W),k&&(this.#r=k),b&&(this.#o=b),u&&(this.#a=u),this.#n=this.#u(n,p)}ws;#e;kind;data;type;collect;metadata;size;encoding;chunkSize;#t;#s;#c;#r;#o;#a;#n;id=E();#i;isAborted=!1;isTransfered=!1;confirmResponse;beginAt=null;#h=null;#l=[];#f=!1;duration=null;transferedSize=0;bytesPerMs=null;senderProgress=0;progress=0;endAt=null;error=null;stringStreamer;fileStreamer;async#u(e,t){for(let[s,r,n]of this.constructor.types)if(this.type===s||r(this.data)){this.type=s,this.#i=n;break}if(this.type)await this.#i.setup.call(this),delete this.data;else throw new Error("Unknown type of transfer");this.ws.sendMessage(o.request,this.kind,this.id,{type:e??this.type,collect:this.collect,encoding:t??this.encoding,size:this.size,metadata:this.metadata})}whenSetUp(){return this.#n}async handleConfirm(e){this.confirmResponse=e,this.beginAt=this.#h=Date.now(),await this.#s?.call(...this.#e,this),this.#i.confirm.call(this)}handleChunk=e=>{this.#l.push(e),this.#f||(this.#f=!0,this.#p())};async#p(){let e=this.#l.shift(),t=e.length;this.#i.transformChunk&&(e=await this.#i.transformChunk.call(this,e)),this.ws.sendMessage(o.chunk,this.id,e,t);let s=Date.now();this.bytesPerMs=t/(s-this.#h),this.#h=s,this.transferedSize+=t,this.size&&(this.senderProgress=this.transferedSize/this.size),await this.#c?.call(...this.#e,this),this.#l.length?this.#p():(this.#f=!1,this.senderProgress===1&&this.sent())}sent=()=>this.ws.sendMessage(o.sent,this.id);handleProgress(e){this.progress=e,this.#r?.call(...this.#e,this)}async handleCompleted(){this.isTransfered=!0,this.size||(this.size=this.transferedSize,this.senderProgress=1),this.endAt=Date.now(),this.duration=this.endAt-this.beginAt,this.bytesPerMs=this.size/this.duration,this.#t.delete(this.id),this.progress!==1&&(this.progress=1,await this.#r?.call(...this.#e,this)),this.#o?.call(...this.#e,this)}throw(e){this.#t.delete(this.id),this.error=new Error(e),this.#a?.call(...this.#e,this,this.error)}abort(){return this.isAborted=!0,this.ws.sendMessage(o.abort,this.id),this.throw("Transfer is aborted by sender")}serialize(){return{id:this.id,kind:this.kind,type:this.type,collect:this.collect,encoding:this.encoding,size:this.size,metadata:this.metadata,isAborted:this.isAborted,isTransfered:this.isTransfered,confirmResponse:this.confirmResponse,beginAt:this.beginAt,duration:this.duration,transferedSize:this.transferedSize,bytesPerMs:this.bytesPerMs,senderProgress:this.senderProgress,progress:this.progress,endAt:this.endAt,error:this.error}}static types=[["object",e=>typeof e=="object",{setup(){this.stringStreamer=new T(JSON.stringify(this.data),{chunkSize:this.chunkSize}),this.collect=!0,this.size=this.stringStreamer.size,this.encoding="utf8"},confirm(){this.stringStreamer.start(this.handleChunk)}}],["datauri",e=>typeof e=="string"&&/^data:[\w-.]+\/[\w-.+,]+(?:;base64)?,/.test(e),{setup(){let[e,t]=this.data.split(/^data:|;base64,|,/).slice(1);this.stringStreamer=new T(t,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding="base64",this.metadata={...this.metadata,type:e}},confirm(){this.stringStreamer.start(this.handleChunk)}}],["string",e=>typeof e=="string",{setup(){this.stringStreamer=new T(this.data,{chunkSize:this.chunkSize}),this.size=this.stringStreamer.size,this.encoding||(this.encoding="utf8")},confirm(){this.stringStreamer.start(this.handleChunk)}}]];static chunkSize=w};var O=class{constructor(e){e.isWebSocketServer?(e.on(`client-message:${o.confirm}`,(t,...s)=>this.handleConfirm(t,...s)),e.on(`client-message:${o.progress}`,(t,...s)=>this.handleProgress(t,...s)),e.on(`client-message:${o.completed}`,(t,...s)=>this.handleCompleted(t,...s)),e.on(`client-message:${o.error}`,(t,...s)=>this.handleError(t,...s)),Object.assign(e,{transfer:(t,s,r)=>this.transfer(t,s,r)})):(e.on(`message:${o.confirm}`,(...t)=>this.handleConfirm(e,...t)),e.on(`message:${o.progress}`,(...t)=>this.handleProgress(e,...t)),e.on(`message:${o.completed}`,(...t)=>this.handleCompleted(e,...t)),e.on(`message:${o.error}`,(...t)=>this.handleError(e,...t)),Object.assign(e,{transfer:(t,s)=>this.transfer(e,t,s)}))}#e=new Map;#t={delete:e=>this.#e.delete(e)};transfer(e,t,s){let{Transfer:r}=this.constructor,n=new r(e,t,s,this.#t);return this.#e.set(n.id,n),n}handleConfirm(e,t,s){this.#e.get(t)?.handleConfirm(s)}handleProgress(e,t,s){this.#e.get(t)?.handleProgress(s)}handleCompleted(e,t){this.#e.get(t)?.handleCompleted()}handleError(e,t,s){this.#e.get(t)?.throw(s)}static Transfer=d};var R=class extends d{stream=this.stream;isBuffer=this.isBuffer||!1;static types=[["stream",e=>e instanceof H,{setup(){this.stream=this.data,this.encoding||(this.encoding="buffer"),this.encoding==="buffer"&&(this.isBuffer=!0)},confirm(){this.stream.on("data",this.handleChunk),this.size||this.stream.on("end",this.sent)},transformChunk(e){return(this.isBuffer?e:Buffer.from(e,this.encoding)).toString("base64")}}],["file",e=>typeof e=="string"&&/^(\/|(\/[^/]+)+)$/.test(e),{async setup(){let e=this.data,t=B.basename(e),{size:s,mtimeMs:r}=await L.promises.stat(e),n={name:t,type:_.getType(B.extname(t).slice(1)),size:s,modifiedAt:r};this.stream=L.createReadStream(e),this.size=s,this.encoding="buffer",this.metadata?Object.assign(this.metadata,n):this.metadata=n},confirm(){this.stream.on("data",this.handleChunk)},transformChunk(e){return e.toString("base64")}}],...d.types]},j=class extends O{static Transfer=R};export{v as IncomingTransfer,$ as IncomingTransport,v as NodeIncomingTransfer,R as OutgoingTransfer,j as OutgoingTransport};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/node/incoming.ts", "../../src/common.ts", "../../src/IncomingTransfer.ts", "../../src/IncomingTransport.ts", "../../src/node/outgoing.ts", "../../../../../@nesvet/npm/n/src/noop.ts", "../../../../../@nesvet/npm/n/src/debounce.ts", "../../../../../@nesvet/npm/n/src/howmuch.ts", "../../../../../@nesvet/npm/n/src/uid.ts", "../../src/StringStreamer.ts", "../../src/OutgoingTransfer.ts", "../../src/OutgoingTransport.ts"],
|
|
4
|
-
"sourcesContent": ["import { Readable, type Writable } from \"node:stream\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { IncomingTransfer } from \"../IncomingTransfer\";\nimport { IncomingTransport } from \"../IncomingTransport\";\nimport type { IncomingTransferMethods, IncomingTransferTypes } from \"../types\";\nimport type { NodeTransferTypes } from \"./types\";\nexport type { IncomingTransportOptions } from \"../types\";\n\n\nclass TransferStream extends Readable {\n\tconstructor(writableStream: Writable) {\n\t\tsuper();\n\t\t\n\t\tthis.writable = writableStream;\n\t\t\n\t\tthis.promise = new Promise((resolve, reject) => {\n\t\t\twritableStream.on(\"close\", resolve);\n\t\t\twritableStream.on(\"error\", reject);\n\t\t\t\n\t\t});\n\t\t\n\t\tthis.pipe(writableStream);\n\t\t\n\t}\n\t\n\twritable: Writable;\n\t\n\tpromise: Promise<void>;\n\t\n\t_read() { /* */ }\n\t\n}\n\n/** @this NodeIncomingTransfer */\nfunction pipeTo(this: NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, writableStream: Writable) {\n\tconst stream = new TransferStream(writableStream);\n\t\n\tthis.streams?.push(stream) ??\n\t(this.streams = [ stream ]);\n\t\n\treturn writableStream;\n}\n\nconst streamMethod: IncomingTransferMethods<NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>> = {\n\tsetup() {\n\t\t\n\t\tif (!this.encoding)\n\t\t\tthis.encoding = \"buffer\";\n\t\t\n\t\tif (this.encoding === \"buffer\")\n\t\t\tthis.isBuffer = true;\n\t\t\n\t\tif (this.collect)\n\t\t\tthis.data = this.isBuffer ? Buffer.from(\"\") : \"\";\n\t\t\n\t\tthis.pipeTo = pipeTo;\n\t\t\n\t},\n\t\n\ttransformChunk(chunk) {\n\t\tchunk = this.isBuffer ?\n\t\t\tBuffer.from(chunk as string, \"base64\") :\n\t\t\tBuffer.from(chunk as string, \"base64\").toString(this.encoding as Exclude<typeof this.encoding, \"buffer\">);\n\t\t\n\t\tif (this.streams)\n\t\t\tfor (const stream of this.streams)\n\t\t\t\tstream.push(chunk);\n\t\t\n\t\treturn chunk;\n\t},\n\t\n\tcollect(chunk) {\n\t\tif (this.isBuffer)\n\t\t\tthis.data = Buffer.concat([ this.data as Buffer, chunk as Buffer ]);\n\t\telse\n\t\t\tthis.data += chunk as string;\n\t\t\n\t},\n\t\n\tasync done() {\n\t\t\n\t\tif (this.streams) {\n\t\t\tconst promises = [];\n\t\t\t\n\t\t\tfor (const stream of this.streams) {\n\t\t\t\tstream.push(null);\n\t\t\t\tpromises.push(stream.promise);\n\t\t\t}\n\t\t\t\n\t\t\tawait Promise.all(promises);\n\t\t}\n\t\t\n\t}\n};\n\nclass NodeIncomingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends IncomingTransfer<WSORWSSC> {\n\t\n\tstreams?: TransferStream[];\n\tisBuffer?: boolean = this.isBuffer || false;\n\tpipeTo?: (this: NodeIncomingTransfer<WSORWSSC>, writableStream: Writable) => void = this.pipeTo;\n\t\n\t\n\tstatic types: IncomingTransferTypes<NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, NodeTransferTypes> = {\n\t\t\n\t\tstream: streamMethod,\n\t\t\n\t\tfile: streamMethod,\n\t\t\n\t\t...IncomingTransfer.types\n\t\t\n\t};\n}\n\nclass NodeIncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends IncomingTransport<WSORWSSC, NodeIncomingTransfer<WSORWSSC>, NodeTransferTypes> {\n\t\n\tstatic Transfer = NodeIncomingTransfer;\n\t\n}\n\n\nexport {\n\tNodeIncomingTransfer as IncomingTransfer,\n\tNodeIncomingTransport as IncomingTransport\n};\n", "export const headers = {\n\trequest: \"~t-request\",\n\tconfirm: \"~t-confirm\",\n\tchunk: \"~t-c\",\n\tprogress: \"~t-p\",\n\tsent: \"~t-sent\",\n\tcompleted: \"~t-completed\",\n\tabort: \"~t-abort\",\n\terror: \"~t-error\"\n};\n\nexport const sizeLimit = 10 * 1024 * 1024 * 1024;\n\nexport const chunkSize = 1024 * 256;\n\nexport const progressInterval = 250;\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers, progressInterval } from \"./common\";\nimport type {\n\tIncomingChunk,\n\tIncomingData,\n\tIncomingTransferListener,\n\tIncomingTransferMethods,\n\tIncomingTransferProps,\n\tIncomingTransferTypes,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class IncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{\n\t\t\ttype,\n\t\t\tcollect,\n\t\t\tencoding,\n\t\t\tsize,\n\t\t\tmetadata\n\t\t}: IncomingTransferProps<TransferTypes>,\n\t\thandles: TransferHandles,\n\t\tlisteners: Set<IncomingTransferListener<WSORWSSC, any>>\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.id = id;\n\t\tthis.type = type;\n\t\tthis.collect = !!collect;\n\t\tthis.encoding = encoding;\n\t\tthis.size = size;\n\t\tthis.metadata = metadata;\n\t\t\n\t\tthis.#handles = handles;\n\t\tthis.#listeners = listeners;\n\t\t\n\t\tthis.#setupPromise = this.#setup();\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tid;\n\ttype;\n\tcollect;\n\tencoding;\n\tsize;\n\tmetadata;\n\t\n\t#handles;\n\t#listeners;\n\t\n\t#setupPromise;\n\t\n\tdata?: IncomingData;\n\t#methods?: IncomingTransferMethods<IncomingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisAbortedBySender = false;\n\tisAbortedByReceiver = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: [ chunk: IncomingChunk, length: number ][] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tprocessedSize = 0;\n\tbytesPerMs: null | number = null;\n\tprogress = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\t#progressInterval?: NodeJS.Timeout;\n\t#lastProgress = 0;\n\t\n\tasync #setup() {\n\t\t\n\t\tthis.#methods = (this.constructor as typeof IncomingTransfer<WSORWSSC>).types[this.type];\n\t\t\n\t\tif (this.#methods)\n\t\t\tawait this.#methods.setup.call(this);\n\t\telse\n\t\t\tthrow new Error(`Unknown type of transfer \"${String(this.type)}\"`);\n\t\t\n\t\tthis.confirm();\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync confirm() {\n\t\t\n\t\tfor (const { begin } of this.#listeners)\n\t\t\tif (await (begin as any)?.call(...this.#callArgs, this) === false)\n\t\t\t\treturn this.throw(\"Transfer was rejected by receiver\");\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tthis.ws.sendMessage(headers.confirm, this.id, this.confirmResponse);\n\t\t\n\t\tthis.#progressInterval = setInterval(() => {\n\t\t\t\n\t\t\tif (this.#lastProgress !== this.progress) {\n\t\t\t\tthis.#lastProgress = this.progress;\n\t\t\t\tthis.ws.sendMessage(headers.progress, this.id, this.progress);\n\t\t\t}\n\t\t\t\n\t\t}, progressInterval);\n\t\t\n\t\treturn null;\n\t}\n\t\n\thandleChunk(chunk: IncomingChunk, length = chunk.length) {\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = length / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += length;\n\t\t\n\t\tthis.#chunksQueue.push([ chunk, length ]);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t}\n\t\n\tasync #process() {\n\t\t\n\t\tlet [ chunk, length ] = this.#chunksQueue.shift()!;// eslint-disable-line prefer-const\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tif (this.collect)\n\t\t\tawait this.#methods!.collect.call(this, chunk);\n\t\t\n\t\tfor (const { chunk: chunkListener, progress: progressListener } of this.#listeners)\n\t\t\tawait ((chunkListener ?? progressListener) as any)?.call(...this.#callArgs, this, chunk);\n\t\t\n\t\tthis.processedSize += length;\n\t\tif (this.size)\n\t\t\tthis.progress = this.processedSize / this.size;\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.isTransfered)\n\t\t\t\tthis.#complete();\n\t\t}\n\t\t\n\t}\n\t\n\thandleSent() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size)\n\t\t\tthis.size = this.transferedSize;\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tif (!this.#isProcessing)\n\t\t\tthis.#complete();\n\t\t\n\t}\n\t\n\tasync #complete() {\n\t\t\n\t\tthis.progress = 1;\n\t\t\n\t\tawait this.#methods!.done?.call(this);\n\t\t\n\t\tfor (const { end } of this.#listeners)\n\t\t\tawait (end as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.ws.sendMessage(headers.completed, this.id);\n\t\t\n\t}\n\t\n\tabort(bySender = false) {\n\t\t\n\t\tthis.isAborted = true;\n\t\tthis.isAbortedBySender = bySender;\n\t\tthis.isAbortedByReceiver = !bySender;\n\t\t\n\t\treturn this.throw(`Transfer is aborted by ${bySender ? \"sender\" : \"receiver\"}`, !bySender);\n\t}\n\t\n\tthrow(errorMessage: string, sendToSender = true) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\tfor (const { error } of this.#listeners)\n\t\t\t(error as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t\tif (sendToSender)\n\t\t\tthis.ws.sendMessage(headers.error, this.id, errorMessage);\n\t\t\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisAbortedBySender: this.isAbortedBySender,\n\t\t\tisAbortedByReceiver: this.isAbortedByReceiver,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tprocessedSize: this.processedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: IncomingTransferTypes<IncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = {\n\t\t\n\t\tobject: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\tthis.data = JSON.parse(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tdatauri: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = `data:${this.metadata.type};base64,${this.data}`;\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tstring: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { sizeLimit as defaultSizeLimit, headers } from \"./common\";\nimport { IncomingTransfer } from \"./IncomingTransfer\";\nimport type {\n\tIncomingChunk,\n\tIncomingTransferListener,\n\tIncomingTransferProps,\n\tIncomingTransportOptions,\n\tParametersWithoutFirst,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class IncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends IncomingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, options: IncomingTransportOptions = {}) {\n\t\t\n\t\tconst {\n\t\t\tsizeLimit = defaultSizeLimit\n\t\t} = options;\n\t\t\n\t\tthis.sizeLimit = sizeLimit;\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.request}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.chunk}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.sent}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.abort}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.request}`, (...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(ws, ...args));\n\t\t\tws.on(`message:${headers.chunk}`, (...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(ws, ...args));\n\t\t\tws.on(`message:${headers.sent}`, (...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(ws, ...args));\n\t\t\tws.on(`message:${headers.abort}`, (...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(ws, ...args));\n\t\t}\n\t\t\n\t}\n\t\n\tsizeLimit;\n\t\n\t#listeners = new Map<string, Set<IncomingTransferListener<WSORWSSC, T>>>();\n\t\n\taddTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T>) {\n\t\tthis.#listeners.get(kind)?.add(listener) ??\n\t\tthis.#listeners.set(kind, new Set([ listener ]));\n\t\t\n\t\treturn this;\n\t}\n\t\n\ton = this.addTransferListener;\n\t\n\tremoveTransferListener(kind: string, listener?: IncomingTransferListener<WSORWSSC, T>) {\n\t\tif (listener)\n\t\t\tthis.#listeners.get(kind)?.delete(listener);\n\t\telse\n\t\t\tthis.#listeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toff = this.removeTransferListener;\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: TransferHandles = {\n\t\t\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t\t\n\t};\n\t\n\tprivate handleRequest(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{ type, size, metadata, ...restProps }: IncomingTransferProps<Types>\n\t) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof IncomingTransport;\n\t\t\n\t\tif (!this.#listeners.has(kind))\n\t\t\tws.sendMessage(headers.error, id, `Unknown kind of file \"${kind}\"`);\n\t\telse if (this.#transfers.has(id))\n\t\t\tws.sendMessage(headers.error, id, \"Transfer already exists\");\n\t\telse if (!(type in Transfer.types))\n\t\t\tws.sendMessage(headers.error, id, \"Unknown type of transfer\");\n\t\telse if (size > this.sizeLimit)\n\t\t\tws.sendMessage(headers.error, id, `Transfer size (${size} bytes) exeeds limit of ${this.sizeLimit} bytes`);\n\t\telse\n\t\t\tthis.#transfers.set(id, new Transfer(\n\t\t\t\tws,\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\ttype: type as Exclude<TransferTypes, string>,\n\t\t\t\t\tsize,\n\t\t\t\t\tmetadata,\n\t\t\t\t\t...restProps\n\t\t\t\t},\n\t\t\t\tthis.#transferHandles,\n\t\t\t\tthis.#listeners.get(kind)!\n\t\t\t) as T);\n\t\t\n\t}\n\t\n\tprivate handleChunk(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, chunk: IncomingChunk, length = chunk.length) {\n\t\tthis.#transfers.get(id)?.handleChunk(chunk, length);\n\t\t\n\t}\n\t\n\tprivate handleSent(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleSent();\n\t\t\n\t}\n\t\n\tprivate handleAbort(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.abort(true);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = IncomingTransfer;\n\t\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport mime from \"mime\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { OutgoingTransfer } from \"../OutgoingTransfer\";\nimport { OutgoingTransport } from \"../OutgoingTransport\";\nimport type { OutgoingTransferTypes } from \"../types\";\nimport type { NodeTransferTypes } from \"./types\";\n\n\nclass NodeOutgoingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends OutgoingTransfer<WSORWSSC> {\n\t\n\tstream?: Readable = this.stream;\n\tisBuffer?: boolean = this.isBuffer || false;\n\t\n\tstatic types: OutgoingTransferTypes<NodeOutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, NodeTransferTypes> = [\n\t\t\n\t\t[ \"stream\", data => data instanceof Readable, {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stream = this.data as Readable;\n\t\t\t\t\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t\tif (this.encoding === \"buffer\")\n\t\t\t\t\tthis.isBuffer = true;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stream!.on(\"data\", this.handleChunk);\n\t\t\t\tif (!this.size)\n\t\t\t\t\tthis.stream!.on(\"end\", this.sent);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn (this.isBuffer ? chunk : Buffer.from(chunk as string, this.encoding as Exclude<typeof this.encoding, \"buffer\">)).toString(\"base64\");\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"file\", data => typeof data == \"string\" && /^(\\/|(\\/[^/]+)+)$/.test(data), {\n\t\t\t\n\t\t\tasync setup() {\n\t\t\t\t\n\t\t\t\tconst fileName = this.data as string;\n\t\t\t\tconst name = path.basename(fileName);\n\t\t\t\tconst { size, mtimeMs: modifiedAt } = await fs.promises.stat(fileName);\n\t\t\t\t\n\t\t\t\tconst metadata = {\n\t\t\t\t\tname,\n\t\t\t\t\ttype: mime.getType(path.extname(name).slice(1)),\n\t\t\t\t\tsize,\n\t\t\t\t\tmodifiedAt\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.stream = fs.createReadStream(fileName);\n\t\t\t\t\n\t\t\t\tthis.size = size;\n\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t\tif (this.metadata)\n\t\t\t\t\tObject.assign(this.metadata, metadata);\n\t\t\t\telse\n\t\t\t\t\tthis.metadata = metadata;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stream!.on(\"data\", this.handleChunk);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn chunk.toString(\"base64\");\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t...OutgoingTransfer.types\n\t\t\n\t];\n\t\n}\n\nclass NodeOutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends OutgoingTransport<WSORWSSC, NodeOutgoingTransfer<WSORWSSC>, NodeTransferTypes> {\n\t\n\tstatic OutgoingTransfer = NodeOutgoingTransfer;\n\t\n}\n\n\nexport {\n\tNodeOutgoingTransfer as OutgoingTransfer,\n\tNodeOutgoingTransport as OutgoingTransport\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", "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", "import type { StreamerOptions } from \"./types\";\n\n\ntype Listener = {\n\t(chunk: string): Promise<void> | void;\n};\n\n\nexport class StringStreamer {\n\tconstructor(string: string, options: StreamerOptions = {}) {\n\t\tthis.string = string;\n\t\tthis.size = this.string.length;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t}\n\t\n\tstring;\n\tsize;\n\tchunkSize;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\tasync #next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\tconst chunk = await new Promise<string>(resolve => { resolve(this.string.slice(this.#start, this.#end)); });\n\t\t\t\n\t\t\tif (!this.isAborted) {\n\t\t\t\tawait this.listener!(chunk);\n\t\t\t\t\n\t\t\t\tif (this.#end < this.size) {\n\t\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\t\n\t\t\t\t\tthis.#next();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { uid } from \"@nesvet/n\";\nimport { chunkSize as defaultChunkSize, headers } from \"./common\";\nimport { StringStreamer } from \"./StringStreamer\";\nimport type { FileStreamer } from \"./browser/FileStreamer\";\nimport type {\n\tOutgoingChunk,\n\tOutgoingTransferMethods,\n\tOutgoingTransferProps,\n\tOutgoingTransferTypes,\n\tTransferHandles,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\n// FIXME\n\n\nexport class OutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\t{\n\t\t\tdata,\n\t\t\ttype,\n\t\t\tincomingType,\n\t\t\tcollect,\n\t\t\tmetadata,\n\t\t\tsize,\n\t\t\tchunkSize,\n\t\t\tencoding,\n\t\t\tincomingEncoding,\n\t\t\tonBegin,\n\t\t\tonSenderProgress,\n\t\t\tonProgress,\n\t\t\tonEnd,\n\t\t\tonError\n\t\t}: OutgoingTransferProps<WSORWSSC, any, any>,\n\t\thandles: TransferHandles\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.data = data;\n\t\tthis.type = type;\n\t\tthis.collect = collect ?? false;\n\t\tthis.metadata = metadata;\n\t\tthis.size = size ?? null;\n\t\tthis.encoding = encoding;\n\t\tthis.chunkSize = chunkSize ?? (this.constructor as typeof OutgoingTransfer).chunkSize;\n\t\t\n\t\tthis.#handles = handles;\n\t\t\n\t\tif (onBegin)\n\t\t\tthis.#onBegin = onBegin;\n\t\tif (onSenderProgress)\n\t\t\tthis.#onSenderProgress = onSenderProgress;\n\t\tif (onProgress)\n\t\t\tthis.#onProgress = onProgress;\n\t\tif (onEnd)\n\t\t\tthis.#onEnd = onEnd;\n\t\tif (onError)\n\t\t\tthis.#onError = onError;\n\t\t\n\t\tthis.#setupPromise = this.#setup(incomingType, incomingEncoding);\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tdata?;\n\ttype?: string;\n\tcollect;\n\tmetadata;\n\tsize;\n\tencoding;\n\tchunkSize;\n\t\n\t#handles;\n\t\n\t#onBegin?;\n\t#onSenderProgress?;\n\t#onProgress?;\n\t#onEnd?;\n\t#onError?;\n\t\n\t#setupPromise;\n\t\n\tid = uid();\n\t#methods?: OutgoingTransferMethods<OutgoingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: OutgoingChunk[] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tbytesPerMs: null | number = null;\n\tsenderProgress = 0;\n\tprogress: number = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\tstringStreamer?: StringStreamer;\n\tfileStreamer?: FileStreamer;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\tasync #setup(incomingType?: string, incomingEncoding?: string) {\n\t\t\n\t\tfor (const [ availableType, test, methods ] of (this.constructor as typeof OutgoingTransfer).types)\n\t\t\tif (this.type === availableType || test(this.data as string)) {\n\t\t\t\tthis.type = availableType;\n\t\t\t\tthis.#methods = methods;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\tif (this.type) {\n\t\t\tawait this.#methods!.setup.call(this);\n\t\t\tdelete this.data;\n\t\t} else\n\t\t\tthrow new Error(\"Unknown type of transfer\");\n\t\t\n\t\tthis.ws.sendMessage(headers.request, this.kind, this.id, {\n\t\t\ttype: incomingType ?? this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: incomingEncoding ?? this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata\n\t\t});\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync handleConfirm(confirmResponse: string) {\n\t\tthis.confirmResponse = confirmResponse;\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tawait (this.#onBegin as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tthis.#methods!.confirm.call(this);\n\t\t\n\t}\n\t\n\thandleChunk = (chunk: OutgoingChunk) => {\n\t\tthis.#chunksQueue.push(chunk);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t};\n\t\n\tasync #process() {\n\t\t\n\t\tlet chunk = this.#chunksQueue.shift()!;\n\t\t\n\t\tconst chunkLength = chunk.length!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tthis.ws.sendMessage(headers.chunk, this.id, chunk, chunkLength);\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = chunkLength / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += chunkLength;\n\t\t\n\t\tif (this.size)\n\t\t\tthis.senderProgress = this.transferedSize / this.size;\n\t\t\n\t\tawait (this.#onSenderProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.senderProgress === 1)\n\t\t\t\tthis.sent();\n\t\t}\n\t\t\n\t}\n\t\n\tsent = () => this.ws.sendMessage(headers.sent, this.id);\n\t\n\thandleProgress(progress: number) {\n\t\tthis.progress = progress;\n\t\t\n\t\t(this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tasync handleCompleted() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size) {\n\t\t\tthis.size = this.transferedSize;\n\t\t\tthis.senderProgress = 1;\n\t\t}\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tif (this.progress !== 1) {\n\t\t\tthis.progress = 1;\n\t\t\tawait (this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\t(this.#onEnd as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tthrow(errorMessage: string) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\t(this.#onError as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t\tthis.ws.sendMessage(headers.abort, this.id);\n\t\t\n\t\treturn this.throw(\"Transfer is aborted by sender\");\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tsenderProgress: this.senderProgress,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = [\n\t\t\n\t\t[ \"object\", data => typeof data == \"object\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(JSON.stringify(this.data), { chunkSize: this.chunkSize });\n\t\t\t\tthis.collect = true;\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"datauri\", data => typeof data == \"string\" && /^data:[\\w-.]+\\/[\\w-.+,]+(?:;base64)?,/.test(data), {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst [ type, data ] = (this.data as string).split(/^data:|;base64,|,/).slice(1);\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(data, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"base64\";\n\t\t\t\tthis.metadata = { ...this.metadata, type };\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"string\", data => typeof data == \"string\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(this.data as string, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ]\n\t\t\n\t];\n\t\n\tstatic chunkSize = defaultChunkSize;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers } from \"./common\";\nimport { OutgoingTransfer } from \"./OutgoingTransfer\";\nimport type { OutgoingTransferProps, ParametersWithoutFirst, TransferTypes } from \"./types\";\n\n\nexport class OutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends OutgoingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>) {\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.confirm}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.progress}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.completed}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.error}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.confirm}`, (...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(ws, ...args));\n\t\t\tws.on(`message:${headers.progress}`, (...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(ws, ...args));\n\t\t\tws.on(`message:${headers.completed}`, (...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(ws, ...args));\n\t\t\tws.on(`message:${headers.error}`, (...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(ws, ...args));\n\t\t}\n\t\t\n\t}\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles = {\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t};\n\t\n\ttransfer(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof OutgoingTransport;\n\t\t\n\t\tconst transfer = new Transfer(ws, kind, props, this.#transferHandles);\n\t\t\n\t\tthis.#transfers.set(transfer.id, transfer as T);\n\t\t\n\t\treturn transfer;\n\t}\n\t\n\tprivate handleConfirm(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, confirmResponse: string) {\n\t\tthis.#transfers.get(id)?.handleConfirm(confirmResponse);\n\t\t\n\t}\n\t\n\tprivate handleProgress(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, progress: number) {\n\t\tthis.#transfers.get(id)?.handleProgress(progress);\n\t\t\n\t}\n\t\n\tprivate handleCompleted(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleCompleted();\n\t\t\n\t}\n\t\n\tprivate handleError(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, errorMessage: string) {\n\t\tthis.#transfers.get(id)?.throw(errorMessage);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = OutgoingTransfer;\n\t\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Readable", "headers", "sizeLimit", "chunkSize", "progressInterval", "IncomingTransfer", "ws", "kind", "id", "type", "collect", "encoding", "size", "metadata", "handles", "listeners", "#callArgs", "#handles", "#listeners", "#setupPromise", "#setup", "#methods", "#prevChunkAt", "#chunksQueue", "#isProcessing", "#progressInterval", "#lastProgress", "begin", "headers", "progressInterval", "chunk", "length", "ts", "#process", "chunkListener", "progressListener", "#complete", "
|
|
4
|
+
"sourcesContent": ["import { Readable, type Writable } from \"node:stream\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { IncomingTransfer } from \"../IncomingTransfer\";\nimport { IncomingTransport } from \"../IncomingTransport\";\nimport type { IncomingTransferMethods, IncomingTransferTypes } from \"../types\";\nimport type { NodeTransferTypes } from \"./types\";\nexport type { IncomingTransportOptions } from \"../types\";\n\n\nclass TransferStream extends Readable {\n\tconstructor(writableStream: Writable) {\n\t\tsuper();\n\t\t\n\t\tthis.writable = writableStream;\n\t\t\n\t\tthis.promise = new Promise((resolve, reject) => {\n\t\t\twritableStream.on(\"close\", resolve);\n\t\t\twritableStream.on(\"error\", reject);\n\t\t\t\n\t\t});\n\t\t\n\t\tthis.pipe(writableStream);\n\t\t\n\t}\n\t\n\twritable: Writable;\n\t\n\tpromise: Promise<void>;\n\t\n\t_read() { /* */ }\n\t\n}\n\n/** @this NodeIncomingTransfer */\nfunction pipeTo(this: NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, writableStream: Writable) {\n\tconst stream = new TransferStream(writableStream);\n\t\n\tthis.streams?.push(stream) ??\n\t(this.streams = [ stream ]);\n\t\n\treturn writableStream;\n}\n\nconst streamMethod: IncomingTransferMethods<NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>> = {\n\tsetup() {\n\t\t\n\t\tif (!this.encoding)\n\t\t\tthis.encoding = \"buffer\";\n\t\t\n\t\tif (this.encoding === \"buffer\")\n\t\t\tthis.isBuffer = true;\n\t\t\n\t\tif (this.collect)\n\t\t\tthis.data = this.isBuffer ? Buffer.from(\"\") : \"\";\n\t\t\n\t\tthis.pipeTo = pipeTo;\n\t\t\n\t},\n\t\n\ttransformChunk(chunk) {\n\t\tchunk = this.isBuffer ?\n\t\t\tBuffer.from(chunk as string, \"base64\") :\n\t\t\tBuffer.from(chunk as string, \"base64\").toString(this.encoding as Exclude<typeof this.encoding, \"buffer\">);\n\t\t\n\t\tif (this.streams)\n\t\t\tfor (const stream of this.streams)\n\t\t\t\tstream.push(chunk);\n\t\t\n\t\treturn chunk;\n\t},\n\t\n\tcollect(chunk) {\n\t\tif (this.isBuffer)\n\t\t\tthis.data = Buffer.concat([ this.data as Buffer, chunk as Buffer ]);\n\t\telse\n\t\t\tthis.data += chunk as string;\n\t\t\n\t},\n\t\n\tasync done() {\n\t\t\n\t\tif (this.streams) {\n\t\t\tconst promises = [];\n\t\t\t\n\t\t\tfor (const stream of this.streams) {\n\t\t\t\tstream.push(null);\n\t\t\t\tpromises.push(stream.promise);\n\t\t\t}\n\t\t\t\n\t\t\tawait Promise.all(promises);\n\t\t}\n\t\t\n\t}\n};\n\nexport class NodeIncomingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends IncomingTransfer<WSORWSSC> {\n\t\n\tstreams?: TransferStream[];\n\tisBuffer?: boolean = this.isBuffer || false;\n\tpipeTo?: (this: NodeIncomingTransfer<WSORWSSC>, writableStream: Writable) => void = this.pipeTo;\n\t\n\t\n\tstatic types: IncomingTransferTypes<NodeIncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, NodeTransferTypes> = {\n\t\t\n\t\tstream: streamMethod,\n\t\t\n\t\tfile: streamMethod,\n\t\t\n\t\t...IncomingTransfer.types\n\t\t\n\t};\n}\n\nclass NodeIncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends IncomingTransport<WSORWSSC, NodeIncomingTransfer<WSORWSSC>, NodeTransferTypes> {\n\t\n\tstatic Transfer = NodeIncomingTransfer;\n\t\n}\n\n\nexport {\n\tNodeIncomingTransfer as IncomingTransfer,\n\tNodeIncomingTransport as IncomingTransport\n};\n", "export const headers = {\n\trequest: \"~t-request\",\n\tconfirm: \"~t-confirm\",\n\tchunk: \"~t-c\",\n\tprogress: \"~t-p\",\n\tsent: \"~t-sent\",\n\tcompleted: \"~t-completed\",\n\tabort: \"~t-abort\",\n\terror: \"~t-error\"\n};\n\nexport const sizeLimit = 10 * 1024 * 1024 * 1024;\n\nexport const chunkSize = 1024 * 256;\n\nexport const progressInterval = 250;\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers, progressInterval } from \"./common\";\nimport type {\n\tIncomingChunk,\n\tIncomingData,\n\tIncomingTransferHandles,\n\tIncomingTransferListener,\n\tIncomingTransferMethods,\n\tIncomingTransferProps,\n\tIncomingTransferTypes,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class IncomingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{\n\t\t\ttype,\n\t\t\tcollect,\n\t\t\tencoding,\n\t\t\tsize,\n\t\t\tmetadata\n\t\t}: IncomingTransferProps<TransferTypes>,\n\t\thandles: IncomingTransferHandles,\n\t\tlisteners: Set<IncomingTransferListener<WSORWSSC, any>>\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.id = id;\n\t\tthis.type = type;\n\t\tthis.collect = !!collect;\n\t\tthis.encoding = encoding;\n\t\tthis.size = size;\n\t\tthis.metadata = metadata;\n\t\t\n\t\tthis.#handles = handles;\n\t\tthis.#listeners = listeners;\n\t\t\n\t\tthis.#setupPromise = this.#setup();\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tid;\n\ttype;\n\tcollect;\n\tencoding;\n\tsize;\n\tmetadata;\n\t\n\t#handles;\n\t#listeners;\n\t\n\t#setupPromise;\n\t\n\tdata?: IncomingData;\n\t#methods?: IncomingTransferMethods<IncomingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisAbortedBySender = false;\n\tisAbortedByReceiver = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: [ chunk: IncomingChunk, length: number ][] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tprocessedSize = 0;\n\tbytesPerMs: null | number = null;\n\tprogress = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\t#progressInterval?: NodeJS.Timeout;\n\t#lastProgress = 0;\n\t\n\tasync #setup() {\n\t\t\n\t\tthis.#methods = (this.constructor as typeof IncomingTransfer<WSORWSSC>).types[this.type];\n\t\t\n\t\tif (this.#methods)\n\t\t\tawait this.#methods.setup.call(this);\n\t\telse\n\t\t\tthrow new Error(`Unknown type of transfer \"${String(this.type)}\"`);\n\t\t\n\t\tthis.confirm();\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync confirm() {\n\t\t\n\t\tfor (const { begin } of this.#listeners)\n\t\t\tif (await (begin as any)?.call(...this.#callArgs, this) === false)\n\t\t\t\treturn this.throw(\"Transfer was rejected by receiver\");\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tthis.ws.sendMessage(headers.confirm, this.id, this.confirmResponse);\n\t\t\n\t\tthis.#progressInterval = setInterval(() => {\n\t\t\t\n\t\t\tif (this.#lastProgress !== this.progress) {\n\t\t\t\tthis.#lastProgress = this.progress;\n\t\t\t\tthis.ws.sendMessage(headers.progress, this.id, this.progress);\n\t\t\t}\n\t\t\t\n\t\t}, progressInterval);\n\t\t\n\t\treturn null;\n\t}\n\t\n\thandleChunk(chunk: IncomingChunk, length = chunk.length) {\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = length / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += length;\n\t\t\n\t\tthis.#chunksQueue.push([ chunk, length ]);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t}\n\t\n\tasync #process() {\n\t\t\n\t\tlet [ chunk, length ] = this.#chunksQueue.shift()!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tif (this.collect)\n\t\t\tawait this.#methods!.collect.call(this, chunk);\n\t\t\n\t\tfor (const { chunk: chunkListener, progress: progressListener } of this.#listeners)\n\t\t\tawait ((chunkListener ?? progressListener) as any)?.call(...this.#callArgs, this, chunk);\n\t\t\n\t\tthis.processedSize += length;\n\t\tif (this.size)\n\t\t\tthis.progress = this.processedSize / this.size;\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.isTransfered)\n\t\t\t\tthis.#complete();\n\t\t}\n\t\t\n\t}\n\t\n\thandleSent() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size)\n\t\t\tthis.size = this.transferedSize;\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tif (!this.#isProcessing)\n\t\t\tthis.#complete();\n\t\t\n\t}\n\t\n\tasync #complete() {\n\t\t\n\t\tthis.progress = 1;\n\t\t\n\t\tawait this.#methods!.done?.call(this);\n\t\t\n\t\tfor (const listener of this.#listeners) {\n\t\t\tif (listener.once)\n\t\t\t\tthis.#handles.removeListener(this.kind, listener);\n\t\t\t\n\t\t\tawait (listener.end as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.ws.sendMessage(headers.completed, this.id);\n\t\t\n\t}\n\t\n\tabort(bySender = false) {\n\t\t\n\t\tthis.isAborted = true;\n\t\tthis.isAbortedBySender = bySender;\n\t\tthis.isAbortedByReceiver = !bySender;\n\t\t\n\t\treturn this.throw(`Transfer is aborted by ${bySender ? \"sender\" : \"receiver\"}`, !bySender);\n\t}\n\t\n\tthrow(errorMessage: string, sendToSender = true) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tclearInterval(this.#progressInterval);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\tfor (const listener of this.#listeners) {\n\t\t\tif (listener.once)\n\t\t\t\tthis.#handles.removeListener(this.kind, listener);\n\t\t\t\n\t\t\t(listener.error as any)?.call(...this.#callArgs, this, this.error);\n\t\t}\n\t\t\n\t\tif (sendToSender)\n\t\t\tthis.ws.sendMessage(headers.error, this.id, errorMessage);\n\t\t\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisAbortedBySender: this.isAbortedBySender,\n\t\t\tisAbortedByReceiver: this.isAbortedByReceiver,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tprocessedSize: this.processedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: IncomingTransferTypes<IncomingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = {\n\t\t\n\t\tobject: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\tthis.data = JSON.parse(this.data as string);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tdatauri: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tdone() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = `data:${this.metadata.type};base64,${this.data}`;\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tstring: {\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tif (this.collect)\n\t\t\t\t\tthis.data = \"\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcollect(chunk) {\n\t\t\t\tthis.data += chunk as string;\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { sizeLimit as defaultSizeLimit, headers } from \"./common\";\nimport { IncomingTransfer } from \"./IncomingTransfer\";\nimport type {\n\tIncomingChunk,\n\tIncomingTransferHandles,\n\tIncomingTransferListener,\n\tIncomingTransferListenerOptions,\n\tIncomingTransferProps,\n\tIncomingTransportOptions,\n\tParametersWithoutFirst,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class IncomingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends IncomingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, options: IncomingTransportOptions = {}) {\n\t\t\n\t\tconst {\n\t\t\tsizeLimit = defaultSizeLimit\n\t\t} = options;\n\t\t\n\t\tthis.sizeLimit = sizeLimit;\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.request}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.chunk}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.sent}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.abort}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(wssc, ...args));\n\t\t} else {\n\t\t\tws.on(`message:${headers.request}`, (...args: ParametersWithoutFirst<typeof this.handleRequest>) => this.handleRequest(ws, ...args));\n\t\t\tws.on(`message:${headers.chunk}`, (...args: ParametersWithoutFirst<typeof this.handleChunk>) => this.handleChunk(ws, ...args));\n\t\t\tws.on(`message:${headers.sent}`, (...args: ParametersWithoutFirst<typeof this.handleSent>) => this.handleSent(ws, ...args));\n\t\t\tws.on(`message:${headers.abort}`, (...args: ParametersWithoutFirst<typeof this.handleAbort>) => this.handleAbort(ws, ...args));\n\t\t}\n\t\t\n\t\tObject.assign(ws, {\n\t\t\tonTransfer: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>, listenerOptions?: IncomingTransferListenerOptions) => this.on(kind, listener, listenerOptions),\n\t\t\tonceTransfer: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>, listenerOptions?: Omit<IncomingTransferListenerOptions, \"once\">) => this.once(kind, listener, listenerOptions)\n\t\t});\n\t\t\n\t}\n\t\n\tsizeLimit;\n\t\n\t#listeners = new Map<string, Set<IncomingTransferListener<WSORWSSC, T>>>();\n\t\n\taddTransferListener(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: IncomingTransferListenerOptions) {\n\t\tif (options?.once)\n\t\t\tlistener.once = true;\n\t\t\n\t\tthis.#listeners.get(kind)?.add(listener) ??\n\t\tthis.#listeners.set(kind, new Set([ listener ]));\n\t\t\n\t\treturn this;\n\t}\n\t\n\ton = this.addTransferListener;\n\t\n\tonce(kind: string, listener: IncomingTransferListener<WSORWSSC, T>, options?: Omit<IncomingTransferListenerOptions, \"once\">) {\n\t\treturn this.addTransferListener(kind, listener, { ...options, once: true });\n\t}\n\t\n\tremoveTransferListener(kind: string, listener?: IncomingTransferListener<WSORWSSC, T>) {\n\t\tif (listener) {\n\t\t\tconst listeners = this.#listeners.get(kind);\n\t\t\t\n\t\t\tif (listeners) {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t\t\n\t\t\t\tif (!listeners.size)\n\t\t\t\t\tthis.#listeners.delete(kind);\n\t\t\t}\n\t\t} else\n\t\t\tthis.#listeners.delete(kind);\n\t\t\n\t\treturn this;\n\t}\n\t\n\toff = this.removeTransferListener;\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: IncomingTransferHandles = {\n\t\t\n\t\tdelete: (id: string) => this.#transfers.delete(id),\n\t\t\n\t\tremoveListener: (kind: string, listener: IncomingTransferListener<WSORWSSC, T>) => this.removeTransferListener(kind, listener)\n\t\t\n\t};\n\t\n\tprivate handleRequest(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\tid: string,\n\t\t{ type, size, metadata, ...restProps }: IncomingTransferProps<Types>\n\t) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof IncomingTransport;\n\t\t\n\t\tif (!this.#listeners.has(kind))\n\t\t\tws.sendMessage(headers.error, id, `Unknown kind of file \"${kind}\"`);\n\t\telse if (this.#transfers.has(id))\n\t\t\tws.sendMessage(headers.error, id, \"Transfer already exists\");\n\t\telse if (!(type in Transfer.types))\n\t\t\tws.sendMessage(headers.error, id, \"Unknown type of transfer\");\n\t\telse if (size > this.sizeLimit)\n\t\t\tws.sendMessage(headers.error, id, `Transfer size (${size} bytes) exeeds limit of ${this.sizeLimit} bytes`);\n\t\telse\n\t\t\tthis.#transfers.set(id, new Transfer(\n\t\t\t\tws,\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\ttype: type as Exclude<TransferTypes, string>,\n\t\t\t\t\tsize,\n\t\t\t\t\tmetadata,\n\t\t\t\t\t...restProps\n\t\t\t\t},\n\t\t\t\tthis.#transferHandles,\n\t\t\t\tthis.#listeners.get(kind)!\n\t\t\t) as T);\n\t\t\n\t}\n\t\n\tprivate handleChunk(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, chunk: IncomingChunk, length = chunk.length) {\n\t\tthis.#transfers.get(id)?.handleChunk(chunk, length);\n\t\t\n\t}\n\t\n\tprivate handleSent(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleSent();\n\t\t\n\t}\n\t\n\tprivate handleAbort(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.abort(true);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = IncomingTransfer;\n\t\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport mime from \"mime\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { OutgoingTransfer } from \"../OutgoingTransfer\";\nimport { OutgoingTransport } from \"../OutgoingTransport\";\nimport type { OutgoingTransferTypes } from \"../types\";\nimport type { NodeTransferTypes } from \"./types\";\n\n\nclass NodeOutgoingTransfer<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends OutgoingTransfer<WSORWSSC> {\n\t\n\tstream?: Readable = this.stream;\n\tisBuffer?: boolean = this.isBuffer || false;\n\t\n\t\n\tstatic types: OutgoingTransferTypes<NodeOutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, NodeTransferTypes> = [\n\t\t\n\t\t[ \"stream\", data => data instanceof Readable, {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stream = this.data as Readable;\n\t\t\t\t\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t\tif (this.encoding === \"buffer\")\n\t\t\t\t\tthis.isBuffer = true;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stream!.on(\"data\", this.handleChunk);\n\t\t\t\tif (!this.size)\n\t\t\t\t\tthis.stream!.on(\"end\", this.sent);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn (this.isBuffer ? chunk : Buffer.from(chunk as string, this.encoding as Exclude<typeof this.encoding, \"buffer\">)).toString(\"base64\");\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"file\", data => typeof data == \"string\" && /^(\\/|(\\/[^/]+)+)$/.test(data), {\n\t\t\t\n\t\t\tasync setup() {\n\t\t\t\t\n\t\t\t\tconst fileName = this.data as string;\n\t\t\t\tconst name = path.basename(fileName);\n\t\t\t\tconst { size, mtimeMs: modifiedAt } = await fs.promises.stat(fileName);\n\t\t\t\t\n\t\t\t\tconst metadata = {\n\t\t\t\t\tname,\n\t\t\t\t\ttype: mime.getType(path.extname(name).slice(1)),\n\t\t\t\t\tsize,\n\t\t\t\t\tmodifiedAt\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.stream = fs.createReadStream(fileName);\n\t\t\t\t\n\t\t\t\tthis.size = size;\n\t\t\t\tthis.encoding = \"buffer\";\n\t\t\t\t\n\t\t\t\tif (this.metadata)\n\t\t\t\t\tObject.assign(this.metadata, metadata);\n\t\t\t\telse\n\t\t\t\t\tthis.metadata = metadata;\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stream!.on(\"data\", this.handleChunk);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttransformChunk(chunk) {\n\t\t\t\treturn chunk.toString(\"base64\");\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t...OutgoingTransfer.types\n\t\t\n\t];\n\t\n}\n\nclass NodeOutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient\n> extends OutgoingTransport<WSORWSSC, NodeOutgoingTransfer<WSORWSSC>, NodeTransferTypes> {\n\t\n\tstatic Transfer = NodeOutgoingTransfer;\n\t\n}\n\n\nexport {\n\tNodeOutgoingTransfer as OutgoingTransfer,\n\tNodeOutgoingTransport as OutgoingTransport\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", "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", "import type { StreamerOptions } from \"./types\";\n\n\ntype Listener = {\n\t(chunk: string): Promise<void> | void;\n};\n\n\nexport class StringStreamer {\n\tconstructor(string: string, options: StreamerOptions = {}) {\n\t\tthis.string = string;\n\t\tthis.size = this.string.length;\n\t\t\n\t\tconst {\n\t\t\tchunkSize = 1024 * 256\n\t\t} = options;\n\t\t\n\t\tthis.chunkSize = chunkSize;\n\t\t\n\t}\n\t\n\tstring;\n\tsize;\n\tchunkSize;\n\tlistener?: Listener;\n\t\n\t#start = 0;\n\t#end = 0;\n\t\n\tisAborted = false;\n\t\n\tstart(listener: Listener) {\n\t\tthis.listener = listener;\n\t\t\n\t\tthis.#next();\n\t\t\n\t}\n\t\n\tasync #next() {\n\t\t\n\t\tif (!this.isAborted) {\n\t\t\tthis.#end = Math.min(this.#start + this.chunkSize, this.size);\n\t\t\t\n\t\t\tconst chunk = await new Promise<string>(resolve => { resolve(this.string.slice(this.#start, this.#end)); });\n\t\t\t\n\t\t\tif (!this.isAborted) {\n\t\t\t\tawait this.listener!(chunk);\n\t\t\t\t\n\t\t\t\tif (this.#end < this.size) {\n\t\t\t\t\tthis.#start = this.#end;\n\t\t\t\t\t\n\t\t\t\t\tthis.#next();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t}\n\t\n}\n", "import { uid } from \"@nesvet/n\";\nimport type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { chunkSize as defaultChunkSize, headers } from \"./common\";\nimport { StringStreamer } from \"./StringStreamer\";\nimport type { FileStreamer } from \"./browser/FileStreamer\";\nimport type {\n\tOutgoingChunk,\n\tOutgoingTransferHandles,\n\tOutgoingTransferMethods,\n\tOutgoingTransferProps,\n\tOutgoingTransferTypes,\n\tTransferTypes\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\n// FIXME\n\n\nexport class OutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> {\n\tconstructor(\n\t\tws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket,\n\t\tkind: string,\n\t\t{\n\t\t\tdata,\n\t\t\ttype,\n\t\t\tincomingType,\n\t\t\tcollect,\n\t\t\tmetadata,\n\t\t\tsize,\n\t\t\tchunkSize,\n\t\t\tencoding,\n\t\t\tincomingEncoding,\n\t\t\tonBegin,\n\t\t\tonSenderProgress,\n\t\t\tonProgress,\n\t\t\tonEnd,\n\t\t\tonError\n\t\t}: OutgoingTransferProps<WSORWSSC, any, any>,\n\t\thandles: OutgoingTransferHandles\n\t) {\n\t\t\n\t\tthis.ws = ws;\n\t\tthis.#callArgs = ws.isWebSocket ? [ ws ] as const : [ ws.wss, ws ] as const;\n\t\tthis.kind = kind;\n\t\tthis.data = data;\n\t\tthis.type = type;\n\t\tthis.collect = collect ?? false;\n\t\tthis.metadata = metadata;\n\t\tthis.size = size ?? null;\n\t\tthis.encoding = encoding;\n\t\tthis.chunkSize = chunkSize ?? (this.constructor as typeof OutgoingTransfer).chunkSize;\n\t\t\n\t\tthis.#handles = handles;\n\t\t\n\t\tif (onBegin)\n\t\t\tthis.#onBegin = onBegin;\n\t\tif (onSenderProgress)\n\t\t\tthis.#onSenderProgress = onSenderProgress;\n\t\tif (onProgress)\n\t\t\tthis.#onProgress = onProgress;\n\t\tif (onEnd)\n\t\t\tthis.#onEnd = onEnd;\n\t\tif (onError)\n\t\t\tthis.#onError = onError;\n\t\t\n\t\tthis.#setupPromise = this.#setup(incomingType, incomingEncoding);\n\t\t\n\t}\n\t\n\tws;\n\t#callArgs;\n\tkind;\n\tdata?;\n\ttype?: string;\n\tcollect;\n\tmetadata;\n\tsize;\n\tencoding;\n\tchunkSize;\n\t\n\t#handles;\n\t\n\t#onBegin?;\n\t#onSenderProgress?;\n\t#onProgress?;\n\t#onEnd?;\n\t#onError?;\n\t\n\t#setupPromise;\n\t\n\tid = uid();\n\t#methods?: OutgoingTransferMethods<OutgoingTransfer<WSORWSSC>>;\n\tisAborted = false;\n\tisTransfered = false;\n\tconfirmResponse?: string;\n\tbeginAt: null | number = null;\n\t#prevChunkAt: null | number = null;\n\t#chunksQueue: OutgoingChunk[] = [];\n\t#isProcessing = false;\n\tduration: null | number = null;\n\ttransferedSize = 0;\n\tbytesPerMs: null | number = null;\n\tsenderProgress = 0;\n\tprogress: number = 0;\n\tendAt: null | number = null;\n\terror: Error | null = null;\n\tstringStreamer?: StringStreamer;\n\tfileStreamer?: FileStreamer;\n\t\n\t[key: number | string | symbol]: unknown;\n\t\n\tasync #setup(incomingType?: string, incomingEncoding?: string) {\n\t\t\n\t\tfor (const [ availableType, test, methods ] of (this.constructor as typeof OutgoingTransfer).types)\n\t\t\tif (this.type === availableType || test(this.data as string)) {\n\t\t\t\tthis.type = availableType;\n\t\t\t\tthis.#methods = methods;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\tif (this.type) {\n\t\t\tawait this.#methods!.setup.call(this);\n\t\t\tdelete this.data;\n\t\t} else\n\t\t\tthrow new Error(\"Unknown type of transfer\");\n\t\t\n\t\tthis.ws.sendMessage(headers.request, this.kind, this.id, {\n\t\t\ttype: incomingType ?? this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: incomingEncoding ?? this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata\n\t\t});\n\t\t\n\t}\n\t\n\twhenSetUp() {\n\t\treturn this.#setupPromise;\n\t}\n\t\n\tasync handleConfirm(confirmResponse: string) {\n\t\tthis.confirmResponse = confirmResponse;\n\t\t\n\t\tthis.beginAt =\n\t\t\tthis.#prevChunkAt =\n\t\t\t\tDate.now();\n\t\t\n\t\tawait (this.#onBegin as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tthis.#methods!.confirm.call(this);\n\t\t\n\t}\n\t\n\thandleChunk = (chunk: OutgoingChunk) => {\n\t\tthis.#chunksQueue.push(chunk);\n\t\t\n\t\tif (!this.#isProcessing) {\n\t\t\tthis.#isProcessing = true;\n\t\t\tthis.#process();\n\t\t}\n\t\t\n\t};\n\t\n\tasync #process() {\n\t\t\n\t\tlet chunk = this.#chunksQueue.shift()!;\n\t\t\n\t\tconst chunkLength = chunk.length!;\n\t\t\n\t\tif (this.#methods!.transformChunk)\n\t\t\tchunk = await this.#methods!.transformChunk.call(this, chunk);\n\t\t\n\t\tthis.ws.sendMessage(headers.chunk, this.id, chunk, chunkLength);\n\t\t\n\t\tconst ts = Date.now();\n\t\tthis.bytesPerMs = chunkLength / (ts - this.#prevChunkAt!);\n\t\tthis.#prevChunkAt = ts;\n\t\tthis.transferedSize += chunkLength;\n\t\t\n\t\tif (this.size)\n\t\t\tthis.senderProgress = this.transferedSize / this.size;\n\t\t\n\t\tawait (this.#onSenderProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t\tif (this.#chunksQueue.length)\n\t\t\tthis.#process();\n\t\telse {\n\t\t\tthis.#isProcessing = false;\n\t\t\t\n\t\t\tif (this.senderProgress === 1)\n\t\t\t\tthis.sent();\n\t\t}\n\t\t\n\t}\n\t\n\tsent = () => this.ws.sendMessage(headers.sent, this.id);\n\t\n\thandleProgress(progress: number) {\n\t\tthis.progress = progress;\n\t\t\n\t\t(this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tasync handleCompleted() {\n\t\t\n\t\tthis.isTransfered = true;\n\t\t\n\t\tif (!this.size) {\n\t\t\tthis.size = this.transferedSize;\n\t\t\tthis.senderProgress = 1;\n\t\t}\n\t\t\n\t\tthis.endAt = Date.now();\n\t\tthis.duration = this.endAt - this.beginAt!;\n\t\tthis.bytesPerMs = this.size / this.duration;\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tif (this.progress !== 1) {\n\t\t\tthis.progress = 1;\n\t\t\tawait (this.#onProgress as any)?.call(...this.#callArgs, this);\n\t\t}\n\t\t\n\t\t(this.#onEnd as any)?.call(...this.#callArgs, this);\n\t\t\n\t}\n\t\n\tthrow(errorMessage: string) {\n\t\t\n\t\tthis.#handles.delete(this.id);\n\t\t\n\t\tthis.error = new Error(errorMessage);\n\t\t\n\t\t(this.#onError as any)?.call(...this.#callArgs, this, this.error);\n\t\t\n\t}\n\t\n\tabort() {\n\t\t\n\t\tthis.isAborted = true;\n\t\t\n\t\tthis.ws.sendMessage(headers.abort, this.id);\n\t\t\n\t\treturn this.throw(\"Transfer is aborted by sender\");\n\t}\n\t\n\tserialize() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: this.kind,\n\t\t\ttype: this.type,\n\t\t\tcollect: this.collect,\n\t\t\tencoding: this.encoding,\n\t\t\tsize: this.size,\n\t\t\tmetadata: this.metadata,\n\t\t\tisAborted: this.isAborted,\n\t\t\tisTransfered: this.isTransfered,\n\t\t\tconfirmResponse: this.confirmResponse,\n\t\t\tbeginAt: this.beginAt,\n\t\t\tduration: this.duration,\n\t\t\ttransferedSize: this.transferedSize,\n\t\t\tbytesPerMs: this.bytesPerMs,\n\t\t\tsenderProgress: this.senderProgress,\n\t\t\tprogress: this.progress,\n\t\t\tendAt: this.endAt,\n\t\t\terror: this.error\n\t\t};\n\t}\n\t\n\t\n\tstatic types: OutgoingTransferTypes<OutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, TransferTypes> = [\n\t\t\n\t\t[ \"object\", data => typeof data == \"object\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(JSON.stringify(this.data), { chunkSize: this.chunkSize });\n\t\t\t\tthis.collect = true;\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"datauri\", data => typeof data == \"string\" && /^data:[\\w-.]+\\/[\\w-.+,]+(?:;base64)?,/.test(data), {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tconst [ type, data ] = (this.data as string).split(/^data:|;base64,|,/).slice(1);\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(data, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tthis.encoding = \"base64\";\n\t\t\t\tthis.metadata = { ...this.metadata, type };\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ],\n\t\t\n\t\t[ \"string\", data => typeof data == \"string\", {\n\t\t\t\n\t\t\tsetup() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer = new StringStreamer(this.data as string, { chunkSize: this.chunkSize });\n\t\t\t\tthis.size = this.stringStreamer.size;\n\t\t\t\tif (!this.encoding)\n\t\t\t\t\tthis.encoding = \"utf8\";\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tconfirm() {\n\t\t\t\t\n\t\t\t\tthis.stringStreamer!.start(this.handleChunk);\n\t\t\t\t\n\t\t\t}\n\t\t} ]\n\t\t\n\t];\n\t\n\tstatic chunkSize = defaultChunkSize;\n\t\n}\n", "import type { InSiteWebSocket } from \"insite-ws/client\";\nimport type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { headers } from \"./common\";\nimport { OutgoingTransfer } from \"./OutgoingTransfer\";\nimport type {\n\tOutgoingTransferHandles,\n\tOutgoingTransferProps,\n\tParametersWithoutFirst,\n\tTransferTypes\n} from \"./types\";\n\n\nexport class OutgoingTransport<\n\tWSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient,\n\tT extends OutgoingTransfer<WSORWSSC>,\n\tTypes extends TransferTypes = TransferTypes\n> {\n\tconstructor(ws: InSiteWebSocket | InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>) {\n\t\t\n\t\tif (ws.isWebSocketServer) {\n\t\t\tws.on(`client-message:${headers.confirm}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.progress}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.completed}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(wssc, ...args));\n\t\t\tws.on(`client-message:${headers.error}`, (wssc: Exclude<WSORWSSC, InSiteWebSocket>, ...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(wssc, ...args));\n\t\t\t\n\t\t\tObject.assign(ws, {\n\t\t\t\ttransfer: (wssc: Exclude<WSORWSSC, InSiteWebSocket>, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) =>\n\t\t\t\t\tthis.transfer(wssc, kind, props)\n\t\t\t});\n\t\t} else {\n\t\t\tws.on(`message:${headers.confirm}`, (...args: ParametersWithoutFirst<typeof this.handleConfirm>) => this.handleConfirm(ws, ...args));\n\t\t\tws.on(`message:${headers.progress}`, (...args: ParametersWithoutFirst<typeof this.handleProgress>) => this.handleProgress(ws, ...args));\n\t\t\tws.on(`message:${headers.completed}`, (...args: ParametersWithoutFirst<typeof this.handleCompleted>) => this.handleCompleted(ws, ...args));\n\t\t\tws.on(`message:${headers.error}`, (...args: ParametersWithoutFirst<typeof this.handleError>) => this.handleError(ws, ...args));\n\t\t\t\n\t\t\tObject.assign(ws, {\n\t\t\t\ttransfer: (kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) =>\n\t\t\t\t\tthis.transfer(ws, kind, props)\n\t\t\t});\n\t\t}\n\t\t\n\t}\n\t\n\t#transfers = new Map<string, T>();\n\t\n\t#transferHandles: OutgoingTransferHandles = {\n\t\tdelete: (id: string) => this.#transfers.delete(id)\n\t};\n\t\n\ttransfer(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, kind: string, props: OutgoingTransferProps<WSORWSSC, T, Types>) {\n\t\t\n\t\tconst { Transfer } = this.constructor as typeof OutgoingTransport;\n\t\t\n\t\tconst transfer = new Transfer(ws, kind, props, this.#transferHandles);\n\t\t\n\t\tthis.#transfers.set(transfer.id, transfer as T);\n\t\t\n\t\treturn transfer;\n\t}\n\t\n\tprivate handleConfirm(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, confirmResponse: string) {\n\t\tthis.#transfers.get(id)?.handleConfirm(confirmResponse);\n\t\t\n\t}\n\t\n\tprivate handleProgress(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, progress: number) {\n\t\tthis.#transfers.get(id)?.handleProgress(progress);\n\t\t\n\t}\n\t\n\tprivate handleCompleted(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string) {\n\t\tthis.#transfers.get(id)?.handleCompleted();\n\t\t\n\t}\n\t\n\tprivate handleError(ws: Exclude<WSORWSSC, InSiteWebSocket> | InSiteWebSocket, id: string, errorMessage: string) {\n\t\tthis.#transfers.get(id)?.throw(errorMessage);\n\t\t\n\t}\n\t\n\t\n\tstatic Transfer = OutgoingTransfer;\n\t\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Readable", "headers", "sizeLimit", "chunkSize", "progressInterval", "IncomingTransfer", "ws", "kind", "id", "type", "collect", "encoding", "size", "metadata", "handles", "listeners", "#callArgs", "#handles", "#listeners", "#setupPromise", "#setup", "#methods", "#prevChunkAt", "#chunksQueue", "#isProcessing", "#progressInterval", "#lastProgress", "begin", "headers", "progressInterval", "chunk", "length", "ts", "#process", "chunkListener", "progressListener", "#complete", "listener", "bySender", "errorMessage", "sendToSender", "IncomingTransport", "ws", "options", "sizeLimit", "headers", "wssc", "args", "kind", "listener", "listenerOptions", "#listeners", "listeners", "#transfers", "#transferHandles", "id", "type", "size", "metadata", "restProps", "Transfer", "chunk", "length", "IncomingTransfer", "TransferStream", "Readable", "writableStream", "resolve", "reject", "pipeTo", "stream", "streamMethod", "chunk", "promises", "NodeIncomingTransfer", "IncomingTransfer", "NodeIncomingTransport", "IncomingTransport", "fs", "path", "Readable", "mime", "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", "uid", "prefix", "postfix", "StringStreamer", "string", "options", "chunkSize", "#start", "#end", "listener", "#next", "chunk", "resolve", "OutgoingTransfer", "ws", "kind", "data", "type", "incomingType", "collect", "metadata", "size", "chunkSize", "encoding", "incomingEncoding", "onBegin", "onSenderProgress", "onProgress", "onEnd", "onError", "handles", "#callArgs", "#handles", "#onBegin", "#onSenderProgress", "#onProgress", "#onEnd", "#onError", "#setupPromise", "#setup", "uid", "#methods", "#prevChunkAt", "#chunksQueue", "#isProcessing", "availableType", "test", "methods", "headers", "confirmResponse", "chunk", "#process", "chunkLength", "ts", "progress", "errorMessage", "StringStreamer", "OutgoingTransport", "ws", "headers", "wssc", "args", "kind", "props", "#transfers", "#transferHandles", "id", "Transfer", "transfer", "confirmResponse", "progress", "errorMessage", "OutgoingTransfer", "NodeOutgoingTransfer", "OutgoingTransfer", "data", "Readable", "chunk", "fileName", "name", "path", "size", "modifiedAt", "fs", "metadata", "mime", "NodeOutgoingTransport", "OutgoingTransport"]
|
|
7
7
|
}
|
package/dist/node/outgoing.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ declare class NodeOutgoingTransfer<WSORWSSC extends InSiteWebSocket | InSiteWebS
|
|
|
11
11
|
static types: OutgoingTransferTypes<NodeOutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>, NodeTransferTypes>;
|
|
12
12
|
}
|
|
13
13
|
declare class NodeOutgoingTransport<WSORWSSC extends InSiteWebSocket | InSiteWebSocketServerClient> extends OutgoingTransport<WSORWSSC, NodeOutgoingTransfer<WSORWSSC>, NodeTransferTypes> {
|
|
14
|
-
static
|
|
14
|
+
static Transfer: typeof NodeOutgoingTransfer;
|
|
15
15
|
}
|
|
16
16
|
export { NodeOutgoingTransfer as OutgoingTransfer, NodeOutgoingTransport as OutgoingTransport };
|
|
17
17
|
//# sourceMappingURL=outgoing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outgoing.d.ts","sourceRoot":"","sources":["../../src/node/outgoing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,cAAM,oBAAoB,CACzB,QAAQ,SAAS,eAAe,GAAG,2BAA2B,CAC7D,SAAQ,gBAAgB,CAAC,QAAQ,CAAC;IAEnC,MAAM,CAAC,EAAE,QAAQ,CAAe;IAChC,QAAQ,CAAC,EAAE,OAAO,CAA0B;
|
|
1
|
+
{"version":3,"file":"outgoing.d.ts","sourceRoot":"","sources":["../../src/node/outgoing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,cAAM,oBAAoB,CACzB,QAAQ,SAAS,eAAe,GAAG,2BAA2B,CAC7D,SAAQ,gBAAgB,CAAC,QAAQ,CAAC;IAEnC,MAAM,CAAC,EAAE,QAAQ,CAAe;IAChC,QAAQ,CAAC,EAAE,OAAO,CAA0B;IAG5C,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,eAAe,GAAG,2BAA2B,CAAC,EAAE,iBAAiB,CAAC,CAqEzH;CAEF;AAED,cAAM,qBAAqB,CAC1B,QAAQ,SAAS,eAAe,GAAG,2BAA2B,CAC7D,SAAQ,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAEvF,MAAM,CAAC,QAAQ,8BAAwB;CAEvC;AAGD,OAAO,EACN,oBAAoB,IAAI,gBAAgB,EACxC,qBAAqB,IAAI,iBAAiB,EAC1C,CAAC"}
|
package/dist/node/types.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { InSiteWebSocketServerClient } from "insite-ws/server";
|
|
2
|
+
import type { IncomingTransferListener, IncomingTransferListenerOptions, OutgoingTransferProps, TransferTypes } from "../types";
|
|
3
|
+
import type { IncomingTransfer, IncomingTransport } from "./incoming";
|
|
4
|
+
import type { OutgoingTransfer } from "./outgoing";
|
|
2
5
|
export type NodeTransferTypes = TransferTypes;
|
|
6
|
+
type Transfer<WSSC extends InSiteWebSocketServerClient> = {
|
|
7
|
+
transfer: <T extends OutgoingTransfer<WSSC>, TP extends NodeTransferTypes>(wssc: WSSC, kind: string, props: OutgoingTransferProps<WSSC, T, TP>) => T;
|
|
8
|
+
};
|
|
9
|
+
export type WithTransfer<W, WSSC extends InSiteWebSocketServerClient> = Transfer<WSSC> & W;
|
|
10
|
+
export type WithOptionalTransfer<W, WSSC extends InSiteWebSocketServerClient> = Partial<Transfer<WSSC>> & W;
|
|
11
|
+
type OnTransfer<WSSC extends InSiteWebSocketServerClient> = {
|
|
12
|
+
onTransfer: <T extends IncomingTransfer<WSSC>>(kind: string, listener: IncomingTransferListener<WSSC, T>, options?: IncomingTransferListenerOptions) => IncomingTransport<WSSC>;
|
|
13
|
+
onceTransfer: <T extends IncomingTransfer<WSSC>>(kind: string, listener: IncomingTransferListener<WSSC, T>, listenerOptions?: Omit<IncomingTransferListenerOptions, "once">) => IncomingTransport<WSSC>;
|
|
14
|
+
};
|
|
15
|
+
export type WithOnTransfer<W, WSSC extends InSiteWebSocketServerClient> = OnTransfer<WSSC> & W;
|
|
16
|
+
export type WithOptionalOnTransfer<W, WSSC extends InSiteWebSocketServerClient> = Partial<OnTransfer<WSSC>> & W;
|
|
17
|
+
export {};
|
|
3
18
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/node/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EACX,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,EACrB,aAAa,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAG9C,KAAK,QAAQ,CAAC,IAAI,SAAS,2BAA2B,IAAI;IACzD,QAAQ,EAAE,CACT,CAAC,SAAS,gBAAgB,CAAC,IAAI,CAAC,EAChC,EAAE,SAAS,iBAAiB,EAC3B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,SAAS,2BAA2B,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3F,MAAM,MAAM,oBAAoB,CAAC,CAAC,EAAE,IAAI,SAAS,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAG5G,KAAK,UAAU,CAAC,IAAI,SAAS,2BAA2B,IAAI;IAC3D,UAAU,EAAE,CACX,CAAC,SAAS,gBAAgB,CAAC,IAAI,CAAC,EAC/B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,+BAA+B,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnI,YAAY,EAAE,CACb,CAAC,SAAS,gBAAgB,CAAC,IAAI,CAAC,EAC/B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;CACzJ,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,SAAS,2BAA2B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/F,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,IAAI,SAAS,2BAA2B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,9 +4,9 @@ import type { InSiteWebSocketServer, InSiteWebSocketServerClient } from "insite-
|
|
|
4
4
|
import type { IncomingTransfer } from "./IncomingTransfer";
|
|
5
5
|
import type { OutgoingTransfer } from "./OutgoingTransfer";
|
|
6
6
|
export type ParametersWithoutFirst<T extends (...args: any) => any> = T extends (first: any, ...args: infer P) => any ? P : never;
|
|
7
|
-
export type ArrayBufferWithLength = {
|
|
7
|
+
export type ArrayBufferWithLength = ArrayBuffer & {
|
|
8
8
|
length?: number;
|
|
9
|
-
}
|
|
9
|
+
};
|
|
10
10
|
export type StreamerOptions = {
|
|
11
11
|
chunkSize?: number;
|
|
12
12
|
};
|
|
@@ -49,6 +49,9 @@ export type OutgoingTransferProps<WSORWSSC extends InSiteWebSocket | InSiteWebSo
|
|
|
49
49
|
(this: InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, wssc: Exclude<WSORWSSC, InSiteWebSocket>, transfer: T, error: Error): Promise<unknown> | unknown;
|
|
50
50
|
};
|
|
51
51
|
};
|
|
52
|
+
export type OutgoingTransferHandles = {
|
|
53
|
+
delete(id: string): void;
|
|
54
|
+
};
|
|
52
55
|
export type OutgoingTransferMethods<T extends OutgoingTransfer<InSiteWebSocket | InSiteWebSocketServerClient>> = {
|
|
53
56
|
setup(this: T): void;
|
|
54
57
|
confirm(this: T): void;
|
|
@@ -59,6 +62,9 @@ export type OutgoingTransferTypes<T extends OutgoingTransfer<InSiteWebSocket | I
|
|
|
59
62
|
test: (data: OutgoingData) => boolean,
|
|
60
63
|
OutgoingTransferMethods<T>
|
|
61
64
|
][];
|
|
65
|
+
export type WSWithTransfer<WS extends InSiteWebSocket> = WS & {
|
|
66
|
+
transfer: <T extends OutgoingTransfer<WS>, TP extends TransferTypes>(kind: string, props: OutgoingTransferProps<WS, T, TP>) => T;
|
|
67
|
+
};
|
|
62
68
|
export type IncomingTransportOptions = {
|
|
63
69
|
sizeLimit?: number;
|
|
64
70
|
};
|
|
@@ -104,8 +110,13 @@ export type IncomingTransferListener<WSORWSSC extends InSiteWebSocket | InSiteWe
|
|
|
104
110
|
} : {
|
|
105
111
|
(this: InSiteWebSocketServer<Exclude<WSORWSSC, InSiteWebSocket>>, wssc: Exclude<WSORWSSC, InSiteWebSocket>, transfer: T, error: Error): Promise<unknown> | unknown;
|
|
106
112
|
};
|
|
113
|
+
once?: boolean;
|
|
114
|
+
};
|
|
115
|
+
export type IncomingTransferListenerOptions = {
|
|
116
|
+
once?: boolean;
|
|
107
117
|
};
|
|
108
|
-
export type
|
|
118
|
+
export type IncomingTransferHandles = {
|
|
109
119
|
delete(id: string): void;
|
|
120
|
+
removeListener(kind: string, listener: IncomingTransferListener<any, any>): any;
|
|
110
121
|
};
|
|
111
122
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAElI,MAAM,MAAM,qBAAqB,GAAG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "insite-ws-transfers",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.17",
|
|
4
4
|
"description": "inSite file transfers over WebSockets",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/node/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"./node": "./dist/node/index.js",
|
|
11
11
|
"./browser": "./dist/browser/index.js"
|
|
12
12
|
},
|
|
13
|
-
"packageManager": "bun@1.
|
|
13
|
+
"packageManager": "bun@1.2.2",
|
|
14
14
|
"scripts": {
|
|
15
15
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
16
16
|
"build": "bun .conveyer.js",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
"author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@nesvet/n": "^1.1.
|
|
34
|
-
"insite-ws": "^2.0.
|
|
33
|
+
"@nesvet/n": "^1.1.21",
|
|
34
|
+
"insite-ws": "^2.0.20",
|
|
35
35
|
"mime": "^4.0.6"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@nesvet/conveyer": "^2.2
|
|
39
|
-
"@nesvet/eslint-config": "^2.0.
|
|
40
|
-
"@types/node": "^22.
|
|
41
|
-
"@types/ws": "^8.5.
|
|
42
|
-
"typescript": "^5.7.
|
|
38
|
+
"@nesvet/conveyer": "^2.4.2",
|
|
39
|
+
"@nesvet/eslint-config": "^2.0.45",
|
|
40
|
+
"@types/node": "^22.13.1",
|
|
41
|
+
"@types/ws": "^8.5.14",
|
|
42
|
+
"typescript": "^5.7.3"
|
|
43
43
|
}
|
|
44
44
|
}
|