@colophon-claims/verify 0.0.0 → 0.2.0

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.
Files changed (96) hide show
  1. package/README.md +39 -0
  2. package/dist/admission/application.d.ts +18 -0
  3. package/dist/admission/application.js +53 -0
  4. package/dist/admission/contracts.d.ts +506 -0
  5. package/dist/admission/contracts.js +459 -0
  6. package/dist/admission/index.d.ts +5 -0
  7. package/dist/admission/index.js +5 -0
  8. package/dist/admission/intake.d.ts +75 -0
  9. package/dist/admission/intake.js +70 -0
  10. package/dist/admission/result-evaluation.d.ts +18 -0
  11. package/dist/admission/result-evaluation.js +71 -0
  12. package/dist/admission/screening-sample.d.ts +56 -0
  13. package/dist/admission/screening-sample.js +126 -0
  14. package/dist/admission/verification.d.ts +102 -0
  15. package/dist/admission/verification.js +844 -0
  16. package/dist/anchor/check.d.ts +95 -0
  17. package/dist/anchor/check.js +146 -0
  18. package/dist/anchor/ports.d.ts +6 -0
  19. package/dist/anchor/ports.js +354 -0
  20. package/dist/assets.d.ts +33 -0
  21. package/dist/assets.js +885 -0
  22. package/dist/bin.d.ts +2 -0
  23. package/dist/bin.js +20 -0
  24. package/dist/cli.d.ts +14 -0
  25. package/dist/cli.js +205 -0
  26. package/dist/comparison.d.ts +64 -0
  27. package/dist/comparison.js +235 -0
  28. package/dist/index.d.ts +23 -0
  29. package/dist/index.js +23 -0
  30. package/dist/manifest.d.ts +54 -0
  31. package/dist/manifest.js +240 -0
  32. package/dist/materialize.d.ts +4 -0
  33. package/dist/materialize.js +13 -0
  34. package/dist/profile/admission-receipts.d.ts +11 -0
  35. package/dist/profile/admission-receipts.js +24 -0
  36. package/dist/profile/anchor-claims.d.ts +157 -0
  37. package/dist/profile/anchor-claims.js +330 -0
  38. package/dist/profile/artifacts.d.ts +261 -0
  39. package/dist/profile/artifacts.js +139 -0
  40. package/dist/profile/assembly-ports.d.ts +19 -0
  41. package/dist/profile/assembly-ports.js +42 -0
  42. package/dist/profile/binary-judge-manifest.d.ts +121 -0
  43. package/dist/profile/binary-judge-manifest.js +106 -0
  44. package/dist/profile/binary-qualification.d.ts +9 -0
  45. package/dist/profile/binary-qualification.js +58 -0
  46. package/dist/profile/branding-assets.d.ts +5 -0
  47. package/dist/profile/branding-assets.js +5 -0
  48. package/dist/profile/branding.d.ts +24 -0
  49. package/dist/profile/branding.js +14 -0
  50. package/dist/profile/claim-consistency.d.ts +26 -0
  51. package/dist/profile/claim-consistency.js +91 -0
  52. package/dist/profile/claim.d.ts +327 -0
  53. package/dist/profile/claim.js +742 -0
  54. package/dist/profile/errors.d.ts +49 -0
  55. package/dist/profile/errors.js +78 -0
  56. package/dist/profile/inspect-assurance.d.ts +16 -0
  57. package/dist/profile/inspect-assurance.js +30 -0
  58. package/dist/profile/inspect-disclosure.d.ts +28 -0
  59. package/dist/profile/inspect-disclosure.js +54 -0
  60. package/dist/profile/inspect-manifest.d.ts +706 -0
  61. package/dist/profile/inspect-manifest.js +397 -0
  62. package/dist/profile/isolation.d.ts +21 -0
  63. package/dist/profile/isolation.js +31 -0
  64. package/dist/profile/pinning-evidence.d.ts +41 -0
  65. package/dist/profile/pinning-evidence.js +43 -0
  66. package/dist/profile/ports.d.ts +3 -0
  67. package/dist/profile/ports.js +11 -0
  68. package/dist/profile/preview-log.d.ts +4 -0
  69. package/dist/profile/preview-log.js +3 -0
  70. package/dist/profile/run-results.d.ts +17 -0
  71. package/dist/profile/run-results.js +23 -0
  72. package/dist/profile/signing.d.ts +10 -0
  73. package/dist/profile/signing.js +46 -0
  74. package/dist/profile/trust.d.ts +13 -0
  75. package/dist/profile/trust.js +35 -0
  76. package/dist/profile/venue.d.ts +2 -0
  77. package/dist/profile/venue.js +2 -0
  78. package/dist/profile/verdict.d.ts +28 -0
  79. package/dist/profile/verdict.js +51 -0
  80. package/dist/reader-instructions.d.ts +41 -0
  81. package/dist/reader-instructions.js +52 -0
  82. package/dist/schema.d.ts +380 -0
  83. package/dist/schema.js +498 -0
  84. package/dist/verify.d.ts +72 -0
  85. package/dist/verify.js +1573 -0
  86. package/dist/version.d.ts +2 -0
  87. package/dist/version.js +2 -0
  88. package/package.json +63 -3
  89. package/schemas/assembly-row.schema.json +194 -0
  90. package/schemas/bundle-manifest.schema.json +23 -0
  91. package/schemas/claim-package.schema.json +279 -0
  92. package/schemas/dsse-envelope.schema.json +25 -0
  93. package/schemas/evidence-catalog.schema.json +43 -0
  94. package/schemas/public-trust.schema.json +44 -0
  95. package/schemas/verdict-catalog.schema.json +27 -0
  96. package/scripts/external-verify.py +238 -0
@@ -0,0 +1,46 @@
1
+ import { verify } from "node:crypto";
2
+ import { dssePreAuthEncoding, parseDsseEnvelope } from "@jinn-network/trust-core";
3
+ const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
4
+ function base58(bytes) {
5
+ let zeros = 0;
6
+ while (zeros < bytes.length && bytes[zeros] === 0)
7
+ zeros += 1;
8
+ let value = 0n;
9
+ for (const byte of bytes)
10
+ value = (value << 8n) | BigInt(byte);
11
+ let out = "";
12
+ while (value > 0n) {
13
+ const remainder = value % 58n;
14
+ value /= 58n;
15
+ out = BASE58[Number(remainder)] + out;
16
+ }
17
+ return "1".repeat(zeros) + out;
18
+ }
19
+ /** Derives the public did:key identifier from an Ed25519 SPKI. */
20
+ export function didKeyFromEd25519PublicKey(publicKey) {
21
+ const jwk = publicKey.export({ format: "jwk" });
22
+ if (typeof jwk.x !== "string")
23
+ throw new Error("Ed25519 public key JWK export is missing its x-coordinate");
24
+ const raw = Buffer.from(jwk.x, "base64url");
25
+ if (raw.length !== 32)
26
+ throw new Error(`Ed25519 public key raw bytes must be 32 bytes, got ${raw.length}`);
27
+ return `did:key:z${base58(new Uint8Array([0xed, 0x01, ...raw]))}`;
28
+ }
29
+ /** Fail-closed verification of the Report envelope against the bundle-carried author key. */
30
+ export function verifyReportEnvelopeSignatures(envelopeBytes, key) {
31
+ try {
32
+ const envelope = parseDsseEnvelope(envelopeBytes);
33
+ const preAuth = Buffer.from(dssePreAuthEncoding(envelope.payloadType, envelope.payloadBytes));
34
+ return { validSignerKeyids: envelope.signatures.flatMap((signature) => {
35
+ try {
36
+ return signature.keyid === key.keyId && verify(null, preAuth, key.publicKey, Buffer.from(signature.sig, "base64")) ? [key.keyId] : [];
37
+ }
38
+ catch {
39
+ return [];
40
+ }
41
+ }) };
42
+ }
43
+ catch {
44
+ return { validSignerKeyids: [] };
45
+ }
46
+ }
@@ -0,0 +1,13 @@
1
+ import { type VerifyEnvelopeBindingDeps } from "@jinn-network/trust-core";
2
+ export interface PublicReportTrustMaterial {
3
+ readonly author: string;
4
+ readonly keyId: string;
5
+ readonly didKey: string;
6
+ readonly algorithm: "ed25519";
7
+ readonly spkiDerBase64: string;
8
+ readonly validFrom: string;
9
+ }
10
+ export declare function buildPublicReportTrustDeps(input: {
11
+ readonly report: PublicReportTrustMaterial;
12
+ readonly bindingEnvelopeBytes: Uint8Array;
13
+ }): VerifyEnvelopeBindingDeps;
@@ -0,0 +1,35 @@
1
+ import { createPublicKey } from "node:crypto";
2
+ import { BENCHMARKING_REPORTS_SCOPE } from "@jinn-network/benchmarking-records";
3
+ import { sha256Hex, TRUST_KEY_BINDING_FORMAT } from "@jinn-network/trust-core";
4
+ import { verifyReportEnvelopeSignatures } from "./signing.js";
5
+ export function buildPublicReportTrustDeps(input) {
6
+ const { report, bindingEnvelopeBytes } = input;
7
+ if (report.keyId !== report.didKey)
8
+ throw new Error("report trust keyId must equal didKey");
9
+ const spkiDer = Buffer.from(report.spkiDerBase64, "base64");
10
+ const publicKey = createPublicKey({ key: spkiDer, format: "der", type: "spki" });
11
+ const binding = {
12
+ binding: {
13
+ protocol: TRUST_KEY_BINDING_FORMAT,
14
+ agent: report.author,
15
+ key: { publicKey: report.spkiDerBase64, keyid: report.keyId, algorithm: report.algorithm, didKey: report.didKey },
16
+ voucher: { kind: "agentId", caip19: "eip155:1/erc721:0x0000000000000000000000000000000000000000/1" },
17
+ relationship: "controls",
18
+ scope: [BENCHMARKING_REPORTS_SCOPE],
19
+ validFrom: report.validFrom,
20
+ ceremony: { type: "agentId", digest: `sha256:${sha256Hex(spkiDer)}` },
21
+ strength: "strong",
22
+ anchors: [],
23
+ },
24
+ envelopeBytes: bindingEnvelopeBytes,
25
+ bindingDigest: `sha256:${sha256Hex(bindingEnvelopeBytes)}`,
26
+ effectiveStart: report.validFrom,
27
+ isGenesis: true,
28
+ revocations: [],
29
+ };
30
+ return {
31
+ dsseVerifier: (envelopeBytes) => verifyReportEnvelopeSignatures(envelopeBytes, { keyId: report.keyId, publicKey }),
32
+ bindingResolver: { async resolveBinding(query) { return query.key === report.keyId && query.agent === report.author ? binding : null; } },
33
+ witnessVerifier: { async verify1271Witness() { return { verified: false, reason: "no 1271 witnesses on the local venue" }; } },
34
+ };
35
+ }
@@ -0,0 +1,2 @@
1
+ /** The evaluator identity requirement carried by evaluation Submissions. */
2
+ export declare const EVALUATOR_REQUIREMENT_KEY = "jinn.benchmark-product/evaluator";
@@ -0,0 +1,2 @@
1
+ /** The evaluator identity requirement carried by evaluation Submissions. */
2
+ export const EVALUATOR_REQUIREMENT_KEY = "jinn.benchmark-product/evaluator";
@@ -0,0 +1,28 @@
1
+ import { type KeyObject } from "node:crypto";
2
+ export declare function verdictKeyIdFromEd25519PublicKey(publicKey: KeyObject): string;
3
+ export interface VerdictStatementView {
4
+ readonly evaluatorId: string;
5
+ readonly verdict: "pass" | "fail" | "inconclusive";
6
+ readonly evaluationSpecificationSha256: string;
7
+ readonly measurements: Record<string, boolean | number | string>;
8
+ readonly evaluatedAt: string;
9
+ readonly evaluationMethod?: {
10
+ readonly name: string;
11
+ readonly sha256: string;
12
+ };
13
+ readonly evidence?: readonly {
14
+ readonly name: string;
15
+ readonly sha256: string;
16
+ readonly mediaType?: string;
17
+ }[];
18
+ readonly evaluatorExtensions?: Readonly<Record<string, unknown>>;
19
+ readonly limitations?: readonly string[];
20
+ }
21
+ export interface OrderedVerdictMeasurement {
22
+ readonly name: string;
23
+ readonly value: boolean | number | string;
24
+ }
25
+ /** Parses only the public Result Evaluation Statement projection needed by bundle verification. */
26
+ export declare function readVerdictEnvelope(envelopeBytes: Uint8Array): VerdictStatementView;
27
+ /** Lossless measurement view for contracts that pre-register order as well as names. */
28
+ export declare function readOrderedVerdictMeasurements(envelopeBytes: Uint8Array): readonly OrderedVerdictMeasurement[];
@@ -0,0 +1,51 @@
1
+ import { createHash } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { parseDsseEnvelope } from "@jinn-network/trust-core";
4
+ import { VERDICT_DSSE_PAYLOAD_TYPE } from "@jinn-network/task-execution-profiles";
5
+ import { refuse } from "./errors.js";
6
+ const value = z.union([z.boolean(), z.number(), z.string()]);
7
+ const statement = z.object({ predicate: z.object({ evaluator: z.looseObject({ id: z.string().min(1) }), verdict: z.enum(["pass", "fail", "inconclusive"]), evaluationSpecification: z.looseObject({ digest: z.looseObject({ sha256: z.string().regex(/^[a-f0-9]{64}$/) }) }), evaluationMethod: z.looseObject({ name: z.string().min(1), digest: z.looseObject({ sha256: z.string().regex(/^[a-f0-9]{64}$/) }) }).optional(), measurements: z.array(z.looseObject({ name: z.string().min(1), value })).optional(), evidence: z.array(z.looseObject({ name: z.string().min(1), digest: z.looseObject({ sha256: z.string().regex(/^[a-f0-9]{64}$/) }), mediaType: z.string().optional() })).optional(), evaluatedAt: z.string().min(1), limitations: z.array(z.string()).optional() }) });
8
+ export function verdictKeyIdFromEd25519PublicKey(publicKey) {
9
+ return `benchmark-product-verdict-${createHash("sha256").update(publicKey.export({ type: "spki", format: "der" })).digest("hex").slice(0, 16)}`;
10
+ }
11
+ /** Parses only the public Result Evaluation Statement projection needed by bundle verification. */
12
+ export function readVerdictEnvelope(envelopeBytes) {
13
+ const envelope = parseDsseEnvelope(envelopeBytes);
14
+ if (envelope.payloadType !== VERDICT_DSSE_PAYLOAD_TYPE)
15
+ refuse("execution", "payloadType", "verdict envelope payloadType is not the verdict DSSE payload type");
16
+ let json;
17
+ try {
18
+ json = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(envelope.payloadBytes));
19
+ }
20
+ catch {
21
+ refuse("execution", "verdict envelope payload", "verdict envelope payload is not valid JSON");
22
+ }
23
+ const parsed = statement.safeParse(json);
24
+ if (!parsed.success)
25
+ refuse("execution", "verdict envelope payload", "verdict envelope payload does not conform to the expected Result Evaluation Statement shape");
26
+ const { id: evaluatorId, ...extensions } = parsed.data.predicate.evaluator;
27
+ return { evaluatorId, verdict: parsed.data.predicate.verdict, evaluationSpecificationSha256: parsed.data.predicate.evaluationSpecification.digest.sha256, measurements: Object.fromEntries((parsed.data.predicate.measurements ?? []).map((measurement) => [measurement.name, measurement.value])), evaluatedAt: parsed.data.predicate.evaluatedAt, ...(parsed.data.predicate.evaluationMethod === undefined ? {} : { evaluationMethod: { name: parsed.data.predicate.evaluationMethod.name, sha256: parsed.data.predicate.evaluationMethod.digest.sha256 } }), ...(parsed.data.predicate.evidence === undefined ? {} : { evidence: parsed.data.predicate.evidence.map((entry) => ({ name: entry.name, sha256: entry.digest.sha256, ...(entry.mediaType === undefined ? {} : { mediaType: entry.mediaType }) })) }), ...(Object.keys(extensions).length === 0 ? {} : { evaluatorExtensions: extensions }), ...(parsed.data.predicate.limitations === undefined ? {} : { limitations: parsed.data.predicate.limitations }) };
28
+ }
29
+ /** Lossless measurement view for contracts that pre-register order as well as names. */
30
+ export function readOrderedVerdictMeasurements(envelopeBytes) {
31
+ const envelope = parseDsseEnvelope(envelopeBytes);
32
+ if (envelope.payloadType !== VERDICT_DSSE_PAYLOAD_TYPE) {
33
+ refuse("execution", "payloadType", "verdict envelope payloadType is not the verdict DSSE payload type");
34
+ }
35
+ let json;
36
+ try {
37
+ json = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(envelope.payloadBytes));
38
+ }
39
+ catch {
40
+ refuse("execution", "verdict envelope payload", "verdict envelope payload is not valid JSON");
41
+ }
42
+ const parsed = statement.safeParse(json);
43
+ if (!parsed.success) {
44
+ refuse("execution", "verdict envelope payload", "verdict envelope payload does not conform to the expected Result Evaluation Statement shape");
45
+ }
46
+ const measurements = parsed.data.predicate.measurements ?? [];
47
+ if (new Set(measurements.map((measurement) => measurement.name)).size !== measurements.length) {
48
+ refuse("execution", "verdict envelope payload", "verdict envelope carries duplicate measurement names");
49
+ }
50
+ return measurements.map((measurement) => ({ name: measurement.name, value: measurement.value }));
51
+ }
@@ -0,0 +1,41 @@
1
+ export declare const PUBLIC_BUNDLE_VERIFICATION_CHECKS: readonly ["manifest", "evidence-closure", "trust", "matrix-rederivation", "report-verification", "claim-consistency"];
2
+ /** First public npm line. 0.x does not promise compatibility across minors. */
3
+ export declare const PUBLIC_BUNDLE_VERIFIER_MAJOR: "0.1";
4
+ export declare const PUBLIC_BUNDLE_V4_VERIFIER_MAJOR: "0.1";
5
+ /** Exact producer-side verifier for byte-for-byte reproduction. */
6
+ export declare const PUBLIC_BUNDLE_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
7
+ /** Compatible 0.1.x line for fixes that preserve this bundle-format contract. */
8
+ export declare const PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1 <bundle-dir>";
9
+ export declare const PUBLIC_BUNDLE_V4_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
10
+ export declare const PUBLIC_BUNDLE_V4_COMPATIBLE_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1 <bundle-dir>";
11
+ export declare const PUBLIC_BUNDLE_V5_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
12
+ export declare const PUBLIC_BUNDLE_V5_COMPATIBLE_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1 <bundle-dir>";
13
+ export declare const PUBLIC_BUNDLE_V6_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
14
+ export declare const PUBLIC_BUNDLE_V6_COMPATIBLE_VERIFICATION_COMMAND: "npx @colophon-claims/verify@0.1 <bundle-dir>";
15
+ /**
16
+ * The anchored closure's check list (anchor-evidence design §8): the six frozen checks plus
17
+ * `integrity-anchors`, which is **always present** for this format — an anchored bundle whose
18
+ * anchors were stripped is a closure failure, not a shorter list. Stated as a per-format constant
19
+ * rather than as an append at the call site, the same way the evidence-native profile states
20
+ * `EVIDENCE_NATIVE_BUNDLE_V5_CHECKS`.
21
+ */
22
+ export declare const PUBLIC_BUNDLE_V6_CHECKS: readonly ["manifest", "evidence-closure", "trust", "matrix-rederivation", "report-verification", "claim-consistency", "integrity-anchors"];
23
+ /** Every current format stamps the same first public 0.1 line. */
24
+ export declare const PUBLIC_BUNDLE_VERIFICATION_INSTRUCTIONS: {
25
+ readonly "benchmark-product-public-bundle/2": {
26
+ readonly command: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
27
+ readonly compatibleCommand: "npx @colophon-claims/verify@0.1 <bundle-dir>";
28
+ };
29
+ readonly "benchmark-product-public-bundle/4": {
30
+ readonly command: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
31
+ readonly compatibleCommand: "npx @colophon-claims/verify@0.1 <bundle-dir>";
32
+ };
33
+ readonly "benchmark-product-public-bundle/5": {
34
+ readonly command: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
35
+ readonly compatibleCommand: "npx @colophon-claims/verify@0.1 <bundle-dir>";
36
+ };
37
+ readonly "benchmark-product-public-bundle/6": {
38
+ readonly command: "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
39
+ readonly compatibleCommand: "npx @colophon-claims/verify@0.1 <bundle-dir>";
40
+ };
41
+ };
@@ -0,0 +1,52 @@
1
+ export const PUBLIC_BUNDLE_VERIFICATION_CHECKS = [
2
+ "manifest",
3
+ "evidence-closure",
4
+ "trust",
5
+ "matrix-rederivation",
6
+ "report-verification",
7
+ "claim-consistency",
8
+ ];
9
+ /** First public npm line. 0.x does not promise compatibility across minors. */
10
+ export const PUBLIC_BUNDLE_VERIFIER_MAJOR = "0.1";
11
+ export const PUBLIC_BUNDLE_V4_VERIFIER_MAJOR = "0.1";
12
+ /** Exact producer-side verifier for byte-for-byte reproduction. */
13
+ export const PUBLIC_BUNDLE_VERIFICATION_COMMAND = "npx @colophon-claims/verify@0.1.0 <bundle-dir>";
14
+ /** Compatible 0.1.x line for fixes that preserve this bundle-format contract. */
15
+ export const PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND = "npx @colophon-claims/verify@0.1 <bundle-dir>";
16
+ export const PUBLIC_BUNDLE_V4_VERIFICATION_COMMAND = PUBLIC_BUNDLE_VERIFICATION_COMMAND;
17
+ export const PUBLIC_BUNDLE_V4_COMPATIBLE_VERIFICATION_COMMAND = PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND;
18
+ export const PUBLIC_BUNDLE_V5_VERIFICATION_COMMAND = PUBLIC_BUNDLE_VERIFICATION_COMMAND;
19
+ export const PUBLIC_BUNDLE_V5_COMPATIBLE_VERIFICATION_COMMAND = PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND;
20
+ export const PUBLIC_BUNDLE_V6_VERIFICATION_COMMAND = PUBLIC_BUNDLE_VERIFICATION_COMMAND;
21
+ export const PUBLIC_BUNDLE_V6_COMPATIBLE_VERIFICATION_COMMAND = PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND;
22
+ /**
23
+ * The anchored closure's check list (anchor-evidence design §8): the six frozen checks plus
24
+ * `integrity-anchors`, which is **always present** for this format — an anchored bundle whose
25
+ * anchors were stripped is a closure failure, not a shorter list. Stated as a per-format constant
26
+ * rather than as an append at the call site, the same way the evidence-native profile states
27
+ * `EVIDENCE_NATIVE_BUNDLE_V5_CHECKS`.
28
+ */
29
+ export const PUBLIC_BUNDLE_V6_CHECKS = [
30
+ ...PUBLIC_BUNDLE_VERIFICATION_CHECKS,
31
+ "integrity-anchors",
32
+ ];
33
+ /** Every current format stamps the same first public 0.1 line. */
34
+ export const PUBLIC_BUNDLE_VERIFICATION_INSTRUCTIONS = {
35
+ [BUNDLE_FORMAT]: {
36
+ command: PUBLIC_BUNDLE_VERIFICATION_COMMAND,
37
+ compatibleCommand: PUBLIC_BUNDLE_COMPATIBLE_VERIFICATION_COMMAND,
38
+ },
39
+ [BUNDLE_V4_FORMAT]: {
40
+ command: PUBLIC_BUNDLE_V4_VERIFICATION_COMMAND,
41
+ compatibleCommand: PUBLIC_BUNDLE_V4_COMPATIBLE_VERIFICATION_COMMAND,
42
+ },
43
+ [BUNDLE_V5_FORMAT]: {
44
+ command: PUBLIC_BUNDLE_V5_VERIFICATION_COMMAND,
45
+ compatibleCommand: PUBLIC_BUNDLE_V5_COMPATIBLE_VERIFICATION_COMMAND,
46
+ },
47
+ [BUNDLE_V6_FORMAT]: {
48
+ command: PUBLIC_BUNDLE_V6_VERIFICATION_COMMAND,
49
+ compatibleCommand: PUBLIC_BUNDLE_V6_COMPATIBLE_VERIFICATION_COMMAND,
50
+ },
51
+ };
52
+ import { BUNDLE_FORMAT, BUNDLE_V4_FORMAT, BUNDLE_V5_FORMAT, BUNDLE_V6_FORMAT } from "./manifest.js";