@volter/twin-catalog 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ // A public tooling artifact exercises cryptographic provenance; it is not registered or admitted as a twin.
2
+ import assert from 'node:assert/strict';
3
+ import { verify } from 'sigstore';
4
+ import { metadata, registryURL, verifyArtifact, verifiedProvenance } from '../lib/registry.mjs';
5
+ import { write } from '../lib/model.mjs';
6
+ assert.ok(process.env.VOLTER_WORLD, 'provenance fixture must run through a World');
7
+ const registry = 'https://registry.npmjs.org';
8
+ const name = '@sigstore/bundle', version = '4.0.0';
9
+ const integrity = `sha512-${Buffer.from('3700a5e58d15e838b435ec6f913a9da157e68d3690c282ccdb7eabf3d284a231a6abf8cc96cf12fb36fbc8ec003dd5ef6f07ca0e53fe9665e000be2f292413f8', 'hex').toString('base64')}`;
10
+ const doc = await metadata(name, version, registry);
11
+ const downloaded = await fetch(registryURL(doc.dist.tarball, registry), { redirect: 'error' });
12
+ assert.ok(downloaded.ok);
13
+ const bytes = Buffer.from(await downloaded.arrayBuffer());
14
+ verifyArtifact(bytes, { integrity }, doc);
15
+ const fetched = await fetch(registryURL(doc.dist.attestations.url, registry), { redirect: 'error' });
16
+ assert.ok(fetched.ok);
17
+ const document = await fetched.json();
18
+ const source = { repository: 'sigstore/sigstore-js', workflow: 'release.yml' };
19
+ const receipt = await verifiedProvenance(document, source, bytes, verify);
20
+ assert.equal(receipt.predicateType, 'https://slsa.dev/provenance/v1');
21
+ await assert.rejects(() => verifiedProvenance(document, { ...source, repository: 'another/publisher' }, bytes, verify));
22
+ await assert.rejects(() => verifiedProvenance(document, source, Buffer.from('substituted artifact'), verify));
23
+ write('/work/provenance-report.json', { purpose: 'provenance-mechanism-fixture', passed: true, package: name, version, integrity, receipt, wrongSourceRefused: true, substitutedBytesRefused: true });
@@ -0,0 +1,19 @@
1
+ // Exercise the released browser transport in the same offline container as admission. This admits no package.
2
+ import { join, resolve } from 'node:path';
3
+ import { read, write, requireThat } from '../lib/model.mjs';
4
+ import { withContainer } from '../lib/runner.mjs';
5
+ const root = resolve('.'), policy = read(join(root, 'policy.json'));
6
+ const output = join(root, 'assessment/browser.json');
7
+ try {
8
+ const result = withContainer(root, { policy, purpose: 'browser-transport-fixture' }, output, ({ image, common, run, owner }) => {
9
+ run([...common, '--network', 'none', image, '-e', 'const fs=require("fs");fs.writeFileSync("/work/world.json",JSON.stringify({id:"catalog-browser-fixture",services:[],network:{egress:[]}}));fs.symlinkSync("/opt/catalog/node_modules","/work/node_modules");']);
10
+ const walked = run([...common, '--network', 'none', '--entrypoint', 'bun', image, '/opt/catalog/node_modules/@volter/world-runtime/src/cli.ts', 'run', '/work/world.json', '--root', '/work', '--env-out', '/work/world.env', '--owner', owner, '--', 'bun', '/opt/catalog/runner/browser-fixture.ts'], true);
11
+ const report = run([...common, '--network', 'none', image, '-e', 'process.stdout.write(require("fs").readFileSync("/work/browser-report.json","utf8"))'], true);
12
+ requireThat(walked.status === 0 && report.status === 0, 'released browser transport fixture failed; inspect browser diagnostics');
13
+ return { schemaVersion: 1, image, policy, ...JSON.parse(report.stdout) };
14
+ });
15
+ write(output, result);
16
+ } catch (error) {
17
+ write(output, { schemaVersion: 1, ready: false, purpose: 'browser-transport-fixture', error: String(error.message ?? error) });
18
+ throw error;
19
+ }
@@ -0,0 +1,16 @@
1
+ // Owner-dispatched smoke assessment uses the same controller as admission; it grants no approval.
2
+ import { join, resolve } from 'node:path';
3
+ import { metadata } from '../lib/registry.mjs';
4
+ import { read, validateSubmission, requireThat } from '../lib/model.mjs';
5
+ import { evaluate } from '../lib/runner.mjs';
6
+ const root = resolve('.'), policy = read(join(root, 'policy.json'));
7
+ const doc = await metadata(process.env.CATALOG_PACKAGE, process.env.CATALOG_VERSION, policy.registry);
8
+ const submission = { schemaVersion: 1, source: process.env.CATALOG_SOURCE, vendor: process.env.CATALOG_VENDOR, package: doc.name, version: doc.version, integrity: doc.dist.integrity };
9
+ const source = validateSubmission(submission, read(join(root, 'sources.json')));
10
+ const report = evaluate(root, { schemaVersion: 1, policy, source, submission, purpose: 'owner-dispatched-verification' }, join(root, 'assessment/evaluator.json'));
11
+ const expected = process.env.CATALOG_EXPECTED_READINESS ?? 'ready';
12
+ requireThat(['ready', 'reject-missing-provenance'].includes(expected), 'unknown verification expectation');
13
+ if (expected === 'reject-missing-provenance') {
14
+ requireThat(report.status === 'changes-needed' && report.phase === 'artifact-preparation' && report.error?.includes('npm provenance required; this version has no attestation'), 'evaluator did not produce the specific expected missing-provenance refusal; inspect retained diagnostics');
15
+ console.log('Verified missing-provenance refusal. The artifact remains changes-needed and is not admitted.');
16
+ } else requireThat(report.status === 'ready', 'isolated evaluator did not establish readiness; inspect the retained report and logs');
@@ -0,0 +1,16 @@
1
+ // Process fixtures use only released runtime tooling and a disposable World. No platform checkout.
2
+ import { mkdtempSync, writeFileSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join, resolve } from 'node:path';
5
+ import { spawnSync } from 'node:child_process';
6
+ import { read, write, requireThat } from '../lib/model.mjs';
7
+ const root = resolve('.'), policy = read(join(root, 'policy.json'));
8
+ const temp = mkdtempSync(join(tmpdir(), 'catalog-process-tools-'));
9
+ write(join(temp, 'package.json'), { private: true, dependencies: { '@volter/world-runtime': policy.tools['@volter/world-runtime'], '@volter/world-core': policy.tools['@volter/world-core'] } });
10
+ let result = spawnSync('npm', ['install', '--ignore-scripts', '--no-audit', '--no-fund', '--registry', policy.registry], { cwd: temp, stdio: 'inherit' });
11
+ requireThat(result.status === 0, 'released process-tool installation failed');
12
+ const config = join(temp, 'assessment.world.config.json');
13
+ write(config, { id: 'catalog-process-verification', services: [], network: { egress: [] } });
14
+ result = spawnSync('bun', [join(temp, 'node_modules/@volter/world-runtime/src/cli.ts'), 'run', config, '--root', temp, '--env-out', join(temp, 'assessment.env'), '--owner', 'catalog-process-verification', '--', 'node', '--test', join(root, 'test/process.test.mjs'), join(root, 'test/artifact.test.mjs')], { cwd: root, stdio: 'inherit' });
15
+ write(join(root, 'assessment/process.json'), { exit: result.status, tools: policy.tools });
16
+ process.exit(result.status ?? 1);
@@ -0,0 +1,20 @@
1
+ import { join, resolve } from 'node:path';
2
+ import { read, write } from '../lib/model.mjs';
3
+ import { withContainer } from '../lib/runner.mjs';
4
+ const root = resolve('.'), policy = read(join(root, 'policy.json'));
5
+ const output = join(root, 'assessment/provenance.json');
6
+ try {
7
+ const report = withContainer(root, { policy, purpose: 'provenance-mechanism-fixture' }, output, ({ image, common, run, owner }) => {
8
+ // Verification needs the registry and Sigstore trust services; candidate execution remains offline.
9
+ const destinations = ['https://registry.npmjs.org', 'https://tuf-repo-cdn.sigstore.dev', 'https://tuf-repo.sigstore.dev'];
10
+ const config = { id: 'catalog-provenance-fixture', services: [], network: { phase: 'build', egress: destinations, passthrough: destinations } };
11
+ run([...common, '--network', 'none', image, '-e', 'require("fs").writeFileSync("/work/world.json",process.argv[1])', JSON.stringify(config)]);
12
+ run([...common, '--entrypoint', 'bun', image, '/opt/catalog/node_modules/@volter/world-runtime/src/cli.ts', 'run', '/work/world.json', '--root', '/work', '--env-out', '/work/world.env', '--owner', owner, '--', 'node', '/opt/catalog/runner/provenance-fixture.mjs']);
13
+ const result = run([...common, '--network', 'none', image, '-e', 'process.stdout.write(require("fs").readFileSync("/work/provenance-report.json","utf8"))']);
14
+ return { schemaVersion: 1, image, policy, ...JSON.parse(result.stdout) };
15
+ });
16
+ write(output, report);
17
+ } catch (error) {
18
+ write(output, { schemaVersion: 1, purpose: 'provenance-mechanism-fixture', passed: false, error: String(error.message ?? error) });
19
+ throw error;
20
+ }
package/sources.json ADDED
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "name": "twin-packs-open",
4
+ "repository": "volter-ai/twin-packs-open",
5
+ "scope": "@volter",
6
+ "official": true,
7
+ "protocol": "3",
8
+ "workflow": "release.yml"
9
+ }
10
+ ]