/** * pkg-swarm-index path-capability envelope verify on `get`. */ import { readFile } from 'node:fs/promises' import path from 'node:path' import { fileURLToPath } from 'node:url' import test from 'brittle' import b4a from 'b4a' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor async function loadBin() { const runtime = await readFile( path.join(__dirname, '../lib/runtime.js'), 'utf8' ) let body = await readFile( path.join(__dirname, '../src/pkg-swarm-index.js'), 'utf8' ) body = body.replace(/\nexport \{ run \}\s*$/m, '\n') return new AsyncFunction( 'ctx', 'argv', `${runtime}\n${body}\nif (typeof run === 'function') return await run(ctx, argv)\n` ) } const sampleIndex = { packages: { 'demo@1.0.0': { driveKey: 'a'.repeat(64), manifestHash: 'b'.repeat(64), pathCapabilityEnvelope: { stub: true } } } } test('pkg-swarm-index get adds pathCapabilityEnvelopeVerify when ctx hook exists', async (t) => { const run = await loadBin() const logs = [] const ctx = { b4a, exitCode: 0, env: {}, vfs: { async readFile(p) { t.is(p, '/etc/bare-os/pkg-index.json') return b4a.from(JSON.stringify(sampleIndex)) } }, bareOsVerifyPathCapabilityEnvelope(env) { return { ok: true, envelope: env } }, console: { log: (m) => logs.push(String(m)), error: (m) => logs.push(String(m)) } } await run(ctx, ['pkg-swarm-index', 'get', 'demo@1.0.0']) t.is(ctx.exitCode, 0) const out = JSON.parse(logs[0]) t.ok(out.pathCapabilityEnvelopeVerify) t.is(out.pathCapabilityEnvelopeVerify.ok, true) }) test('pkg-swarm-index get captures verify errors in pathCapabilityEnvelopeVerify', async (t) => { const run = await loadBin() const logs = [] const ctx = { b4a, exitCode: 0, env: {}, vfs: { async readFile() { return b4a.from(JSON.stringify(sampleIndex)) } }, bareOsVerifyPathCapabilityEnvelope() { throw new Error('bad envelope') }, console: { log: (m) => logs.push(String(m)), error: (m) => logs.push(String(m)) } } await run(ctx, ['pkg-swarm-index', 'get', 'demo@1.0.0']) t.is(ctx.exitCode, 0) const out = JSON.parse(logs[0]) t.ok(out.pathCapabilityEnvelopeVerify) t.is(out.pathCapabilityEnvelopeVerify.ok, false) t.ok(String(out.pathCapabilityEnvelopeVerify.error).includes('bad envelope')) })