UNPKG

nstdlib-nightly

Version:

Node.js standard library converted to runtime-agnostic ES modules.

86 lines (73 loc) 2.09 kB
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/internal/tls/secure-pair.js import EventEmitter from "nstdlib/lib/events"; import { kEmptyObject } from "nstdlib/lib/internal/util"; import { Duplex } from "nstdlib/lib/stream"; import * as _tls_wrap from "nstdlib/lib/_tls_wrap"; import * as _tls_common from "nstdlib/lib/_tls_common"; const kCallback = Symbol("Callback"); const kOtherSide = Symbol("Other"); class DuplexSocket extends Duplex { constructor() { super(); this[kCallback] = null; this[kOtherSide] = null; } _read() { const callback = this[kCallback]; if (callback) { this[kCallback] = null; callback(); } } _write(chunk, encoding, callback) { if (chunk.length === 0) { process.nextTick(callback); } else { this[kOtherSide].push(chunk); this[kOtherSide][kCallback] = callback; } } _final(callback) { this[kOtherSide].on("end", callback); this[kOtherSide].push(null); } } class DuplexPair { constructor() { this.socket1 = new DuplexSocket(); this.socket2 = new DuplexSocket(); this.socket1[kOtherSide] = this.socket2; this.socket2[kOtherSide] = this.socket1; } } class SecurePair extends EventEmitter { constructor( secureContext = _tls_common.createSecureContext(), isServer = false, requestCert = !isServer, rejectUnauthorized = false, options = kEmptyObject, ) { super(); const { socket1, socket2 } = new DuplexPair(); this.server = options.server; this.credentials = secureContext; this.encrypted = socket1; this.cleartext = new _tls_wrap.TLSSocket(socket2, { secureContext, isServer, requestCert, rejectUnauthorized, ...options, }); this.cleartext.once("secure", () => this.emit("secure")); } destroy() { this.cleartext.destroy(); this.encrypted.destroy(); } } const _export_createSecurePair_ = function createSecurePair(...args) { return Reflect.construct(SecurePair, args); }; export { _export_createSecurePair_ as createSecurePair };