UNPKG

the-moby-effect

Version:
87 lines (86 loc) 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeUndiciSshConnector = exports.makeUndiciHttpClientLayer = exports.getUndiciDispatcher = void 0; var Effect = _interopRequireWildcard(require("effect/Effect")); var Function = _interopRequireWildcard(require("effect/Function")); var Layer = _interopRequireWildcard(require("effect/Layer")); var internalAgnostic = _interopRequireWildcard(require("./agnostic.js")); var internalConnection = _interopRequireWildcard(require("./connection.js")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /** @internal */ const makeUndiciSshConnector = connectionOptions => Effect.Do.pipe(Effect.bind("ssh2Lazy", () => Effect.promise(() => import("ssh2"))), Effect.let("acquire", ({ ssh2Lazy }) => Effect.sync(() => new ssh2Lazy.Client())), Effect.let("release", () => client => Effect.sync(() => { client.end(); client.destroy(); })), Effect.flatMap(({ acquire, release }) => Effect.acquireRelease(acquire, release)), Effect.flatMap(sshClient => Effect.async(resume => { sshClient.once("ready", () => { sshClient.removeAllListeners("error"); sshClient.removeAllListeners("ready"); resume(Effect.succeed(sshClient)); }).once("error", error => { sshClient.removeAllListeners("error"); sshClient.removeAllListeners("ready"); resume(Effect.fail(error)); }).connect(connectionOptions); })), Effect.map(sshClient => (_opts, callback) => { sshClient.openssh_forwardOutStreamLocal(connectionOptions.remoteSocketPath, (error, socket) => { if (error) { return callback(error, null); } socket.once("close", () => { socket.end(); socket.destroy(); }); return callback(null, socket); }); }), Effect.orDie); /** @internal */ exports.makeUndiciSshConnector = makeUndiciSshConnector; const getUndiciDispatcher = connectionOptions => Effect.flatMap(Effect.promise(() => import("undici")), undiciLazy => { const AcquireUndiciDispatcher = internalConnection.MobyConnectionOptions.$match({ socket: options => Effect.succeed(new undiciLazy.Agent({ connect: { socketPath: options.socketPath } })), http: options => Effect.succeed(new undiciLazy.Agent({ connect: { host: options.host, port: options.port, path: options.path } })), https: options => Effect.succeed(new undiciLazy.Agent({ connect: { ca: options.ca, key: options.key, cert: options.cert, passphrase: options.passphrase, host: options.host, port: options.port, path: options.path } })), ssh: options => Effect.map(makeUndiciSshConnector(options), connector => new undiciLazy.Agent({ connect: connector })) }); const releaseUndiciDispatcher = dispatcher => Effect.promise(() => dispatcher.destroy()); return Effect.acquireRelease(AcquireUndiciDispatcher(connectionOptions), releaseUndiciDispatcher); }); /** @internal */ exports.getUndiciDispatcher = getUndiciDispatcher; const makeUndiciHttpClientLayer = connectionOptions => { const undiciLayer = Function.pipe(Effect.promise(() => import("@effect/platform-node/NodeHttpClient")), Effect.map(nodeHttpClientLazy => Layer.provide(nodeHttpClientLazy.layerUndiciWithoutDispatcher, Layer.scoped(nodeHttpClientLazy.Dispatcher, getUndiciDispatcher(connectionOptions)))), Layer.unwrapEffect); const agnosticHttpClientLayer = internalAgnostic.makeAgnosticLayer(connectionOptions); return Layer.provide(agnosticHttpClientLayer, undiciLayer); }; exports.makeUndiciHttpClientLayer = makeUndiciHttpClientLayer; //# sourceMappingURL=undici.js.map