// Transport shim used by S4, not a second product CLI. Input and proof never carry service tokens. import { randomBytes } from 'node:crypto'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import { readFileSync } from 'node:fs'; import { Client } from './client.mjs'; import { readProcess } from './human.mjs'; const file = fileURLToPath(import.meta.url); if (!process.env.MOSAIC_BUS_CLI_NONCE) { const child = spawnSync(process.execPath, [file, ...process.argv.slice(2)], { stdio: 'inherit', env: { ...process.env, MOSAIC_BUS_CLI_NONCE: randomBytes(32).toString('hex') }, }); process.exit(child.status ?? 2); } try { const request = JSON.parse(readFileSync(0, 'utf8')); if ( !request || typeof request !== 'object' || Object.keys(request).some((k) => !['business', 'verb', 'args'].includes(k)) ) throw Error(); const me = readProcess(process.pid); const client = new Client({ path: process.argv[2], human: { business: request.business, pid: me.pid, startTime: me.startTime, nonce: process.env.MOSAIC_BUS_CLI_NONCE, }, }); const result = await client.call(request.verb, request.args ?? {}); process.stdout.write(JSON.stringify(result) + '\n'); } catch (e) { process.stderr.write((/^[a-z-]{1,64}$/.test(e.code ?? '') ? e.code : 'invalid-request') + '\n'); process.exitCode = 2; }