the-moby-effect
Version:
Moby/Docker API client built using effect-ts
87 lines (86 loc) • 4.39 kB
JavaScript
;
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