UNPKG

rivetkit

Version:

Lightweight libraries for building stateful actors on edge platforms

126 lines (108 loc) 4 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _chunkPDFL7FBLcjs = require('./chunk-PDFL7FBL.cjs'); var _chunkSIWYIRXPcjs = require('./chunk-SIWYIRXP.cjs'); var _chunkVZMXAZKCcjs = require('./chunk-VZMXAZKC.cjs'); var _chunkCA3X5M6Hcjs = require('./chunk-CA3X5M6H.cjs'); var _chunkYKVTF7MPcjs = require('./chunk-YKVTF7MP.cjs'); // src/test/mod.ts var _net = require('net'); var _nodeserver = require('@hono/node-server'); var _nodews = require('@hono/node-ws'); var _vitest = require('vitest'); // src/test/config.ts var _zod = require('zod'); var ConfigSchema = _chunkCA3X5M6Hcjs.RunnerConfigSchema.removeDefault().extend({ hostname: _zod.z.string().optional().default(_nullishCoalesce(process.env.HOSTNAME, () => ( "127.0.0.1"))), port: _zod.z.number().optional().default(Number.parseInt(_nullishCoalesce(process.env.PORT, () => ( "8080")))) }).default({}); // src/test/log.ts function logger() { return _chunkYKVTF7MPcjs.getLogger.call(void 0, "test"); } // src/test/mod.ts function serve(registry, inputConfig) { inputConfig ??= {}; const config = ConfigSchema.parse(inputConfig); let upgradeWebSocket; if (!config.getUpgradeWebSocket) { config.getUpgradeWebSocket = () => upgradeWebSocket; } const runConfig = _chunkCA3X5M6Hcjs.RunnerConfigSchema.parse(inputConfig); const driver = _nullishCoalesce(inputConfig.driver, () => ( _chunkPDFL7FBLcjs.createFileSystemOrMemoryDriver.call(void 0, false))); const managerDriver = driver.manager(registry.config, config); const client = _chunkVZMXAZKCcjs.createClientWithDriver.call(void 0, managerDriver); _chunkSIWYIRXPcjs.configureInspectorAccessToken.call(void 0, config, managerDriver); const { router } = _chunkPDFL7FBLcjs.createManagerRouter.call(void 0, registry.config, runConfig, managerDriver, driver, client ); const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router }); upgradeWebSocket = nodeWebSocket.upgradeWebSocket; const server = _nodeserver.serve.call(void 0, { fetch: router.fetch, hostname: config.hostname, port: config.port }); nodeWebSocket.injectWebSocket(server); logger().info({ msg: "rivetkit started", hostname: config.hostname, port: config.port, definitions: Object.keys(registry.config.use).length }); return server; } async function setupTest(c, registry) { _vitest.vi.useFakeTimers(); const mockDriverContext = {}; const setDriverContextFn = (ctx) => { mockDriverContext.current = ctx; }; const port = await getPort(); const server = serve(registry, { port }); c.onTestFinished( async () => await new Promise((resolve) => server.close(() => resolve())) ); throw "TODO: Fix engine port"; } async function getPort() { const MIN_PORT = 1e4; const MAX_PORT = 65535; const getRandomPort = () => Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT; let port = getRandomPort(); let maxAttempts = 10; while (maxAttempts > 0) { try { const server = await new Promise((resolve, reject) => { const server2 = _net.createServer.call(void 0, ); server2.once("error", (err) => { if (err.code === "EADDRINUSE") { reject(new Error(`Port ${port} is in use`)); } else { reject(err); } }); server2.once("listening", () => { resolve(server2); }); server2.listen(port); }); await new Promise((resolve) => { server.close(() => resolve()); }); return port; } catch (err) { maxAttempts--; if (maxAttempts <= 0) { break; } port = getRandomPort(); } } throw new Error("Could not find an available port after multiple attempts"); } exports.setupTest = setupTest; exports.getPort = getPort; //# sourceMappingURL=chunk-PSCDCEXM.cjs.map