UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

156 lines 10.4 kB
"use strict"; 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _TransportImpl_url, _TransportImpl_negotiationParams, _TransportImpl_getTimeNow, _TransportImpl_webTransport, _TransportImpl_streamReader, _TransportImpl_streamWriter, _TransportImpl_datagramReader, _TransportImpl_datagramWriter, _TransportImpl_closed, _TransportImpl_closeLock; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransportImpl = void 0; const await_lock_1 = __importDefault(require("await-lock")); const transport_1 = require("../transport"); const exceptions_1 = require("../../exceptions/exceptions"); const stream_reader_1 = require("./stream-reader"); const stream_writer_1 = require("./stream-writer"); const datagram_reader_1 = require("./datagram-reader"); const datagram_writer_1 = require("./datagram-writer"); const utils_1 = require("./utils"); const webtransport_creator_1 = require("./webtransport-creator"); class TransportImpl extends transport_1.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 await_lock_1.default(), "f"); } async open() { try { if (!__classPrivateFieldGet(this, _TransportImpl_closed, "f")) { return; } __classPrivateFieldSet(this, _TransportImpl_closed, false, "f"); if (!(0, utils_1.isSupportWebTransport)()) { const errorMessage = 'Unsupported WebTransport'; throw new exceptions_1.ISCPUnexpectedError(errorMessage); } const queryString = __classPrivateFieldGet(this, _TransportImpl_negotiationParams, "f").encodeURLValues(); __classPrivateFieldSet(this, _TransportImpl_webTransport, (0, webtransport_creator_1.createWebTransport)(`${__classPrivateFieldGet(this, _TransportImpl_url, "f")}?${queryString}`), "f"); await __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").ready; __classPrivateFieldSet(this, _TransportImpl_streamReader, new stream_reader_1.StreamReader({ reader: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").incomingUnidirectionalStreams.getReader(), }), "f"); __classPrivateFieldSet(this, _TransportImpl_streamWriter, new stream_writer_1.StreamWriter({ writer: (await __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").createUnidirectionalStream()).getWriter(), }), "f"); __classPrivateFieldSet(this, _TransportImpl_datagramReader, new datagram_reader_1.DatagramReader({ reader: __classPrivateFieldGet(this, _TransportImpl_webTransport, "f").datagrams.readable.getReader(), expiry: 10, timeNow: __classPrivateFieldGet(this, _TransportImpl_getTimeNow, "f"), }), "f"); __classPrivateFieldSet(this, _TransportImpl_datagramWriter, new datagram_writer_1.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 exceptions_1.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 exceptions_1.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_1.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 exceptions_1.ISCPTransportClosedError(errorMessage); } return { reader: __classPrivateFieldGet(this, _TransportImpl_datagramReader, "f"), writer: __classPrivateFieldGet(this, _TransportImpl_datagramWriter, "f"), }; } } exports.TransportImpl = TransportImpl; _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