@ixo/domain.md 0.3.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 (70) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +6 -0
  3. package/README.md +30 -0
  4. package/assets/domain-md.schema.json +1103 -0
  5. package/assets/oracle-capsule-jcs-vectors.json +57 -0
  6. package/assets/oracle-capsule-manifest-contract.md +72 -0
  7. package/assets/oracle-capsule-source-lock.schema.json +45 -0
  8. package/assets/oracle-capsule.schema.json +265 -0
  9. package/assets/rules.json +275 -0
  10. package/assets/spec.md +1434 -0
  11. package/assets/template-manifest.schema.json +57 -0
  12. package/dist/capsule/index.d.ts +75 -0
  13. package/dist/capsule/index.js +20 -0
  14. package/dist/capsule/index.js.map +1 -0
  15. package/dist/chunk-BYBC2TSS.js +597 -0
  16. package/dist/chunk-BYBC2TSS.js.map +1 -0
  17. package/dist/chunk-G7PZJYAJ.js +31826 -0
  18. package/dist/chunk-G7PZJYAJ.js.map +1 -0
  19. package/dist/chunk-R6QZRNEX.js +164 -0
  20. package/dist/chunk-R6QZRNEX.js.map +1 -0
  21. package/dist/chunk-T3STBWXP.js +46 -0
  22. package/dist/chunk-T3STBWXP.js.map +1 -0
  23. package/dist/chunk-W7MRQP7I.js +862 -0
  24. package/dist/chunk-W7MRQP7I.js.map +1 -0
  25. package/dist/chunk-XDIWMZVF.js +1150 -0
  26. package/dist/chunk-XDIWMZVF.js.map +1 -0
  27. package/dist/cli-KcUIQEiE.d.ts +171 -0
  28. package/dist/cli.d.ts +2 -0
  29. package/dist/cli.js +400 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.js +83 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/resolver-B3mwnjJq.d.ts +96 -0
  35. package/dist/spec.d.ts +20 -0
  36. package/dist/spec.js +23 -0
  37. package/dist/spec.js.map +1 -0
  38. package/dist/templates/index.d.ts +7 -0
  39. package/dist/templates/index.js +24 -0
  40. package/dist/templates/index.js.map +1 -0
  41. package/dist/workers-Dr8B8a2O.d.ts +19 -0
  42. package/dist/workers.d.ts +3 -0
  43. package/dist/workers.js +31 -0
  44. package/dist/workers.js.map +1 -0
  45. package/package.json +97 -0
  46. package/src/capsule/canonical.ts +74 -0
  47. package/src/capsule/index.ts +10 -0
  48. package/src/capsule/json.ts +373 -0
  49. package/src/capsule/types.ts +63 -0
  50. package/src/capsule/validate.ts +551 -0
  51. package/src/cli.ts +405 -0
  52. package/src/compiled-validators.d.ts +7 -0
  53. package/src/compiled-validators.js +32512 -0
  54. package/src/constants.ts +250 -0
  55. package/src/diff.ts +111 -0
  56. package/src/export.ts +28 -0
  57. package/src/index.ts +36 -0
  58. package/src/lint.ts +42 -0
  59. package/src/parser.ts +174 -0
  60. package/src/sarif.ts +49 -0
  61. package/src/semantic.ts +1156 -0
  62. package/src/spec.ts +48 -0
  63. package/src/templates/errors.ts +3 -0
  64. package/src/templates/index.ts +11 -0
  65. package/src/templates/manifest.ts +94 -0
  66. package/src/templates/render.ts +435 -0
  67. package/src/templates/resolver.ts +200 -0
  68. package/src/templates/types.ts +98 -0
  69. package/src/types.ts +195 -0
  70. package/src/workers.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/capsule/canonical.ts","../src/capsule/json.ts","../src/capsule/validate.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type { JsonValue } from './types.js';\n\nexport class CapsuleCanonicalizationError extends Error {\n readonly code = 'capsule-canonicalization';\n}\n\nfunction canonical(value: unknown, path: string): string {\n if (value === null) return 'null';\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n if (typeof value === 'string') {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const low = value.charCodeAt(index + 1);\n if (!Number.isInteger(low) || low < 0xdc00 || low > 0xdfff)\n throw new CapsuleCanonicalizationError(`Lone high surrogate at ${path}.`);\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new CapsuleCanonicalizationError(`Lone low surrogate at ${path}.`);\n }\n }\n return JSON.stringify(value);\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value))\n throw new CapsuleCanonicalizationError(`Non-finite number at ${path}.`);\n if (Number.isInteger(value) && !Number.isSafeInteger(value))\n throw new CapsuleCanonicalizationError(`Unsafe integer at ${path}.`);\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((child, index) => canonical(child, `${path}/${index}`)).join(',')}]`;\n }\n if (typeof value === 'object' && value !== undefined) {\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record)\n .sort()\n .map((key) => `${canonical(key, path)}:${canonical(record[key], `${path}/${key}`)}`)\n .join(',')}}`;\n }\n throw new CapsuleCanonicalizationError(`Unsupported JSON value at ${path}.`);\n}\n\n/** RFC 8785 JCS serialization for already parsed I-JSON-compatible values. */\nexport function canonicalizeCapsuleJson(value: JsonValue): string {\n return canonical(value, '/');\n}\n\nexport function capsuleJcsSha256(value: JsonValue): string {\n return createHash('sha256').update(canonicalizeCapsuleJson(value), 'utf8').digest('hex');\n}\n\n/**\n * Release digests omit only metadata.release_digest, the one self-referential\n * field. Exact fetched-byte SHA/CID verification remains a separate operation.\n */\nexport function oracleCapsuleReleaseProjection(value: JsonValue): JsonValue {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n throw new CapsuleCanonicalizationError('A capsule release must be a JSON object.');\n const root = structuredClone(value) as Record<string, JsonValue>;\n const metadata = root.metadata;\n if (typeof metadata !== 'object' || metadata === null || Array.isArray(metadata))\n throw new CapsuleCanonicalizationError('A capsule release must contain metadata.');\n const projectedMetadata = { ...metadata } as Record<string, JsonValue>;\n delete projectedMetadata.release_digest;\n root.metadata = projectedMetadata;\n return root;\n}\n\nexport function oracleCapsuleReleaseDigest(value: JsonValue): string {\n return capsuleJcsSha256(oracleCapsuleReleaseProjection(value));\n}\n","import { ORACLE_CAPSULE_LIMITS } from '../constants.js';\nimport type { Finding, SourceLocation } from '../types.js';\nimport type {\n JsonValue,\n StrictJsonDocument,\n StrictJsonOptions,\n StrictJsonResult,\n} from './types.js';\n\nclass JsonFailure extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly path: string,\n readonly offset: number,\n ) {\n super(message);\n }\n}\n\nfunction pointerSegment(value: string): string {\n return value.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nfunction decodeInput(input: string | Uint8Array): string {\n if (typeof input === 'string') return input;\n if (input[0] === 0xef && input[1] === 0xbb && input[2] === 0xbf)\n throw new JsonFailure('capsule-encoding', 'UTF-8 byte-order marks are forbidden.', '/', 0);\n try {\n return new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(input);\n } catch {\n throw new JsonFailure('capsule-encoding', 'Input must be valid UTF-8.', '/', 0);\n }\n}\n\nclass StrictJsonParser {\n private offset = 0;\n private nodes = 0;\n private readonly lineStarts = [0];\n readonly locations = new Map<string, SourceLocation>();\n\n constructor(\n private readonly source: string,\n private readonly options: Required<\n Pick<StrictJsonOptions, 'maxDepth' | 'maxNodes' | 'maxScalarLength'>\n >,\n ) {\n for (let index = 0; index < source.length; index += 1) {\n if (source.charCodeAt(index) === 0x0a) this.lineStarts.push(index + 1);\n }\n }\n\n parse(): JsonValue {\n this.skipWhitespace();\n const value = this.parseValue('/', 0);\n this.skipWhitespace();\n if (this.offset !== this.source.length)\n this.fail('capsule-json-syntax', 'Unexpected trailing content.', '/');\n return value;\n }\n\n private location(offset: number): SourceLocation {\n let low = 0;\n let high = this.lineStarts.length;\n while (low + 1 < high) {\n const middle = Math.floor((low + high) / 2);\n if ((this.lineStarts[middle] ?? 0) <= offset) low = middle;\n else high = middle;\n }\n return { line: low + 1, column: offset - (this.lineStarts[low] ?? 0) + 1 };\n }\n\n failureLocation(offset: number): SourceLocation {\n return this.location(offset);\n }\n\n private fail(code: string, message: string, path: string, offset = this.offset): never {\n throw new JsonFailure(code, message, path, offset);\n }\n\n private node(path: string, depth: number): void {\n if (depth > this.options.maxDepth)\n this.fail('capsule-limit', `JSON exceeds maximum depth ${this.options.maxDepth}.`, path);\n this.nodes += 1;\n if (this.nodes > this.options.maxNodes)\n this.fail('capsule-limit', `JSON exceeds maximum node count ${this.options.maxNodes}.`, path);\n this.locations.set(path, this.location(this.offset));\n }\n\n private skipWhitespace(): void {\n while (/[\\t\\n\\r ]/.test(this.source[this.offset] ?? '')) this.offset += 1;\n }\n\n private parseValue(path: string, depth: number): JsonValue {\n this.node(path, depth);\n const character = this.source[this.offset];\n if (character === '{') return this.parseObject(path, depth);\n if (character === '[') return this.parseArray(path, depth);\n if (character === '\"') return this.parseString(path);\n if (character === '-' || (character !== undefined && /[0-9]/.test(character)))\n return this.parseNumber(path);\n if (this.source.startsWith('true', this.offset)) {\n this.offset += 4;\n return true;\n }\n if (this.source.startsWith('false', this.offset)) {\n this.offset += 5;\n return false;\n }\n if (this.source.startsWith('null', this.offset)) {\n this.offset += 4;\n return null;\n }\n return this.fail('capsule-json-syntax', 'Expected a JSON value.', path);\n }\n\n private parseObject(path: string, depth: number): { [key: string]: JsonValue } {\n const result: { [key: string]: JsonValue } = {};\n const seen = new Set<string>();\n this.offset += 1;\n this.skipWhitespace();\n if (this.source[this.offset] === '}') {\n this.offset += 1;\n return result;\n }\n while (true) {\n if (this.source[this.offset] !== '\"')\n this.fail('capsule-json-syntax', 'Object names must be JSON strings.', path);\n const keyOffset = this.offset;\n const key = this.parseString(path);\n const childPath = path === '/' ? `/${pointerSegment(key)}` : `${path}/${pointerSegment(key)}`;\n if (seen.has(key))\n this.fail(\n 'capsule-duplicate-key',\n `Duplicate object name ${JSON.stringify(key)}.`,\n childPath,\n keyOffset,\n );\n seen.add(key);\n this.skipWhitespace();\n if (this.source[this.offset] !== ':')\n this.fail('capsule-json-syntax', 'Expected a colon after the object name.', childPath);\n this.offset += 1;\n this.skipWhitespace();\n result[key] = this.parseValue(childPath, depth + 1);\n this.skipWhitespace();\n const separator = this.source[this.offset];\n if (separator === '}') {\n this.offset += 1;\n return result;\n }\n if (separator !== ',')\n this.fail('capsule-json-syntax', 'Expected a comma or closing brace.', path);\n this.offset += 1;\n this.skipWhitespace();\n }\n }\n\n private parseArray(path: string, depth: number): JsonValue[] {\n const result: JsonValue[] = [];\n this.offset += 1;\n this.skipWhitespace();\n if (this.source[this.offset] === ']') {\n this.offset += 1;\n return result;\n }\n while (true) {\n const childPath = path === '/' ? `/${result.length}` : `${path}/${result.length}`;\n result.push(this.parseValue(childPath, depth + 1));\n this.skipWhitespace();\n const separator = this.source[this.offset];\n if (separator === ']') {\n this.offset += 1;\n return result;\n }\n if (separator !== ',')\n this.fail('capsule-json-syntax', 'Expected a comma or closing bracket.', path);\n this.offset += 1;\n this.skipWhitespace();\n }\n }\n\n private parseString(path: string): string {\n this.offset += 1;\n let value = '';\n while (this.offset < this.source.length) {\n const code = this.source.charCodeAt(this.offset);\n if (code === 0x22) {\n this.offset += 1;\n if (value.length > this.options.maxScalarLength)\n this.fail(\n 'capsule-limit',\n `String exceeds maximum length ${this.options.maxScalarLength}.`,\n path,\n );\n return value;\n }\n if (code < 0x20)\n this.fail('capsule-json-syntax', 'Unescaped control character in string.', path);\n if (code === 0x5c) {\n value += this.parseEscape(path);\n continue;\n }\n if (code >= 0xd800 && code <= 0xdbff) {\n const low = this.source.charCodeAt(this.offset + 1);\n if (!Number.isInteger(low) || low < 0xdc00 || low > 0xdfff)\n this.fail('capsule-unicode', 'Lone high surrogate is not I-JSON compatible.', path);\n value += this.source.slice(this.offset, this.offset + 2);\n this.offset += 2;\n continue;\n }\n if (code >= 0xdc00 && code <= 0xdfff)\n this.fail('capsule-unicode', 'Lone low surrogate is not I-JSON compatible.', path);\n value += this.source[this.offset] ?? '';\n this.offset += 1;\n }\n return this.fail('capsule-json-syntax', 'Unterminated JSON string.', path);\n }\n\n private parseEscape(path: string): string {\n this.offset += 1;\n const escape = this.source[this.offset];\n const simple: Record<string, string> = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n };\n if (escape !== undefined && escape in simple) {\n this.offset += 1;\n return simple[escape] ?? '';\n }\n if (escape !== 'u') return this.fail('capsule-json-syntax', 'Invalid JSON escape.', path);\n const first = this.readUnicodeEscape(path);\n if (first >= 0xd800 && first <= 0xdbff) {\n if (this.source.slice(this.offset, this.offset + 2) !== '\\\\u')\n return this.fail(\n 'capsule-unicode',\n 'Escaped high surrogate must be followed by a low surrogate.',\n path,\n );\n const second = this.readUnicodeEscape(path);\n if (second < 0xdc00 || second > 0xdfff)\n return this.fail(\n 'capsule-unicode',\n 'Escaped high surrogate must be followed by a low surrogate.',\n path,\n );\n return String.fromCharCode(first, second);\n }\n if (first >= 0xdc00 && first <= 0xdfff)\n return this.fail('capsule-unicode', 'Lone escaped low surrogate is forbidden.', path);\n return String.fromCharCode(first);\n }\n\n private readUnicodeEscape(path: string): number {\n const digitsAt =\n this.source[this.offset] === 'u'\n ? this.offset + 1\n : this.source.slice(this.offset, this.offset + 2) === '\\\\u'\n ? this.offset + 2\n : -1;\n if (digitsAt < 0) return this.fail('capsule-json-syntax', 'Invalid Unicode escape.', path);\n const hex = this.source.slice(digitsAt, digitsAt + 4);\n if (!/^[0-9a-fA-F]{4}$/.test(hex))\n return this.fail(\n 'capsule-json-syntax',\n 'Unicode escapes require four hexadecimal digits.',\n path,\n );\n this.offset = digitsAt + 4;\n return Number.parseInt(hex, 16);\n }\n\n private parseNumber(path: string): number {\n const remaining = this.source.slice(this.offset);\n const match = /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/.exec(remaining);\n if (!match) return this.fail('capsule-json-syntax', 'Invalid JSON number.', path);\n const token = match[0];\n const following = remaining[token.length];\n if (following !== undefined && !/[\\t\\n\\r ,\\]}]/.test(following))\n return this.fail('capsule-json-syntax', 'Invalid character after JSON number.', path);\n this.offset += token.length;\n const value = Number(token);\n if (!Number.isFinite(value))\n return this.fail('capsule-number', 'Non-finite numbers are not I-JSON compatible.', path);\n if (Number.isInteger(value) && !Number.isSafeInteger(value))\n return this.fail(\n 'capsule-number',\n 'Integers must be within the interoperable safe-integer range.',\n path,\n );\n return value;\n }\n}\n\nfunction finding(error: JsonFailure, location: SourceLocation): Finding {\n return {\n severity: 'error',\n code: error.code,\n message: error.message,\n path: error.path,\n location,\n };\n}\n\nexport function parseCapsuleJson(\n input: string | Uint8Array,\n options: StrictJsonOptions = {},\n): StrictJsonResult {\n const sourceName = options.sourceName ?? '<memory>';\n let source: string;\n try {\n source = decodeInput(input);\n } catch (error) {\n const failure = error as JsonFailure;\n return { ok: false, findings: [finding(failure, { line: 1, column: 1 })] };\n }\n const maxBytes = options.maxBytes ?? ORACLE_CAPSULE_LIMITS.maxBytes;\n if (Buffer.byteLength(source, 'utf8') > maxBytes) {\n return {\n ok: false,\n findings: [\n {\n severity: 'error',\n code: 'capsule-file-too-large',\n message: `Input exceeds ${maxBytes} bytes.`,\n path: '/',\n location: { line: 1, column: 1 },\n },\n ],\n };\n }\n if (source.charCodeAt(0) === 0xfeff) {\n return {\n ok: false,\n findings: [\n {\n severity: 'error',\n code: 'capsule-encoding',\n message: 'UTF-8 byte-order marks are forbidden.',\n path: '/',\n location: { line: 1, column: 1 },\n },\n ],\n };\n }\n const parser = new StrictJsonParser(source, {\n maxDepth: options.maxDepth ?? ORACLE_CAPSULE_LIMITS.maxDepth,\n maxNodes: options.maxNodes ?? ORACLE_CAPSULE_LIMITS.maxNodes,\n maxScalarLength: options.maxScalarLength ?? ORACLE_CAPSULE_LIMITS.maxScalarLength,\n });\n try {\n const value = parser.parse();\n const document: StrictJsonDocument = {\n value,\n raw: source,\n sourceName,\n locations: parser.locations,\n };\n return { ok: true, document, findings: [] };\n } catch (error) {\n const failure =\n error instanceof JsonFailure\n ? error\n : new JsonFailure('capsule-json-syntax', String(error), '/', 0);\n return { ok: false, findings: [finding(failure, parser.failureLocation(failure.offset))] };\n }\n}\n","import { createHash } from 'node:crypto';\n\nimport type { ErrorObject } from 'ajv';\nimport { CID } from 'multiformats/cid';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\nimport {\n ORACLE_CAPSULE_CONTRACT,\n ORACLE_CAPSULE_EXTERNAL_CHECKS,\n ORACLE_CAPSULE_LIMITS,\n} from '../constants.js';\nimport validators from '../compiled-validators.js';\nimport type { Finding, SourceLocation } from '../types.js';\nimport { oracleCapsuleReleaseDigest } from './canonical.js';\nimport { parseCapsuleJson } from './json.js';\nimport type {\n CapsuleExternalCheck,\n CapsuleValidationOptions,\n CapsuleValidationReport,\n JsonValue,\n StrictJsonDocument,\n} from './types.js';\n\nfunction isRecord(value: unknown): value is Record<string, JsonValue> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction pointerSegment(value: string): string {\n return value.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nfunction location(document: StrictJsonDocument, path: string): SourceLocation {\n let candidate = path.length > 0 ? path : '/';\n while (candidate !== '/') {\n const found = document.locations.get(candidate);\n if (found) return found;\n candidate = candidate.slice(0, candidate.lastIndexOf('/')) || '/';\n }\n return document.locations.get('/') ?? { line: 1, column: 1 };\n}\n\nfunction add(\n findings: Finding[],\n document: StrictJsonDocument,\n code: string,\n message: string,\n path = '/',\n): void {\n findings.push({ severity: 'error', code, message, path, location: location(document, path) });\n}\n\nfunction schemaPath(error: ErrorObject): string {\n const base = error.instancePath || '/';\n if (error.keyword !== 'required') return base;\n const missing = (error.params as { missingProperty?: string }).missingProperty;\n if (!missing) return base;\n return base === '/' || base === ''\n ? `/${pointerSegment(missing)}`\n : `${base}/${pointerSegment(missing)}`;\n}\n\nfunction addSchemaFindings(\n findings: Finding[],\n document: StrictJsonDocument,\n errors: ErrorObject[] | null | undefined,\n label: string,\n): void {\n for (const error of errors ?? []) {\n const path = schemaPath(error);\n add(findings, document, 'capsule-schema', `${label}: ${error.message ?? error.keyword}.`, path);\n }\n}\n\nfunction sha(bytes: Uint8Array): string {\n return createHash('sha256').update(bytes).digest('hex');\n}\n\nfunction bytes(value: string | Uint8Array): Uint8Array {\n return typeof value === 'string' ? Buffer.from(value, 'utf8') : value;\n}\n\nfunction records(value: JsonValue | undefined): Array<Record<string, JsonValue>> {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n\nfunction artifactRecords(value: JsonValue, path = '/'): Array<[Record<string, JsonValue>, string]> {\n const result: Array<[Record<string, JsonValue>, string]> = [];\n if (Array.isArray(value)) {\n value.forEach((child, index) => result.push(...artifactRecords(child, `${path}/${index}`)));\n } else if (isRecord(value)) {\n if (\n typeof value.cid === 'string' &&\n typeof value.sha256 === 'string' &&\n typeof value.uri === 'string'\n ) {\n result.push([value, path]);\n }\n for (const [key, child] of Object.entries(value)) {\n result.push(...artifactRecords(child, `${path === '/' ? '' : path}/${pointerSegment(key)}`));\n }\n }\n return result;\n}\n\nfunction validateArtifactIdentity(\n artifact: Record<string, JsonValue>,\n path: string,\n document: StrictJsonDocument,\n findings: Finding[],\n): void {\n const declaredCid = artifact.cid;\n const declaredSha = artifact.sha256;\n if (typeof declaredCid !== 'string' || typeof declaredSha !== 'string') return;\n try {\n const cid = CID.parse(declaredCid);\n if (cid.version !== 1 || cid.code !== 0x55 || cid.multihash.code !== sha256.code) {\n add(\n findings,\n document,\n 'capsule-cid',\n 'Only CIDv1 raw sha2-256 content addresses are supported.',\n `${path}/cid`,\n );\n return;\n }\n if (!Buffer.from(cid.multihash.digest).equals(Buffer.from(declaredSha, 'hex'))) {\n add(\n findings,\n document,\n 'capsule-integrity',\n 'CID multihash and declared SHA-256 identify different bytes.',\n path,\n );\n }\n } catch {\n add(findings, document, 'capsule-cid', 'CID is not a valid CIDv1 value.', `${path}/cid`);\n }\n const uri = artifact.uri;\n if (typeof uri === 'string') {\n try {\n const parsed = new URL(uri);\n if (parsed.username || parsed.password || parsed.search) {\n add(\n findings,\n document,\n 'capsule-uri-policy',\n 'Credential-bearing and query-bearing artifact URIs are forbidden.',\n `${path}/uri`,\n );\n }\n } catch {\n add(findings, document, 'capsule-uri-policy', 'Artifact URI is invalid.', `${path}/uri`);\n }\n }\n}\n\nfunction validateExpectedIdentity(\n input: string | Uint8Array,\n expected: NonNullable<CapsuleValidationOptions['expectedIdentity']>,\n document: StrictJsonDocument,\n findings: Finding[],\n): void {\n const content = bytes(input);\n const actualSha = sha(content);\n if (\n actualSha !== expected.sha256.toLowerCase() ||\n (expected.bytes !== undefined && expected.bytes !== content.byteLength)\n ) {\n add(\n findings,\n document,\n 'capsule-integrity',\n 'Manifest exact bytes do not match the expected SHA-256 or byte length.',\n '/',\n );\n }\n try {\n const cid = CID.parse(expected.cid);\n if (\n cid.version !== 1 ||\n cid.code !== 0x55 ||\n cid.multihash.code !== sha256.code ||\n !Buffer.from(cid.multihash.digest).equals(Buffer.from(actualSha, 'hex'))\n ) {\n add(\n findings,\n document,\n 'capsule-integrity',\n 'Manifest exact bytes do not match the expected CIDv1 raw sha2-256 address.',\n '/',\n );\n }\n } catch {\n add(findings, document, 'capsule-cid', 'Expected manifest CID is invalid.', '/');\n }\n}\n\nfunction uniqueIds(\n entries: Array<Record<string, JsonValue>>,\n path: string,\n document: StrictJsonDocument,\n findings: Finding[],\n): Set<string> {\n const ids = new Set<string>();\n entries.forEach((entry, index) => {\n if (typeof entry.id !== 'string') return;\n if (ids.has(entry.id))\n add(\n findings,\n document,\n 'capsule-duplicate-id',\n `Duplicate id ${JSON.stringify(entry.id)}.`,\n `${path}/${index}/id`,\n );\n ids.add(entry.id);\n });\n return ids;\n}\n\nfunction validateComponentGraph(\n root: Record<string, JsonValue>,\n document: StrictJsonDocument,\n findings: Finding[],\n): void {\n const components = records(root.components);\n const ids = uniqueIds(components, '/components', document, findings);\n const graph = new Map<string, string[]>();\n components.forEach((component, index) => {\n if (typeof component.id !== 'string') return;\n const dependencies = Array.isArray(component.dependencies)\n ? component.dependencies.filter((item): item is string => typeof item === 'string')\n : [];\n graph.set(component.id, dependencies);\n for (const dependency of dependencies) {\n if (!ids.has(dependency))\n add(\n findings,\n document,\n 'capsule-reference',\n `Unknown component dependency ${JSON.stringify(dependency)}.`,\n `/components/${index}/dependencies`,\n );\n if (dependency === component.id)\n add(\n findings,\n document,\n 'capsule-dependency-cycle',\n 'A component cannot depend on itself.',\n `/components/${index}/dependencies`,\n );\n }\n });\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const visit = (id: string): boolean => {\n if (visiting.has(id)) return true;\n if (visited.has(id)) return false;\n visiting.add(id);\n for (const dependency of graph.get(id) ?? []) {\n if (graph.has(dependency) && visit(dependency)) return true;\n }\n visiting.delete(id);\n visited.add(id);\n return false;\n };\n for (const id of graph.keys()) {\n if (visit(id)) {\n add(\n findings,\n document,\n 'capsule-dependency-cycle',\n 'Component dependency graph contains a cycle.',\n '/components',\n );\n break;\n }\n }\n\n const toolIds = uniqueIds(records(root.tools), '/tools', document, findings);\n const capabilityIds = uniqueIds(\n records(root.requestedCapabilities),\n '/requestedCapabilities',\n document,\n findings,\n );\n void capabilityIds;\n records(root.requestedCapabilities).forEach((request, index) => {\n if (typeof request.tool === 'string' && !toolIds.has(request.tool))\n add(\n findings,\n document,\n 'capsule-reference',\n `Requested capability names unknown tool ${JSON.stringify(request.tool)}.`,\n `/requestedCapabilities/${index}/tool`,\n );\n });\n}\n\nfunction externalChecks(): CapsuleExternalCheck[] {\n const definitions: Record<string, [CapsuleExternalCheck['category'], string]> = {\n 'oracle-identity-current': [\n 'identity',\n 'Resolve the current Oracle DID/IID document and revocation state.',\n ],\n 'subject-domain-current': [\n 'identity',\n 'Resolve each subject domain and its current canonical resources.',\n ],\n 'capability-current-and-unrevoked': [\n 'authorization',\n 'Verify live grants, audience, scope, expiry and revocation before each call.',\n ],\n 'trusted-time-available': [\n 'time',\n 'Evaluate time-bound policy against an approved trusted clock.',\n ],\n 'private-resource-access-authorized': [\n 'privacy',\n 'Verify consent, disclosure and decryption rights before reading private evidence.',\n ],\n 'human-review-authorized': [\n 'review',\n 'Verify the named independent reviewer and exact approved output digest.',\n ],\n 'runtime-distribution-trusted': [\n 'distribution',\n 'Verify the installed kernel and adapters against an external trust anchor.',\n ],\n 'receipt-signer-current-and-unrevoked': [\n 'signer',\n 'Verify the external receipt signer key and current revocation status.',\n ],\n };\n return ORACLE_CAPSULE_EXTERNAL_CHECKS.map((code) => ({\n code,\n category: definitions[code]?.[0] ?? 'authorization',\n reason: definitions[code]?.[1] ?? 'Runtime verification is required.',\n }));\n}\n\nfunction validateSourceLock(\n manifest: Record<string, JsonValue>,\n manifestDocument: StrictJsonDocument,\n sourceLock: string | Uint8Array,\n lockedFiles: Readonly<Record<string, string | Uint8Array>> | undefined,\n findings: Finding[],\n): void {\n const parsed = parseCapsuleJson(sourceLock, {\n sourceName: `${manifestDocument.sourceName}#source-lock`,\n });\n if (!parsed.document) {\n findings.push(...parsed.findings);\n return;\n }\n const lockDocument = parsed.document;\n const valid = validators.sourceLock(lockDocument.value);\n if (!valid) {\n addSchemaFindings(findings, lockDocument, validators.sourceLock.errors, 'Source lock schema');\n return;\n }\n if (!isRecord(lockDocument.value)) return;\n const lock = lockDocument.value;\n const componentId = lock.component;\n const component = records(manifest.components).find((entry) => entry.id === componentId);\n if (!component || !isRecord(component.artifact)) {\n add(\n findings,\n lockDocument,\n 'capsule-lock',\n 'Source lock component does not resolve in the manifest.',\n '/component',\n );\n return;\n }\n const lockBytes = bytes(sourceLock);\n const sourceLockReference = component.artifact.source_lock;\n if (isRecord(sourceLockReference)) {\n if (\n sourceLockReference.sha256 !== sha(lockBytes) ||\n sourceLockReference.bytes !== lockBytes.byteLength\n ) {\n add(\n findings,\n manifestDocument,\n 'capsule-integrity',\n 'Source lock exact bytes do not match the manifest reference.',\n '/components',\n );\n }\n }\n const lockArtifact = lock.artifact;\n if (\n isRecord(lockArtifact) &&\n (lockArtifact.cid !== component.artifact.cid ||\n lockArtifact.sha256 !== component.artifact.sha256 ||\n lockArtifact.bytes !== component.artifact.bytes)\n ) {\n add(\n findings,\n lockDocument,\n 'capsule-lock',\n 'Source lock artifact identity differs from its manifest component.',\n '/artifact',\n );\n }\n const files = records(lock.files);\n const paths = new Set<string>();\n const portablePaths = new Set<string>();\n let totalBytes = 0;\n files.forEach((file, index) => {\n if (\n typeof file.path !== 'string' ||\n typeof file.bytes !== 'number' ||\n typeof file.sha256 !== 'string'\n )\n return;\n if (paths.has(file.path))\n add(\n findings,\n lockDocument,\n 'capsule-duplicate-path',\n `Duplicate locked path ${JSON.stringify(file.path)}.`,\n `/files/${index}/path`,\n );\n const portablePath = file.path.toLowerCase();\n if (portablePaths.has(portablePath) && !paths.has(file.path))\n add(\n findings,\n lockDocument,\n 'capsule-path-collision',\n `Locked path ${JSON.stringify(file.path)} collides on case-insensitive hosts.`,\n `/files/${index}/path`,\n );\n paths.add(file.path);\n portablePaths.add(portablePath);\n totalBytes += file.bytes;\n if (totalBytes > ORACLE_CAPSULE_LIMITS.maxLockedBytes)\n add(\n findings,\n lockDocument,\n 'capsule-limit',\n `Locked files exceed ${ORACLE_CAPSULE_LIMITS.maxLockedBytes} bytes.`,\n '/files',\n );\n if (lockedFiles) {\n const content = lockedFiles[file.path];\n if (content === undefined) {\n add(\n findings,\n lockDocument,\n 'capsule-lock',\n `Locked file ${JSON.stringify(file.path)} is missing.`,\n `/files/${index}/path`,\n );\n } else {\n const contentBytes = bytes(content);\n if (contentBytes.byteLength !== file.bytes || sha(contentBytes) !== file.sha256)\n add(\n findings,\n lockDocument,\n 'capsule-integrity',\n `Locked file ${JSON.stringify(file.path)} failed byte-length or SHA-256 verification.`,\n `/files/${index}`,\n );\n }\n }\n });\n if (lockedFiles) {\n for (const path of Object.keys(lockedFiles)) {\n if (!paths.has(path))\n add(\n findings,\n lockDocument,\n 'capsule-lock',\n `Unlocked file ${JSON.stringify(path)} is forbidden.`,\n '/files',\n );\n }\n }\n}\n\nexport function validateOracleCapsule(\n input: string | Uint8Array,\n options: CapsuleValidationOptions = {},\n): CapsuleValidationReport {\n const parsed = parseCapsuleJson(input, options);\n const checks = externalChecks();\n if (!parsed.document) {\n return {\n tool: '@ixo/domain.md',\n contract: ORACLE_CAPSULE_CONTRACT,\n sourceName: options.sourceName ?? '<memory>',\n status: 'fail',\n ok: false,\n findings: parsed.findings,\n externalChecksRequired: checks,\n };\n }\n const findings = [...parsed.findings];\n if (options.expectedIdentity)\n validateExpectedIdentity(input, options.expectedIdentity, parsed.document, findings);\n const validator = validators.manifest;\n if (!validator(parsed.document.value))\n addSchemaFindings(findings, parsed.document, validator.errors, 'Manifest schema');\n if (isRecord(parsed.document.value)) {\n for (const [artifact, path] of artifactRecords(parsed.document.value))\n validateArtifactIdentity(artifact, path, parsed.document, findings);\n validateComponentGraph(parsed.document.value, parsed.document, findings);\n const metadata = parsed.document.value.metadata;\n if (isRecord(metadata) && typeof metadata.release_digest === 'string') {\n try {\n const actual = oracleCapsuleReleaseDigest(parsed.document.value);\n if (metadata.release_digest !== actual)\n add(\n findings,\n parsed.document,\n 'capsule-release-digest',\n `Release digest mismatch; expected ${actual}.`,\n '/metadata/release_digest',\n );\n } catch (error) {\n add(\n findings,\n parsed.document,\n 'capsule-canonicalization',\n error instanceof Error ? error.message : String(error),\n '/',\n );\n }\n }\n if (options.sourceLock)\n validateSourceLock(\n parsed.document.value,\n parsed.document,\n options.sourceLock,\n options.lockedFiles,\n findings,\n );\n }\n const ok = !findings.some((finding) => finding.severity === 'error');\n return {\n tool: '@ixo/domain.md',\n contract: ORACLE_CAPSULE_CONTRACT,\n sourceName: parsed.document.sourceName,\n status: ok ? 'static-pass' : 'fail',\n ok,\n findings,\n externalChecksRequired: checks,\n manifest: parsed.document.value,\n };\n}\n"],"mappings":"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","names":["location","createHash","pointerSegment","bytes","createHash","finding"]}