@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
156 lines • 10.4 kB
JavaScript
"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