import * as plugins from './plugins.js'; import { resolveAGLHomePaths } from './classes.aglhome.js'; export const embeddedDatabaseSocketPath = ( dataDirectoryArg: string, socketDirectoryArg = resolveAGLHomePaths().sockets, ): string => { const directoryHash = plugins.crypto .createHash('sha256') .update(dataDirectoryArg) .digest('hex') .slice(0, 16); const socketPath = plugins.path.join( socketDirectoryArg, `smartdb-${directoryHash}.sock`, ); if (Buffer.byteLength(socketPath, 'utf8') > 100) { throw new Error('AGL_HOME is too long for the embedded database Unix socket path.'); } return socketPath; }; export const isSocketListening = (socketPathArg: string): Promise => new Promise((resolve) => { const probe = plugins.net.createConnection({ path: socketPathArg }, () => { probe.destroy(); resolve(true); }); probe.on('error', () => resolve(false)); probe.setTimeout(500, () => { probe.destroy(); resolve(false); }); });