UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

149 lines 9.95 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _TransportImpl_url, _TransportImpl_negotiationParams, _TransportImpl_getTimeNow, _TransportImpl_webTransport, _TransportImpl_streamReader, _TransportImpl_streamWriter, _TransportImpl_datagramReader, _TransportImpl_datagramWriter, _TransportImpl_closed, _TransportImpl_closeLock; import AwaitLock from 'await-lock'; import { Unreliable, TRANSPORT_NAME } from '../transport'; import { ISCPUnexpectedError, ISCPTransportClosedError } from '../../exceptions/exceptions'; import { StreamReader } from './stream-reader'; import { StreamWriter } from './stream-writer'; import { DatagramReader } from './datagram-reader'; import { DatagramWriter } from './datagram-writer'; import { isSupportWebTransport } from './utils'; import { createWebTransport } from './webtransport-creator'; export class TransportImpl extends Unreliable { constructor(config) { super(); _TransportImpl_url.set(this, void 0); _TransportImpl_negotiationParams.set(this, void 0); _TransportImpl_getTimeNow.set(this, void 0); _TransportImpl_webTransport.set(this, void 0); _TransportImpl_streamReader.set(this, void 0); _TransportImpl_streamWriter.set(this, void 0); _TransportImpl_datagramReader.set(this, void 0); _TransportImpl_datagramWriter.set(this, void 0); _TransportImpl_closed.set(this, void 0); _TransportImpl_closeLock.set(this, void 0); __classPrivateFieldSet(this, _TransportImpl_url, config.url, "f"); __classPrivateFieldSet(this, _TransportImpl_negotiationParams, config.negotiationParams, "f"); __classPrivateFieldSet(this, _TransportImpl_getTimeNow, config.getTimeNow ?? (() => Date.now() * 1e-3), "f"); __classPrivateFieldSet(this, _TransportImpl_webTransport, null, "f"); __classPrivateFieldSet(this, _TransportImpl_streamReader, null, "f"); __classPrivateFieldSet(this, _TransportImpl_streamWriter, null, "f"); __classPrivateFieldSet(this, _TransportImpl_datagramReader, null, "f"); __classPrivateFieldSet(this, _TransportImpl_datagramWriter, null, "f"); __classPrivateFieldSet(this, _TransportImpl_closed, true, "f"); __classPrivateFieldSet(this, _TransportImpl_closeLock, new AwaitLock(), "f"); } async open() { try { if (!__classPrivateFieldGet(this, _TransportImpl_closed, "f")) { return; } __classPrivateFieldSet(this, _TransportImpl_closed, false, "f"); if (!isSupportWebTransport()) { const errorMessage = 'Unsupported WebTransport'; throw new ISCPUnexpectedError(errorMessage); } const queryString = __classPrivateFieldGet(this, _TransportImpl_negotiationParams, "f").encodeURLValues(); __classPrivateFieldSet(this, _TransportImpl_webTransport, createWebTransport(`${__classPrivateFieldGet(this, _TransportImpl_url, "f")}?${queryString}`), "f"); await __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").ready; __classPrivateFieldSet(this, _TransportImpl_streamReader, new StreamReader({ reader: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").incomingUnidirectionalStreams.getReader(), }), "f"); __classPrivateFieldSet(this, _TransportImpl_streamWriter, new StreamWriter({ writer: (await __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").createUnidirectionalStream()).getWriter(), }), "f"); __classPrivateFieldSet(this, _TransportImpl_datagramReader, new DatagramReader({ reader: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").datagrams.readable.getReader(), expiry: 10, timeNow: __classPrivateFieldGet(this, _TransportImpl_getTimeNow, "f"), }), "f"); __classPrivateFieldSet(this, _TransportImpl_datagramWriter, new DatagramWriter({ writer: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f")?.datagrams.writable.getWriter(), segmentedMessageSize: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").datagrams.maxDatagramSize, }), "f"); } catch (error) { __classPrivateFieldGet(this, _TransportImpl_webTransport, "f")?.close(); __classPrivateFieldSet(this, _TransportImpl_webTransport, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_streamReader, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_streamReader, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_streamWriter, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_streamWriter, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_datagramReader, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_datagramReader, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_datagramWriter, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_datagramWriter, null, "f"); __classPrivateFieldSet(this, _TransportImpl_closed, true, "f"); throw error; } } async close() { await __classPrivateFieldGet(this, _TransportImpl_closeLock, "f").acquireAsync(); try { if (__classPrivateFieldGet(this, _TransportImpl_closed, "f")) { return; } await __classPrivateFieldGet(this, _TransportImpl_streamReader, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_streamReader, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_streamWriter, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_streamWriter, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_datagramReader, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_datagramReader, null, "f"); await __classPrivateFieldGet(this, _TransportImpl_datagramWriter, "f")?.dispose(); __classPrivateFieldSet(this, _TransportImpl_datagramWriter, null, "f"); __classPrivateFieldGet(this, _TransportImpl_webTransport, "f")?.close(); await __classPrivateFieldGet(this, _TransportImpl_webTransport, "f")?.closed; __classPrivateFieldSet(this, _TransportImpl_webTransport, null, "f"); } finally { __classPrivateFieldSet(this, _TransportImpl_closed, true, "f"); __classPrivateFieldGet(this, _TransportImpl_closeLock, "f").release(); } } async read() { if (__classPrivateFieldGet(this, _TransportImpl_closed, "f") || !__classPrivateFieldGet(this, _TransportImpl_streamReader, "f")) { const errorMessage = 'WebTransport closed.'; throw new ISCPTransportClosedError(errorMessage); } return await __classPrivateFieldGet(this, _TransportImpl_streamReader, "f").read(); } async write(message) { if (__classPrivateFieldGet(this, _TransportImpl_closed, "f") || !__classPrivateFieldGet(this, _TransportImpl_streamWriter, "f")) { const errorMessage = 'WebTransport closed.'; throw new ISCPTransportClosedError(errorMessage); } return await __classPrivateFieldGet(this, _TransportImpl_streamWriter, "f").write(message); } get negotiationParams() { return __classPrivateFieldGet(this, _TransportImpl_negotiationParams, "f"); } get address() { return new URL(__classPrivateFieldGet(this, _TransportImpl_url, "f")).host; } // eslint-disable-next-line class-methods-use-this get name() { return TRANSPORT_NAME.WEB_TRANSPORT; } getUnreliable() { if (__classPrivateFieldGet(this, _TransportImpl_closed, "f") || !__classPrivateFieldGet(this, _TransportImpl_datagramReader, "f") || !__classPrivateFieldGet(this, _TransportImpl_datagramWriter, "f")) { const errorMessage = 'WebTransport closed.'; throw new ISCPTransportClosedError(errorMessage); } return { reader: __classPrivateFieldGet(this, _TransportImpl_datagramReader, "f"), writer: __classPrivateFieldGet(this, _TransportImpl_datagramWriter, "f"), }; } } _TransportImpl_url = new WeakMap(), _TransportImpl_negotiationParams = new WeakMap(), _TransportImpl_getTimeNow = new WeakMap(), _TransportImpl_webTransport = new WeakMap(), _TransportImpl_streamReader = new WeakMap(), _TransportImpl_streamWriter = new WeakMap(), _TransportImpl_datagramReader = new WeakMap(), _TransportImpl_datagramWriter = new WeakMap(), _TransportImpl_closed = new WeakMap(), _TransportImpl_closeLock = new WeakMap(); //# sourceMappingURL=transport.js.map