@peac/adapter-runtime-governance
Advanced tools
| /** | ||
| * The PEAC `kid` rule: a non-empty, well-formed Unicode string whose UTF-8 serialization is at | ||
| * most MAX_KID_UTF8_BYTES bytes. RFC 7515 leaves the structure of `kid` unspecified; the bound | ||
| * and well-formedness requirements are PEAC application-level constraints. | ||
| * | ||
| * Adapter-private. The authoritative implementation lives in `@peac/crypto` (`src/kid.ts`) and is | ||
| * not part of its public surface, so the rule is restated here and a behavioural parity test holds | ||
| * the two implementations identical. The bound is measured in UTF-8 bytes rather than UTF-16 code | ||
| * units: 256 UTF-16 code units consisting of supplementary-plane characters serialize to 512 UTF-8 | ||
| * bytes. A serialized-byte bound is portable across implementations. | ||
| */ | ||
| /** Maximum `kid` length, measured as UTF-8 bytes of the string's serialization. */ | ||
| export declare const MAX_KID_UTF8_BYTES = 256; | ||
| /** True when every surrogate in `s` belongs to a well-formed pair. */ | ||
| export declare function isWellFormedUnicode(s: string): boolean; | ||
| /** | ||
| * UTF-8 byte length of a well-formed string. Throws on malformed UTF-16 so callers cannot silently | ||
| * replace an unpaired surrogate with U+FFFD during UTF-8 encoding and thereby change the supplied | ||
| * identifier. | ||
| */ | ||
| export declare function utf8ByteLength(s: string): number; | ||
| /** The complete PEAC `kid` rule. */ | ||
| export declare function isValidKid(kid: unknown): kid is string; | ||
| //# sourceMappingURL=kid.d.ts.map |
| {"version":3,"file":"kid.d.ts","sourceRoot":"","sources":["../../src/internal/kid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAYtD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAItD"} |
+44
-2
@@ -293,2 +293,42 @@ 'use strict'; | ||
| // src/internal/kid.ts | ||
| var MAX_KID_UTF8_BYTES = 256; | ||
| function isWellFormedUnicode(s) { | ||
| for (let i = 0; i < s.length; i++) { | ||
| const c = s.charCodeAt(i); | ||
| if (c >= 55296 && c <= 56319) { | ||
| const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0; | ||
| if (next < 56320 || next > 57343) return false; | ||
| i++; | ||
| } else if (c >= 56320 && c <= 57343) { | ||
| return false; | ||
| } | ||
| } | ||
| return true; | ||
| } | ||
| function utf8ByteLength(s) { | ||
| let n = 0; | ||
| for (let i = 0; i < s.length; i++) { | ||
| const c = s.charCodeAt(i); | ||
| if (c < 128) n += 1; | ||
| else if (c < 2048) n += 2; | ||
| else if (c >= 55296 && c <= 56319) { | ||
| const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0; | ||
| if (next < 56320 || next > 57343) { | ||
| throw new TypeError("utf8ByteLength: unpaired high surrogate"); | ||
| } | ||
| n += 4; | ||
| i++; | ||
| } else if (c >= 56320 && c <= 57343) { | ||
| throw new TypeError("utf8ByteLength: unpaired low surrogate"); | ||
| } else n += 3; | ||
| } | ||
| return n; | ||
| } | ||
| function isValidKid(kid) { | ||
| if (typeof kid !== "string" || kid.length === 0) return false; | ||
| if (!isWellFormedUnicode(kid)) return false; | ||
| return utf8ByteLength(kid) <= MAX_KID_UTF8_BYTES; | ||
| } | ||
| // src/builders.ts | ||
@@ -389,4 +429,6 @@ function stripUndefined(obj) { | ||
| } | ||
| if (typeof options.kid !== "string" || options.kid.length === 0 || options.kid.length > 256) { | ||
| throw new Error("kid must be a non-empty string (max 256 chars)"); | ||
| if (!isValidKid(options.kid)) { | ||
| throw new Error( | ||
| "kid must be a non-empty, well-formed Unicode string of at most 256 UTF-8 bytes" | ||
| ); | ||
| } | ||
@@ -393,0 +435,0 @@ if (typeof options.issuer !== "string" || options.issuer.length === 0) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/constants.ts","../src/types.ts","../src/families.ts","../src/normalize.ts","../src/builders.ts","../src/issue.ts","../src/session-summary.ts","../src/mappers/agt.ts"],"names":["issue","decode"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @peac/adapter-runtime-governance constants\n *\n * Vendor-neutral type URIs and extension namespace for runtime\n * governance record families. Observation-specific suffixes prevent\n * semantic bleed into authoritative claims.\n */\n\n/** Extension namespace for runtime governance record metadata. */\nexport const EXTENSION_NAMESPACE = 'org.peacprotocol/runtime-governance' as const;\n\n/** Reverse-DNS type prefix for all runtime governance record families. */\nexport const TYPE_PREFIX = 'org.peacprotocol/runtime-governance-' as const;\n\n/**\n * Canonical type URIs for the 6 runtime governance record families.\n * Each suffix is observation-specific (e.g., \"policy-decision\" not \"policy\").\n */\nexport const EVENT_TYPES = {\n POLICY_DECISION: `${TYPE_PREFIX}policy-decision`,\n AUDIT_ENTRY: `${TYPE_PREFIX}audit-entry`,\n AUTHORITY_SCOPE: `${TYPE_PREFIX}authority-scope`,\n LIFECYCLE_EVENT: `${TYPE_PREFIX}lifecycle-event`,\n TRUST_OBSERVATION: `${TYPE_PREFIX}trust-observation`,\n COMPLIANCE_OBSERVATION: `${TYPE_PREFIX}compliance-observation`,\n} as const;\n\nexport type EventType = (typeof EVENT_TYPES)[keyof typeof EVENT_TYPES];\n\n/** Maximum field lengths for validation. */\nexport const FIELD_LIMITS = {\n /** Identifiers: provider, agent_id, session_id, entry_id, etc. */\n maxIdentifier: 256,\n /** General string fields: action, matched_rule, policy_name, etc. */\n maxString: 1024,\n /** Digest strings: previous_hash, entry_hash, etc. */\n maxDigest: 512,\n /** URI fields: source_artifact_ref, etc. */\n maxUri: 2048,\n /** Timestamp fields: source_timestamp, etc. */\n maxTimestamp: 64,\n /** CloudEvents type URIs. */\n maxCloudEventType: 256,\n /** Array fields: effective_scope, matched_invariants. */\n maxArrayLength: 64,\n /** Array entry string length. */\n maxArrayEntry: 256,\n /** Framework token length. */\n maxFramework: 128,\n} as const;\n","/**\n * @peac/adapter-runtime-governance types\n *\n * Discriminated union payload model with per-family typing.\n * No weak Record<string, unknown> blobs.\n */\n\n/**\n * Runtime governance record families.\n * String-literal union (not enum) for lighter output and tree-shaking.\n */\nexport const RUNTIME_GOVERNANCE_FAMILIES = [\n 'policy_decision',\n 'audit_entry',\n 'authority_scope',\n 'lifecycle_event',\n 'trust_observation',\n 'compliance_observation',\n] as const;\n\nexport type RuntimeGovernanceFamily = (typeof RUNTIME_GOVERNANCE_FAMILIES)[number];\n\n/**\n * Preserved upstream artifact context.\n * All optional, all observational. Bounded fields, no arbitrary passthrough.\n */\nexport interface PreservedUpstreamArtifact {\n /** Upstream system identifier (max 256 chars). */\n source_system?: string;\n /** Upstream event type identifier (max 256 chars). */\n source_event_type?: string;\n /** Upstream event identifier for deduplication (max 256 chars). */\n source_event_id?: string;\n /** Upstream event timestamp (RFC 3339, max 64 chars). */\n source_timestamp?: string;\n /** Hash of upstream artifact (max 512 chars). */\n source_artifact_hash?: string;\n /** URI or reference to upstream artifact (max 2048 chars). */\n source_artifact_ref?: string;\n /** CloudEvents type URI for cross-system correlation (max 256 chars). */\n source_cloud_event_type?: string;\n}\n\n/** Policy decision payload. */\nexport interface PolicyDecisionPayload {\n family: 'policy_decision';\n action: string;\n matched_rule?: string;\n policy_name?: string;\n reason?: string;\n evaluation_ms?: number;\n}\n\n/** Audit entry payload. */\nexport interface AuditEntryPayload {\n family: 'audit_entry';\n entry_id?: string;\n event_type?: string;\n outcome?: string;\n previous_hash?: string;\n entry_hash?: string;\n trace_id?: string;\n}\n\n/** Authority scope payload. */\nexport interface AuthorityScopePayload {\n family: 'authority_scope';\n decision?: string;\n effective_scope?: string[];\n trust_tier?: string;\n matched_invariants?: string[];\n}\n\n/** Lifecycle event payload. */\nexport interface LifecycleEventPayload {\n family: 'lifecycle_event';\n lifecycle_event_type?: string;\n previous_state?: string;\n new_state?: string;\n actor?: string;\n}\n\n/** Trust observation payload. */\nexport interface TrustObservationPayload {\n family: 'trust_observation';\n peer_id?: string;\n action?: string;\n success?: boolean;\n trust_delta?: number;\n trust_score?: number;\n}\n\n/** Compliance observation payload. */\nexport interface ComplianceObservationPayload {\n family: 'compliance_observation';\n framework?: string;\n compliance_score?: number;\n violation_count?: number;\n evidence_item_count?: number;\n}\n\n/** Discriminated union of all family payloads. */\nexport type RuntimeGovernancePayload =\n | PolicyDecisionPayload\n | AuditEntryPayload\n | AuthorityScopePayload\n | LifecycleEventPayload\n | TrustObservationPayload\n | ComplianceObservationPayload;\n\n/**\n * Normalized runtime governance event.\n * Generic input to issueRuntimeGovernanceRecord().\n */\nexport interface RuntimeGovernanceEvent {\n /** Specific event name (e.g., 'policy.evaluated'). */\n event_name: string;\n /** Typed, validated payload (discriminated by family). */\n payload: RuntimeGovernancePayload;\n /** Optional preserved upstream artifact context. */\n upstream?: PreservedUpstreamArtifact;\n}\n\n/** Options for issuing a runtime governance record. */\nexport interface IssueOptions {\n /** Ed25519 private key (32 bytes). Caller-provided; never stored. */\n privateKey: Uint8Array;\n /** Key ID (max 256 chars). */\n kid: string;\n /** Canonical issuer URL (HTTPS or DID). */\n issuer: string;\n /** Session identifier for event correlation. */\n sessionId: string;\n /** Agent identifier. */\n agentId: string;\n /** Provider name. Caller-supplied; never hardcoded. */\n provider: string;\n}\n\n/** Result of issuing a runtime governance record. */\nexport interface IssueResult {\n /** Compact JWS (signed Interaction Record). */\n jws: string;\n /** PEAC event type URI used. */\n type: string;\n /** Record family. */\n family: RuntimeGovernanceFamily;\n}\n\n/** Session summary aggregated from decoded receipts. */\nexport interface SessionSummary {\n /** Session identifier. */\n sessionId: string;\n /** Total receipts in the session. */\n receipts: number;\n /** Distinct families represented (sorted alphabetically). */\n families: RuntimeGovernanceFamily[];\n /** Count of receipts with unrecognized type URIs. */\n unknownTypeCount: number;\n /** Issuer (from the first receipt, or empty if no receipts). */\n issuer: string;\n}\n","/**\n * Family registry.\n *\n * Maps each RuntimeGovernanceFamily to its canonical type URI\n * and Interaction Record kind. All families produce `evidence` kind.\n */\n\nimport { EVENT_TYPES, type EventType } from './constants.js';\nimport type { RuntimeGovernanceFamily } from './types.js';\n\nexport interface FamilyEntry {\n /** Canonical type URI for this family. */\n type: EventType;\n /** Interaction Record kind. Always 'evidence' for runtime governance. */\n kind: 'evidence';\n}\n\nexport const FAMILY_REGISTRY: Record<RuntimeGovernanceFamily, FamilyEntry> = {\n policy_decision: { type: EVENT_TYPES.POLICY_DECISION, kind: 'evidence' },\n audit_entry: { type: EVENT_TYPES.AUDIT_ENTRY, kind: 'evidence' },\n authority_scope: { type: EVENT_TYPES.AUTHORITY_SCOPE, kind: 'evidence' },\n lifecycle_event: { type: EVENT_TYPES.LIFECYCLE_EVENT, kind: 'evidence' },\n trust_observation: { type: EVENT_TYPES.TRUST_OBSERVATION, kind: 'evidence' },\n compliance_observation: { type: EVENT_TYPES.COMPLIANCE_OBSERVATION, kind: 'evidence' },\n};\n","/**\n * @peac/adapter-runtime-governance normalization and validation\n *\n * Fail-closed input validation for runtime governance payloads.\n * Rejects malformed input with descriptive errors.\n *\n * These are adapter-level shape prechecks: string presence, max lengths,\n * numeric bounds, RFC 3339 format, digest grammar (algorithm:hex), and\n * URI scheme presence. Protocol-layer validation (@peac/protocol issue()\n * and @peac/schema Wire02ClaimsSchema) remains authoritative for issuer\n * canonicality, JOSE hardening, and wire-format compliance. Adapter\n * validators catch obviously malformed input before it reaches the\n * protocol layer.\n *\n * PEAC validates the structure of carried values, not upstream truth.\n * Trust scores are structurally validated (finite, 0-1000 integer)\n * but never derived, recomputed, ranked, or authoritatively assessed.\n */\n\nimport { FIELD_LIMITS } from './constants.js';\nimport { RUNTIME_GOVERNANCE_FAMILIES } from './types.js';\nimport type {\n RuntimeGovernanceFamily,\n RuntimeGovernancePayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceEvent,\n} from './types.js';\n\nexport class NormalizationError extends Error {\n constructor(\n message: string,\n public readonly field: string\n ) {\n super(message);\n this.name = 'NormalizationError';\n }\n}\n\nfunction requireString(value: unknown, field: string, maxLen: number): string {\n if (typeof value !== 'string') {\n throw new NormalizationError(`${field} must be a string`, field);\n }\n if (value.length === 0) {\n throw new NormalizationError(`${field} must not be empty`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value;\n}\n\nfunction optionalString(value: unknown, field: string, maxLen: number): string | undefined {\n if (value === undefined || value === null) return undefined;\n return requireString(value, field, maxLen);\n}\n\nfunction optionalFiniteNumber(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new NormalizationError(`${field} must be a finite number`, field);\n }\n if (min !== undefined && value < min) {\n throw new NormalizationError(`${field} must be >= ${min}`, field);\n }\n if (max !== undefined && value > max) {\n throw new NormalizationError(`${field} must be <= ${max}`, field);\n }\n return value;\n}\n\nfunction optionalInteger(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n const n = optionalFiniteNumber(value, field, min, max);\n if (n !== undefined && !Number.isInteger(n)) {\n throw new NormalizationError(`${field} must be an integer`, field);\n }\n return n;\n}\n\nfunction optionalBoolean(value: unknown, field: string): boolean | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'boolean') {\n throw new NormalizationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nconst RFC3339_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction optionalRfc3339(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !RFC3339_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be RFC 3339 format`, field);\n }\n return s;\n}\n\nconst DIGEST_PATTERN = /^[a-zA-Z0-9_-]+:[a-fA-F0-9]+$/;\n\nfunction optionalDigest(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !DIGEST_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must match digest pattern (algorithm:hex)`, field);\n }\n return s;\n}\n\nconst URI_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nfunction optionalUri(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !URI_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be a valid URI`, field);\n }\n return s;\n}\n\nfunction optionalStringArray(\n value: unknown,\n field: string,\n maxLen: number,\n maxEntryLen: number\n): string[] | undefined {\n if (value === undefined || value === null) return undefined;\n if (!Array.isArray(value)) {\n throw new NormalizationError(`${field} must be an array`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value.map((entry, i) => requireString(entry, `${field}[${i}]`, maxEntryLen));\n}\n\nfunction normalizePolicyDecision(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'policy_decision',\n action: requireString(input.action, 'action', FIELD_LIMITS.maxString),\n matched_rule: optionalString(input.matched_rule, 'matched_rule', FIELD_LIMITS.maxString),\n policy_name: optionalString(input.policy_name, 'policy_name', FIELD_LIMITS.maxString),\n reason: optionalString(input.reason, 'reason', FIELD_LIMITS.maxString),\n evaluation_ms: optionalFiniteNumber(input.evaluation_ms, 'evaluation_ms', 0),\n };\n}\n\nfunction normalizeAuditEntry(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'audit_entry',\n entry_id: optionalString(input.entry_id, 'entry_id', FIELD_LIMITS.maxIdentifier),\n event_type: optionalString(input.event_type, 'event_type', FIELD_LIMITS.maxString),\n outcome: optionalString(input.outcome, 'outcome', FIELD_LIMITS.maxString),\n previous_hash: optionalDigest(input.previous_hash, 'previous_hash', FIELD_LIMITS.maxDigest),\n entry_hash: optionalDigest(input.entry_hash, 'entry_hash', FIELD_LIMITS.maxDigest),\n trace_id: optionalString(input.trace_id, 'trace_id', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeAuthorityScope(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'authority_scope',\n decision: optionalString(input.decision, 'decision', FIELD_LIMITS.maxString),\n effective_scope: optionalStringArray(\n input.effective_scope,\n 'effective_scope',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n trust_tier: optionalString(input.trust_tier, 'trust_tier', FIELD_LIMITS.maxString),\n matched_invariants: optionalStringArray(\n input.matched_invariants,\n 'matched_invariants',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n };\n}\n\nfunction normalizeLifecycleEvent(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'lifecycle_event',\n lifecycle_event_type: optionalString(\n input.lifecycle_event_type,\n 'lifecycle_event_type',\n FIELD_LIMITS.maxString\n ),\n previous_state: optionalString(input.previous_state, 'previous_state', FIELD_LIMITS.maxString),\n new_state: optionalString(input.new_state, 'new_state', FIELD_LIMITS.maxString),\n actor: optionalString(input.actor, 'actor', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeTrustObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'trust_observation',\n peer_id: optionalString(input.peer_id, 'peer_id', FIELD_LIMITS.maxIdentifier),\n action: optionalString(input.action, 'action', FIELD_LIMITS.maxString),\n success: optionalBoolean(input.success, 'success'),\n trust_delta: optionalInteger(input.trust_delta, 'trust_delta', -1000, 1000),\n trust_score: optionalInteger(input.trust_score, 'trust_score', 0, 1000),\n };\n}\n\nfunction normalizeComplianceObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'compliance_observation',\n framework: optionalString(input.framework, 'framework', FIELD_LIMITS.maxFramework),\n compliance_score: optionalFiniteNumber(input.compliance_score, 'compliance_score', 0, 100),\n violation_count: optionalInteger(input.violation_count, 'violation_count', 0),\n evidence_item_count: optionalInteger(input.evidence_item_count, 'evidence_item_count', 0),\n };\n}\n\nconst FAMILY_NORMALIZERS: Record<\n RuntimeGovernanceFamily,\n (input: Record<string, unknown>) => RuntimeGovernancePayload\n> = {\n policy_decision: normalizePolicyDecision,\n audit_entry: normalizeAuditEntry,\n authority_scope: normalizeAuthorityScope,\n lifecycle_event: normalizeLifecycleEvent,\n trust_observation: normalizeTrustObservation,\n compliance_observation: normalizeComplianceObservation,\n};\n\nfunction normalizeUpstream(input: unknown): PreservedUpstreamArtifact | undefined {\n if (input === undefined || input === null) return undefined;\n if (typeof input !== 'object' || Array.isArray(input)) {\n throw new NormalizationError('upstream must be a plain object', 'upstream');\n }\n const obj = input as Record<string, unknown>;\n return {\n source_system: optionalString(\n obj.source_system,\n 'upstream.source_system',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_type: optionalString(\n obj.source_event_type,\n 'upstream.source_event_type',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_id: optionalString(\n obj.source_event_id,\n 'upstream.source_event_id',\n FIELD_LIMITS.maxIdentifier\n ),\n source_timestamp: optionalRfc3339(\n obj.source_timestamp,\n 'upstream.source_timestamp',\n FIELD_LIMITS.maxTimestamp\n ),\n source_artifact_hash: optionalDigest(\n obj.source_artifact_hash,\n 'upstream.source_artifact_hash',\n FIELD_LIMITS.maxDigest\n ),\n source_artifact_ref: optionalUri(\n obj.source_artifact_ref,\n 'upstream.source_artifact_ref',\n FIELD_LIMITS.maxUri\n ),\n source_cloud_event_type: optionalString(\n obj.source_cloud_event_type,\n 'upstream.source_cloud_event_type',\n FIELD_LIMITS.maxCloudEventType\n ),\n };\n}\n\n/**\n * Normalize and validate a raw runtime governance event input.\n * Fail-closed: rejects malformed input with descriptive errors.\n */\nexport function normalizeRuntimeGovernanceEvent(input: unknown): RuntimeGovernanceEvent {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) {\n throw new NormalizationError('input must be a plain object', 'input');\n }\n const obj = input as Record<string, unknown>;\n\n const eventName = requireString(obj.event_name, 'event_name', FIELD_LIMITS.maxString);\n\n if (typeof obj.payload !== 'object' || obj.payload === null || Array.isArray(obj.payload)) {\n throw new NormalizationError('payload must be a plain object', 'payload');\n }\n const payloadObj = obj.payload as Record<string, unknown>;\n\n const family = payloadObj.family;\n if (\n typeof family !== 'string' ||\n !(RUNTIME_GOVERNANCE_FAMILIES as readonly string[]).includes(family)\n ) {\n throw new NormalizationError(\n `payload.family must be one of: ${RUNTIME_GOVERNANCE_FAMILIES.join(', ')}`,\n 'payload.family'\n );\n }\n\n const normalizer = FAMILY_NORMALIZERS[family as RuntimeGovernanceFamily];\n const payload = normalizer(payloadObj);\n\n return {\n event_name: eventName,\n payload,\n upstream: normalizeUpstream(obj.upstream),\n };\n}\n","/**\n * @peac/adapter-runtime-governance extension builders\n *\n * Explicit per-family extension data builders. Each builder selects\n * exactly which fields appear in the extension output. Unknown upstream\n * fields never become top-level extension keys.\n */\n\nimport type {\n RuntimeGovernancePayload,\n PolicyDecisionPayload,\n AuditEntryPayload,\n AuthorityScopePayload,\n LifecycleEventPayload,\n TrustObservationPayload,\n ComplianceObservationPayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceFamily,\n} from './types.js';\n\ninterface CommonFields {\n session_id: string;\n event: string;\n agent_id: string;\n provider: string;\n}\n\nfunction stripUndefined(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const nested = stripUndefined(value as Record<string, unknown>);\n if (Object.keys(nested).length > 0) {\n result[key] = nested;\n }\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nfunction buildPolicyDecisionExtension(\n payload: PolicyDecisionPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n action: payload.action,\n matched_rule: payload.matched_rule,\n policy_name: payload.policy_name,\n reason: payload.reason,\n evaluation_ms: payload.evaluation_ms,\n upstream,\n });\n}\n\nfunction buildAuditEntryExtension(\n payload: AuditEntryPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n entry_id: payload.entry_id,\n event_type: payload.event_type,\n outcome: payload.outcome,\n previous_hash: payload.previous_hash,\n entry_hash: payload.entry_hash,\n trace_id: payload.trace_id,\n upstream,\n });\n}\n\nfunction buildAuthorityScopeExtension(\n payload: AuthorityScopePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n decision: payload.decision,\n effective_scope: payload.effective_scope,\n trust_tier: payload.trust_tier,\n matched_invariants: payload.matched_invariants,\n upstream,\n });\n}\n\nfunction buildLifecycleEventExtension(\n payload: LifecycleEventPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n lifecycle_event_type: payload.lifecycle_event_type,\n previous_state: payload.previous_state,\n new_state: payload.new_state,\n actor: payload.actor,\n upstream,\n });\n}\n\nfunction buildTrustObservationExtension(\n payload: TrustObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n peer_id: payload.peer_id,\n action: payload.action,\n success: payload.success,\n trust_delta: payload.trust_delta,\n trust_score: payload.trust_score,\n upstream,\n });\n}\n\nfunction buildComplianceObservationExtension(\n payload: ComplianceObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n framework: payload.framework,\n compliance_score: payload.compliance_score,\n violation_count: payload.violation_count,\n evidence_item_count: payload.evidence_item_count,\n upstream,\n });\n}\n\ntype ExtensionBuilder = (\n payload: RuntimeGovernancePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n) => Record<string, unknown>;\n\n/**\n * Per-family extension builder registry.\n * issueRuntimeGovernanceRecord() dispatches to the correct builder.\n */\nexport const FAMILY_BUILDERS: Record<RuntimeGovernanceFamily, ExtensionBuilder> = {\n policy_decision: (p, c, u) => buildPolicyDecisionExtension(p as PolicyDecisionPayload, c, u),\n audit_entry: (p, c, u) => buildAuditEntryExtension(p as AuditEntryPayload, c, u),\n authority_scope: (p, c, u) => buildAuthorityScopeExtension(p as AuthorityScopePayload, c, u),\n lifecycle_event: (p, c, u) => buildLifecycleEventExtension(p as LifecycleEventPayload, c, u),\n trust_observation: (p, c, u) =>\n buildTrustObservationExtension(p as TrustObservationPayload, c, u),\n compliance_observation: (p, c, u) =>\n buildComplianceObservationExtension(p as ComplianceObservationPayload, c, u),\n};\n","/**\n * @peac/adapter-runtime-governance record issuance\n *\n * Generic issuance function that dispatches to per-family extension\n * builders. Source-specific mappers (e.g., mapAgtEvent) produce the\n * RuntimeGovernanceEvent input; this function handles signing.\n *\n * PEAC validates the structure and signature of the PEAC record,\n * not the truth of the upstream governance decision or the operating\n * effectiveness of the upstream control plane.\n */\n\nimport { issue } from '@peac/protocol';\nimport { EXTENSION_NAMESPACE } from './constants.js';\nimport { FAMILY_REGISTRY } from './families.js';\nimport { FAMILY_BUILDERS } from './builders.js';\nimport type { RuntimeGovernanceEvent, IssueOptions, IssueResult } from './types.js';\n\n/**\n * Issue a signed Interaction Record for a normalized runtime governance event.\n *\n * Use source-specific mappers (e.g., mapAgtEvent) to produce the event input.\n * The provider field is always caller-supplied and never hardcoded.\n */\nfunction validateIssueOptions(options: IssueOptions): void {\n if (!(options.privateKey instanceof Uint8Array) || options.privateKey.length !== 32) {\n throw new Error('privateKey must be a 32-byte Uint8Array');\n }\n if (typeof options.kid !== 'string' || options.kid.length === 0 || options.kid.length > 256) {\n throw new Error('kid must be a non-empty string (max 256 chars)');\n }\n if (typeof options.issuer !== 'string' || options.issuer.length === 0) {\n throw new Error('issuer must be a non-empty string');\n }\n if (\n typeof options.sessionId !== 'string' ||\n options.sessionId.length === 0 ||\n options.sessionId.length > 256\n ) {\n throw new Error('sessionId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.agentId !== 'string' ||\n options.agentId.length === 0 ||\n options.agentId.length > 256\n ) {\n throw new Error('agentId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.provider !== 'string' ||\n options.provider.length === 0 ||\n options.provider.length > 256\n ) {\n throw new Error('provider must be a non-empty string (max 256 chars)');\n }\n}\n\nexport async function issueRuntimeGovernanceRecord(\n event: RuntimeGovernanceEvent,\n options: IssueOptions\n): Promise<IssueResult> {\n validateIssueOptions(options);\n const entry = FAMILY_REGISTRY[event.payload.family];\n const { privateKey, kid, issuer, sessionId, agentId, provider } = options;\n\n const common = {\n session_id: sessionId,\n event: event.event_name,\n agent_id: agentId,\n provider,\n };\n\n const extensionData = FAMILY_BUILDERS[event.payload.family](\n event.payload,\n common,\n event.upstream\n );\n\n const { jws } = await issue({\n iss: issuer,\n kind: entry.kind,\n type: entry.type,\n privateKey,\n kid,\n extensions: { [EXTENSION_NAMESPACE]: extensionData },\n });\n\n return { jws, type: entry.type, family: event.payload.family };\n}\n","/**\n * @peac/adapter-runtime-governance session summary builder\n *\n * Aggregates decoded receipts into a session summary.\n * Decode-only (does NOT verify signatures; caller should verify first).\n * Returns deterministic family order (sorted alphabetically).\n * Counts unknown/unsupported type URIs separately.\n * Never implies verification or finality.\n */\n\nimport { decode } from '@peac/crypto';\nimport { EXTENSION_NAMESPACE, TYPE_PREFIX } from './constants.js';\nimport {\n RUNTIME_GOVERNANCE_FAMILIES,\n type RuntimeGovernanceFamily,\n type SessionSummary,\n} from './types.js';\n\n/** Reverse lookup set for known family suffixes. */\nconst KNOWN_SUFFIXES = new Set(RUNTIME_GOVERNANCE_FAMILIES.map((f) => f.replace(/_/g, '-')));\n\n/**\n * Build a session summary from an array of signed JWS receipts.\n *\n * Decodes each JWS (does NOT verify signatures; caller should verify first).\n * Extracts session ID, families, and issuer from claims and extensions.\n * Unknown type URIs are counted but not included in the families list.\n *\n * @param receipts - Array of compact JWS strings (must be valid JWS format)\n * @returns Session summary with deterministic family ordering\n */\nexport function buildSessionSummary(receipts: string[]): SessionSummary {\n if (receipts.length === 0) {\n return { sessionId: '', receipts: 0, families: [], unknownTypeCount: 0, issuer: '' };\n }\n\n let sessionId = '';\n let issuer = '';\n let unknownTypeCount = 0;\n const familySet = new Set<RuntimeGovernanceFamily>();\n\n for (const jws of receipts) {\n const decoded = decode(jws);\n const claims = decoded.payload as Record<string, unknown>;\n\n if (!issuer && typeof claims.iss === 'string') {\n issuer = claims.iss;\n }\n\n const extensions = claims.extensions as Record<string, unknown> | undefined;\n const govExt = extensions?.[EXTENSION_NAMESPACE] as Record<string, unknown> | undefined;\n\n if (govExt) {\n if (!sessionId && typeof govExt.session_id === 'string') {\n sessionId = govExt.session_id;\n }\n }\n\n const type = claims.type as string | undefined;\n if (type?.startsWith(TYPE_PREFIX)) {\n const suffix = type.slice(TYPE_PREFIX.length);\n if (KNOWN_SUFFIXES.has(suffix)) {\n familySet.add(suffix.replace(/-/g, '_') as RuntimeGovernanceFamily);\n } else {\n unknownTypeCount++;\n }\n } else if (type) {\n unknownTypeCount++;\n }\n }\n\n return {\n sessionId,\n receipts: receipts.length,\n families: [...familySet].sort(),\n unknownTypeCount,\n issuer,\n };\n}\n","/**\n * AGT-specific mapper\n *\n * Normalizes AGT-shaped JSON input into the generic\n * RuntimeGovernanceEvent model. Accepts raw JSON (not AGT SDK objects).\n *\n * Pinned to AGT v3.1.0 pre-release documentation (as of 2026-04-13).\n */\n\nimport { normalizeRuntimeGovernanceEvent, NormalizationError } from '../normalize.js';\nimport type { RuntimeGovernanceEvent, RuntimeGovernanceFamily } from '../types.js';\n\n/** AGT-shaped input. Raw JSON, not SDK objects. */\nexport interface AgtEventInput {\n /** Family name matching a RuntimeGovernanceFamily. */\n family: string;\n /** Specific event name (e.g., 'policy.evaluated'). */\n event: string;\n /** Event-specific data fields. */\n data: Record<string, unknown>;\n /** Optional upstream source context. */\n source?: {\n system?: string;\n event_type?: string;\n event_id?: string;\n timestamp?: string;\n artifact_hash?: string;\n artifact_ref?: string;\n cloud_event_type?: string;\n };\n}\n\nconst AGT_FAMILY_MAP: Record<string, RuntimeGovernanceFamily> = {\n policy_decision: 'policy_decision',\n audit_entry: 'audit_entry',\n authority_scope: 'authority_scope',\n lifecycle_event: 'lifecycle_event',\n trust_observation: 'trust_observation',\n compliance_observation: 'compliance_observation',\n};\n\n/**\n * Map an AGT-shaped event input to a normalized RuntimeGovernanceEvent.\n * Throws NormalizationError on unrecognized or malformed input.\n */\nexport function mapAgtEvent(input: AgtEventInput): RuntimeGovernanceEvent {\n const family = AGT_FAMILY_MAP[input.family];\n if (!family) {\n throw new NormalizationError(`unrecognized AGT family: ${input.family}`, 'family');\n }\n\n const raw = {\n event_name: input.event,\n payload: {\n family,\n ...input.data,\n },\n upstream: input.source\n ? {\n source_system: input.source.system,\n source_event_type: input.source.event_type,\n source_event_id: input.source.event_id,\n source_timestamp: input.source.timestamp,\n source_artifact_hash: input.source.artifact_hash,\n source_artifact_ref: input.source.artifact_ref,\n source_cloud_event_type: input.source.cloud_event_type,\n }\n : undefined,\n };\n\n return normalizeRuntimeGovernanceEvent(raw);\n}\n"]} | ||
| {"version":3,"sources":["../src/constants.ts","../src/types.ts","../src/families.ts","../src/normalize.ts","../src/internal/kid.ts","../src/builders.ts","../src/issue.ts","../src/session-summary.ts","../src/mappers/agt.ts"],"names":["issue","decode"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @peac/adapter-runtime-governance constants\n *\n * Vendor-neutral type URIs and extension namespace for runtime\n * governance record families. Observation-specific suffixes prevent\n * semantic bleed into authoritative claims.\n */\n\n/** Extension namespace for runtime governance record metadata. */\nexport const EXTENSION_NAMESPACE = 'org.peacprotocol/runtime-governance' as const;\n\n/** Reverse-DNS type prefix for all runtime governance record families. */\nexport const TYPE_PREFIX = 'org.peacprotocol/runtime-governance-' as const;\n\n/**\n * Canonical type URIs for the 6 runtime governance record families.\n * Each suffix is observation-specific (e.g., \"policy-decision\" not \"policy\").\n */\nexport const EVENT_TYPES = {\n POLICY_DECISION: `${TYPE_PREFIX}policy-decision`,\n AUDIT_ENTRY: `${TYPE_PREFIX}audit-entry`,\n AUTHORITY_SCOPE: `${TYPE_PREFIX}authority-scope`,\n LIFECYCLE_EVENT: `${TYPE_PREFIX}lifecycle-event`,\n TRUST_OBSERVATION: `${TYPE_PREFIX}trust-observation`,\n COMPLIANCE_OBSERVATION: `${TYPE_PREFIX}compliance-observation`,\n} as const;\n\nexport type EventType = (typeof EVENT_TYPES)[keyof typeof EVENT_TYPES];\n\n/** Maximum field lengths for validation. */\nexport const FIELD_LIMITS = {\n /** Identifiers: provider, agent_id, session_id, entry_id, etc. */\n maxIdentifier: 256,\n /** General string fields: action, matched_rule, policy_name, etc. */\n maxString: 1024,\n /** Digest strings: previous_hash, entry_hash, etc. */\n maxDigest: 512,\n /** URI fields: source_artifact_ref, etc. */\n maxUri: 2048,\n /** Timestamp fields: source_timestamp, etc. */\n maxTimestamp: 64,\n /** CloudEvents type URIs. */\n maxCloudEventType: 256,\n /** Array fields: effective_scope, matched_invariants. */\n maxArrayLength: 64,\n /** Array entry string length. */\n maxArrayEntry: 256,\n /** Framework token length. */\n maxFramework: 128,\n} as const;\n","/**\n * @peac/adapter-runtime-governance types\n *\n * Discriminated union payload model with per-family typing.\n * No weak Record<string, unknown> blobs.\n */\n\n/**\n * Runtime governance record families.\n * String-literal union (not enum) for lighter output and tree-shaking.\n */\nexport const RUNTIME_GOVERNANCE_FAMILIES = [\n 'policy_decision',\n 'audit_entry',\n 'authority_scope',\n 'lifecycle_event',\n 'trust_observation',\n 'compliance_observation',\n] as const;\n\nexport type RuntimeGovernanceFamily = (typeof RUNTIME_GOVERNANCE_FAMILIES)[number];\n\n/**\n * Preserved upstream artifact context.\n * All optional, all observational. Bounded fields, no arbitrary passthrough.\n */\nexport interface PreservedUpstreamArtifact {\n /** Upstream system identifier (max 256 chars). */\n source_system?: string;\n /** Upstream event type identifier (max 256 chars). */\n source_event_type?: string;\n /** Upstream event identifier for deduplication (max 256 chars). */\n source_event_id?: string;\n /** Upstream event timestamp (RFC 3339, max 64 chars). */\n source_timestamp?: string;\n /** Hash of upstream artifact (max 512 chars). */\n source_artifact_hash?: string;\n /** URI or reference to upstream artifact (max 2048 chars). */\n source_artifact_ref?: string;\n /** CloudEvents type URI for cross-system correlation (max 256 chars). */\n source_cloud_event_type?: string;\n}\n\n/** Policy decision payload. */\nexport interface PolicyDecisionPayload {\n family: 'policy_decision';\n action: string;\n matched_rule?: string;\n policy_name?: string;\n reason?: string;\n evaluation_ms?: number;\n}\n\n/** Audit entry payload. */\nexport interface AuditEntryPayload {\n family: 'audit_entry';\n entry_id?: string;\n event_type?: string;\n outcome?: string;\n previous_hash?: string;\n entry_hash?: string;\n trace_id?: string;\n}\n\n/** Authority scope payload. */\nexport interface AuthorityScopePayload {\n family: 'authority_scope';\n decision?: string;\n effective_scope?: string[];\n trust_tier?: string;\n matched_invariants?: string[];\n}\n\n/** Lifecycle event payload. */\nexport interface LifecycleEventPayload {\n family: 'lifecycle_event';\n lifecycle_event_type?: string;\n previous_state?: string;\n new_state?: string;\n actor?: string;\n}\n\n/** Trust observation payload. */\nexport interface TrustObservationPayload {\n family: 'trust_observation';\n peer_id?: string;\n action?: string;\n success?: boolean;\n trust_delta?: number;\n trust_score?: number;\n}\n\n/** Compliance observation payload. */\nexport interface ComplianceObservationPayload {\n family: 'compliance_observation';\n framework?: string;\n compliance_score?: number;\n violation_count?: number;\n evidence_item_count?: number;\n}\n\n/** Discriminated union of all family payloads. */\nexport type RuntimeGovernancePayload =\n | PolicyDecisionPayload\n | AuditEntryPayload\n | AuthorityScopePayload\n | LifecycleEventPayload\n | TrustObservationPayload\n | ComplianceObservationPayload;\n\n/**\n * Normalized runtime governance event.\n * Generic input to issueRuntimeGovernanceRecord().\n */\nexport interface RuntimeGovernanceEvent {\n /** Specific event name (e.g., 'policy.evaluated'). */\n event_name: string;\n /** Typed, validated payload (discriminated by family). */\n payload: RuntimeGovernancePayload;\n /** Optional preserved upstream artifact context. */\n upstream?: PreservedUpstreamArtifact;\n}\n\n/** Options for issuing a runtime governance record. */\nexport interface IssueOptions {\n /** Ed25519 private key (32 bytes). Caller-provided; never stored. */\n privateKey: Uint8Array;\n /** Key ID (max 256 chars). */\n kid: string;\n /** Canonical issuer URL (HTTPS or DID). */\n issuer: string;\n /** Session identifier for event correlation. */\n sessionId: string;\n /** Agent identifier. */\n agentId: string;\n /** Provider name. Caller-supplied; never hardcoded. */\n provider: string;\n}\n\n/** Result of issuing a runtime governance record. */\nexport interface IssueResult {\n /** Compact JWS (signed Interaction Record). */\n jws: string;\n /** PEAC event type URI used. */\n type: string;\n /** Record family. */\n family: RuntimeGovernanceFamily;\n}\n\n/** Session summary aggregated from decoded receipts. */\nexport interface SessionSummary {\n /** Session identifier. */\n sessionId: string;\n /** Total receipts in the session. */\n receipts: number;\n /** Distinct families represented (sorted alphabetically). */\n families: RuntimeGovernanceFamily[];\n /** Count of receipts with unrecognized type URIs. */\n unknownTypeCount: number;\n /** Issuer (from the first receipt, or empty if no receipts). */\n issuer: string;\n}\n","/**\n * Family registry.\n *\n * Maps each RuntimeGovernanceFamily to its canonical type URI\n * and Interaction Record kind. All families produce `evidence` kind.\n */\n\nimport { EVENT_TYPES, type EventType } from './constants.js';\nimport type { RuntimeGovernanceFamily } from './types.js';\n\nexport interface FamilyEntry {\n /** Canonical type URI for this family. */\n type: EventType;\n /** Interaction Record kind. Always 'evidence' for runtime governance. */\n kind: 'evidence';\n}\n\nexport const FAMILY_REGISTRY: Record<RuntimeGovernanceFamily, FamilyEntry> = {\n policy_decision: { type: EVENT_TYPES.POLICY_DECISION, kind: 'evidence' },\n audit_entry: { type: EVENT_TYPES.AUDIT_ENTRY, kind: 'evidence' },\n authority_scope: { type: EVENT_TYPES.AUTHORITY_SCOPE, kind: 'evidence' },\n lifecycle_event: { type: EVENT_TYPES.LIFECYCLE_EVENT, kind: 'evidence' },\n trust_observation: { type: EVENT_TYPES.TRUST_OBSERVATION, kind: 'evidence' },\n compliance_observation: { type: EVENT_TYPES.COMPLIANCE_OBSERVATION, kind: 'evidence' },\n};\n","/**\n * @peac/adapter-runtime-governance normalization and validation\n *\n * Fail-closed input validation for runtime governance payloads.\n * Rejects malformed input with descriptive errors.\n *\n * These are adapter-level shape prechecks: string presence, max lengths,\n * numeric bounds, RFC 3339 format, digest grammar (algorithm:hex), and\n * URI scheme presence. Protocol-layer validation (@peac/protocol issue()\n * and @peac/schema Wire02ClaimsSchema) remains authoritative for issuer\n * canonicality, JOSE hardening, and wire-format compliance. Adapter\n * validators catch obviously malformed input before it reaches the\n * protocol layer.\n *\n * PEAC validates the structure of carried values, not upstream truth.\n * Trust scores are structurally validated (finite, 0-1000 integer)\n * but never derived, recomputed, ranked, or authoritatively assessed.\n */\n\nimport { FIELD_LIMITS } from './constants.js';\nimport { RUNTIME_GOVERNANCE_FAMILIES } from './types.js';\nimport type {\n RuntimeGovernanceFamily,\n RuntimeGovernancePayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceEvent,\n} from './types.js';\n\nexport class NormalizationError extends Error {\n constructor(\n message: string,\n public readonly field: string\n ) {\n super(message);\n this.name = 'NormalizationError';\n }\n}\n\nfunction requireString(value: unknown, field: string, maxLen: number): string {\n if (typeof value !== 'string') {\n throw new NormalizationError(`${field} must be a string`, field);\n }\n if (value.length === 0) {\n throw new NormalizationError(`${field} must not be empty`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value;\n}\n\nfunction optionalString(value: unknown, field: string, maxLen: number): string | undefined {\n if (value === undefined || value === null) return undefined;\n return requireString(value, field, maxLen);\n}\n\nfunction optionalFiniteNumber(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new NormalizationError(`${field} must be a finite number`, field);\n }\n if (min !== undefined && value < min) {\n throw new NormalizationError(`${field} must be >= ${min}`, field);\n }\n if (max !== undefined && value > max) {\n throw new NormalizationError(`${field} must be <= ${max}`, field);\n }\n return value;\n}\n\nfunction optionalInteger(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n const n = optionalFiniteNumber(value, field, min, max);\n if (n !== undefined && !Number.isInteger(n)) {\n throw new NormalizationError(`${field} must be an integer`, field);\n }\n return n;\n}\n\nfunction optionalBoolean(value: unknown, field: string): boolean | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'boolean') {\n throw new NormalizationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nconst RFC3339_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction optionalRfc3339(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !RFC3339_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be RFC 3339 format`, field);\n }\n return s;\n}\n\nconst DIGEST_PATTERN = /^[a-zA-Z0-9_-]+:[a-fA-F0-9]+$/;\n\nfunction optionalDigest(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !DIGEST_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must match digest pattern (algorithm:hex)`, field);\n }\n return s;\n}\n\nconst URI_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nfunction optionalUri(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !URI_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be a valid URI`, field);\n }\n return s;\n}\n\nfunction optionalStringArray(\n value: unknown,\n field: string,\n maxLen: number,\n maxEntryLen: number\n): string[] | undefined {\n if (value === undefined || value === null) return undefined;\n if (!Array.isArray(value)) {\n throw new NormalizationError(`${field} must be an array`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value.map((entry, i) => requireString(entry, `${field}[${i}]`, maxEntryLen));\n}\n\nfunction normalizePolicyDecision(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'policy_decision',\n action: requireString(input.action, 'action', FIELD_LIMITS.maxString),\n matched_rule: optionalString(input.matched_rule, 'matched_rule', FIELD_LIMITS.maxString),\n policy_name: optionalString(input.policy_name, 'policy_name', FIELD_LIMITS.maxString),\n reason: optionalString(input.reason, 'reason', FIELD_LIMITS.maxString),\n evaluation_ms: optionalFiniteNumber(input.evaluation_ms, 'evaluation_ms', 0),\n };\n}\n\nfunction normalizeAuditEntry(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'audit_entry',\n entry_id: optionalString(input.entry_id, 'entry_id', FIELD_LIMITS.maxIdentifier),\n event_type: optionalString(input.event_type, 'event_type', FIELD_LIMITS.maxString),\n outcome: optionalString(input.outcome, 'outcome', FIELD_LIMITS.maxString),\n previous_hash: optionalDigest(input.previous_hash, 'previous_hash', FIELD_LIMITS.maxDigest),\n entry_hash: optionalDigest(input.entry_hash, 'entry_hash', FIELD_LIMITS.maxDigest),\n trace_id: optionalString(input.trace_id, 'trace_id', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeAuthorityScope(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'authority_scope',\n decision: optionalString(input.decision, 'decision', FIELD_LIMITS.maxString),\n effective_scope: optionalStringArray(\n input.effective_scope,\n 'effective_scope',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n trust_tier: optionalString(input.trust_tier, 'trust_tier', FIELD_LIMITS.maxString),\n matched_invariants: optionalStringArray(\n input.matched_invariants,\n 'matched_invariants',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n };\n}\n\nfunction normalizeLifecycleEvent(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'lifecycle_event',\n lifecycle_event_type: optionalString(\n input.lifecycle_event_type,\n 'lifecycle_event_type',\n FIELD_LIMITS.maxString\n ),\n previous_state: optionalString(input.previous_state, 'previous_state', FIELD_LIMITS.maxString),\n new_state: optionalString(input.new_state, 'new_state', FIELD_LIMITS.maxString),\n actor: optionalString(input.actor, 'actor', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeTrustObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'trust_observation',\n peer_id: optionalString(input.peer_id, 'peer_id', FIELD_LIMITS.maxIdentifier),\n action: optionalString(input.action, 'action', FIELD_LIMITS.maxString),\n success: optionalBoolean(input.success, 'success'),\n trust_delta: optionalInteger(input.trust_delta, 'trust_delta', -1000, 1000),\n trust_score: optionalInteger(input.trust_score, 'trust_score', 0, 1000),\n };\n}\n\nfunction normalizeComplianceObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'compliance_observation',\n framework: optionalString(input.framework, 'framework', FIELD_LIMITS.maxFramework),\n compliance_score: optionalFiniteNumber(input.compliance_score, 'compliance_score', 0, 100),\n violation_count: optionalInteger(input.violation_count, 'violation_count', 0),\n evidence_item_count: optionalInteger(input.evidence_item_count, 'evidence_item_count', 0),\n };\n}\n\nconst FAMILY_NORMALIZERS: Record<\n RuntimeGovernanceFamily,\n (input: Record<string, unknown>) => RuntimeGovernancePayload\n> = {\n policy_decision: normalizePolicyDecision,\n audit_entry: normalizeAuditEntry,\n authority_scope: normalizeAuthorityScope,\n lifecycle_event: normalizeLifecycleEvent,\n trust_observation: normalizeTrustObservation,\n compliance_observation: normalizeComplianceObservation,\n};\n\nfunction normalizeUpstream(input: unknown): PreservedUpstreamArtifact | undefined {\n if (input === undefined || input === null) return undefined;\n if (typeof input !== 'object' || Array.isArray(input)) {\n throw new NormalizationError('upstream must be a plain object', 'upstream');\n }\n const obj = input as Record<string, unknown>;\n return {\n source_system: optionalString(\n obj.source_system,\n 'upstream.source_system',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_type: optionalString(\n obj.source_event_type,\n 'upstream.source_event_type',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_id: optionalString(\n obj.source_event_id,\n 'upstream.source_event_id',\n FIELD_LIMITS.maxIdentifier\n ),\n source_timestamp: optionalRfc3339(\n obj.source_timestamp,\n 'upstream.source_timestamp',\n FIELD_LIMITS.maxTimestamp\n ),\n source_artifact_hash: optionalDigest(\n obj.source_artifact_hash,\n 'upstream.source_artifact_hash',\n FIELD_LIMITS.maxDigest\n ),\n source_artifact_ref: optionalUri(\n obj.source_artifact_ref,\n 'upstream.source_artifact_ref',\n FIELD_LIMITS.maxUri\n ),\n source_cloud_event_type: optionalString(\n obj.source_cloud_event_type,\n 'upstream.source_cloud_event_type',\n FIELD_LIMITS.maxCloudEventType\n ),\n };\n}\n\n/**\n * Normalize and validate a raw runtime governance event input.\n * Fail-closed: rejects malformed input with descriptive errors.\n */\nexport function normalizeRuntimeGovernanceEvent(input: unknown): RuntimeGovernanceEvent {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) {\n throw new NormalizationError('input must be a plain object', 'input');\n }\n const obj = input as Record<string, unknown>;\n\n const eventName = requireString(obj.event_name, 'event_name', FIELD_LIMITS.maxString);\n\n if (typeof obj.payload !== 'object' || obj.payload === null || Array.isArray(obj.payload)) {\n throw new NormalizationError('payload must be a plain object', 'payload');\n }\n const payloadObj = obj.payload as Record<string, unknown>;\n\n const family = payloadObj.family;\n if (\n typeof family !== 'string' ||\n !(RUNTIME_GOVERNANCE_FAMILIES as readonly string[]).includes(family)\n ) {\n throw new NormalizationError(\n `payload.family must be one of: ${RUNTIME_GOVERNANCE_FAMILIES.join(', ')}`,\n 'payload.family'\n );\n }\n\n const normalizer = FAMILY_NORMALIZERS[family as RuntimeGovernanceFamily];\n const payload = normalizer(payloadObj);\n\n return {\n event_name: eventName,\n payload,\n upstream: normalizeUpstream(obj.upstream),\n };\n}\n","/**\n * The PEAC `kid` rule: a non-empty, well-formed Unicode string whose UTF-8 serialization is at\n * most MAX_KID_UTF8_BYTES bytes. RFC 7515 leaves the structure of `kid` unspecified; the bound\n * and well-formedness requirements are PEAC application-level constraints.\n *\n * Adapter-private. The authoritative implementation lives in `@peac/crypto` (`src/kid.ts`) and is\n * not part of its public surface, so the rule is restated here and a behavioural parity test holds\n * the two implementations identical. The bound is measured in UTF-8 bytes rather than UTF-16 code\n * units: 256 UTF-16 code units consisting of supplementary-plane characters serialize to 512 UTF-8\n * bytes. A serialized-byte bound is portable across implementations.\n */\n\n/** Maximum `kid` length, measured as UTF-8 bytes of the string's serialization. */\nexport const MAX_KID_UTF8_BYTES = 256;\n\n/** True when every surrogate in `s` belongs to a well-formed pair. */\nexport function isWellFormedUnicode(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c >= 0xd800 && c <= 0xdbff) {\n const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;\n if (next < 0xdc00 || next > 0xdfff) return false;\n i++;\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * UTF-8 byte length of a well-formed string. Throws on malformed UTF-16 so callers cannot silently\n * replace an unpaired surrogate with U+FFFD during UTF-8 encoding and thereby change the supplied\n * identifier.\n */\nexport function utf8ByteLength(s: string): number {\n let n = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) n += 1;\n else if (c < 0x800) n += 2;\n else if (c >= 0xd800 && c <= 0xdbff) {\n const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;\n if (next < 0xdc00 || next > 0xdfff) {\n throw new TypeError('utf8ByteLength: unpaired high surrogate');\n }\n n += 4;\n i++;\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n throw new TypeError('utf8ByteLength: unpaired low surrogate');\n } else n += 3;\n }\n return n;\n}\n\n/** The complete PEAC `kid` rule. */\nexport function isValidKid(kid: unknown): kid is string {\n if (typeof kid !== 'string' || kid.length === 0) return false;\n if (!isWellFormedUnicode(kid)) return false;\n return utf8ByteLength(kid) <= MAX_KID_UTF8_BYTES;\n}\n","/**\n * @peac/adapter-runtime-governance extension builders\n *\n * Explicit per-family extension data builders. Each builder selects\n * exactly which fields appear in the extension output. Unknown upstream\n * fields never become top-level extension keys.\n */\n\nimport type {\n RuntimeGovernancePayload,\n PolicyDecisionPayload,\n AuditEntryPayload,\n AuthorityScopePayload,\n LifecycleEventPayload,\n TrustObservationPayload,\n ComplianceObservationPayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceFamily,\n} from './types.js';\n\ninterface CommonFields {\n session_id: string;\n event: string;\n agent_id: string;\n provider: string;\n}\n\nfunction stripUndefined(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const nested = stripUndefined(value as Record<string, unknown>);\n if (Object.keys(nested).length > 0) {\n result[key] = nested;\n }\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nfunction buildPolicyDecisionExtension(\n payload: PolicyDecisionPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n action: payload.action,\n matched_rule: payload.matched_rule,\n policy_name: payload.policy_name,\n reason: payload.reason,\n evaluation_ms: payload.evaluation_ms,\n upstream,\n });\n}\n\nfunction buildAuditEntryExtension(\n payload: AuditEntryPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n entry_id: payload.entry_id,\n event_type: payload.event_type,\n outcome: payload.outcome,\n previous_hash: payload.previous_hash,\n entry_hash: payload.entry_hash,\n trace_id: payload.trace_id,\n upstream,\n });\n}\n\nfunction buildAuthorityScopeExtension(\n payload: AuthorityScopePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n decision: payload.decision,\n effective_scope: payload.effective_scope,\n trust_tier: payload.trust_tier,\n matched_invariants: payload.matched_invariants,\n upstream,\n });\n}\n\nfunction buildLifecycleEventExtension(\n payload: LifecycleEventPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n lifecycle_event_type: payload.lifecycle_event_type,\n previous_state: payload.previous_state,\n new_state: payload.new_state,\n actor: payload.actor,\n upstream,\n });\n}\n\nfunction buildTrustObservationExtension(\n payload: TrustObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n peer_id: payload.peer_id,\n action: payload.action,\n success: payload.success,\n trust_delta: payload.trust_delta,\n trust_score: payload.trust_score,\n upstream,\n });\n}\n\nfunction buildComplianceObservationExtension(\n payload: ComplianceObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n framework: payload.framework,\n compliance_score: payload.compliance_score,\n violation_count: payload.violation_count,\n evidence_item_count: payload.evidence_item_count,\n upstream,\n });\n}\n\ntype ExtensionBuilder = (\n payload: RuntimeGovernancePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n) => Record<string, unknown>;\n\n/**\n * Per-family extension builder registry.\n * issueRuntimeGovernanceRecord() dispatches to the correct builder.\n */\nexport const FAMILY_BUILDERS: Record<RuntimeGovernanceFamily, ExtensionBuilder> = {\n policy_decision: (p, c, u) => buildPolicyDecisionExtension(p as PolicyDecisionPayload, c, u),\n audit_entry: (p, c, u) => buildAuditEntryExtension(p as AuditEntryPayload, c, u),\n authority_scope: (p, c, u) => buildAuthorityScopeExtension(p as AuthorityScopePayload, c, u),\n lifecycle_event: (p, c, u) => buildLifecycleEventExtension(p as LifecycleEventPayload, c, u),\n trust_observation: (p, c, u) =>\n buildTrustObservationExtension(p as TrustObservationPayload, c, u),\n compliance_observation: (p, c, u) =>\n buildComplianceObservationExtension(p as ComplianceObservationPayload, c, u),\n};\n","/**\n * @peac/adapter-runtime-governance record issuance\n *\n * Generic issuance function that dispatches to per-family extension\n * builders. Source-specific mappers (e.g., mapAgtEvent) produce the\n * RuntimeGovernanceEvent input; this function handles signing.\n *\n * PEAC validates the structure and signature of the PEAC record,\n * not the truth of the upstream governance decision or the operating\n * effectiveness of the upstream control plane.\n */\n\nimport { issue } from '@peac/protocol';\nimport { isValidKid } from './internal/kid.js';\nimport { EXTENSION_NAMESPACE } from './constants.js';\nimport { FAMILY_REGISTRY } from './families.js';\nimport { FAMILY_BUILDERS } from './builders.js';\nimport type { RuntimeGovernanceEvent, IssueOptions, IssueResult } from './types.js';\n\n/**\n * Issue a signed Interaction Record for a normalized runtime governance event.\n *\n * Use source-specific mappers (e.g., mapAgtEvent) to produce the event input.\n * The provider field is always caller-supplied and never hardcoded.\n */\nfunction validateIssueOptions(options: IssueOptions): void {\n if (!(options.privateKey instanceof Uint8Array) || options.privateKey.length !== 32) {\n throw new Error('privateKey must be a 32-byte Uint8Array');\n }\n if (!isValidKid(options.kid)) {\n throw new Error(\n 'kid must be a non-empty, well-formed Unicode string of at most 256 UTF-8 bytes'\n );\n }\n if (typeof options.issuer !== 'string' || options.issuer.length === 0) {\n throw new Error('issuer must be a non-empty string');\n }\n if (\n typeof options.sessionId !== 'string' ||\n options.sessionId.length === 0 ||\n options.sessionId.length > 256\n ) {\n throw new Error('sessionId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.agentId !== 'string' ||\n options.agentId.length === 0 ||\n options.agentId.length > 256\n ) {\n throw new Error('agentId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.provider !== 'string' ||\n options.provider.length === 0 ||\n options.provider.length > 256\n ) {\n throw new Error('provider must be a non-empty string (max 256 chars)');\n }\n}\n\nexport async function issueRuntimeGovernanceRecord(\n event: RuntimeGovernanceEvent,\n options: IssueOptions\n): Promise<IssueResult> {\n validateIssueOptions(options);\n const entry = FAMILY_REGISTRY[event.payload.family];\n const { privateKey, kid, issuer, sessionId, agentId, provider } = options;\n\n const common = {\n session_id: sessionId,\n event: event.event_name,\n agent_id: agentId,\n provider,\n };\n\n const extensionData = FAMILY_BUILDERS[event.payload.family](\n event.payload,\n common,\n event.upstream\n );\n\n const { jws } = await issue({\n iss: issuer,\n kind: entry.kind,\n type: entry.type,\n privateKey,\n kid,\n extensions: { [EXTENSION_NAMESPACE]: extensionData },\n });\n\n return { jws, type: entry.type, family: event.payload.family };\n}\n","/**\n * @peac/adapter-runtime-governance session summary builder\n *\n * Aggregates decoded receipts into a session summary.\n * Decode-only (does NOT verify signatures; caller should verify first).\n * Returns deterministic family order (sorted alphabetically).\n * Counts unknown/unsupported type URIs separately.\n * Never implies verification or finality.\n */\n\nimport { decode } from '@peac/crypto';\nimport { EXTENSION_NAMESPACE, TYPE_PREFIX } from './constants.js';\nimport {\n RUNTIME_GOVERNANCE_FAMILIES,\n type RuntimeGovernanceFamily,\n type SessionSummary,\n} from './types.js';\n\n/** Reverse lookup set for known family suffixes. */\nconst KNOWN_SUFFIXES = new Set(RUNTIME_GOVERNANCE_FAMILIES.map((f) => f.replace(/_/g, '-')));\n\n/**\n * Build a session summary from an array of signed JWS receipts.\n *\n * Decodes each JWS (does NOT verify signatures; caller should verify first).\n * Extracts session ID, families, and issuer from claims and extensions.\n * Unknown type URIs are counted but not included in the families list.\n *\n * @param receipts - Array of compact JWS strings (must be valid JWS format)\n * @returns Session summary with deterministic family ordering\n */\nexport function buildSessionSummary(receipts: string[]): SessionSummary {\n if (receipts.length === 0) {\n return { sessionId: '', receipts: 0, families: [], unknownTypeCount: 0, issuer: '' };\n }\n\n let sessionId = '';\n let issuer = '';\n let unknownTypeCount = 0;\n const familySet = new Set<RuntimeGovernanceFamily>();\n\n for (const jws of receipts) {\n const decoded = decode(jws);\n const claims = decoded.payload as Record<string, unknown>;\n\n if (!issuer && typeof claims.iss === 'string') {\n issuer = claims.iss;\n }\n\n const extensions = claims.extensions as Record<string, unknown> | undefined;\n const govExt = extensions?.[EXTENSION_NAMESPACE] as Record<string, unknown> | undefined;\n\n if (govExt) {\n if (!sessionId && typeof govExt.session_id === 'string') {\n sessionId = govExt.session_id;\n }\n }\n\n const type = claims.type as string | undefined;\n if (type?.startsWith(TYPE_PREFIX)) {\n const suffix = type.slice(TYPE_PREFIX.length);\n if (KNOWN_SUFFIXES.has(suffix)) {\n familySet.add(suffix.replace(/-/g, '_') as RuntimeGovernanceFamily);\n } else {\n unknownTypeCount++;\n }\n } else if (type) {\n unknownTypeCount++;\n }\n }\n\n return {\n sessionId,\n receipts: receipts.length,\n families: [...familySet].sort(),\n unknownTypeCount,\n issuer,\n };\n}\n","/**\n * AGT-specific mapper\n *\n * Normalizes AGT-shaped JSON input into the generic\n * RuntimeGovernanceEvent model. Accepts raw JSON (not AGT SDK objects).\n *\n * Pinned to AGT v3.1.0 pre-release documentation (as of 2026-04-13).\n */\n\nimport { normalizeRuntimeGovernanceEvent, NormalizationError } from '../normalize.js';\nimport type { RuntimeGovernanceEvent, RuntimeGovernanceFamily } from '../types.js';\n\n/** AGT-shaped input. Raw JSON, not SDK objects. */\nexport interface AgtEventInput {\n /** Family name matching a RuntimeGovernanceFamily. */\n family: string;\n /** Specific event name (e.g., 'policy.evaluated'). */\n event: string;\n /** Event-specific data fields. */\n data: Record<string, unknown>;\n /** Optional upstream source context. */\n source?: {\n system?: string;\n event_type?: string;\n event_id?: string;\n timestamp?: string;\n artifact_hash?: string;\n artifact_ref?: string;\n cloud_event_type?: string;\n };\n}\n\nconst AGT_FAMILY_MAP: Record<string, RuntimeGovernanceFamily> = {\n policy_decision: 'policy_decision',\n audit_entry: 'audit_entry',\n authority_scope: 'authority_scope',\n lifecycle_event: 'lifecycle_event',\n trust_observation: 'trust_observation',\n compliance_observation: 'compliance_observation',\n};\n\n/**\n * Map an AGT-shaped event input to a normalized RuntimeGovernanceEvent.\n * Throws NormalizationError on unrecognized or malformed input.\n */\nexport function mapAgtEvent(input: AgtEventInput): RuntimeGovernanceEvent {\n const family = AGT_FAMILY_MAP[input.family];\n if (!family) {\n throw new NormalizationError(`unrecognized AGT family: ${input.family}`, 'family');\n }\n\n const raw = {\n event_name: input.event,\n payload: {\n family,\n ...input.data,\n },\n upstream: input.source\n ? {\n source_system: input.source.system,\n source_event_type: input.source.event_type,\n source_event_id: input.source.event_id,\n source_timestamp: input.source.timestamp,\n source_artifact_hash: input.source.artifact_hash,\n source_artifact_ref: input.source.artifact_ref,\n source_cloud_event_type: input.source.cloud_event_type,\n }\n : undefined,\n };\n\n return normalizeRuntimeGovernanceEvent(raw);\n}\n"]} |
+44
-2
@@ -291,2 +291,42 @@ import { issue } from '@peac/protocol'; | ||
| // src/internal/kid.ts | ||
| var MAX_KID_UTF8_BYTES = 256; | ||
| function isWellFormedUnicode(s) { | ||
| for (let i = 0; i < s.length; i++) { | ||
| const c = s.charCodeAt(i); | ||
| if (c >= 55296 && c <= 56319) { | ||
| const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0; | ||
| if (next < 56320 || next > 57343) return false; | ||
| i++; | ||
| } else if (c >= 56320 && c <= 57343) { | ||
| return false; | ||
| } | ||
| } | ||
| return true; | ||
| } | ||
| function utf8ByteLength(s) { | ||
| let n = 0; | ||
| for (let i = 0; i < s.length; i++) { | ||
| const c = s.charCodeAt(i); | ||
| if (c < 128) n += 1; | ||
| else if (c < 2048) n += 2; | ||
| else if (c >= 55296 && c <= 56319) { | ||
| const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0; | ||
| if (next < 56320 || next > 57343) { | ||
| throw new TypeError("utf8ByteLength: unpaired high surrogate"); | ||
| } | ||
| n += 4; | ||
| i++; | ||
| } else if (c >= 56320 && c <= 57343) { | ||
| throw new TypeError("utf8ByteLength: unpaired low surrogate"); | ||
| } else n += 3; | ||
| } | ||
| return n; | ||
| } | ||
| function isValidKid(kid) { | ||
| if (typeof kid !== "string" || kid.length === 0) return false; | ||
| if (!isWellFormedUnicode(kid)) return false; | ||
| return utf8ByteLength(kid) <= MAX_KID_UTF8_BYTES; | ||
| } | ||
| // src/builders.ts | ||
@@ -387,4 +427,6 @@ function stripUndefined(obj) { | ||
| } | ||
| if (typeof options.kid !== "string" || options.kid.length === 0 || options.kid.length > 256) { | ||
| throw new Error("kid must be a non-empty string (max 256 chars)"); | ||
| if (!isValidKid(options.kid)) { | ||
| throw new Error( | ||
| "kid must be a non-empty, well-formed Unicode string of at most 256 UTF-8 bytes" | ||
| ); | ||
| } | ||
@@ -391,0 +433,0 @@ if (typeof options.issuer !== "string" || options.issuer.length === 0) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/constants.ts","../src/types.ts","../src/families.ts","../src/normalize.ts","../src/builders.ts","../src/issue.ts","../src/session-summary.ts","../src/mappers/agt.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @peac/adapter-runtime-governance constants\n *\n * Vendor-neutral type URIs and extension namespace for runtime\n * governance record families. Observation-specific suffixes prevent\n * semantic bleed into authoritative claims.\n */\n\n/** Extension namespace for runtime governance record metadata. */\nexport const EXTENSION_NAMESPACE = 'org.peacprotocol/runtime-governance' as const;\n\n/** Reverse-DNS type prefix for all runtime governance record families. */\nexport const TYPE_PREFIX = 'org.peacprotocol/runtime-governance-' as const;\n\n/**\n * Canonical type URIs for the 6 runtime governance record families.\n * Each suffix is observation-specific (e.g., \"policy-decision\" not \"policy\").\n */\nexport const EVENT_TYPES = {\n POLICY_DECISION: `${TYPE_PREFIX}policy-decision`,\n AUDIT_ENTRY: `${TYPE_PREFIX}audit-entry`,\n AUTHORITY_SCOPE: `${TYPE_PREFIX}authority-scope`,\n LIFECYCLE_EVENT: `${TYPE_PREFIX}lifecycle-event`,\n TRUST_OBSERVATION: `${TYPE_PREFIX}trust-observation`,\n COMPLIANCE_OBSERVATION: `${TYPE_PREFIX}compliance-observation`,\n} as const;\n\nexport type EventType = (typeof EVENT_TYPES)[keyof typeof EVENT_TYPES];\n\n/** Maximum field lengths for validation. */\nexport const FIELD_LIMITS = {\n /** Identifiers: provider, agent_id, session_id, entry_id, etc. */\n maxIdentifier: 256,\n /** General string fields: action, matched_rule, policy_name, etc. */\n maxString: 1024,\n /** Digest strings: previous_hash, entry_hash, etc. */\n maxDigest: 512,\n /** URI fields: source_artifact_ref, etc. */\n maxUri: 2048,\n /** Timestamp fields: source_timestamp, etc. */\n maxTimestamp: 64,\n /** CloudEvents type URIs. */\n maxCloudEventType: 256,\n /** Array fields: effective_scope, matched_invariants. */\n maxArrayLength: 64,\n /** Array entry string length. */\n maxArrayEntry: 256,\n /** Framework token length. */\n maxFramework: 128,\n} as const;\n","/**\n * @peac/adapter-runtime-governance types\n *\n * Discriminated union payload model with per-family typing.\n * No weak Record<string, unknown> blobs.\n */\n\n/**\n * Runtime governance record families.\n * String-literal union (not enum) for lighter output and tree-shaking.\n */\nexport const RUNTIME_GOVERNANCE_FAMILIES = [\n 'policy_decision',\n 'audit_entry',\n 'authority_scope',\n 'lifecycle_event',\n 'trust_observation',\n 'compliance_observation',\n] as const;\n\nexport type RuntimeGovernanceFamily = (typeof RUNTIME_GOVERNANCE_FAMILIES)[number];\n\n/**\n * Preserved upstream artifact context.\n * All optional, all observational. Bounded fields, no arbitrary passthrough.\n */\nexport interface PreservedUpstreamArtifact {\n /** Upstream system identifier (max 256 chars). */\n source_system?: string;\n /** Upstream event type identifier (max 256 chars). */\n source_event_type?: string;\n /** Upstream event identifier for deduplication (max 256 chars). */\n source_event_id?: string;\n /** Upstream event timestamp (RFC 3339, max 64 chars). */\n source_timestamp?: string;\n /** Hash of upstream artifact (max 512 chars). */\n source_artifact_hash?: string;\n /** URI or reference to upstream artifact (max 2048 chars). */\n source_artifact_ref?: string;\n /** CloudEvents type URI for cross-system correlation (max 256 chars). */\n source_cloud_event_type?: string;\n}\n\n/** Policy decision payload. */\nexport interface PolicyDecisionPayload {\n family: 'policy_decision';\n action: string;\n matched_rule?: string;\n policy_name?: string;\n reason?: string;\n evaluation_ms?: number;\n}\n\n/** Audit entry payload. */\nexport interface AuditEntryPayload {\n family: 'audit_entry';\n entry_id?: string;\n event_type?: string;\n outcome?: string;\n previous_hash?: string;\n entry_hash?: string;\n trace_id?: string;\n}\n\n/** Authority scope payload. */\nexport interface AuthorityScopePayload {\n family: 'authority_scope';\n decision?: string;\n effective_scope?: string[];\n trust_tier?: string;\n matched_invariants?: string[];\n}\n\n/** Lifecycle event payload. */\nexport interface LifecycleEventPayload {\n family: 'lifecycle_event';\n lifecycle_event_type?: string;\n previous_state?: string;\n new_state?: string;\n actor?: string;\n}\n\n/** Trust observation payload. */\nexport interface TrustObservationPayload {\n family: 'trust_observation';\n peer_id?: string;\n action?: string;\n success?: boolean;\n trust_delta?: number;\n trust_score?: number;\n}\n\n/** Compliance observation payload. */\nexport interface ComplianceObservationPayload {\n family: 'compliance_observation';\n framework?: string;\n compliance_score?: number;\n violation_count?: number;\n evidence_item_count?: number;\n}\n\n/** Discriminated union of all family payloads. */\nexport type RuntimeGovernancePayload =\n | PolicyDecisionPayload\n | AuditEntryPayload\n | AuthorityScopePayload\n | LifecycleEventPayload\n | TrustObservationPayload\n | ComplianceObservationPayload;\n\n/**\n * Normalized runtime governance event.\n * Generic input to issueRuntimeGovernanceRecord().\n */\nexport interface RuntimeGovernanceEvent {\n /** Specific event name (e.g., 'policy.evaluated'). */\n event_name: string;\n /** Typed, validated payload (discriminated by family). */\n payload: RuntimeGovernancePayload;\n /** Optional preserved upstream artifact context. */\n upstream?: PreservedUpstreamArtifact;\n}\n\n/** Options for issuing a runtime governance record. */\nexport interface IssueOptions {\n /** Ed25519 private key (32 bytes). Caller-provided; never stored. */\n privateKey: Uint8Array;\n /** Key ID (max 256 chars). */\n kid: string;\n /** Canonical issuer URL (HTTPS or DID). */\n issuer: string;\n /** Session identifier for event correlation. */\n sessionId: string;\n /** Agent identifier. */\n agentId: string;\n /** Provider name. Caller-supplied; never hardcoded. */\n provider: string;\n}\n\n/** Result of issuing a runtime governance record. */\nexport interface IssueResult {\n /** Compact JWS (signed Interaction Record). */\n jws: string;\n /** PEAC event type URI used. */\n type: string;\n /** Record family. */\n family: RuntimeGovernanceFamily;\n}\n\n/** Session summary aggregated from decoded receipts. */\nexport interface SessionSummary {\n /** Session identifier. */\n sessionId: string;\n /** Total receipts in the session. */\n receipts: number;\n /** Distinct families represented (sorted alphabetically). */\n families: RuntimeGovernanceFamily[];\n /** Count of receipts with unrecognized type URIs. */\n unknownTypeCount: number;\n /** Issuer (from the first receipt, or empty if no receipts). */\n issuer: string;\n}\n","/**\n * Family registry.\n *\n * Maps each RuntimeGovernanceFamily to its canonical type URI\n * and Interaction Record kind. All families produce `evidence` kind.\n */\n\nimport { EVENT_TYPES, type EventType } from './constants.js';\nimport type { RuntimeGovernanceFamily } from './types.js';\n\nexport interface FamilyEntry {\n /** Canonical type URI for this family. */\n type: EventType;\n /** Interaction Record kind. Always 'evidence' for runtime governance. */\n kind: 'evidence';\n}\n\nexport const FAMILY_REGISTRY: Record<RuntimeGovernanceFamily, FamilyEntry> = {\n policy_decision: { type: EVENT_TYPES.POLICY_DECISION, kind: 'evidence' },\n audit_entry: { type: EVENT_TYPES.AUDIT_ENTRY, kind: 'evidence' },\n authority_scope: { type: EVENT_TYPES.AUTHORITY_SCOPE, kind: 'evidence' },\n lifecycle_event: { type: EVENT_TYPES.LIFECYCLE_EVENT, kind: 'evidence' },\n trust_observation: { type: EVENT_TYPES.TRUST_OBSERVATION, kind: 'evidence' },\n compliance_observation: { type: EVENT_TYPES.COMPLIANCE_OBSERVATION, kind: 'evidence' },\n};\n","/**\n * @peac/adapter-runtime-governance normalization and validation\n *\n * Fail-closed input validation for runtime governance payloads.\n * Rejects malformed input with descriptive errors.\n *\n * These are adapter-level shape prechecks: string presence, max lengths,\n * numeric bounds, RFC 3339 format, digest grammar (algorithm:hex), and\n * URI scheme presence. Protocol-layer validation (@peac/protocol issue()\n * and @peac/schema Wire02ClaimsSchema) remains authoritative for issuer\n * canonicality, JOSE hardening, and wire-format compliance. Adapter\n * validators catch obviously malformed input before it reaches the\n * protocol layer.\n *\n * PEAC validates the structure of carried values, not upstream truth.\n * Trust scores are structurally validated (finite, 0-1000 integer)\n * but never derived, recomputed, ranked, or authoritatively assessed.\n */\n\nimport { FIELD_LIMITS } from './constants.js';\nimport { RUNTIME_GOVERNANCE_FAMILIES } from './types.js';\nimport type {\n RuntimeGovernanceFamily,\n RuntimeGovernancePayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceEvent,\n} from './types.js';\n\nexport class NormalizationError extends Error {\n constructor(\n message: string,\n public readonly field: string\n ) {\n super(message);\n this.name = 'NormalizationError';\n }\n}\n\nfunction requireString(value: unknown, field: string, maxLen: number): string {\n if (typeof value !== 'string') {\n throw new NormalizationError(`${field} must be a string`, field);\n }\n if (value.length === 0) {\n throw new NormalizationError(`${field} must not be empty`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value;\n}\n\nfunction optionalString(value: unknown, field: string, maxLen: number): string | undefined {\n if (value === undefined || value === null) return undefined;\n return requireString(value, field, maxLen);\n}\n\nfunction optionalFiniteNumber(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new NormalizationError(`${field} must be a finite number`, field);\n }\n if (min !== undefined && value < min) {\n throw new NormalizationError(`${field} must be >= ${min}`, field);\n }\n if (max !== undefined && value > max) {\n throw new NormalizationError(`${field} must be <= ${max}`, field);\n }\n return value;\n}\n\nfunction optionalInteger(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n const n = optionalFiniteNumber(value, field, min, max);\n if (n !== undefined && !Number.isInteger(n)) {\n throw new NormalizationError(`${field} must be an integer`, field);\n }\n return n;\n}\n\nfunction optionalBoolean(value: unknown, field: string): boolean | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'boolean') {\n throw new NormalizationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nconst RFC3339_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction optionalRfc3339(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !RFC3339_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be RFC 3339 format`, field);\n }\n return s;\n}\n\nconst DIGEST_PATTERN = /^[a-zA-Z0-9_-]+:[a-fA-F0-9]+$/;\n\nfunction optionalDigest(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !DIGEST_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must match digest pattern (algorithm:hex)`, field);\n }\n return s;\n}\n\nconst URI_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nfunction optionalUri(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !URI_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be a valid URI`, field);\n }\n return s;\n}\n\nfunction optionalStringArray(\n value: unknown,\n field: string,\n maxLen: number,\n maxEntryLen: number\n): string[] | undefined {\n if (value === undefined || value === null) return undefined;\n if (!Array.isArray(value)) {\n throw new NormalizationError(`${field} must be an array`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value.map((entry, i) => requireString(entry, `${field}[${i}]`, maxEntryLen));\n}\n\nfunction normalizePolicyDecision(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'policy_decision',\n action: requireString(input.action, 'action', FIELD_LIMITS.maxString),\n matched_rule: optionalString(input.matched_rule, 'matched_rule', FIELD_LIMITS.maxString),\n policy_name: optionalString(input.policy_name, 'policy_name', FIELD_LIMITS.maxString),\n reason: optionalString(input.reason, 'reason', FIELD_LIMITS.maxString),\n evaluation_ms: optionalFiniteNumber(input.evaluation_ms, 'evaluation_ms', 0),\n };\n}\n\nfunction normalizeAuditEntry(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'audit_entry',\n entry_id: optionalString(input.entry_id, 'entry_id', FIELD_LIMITS.maxIdentifier),\n event_type: optionalString(input.event_type, 'event_type', FIELD_LIMITS.maxString),\n outcome: optionalString(input.outcome, 'outcome', FIELD_LIMITS.maxString),\n previous_hash: optionalDigest(input.previous_hash, 'previous_hash', FIELD_LIMITS.maxDigest),\n entry_hash: optionalDigest(input.entry_hash, 'entry_hash', FIELD_LIMITS.maxDigest),\n trace_id: optionalString(input.trace_id, 'trace_id', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeAuthorityScope(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'authority_scope',\n decision: optionalString(input.decision, 'decision', FIELD_LIMITS.maxString),\n effective_scope: optionalStringArray(\n input.effective_scope,\n 'effective_scope',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n trust_tier: optionalString(input.trust_tier, 'trust_tier', FIELD_LIMITS.maxString),\n matched_invariants: optionalStringArray(\n input.matched_invariants,\n 'matched_invariants',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n };\n}\n\nfunction normalizeLifecycleEvent(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'lifecycle_event',\n lifecycle_event_type: optionalString(\n input.lifecycle_event_type,\n 'lifecycle_event_type',\n FIELD_LIMITS.maxString\n ),\n previous_state: optionalString(input.previous_state, 'previous_state', FIELD_LIMITS.maxString),\n new_state: optionalString(input.new_state, 'new_state', FIELD_LIMITS.maxString),\n actor: optionalString(input.actor, 'actor', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeTrustObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'trust_observation',\n peer_id: optionalString(input.peer_id, 'peer_id', FIELD_LIMITS.maxIdentifier),\n action: optionalString(input.action, 'action', FIELD_LIMITS.maxString),\n success: optionalBoolean(input.success, 'success'),\n trust_delta: optionalInteger(input.trust_delta, 'trust_delta', -1000, 1000),\n trust_score: optionalInteger(input.trust_score, 'trust_score', 0, 1000),\n };\n}\n\nfunction normalizeComplianceObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'compliance_observation',\n framework: optionalString(input.framework, 'framework', FIELD_LIMITS.maxFramework),\n compliance_score: optionalFiniteNumber(input.compliance_score, 'compliance_score', 0, 100),\n violation_count: optionalInteger(input.violation_count, 'violation_count', 0),\n evidence_item_count: optionalInteger(input.evidence_item_count, 'evidence_item_count', 0),\n };\n}\n\nconst FAMILY_NORMALIZERS: Record<\n RuntimeGovernanceFamily,\n (input: Record<string, unknown>) => RuntimeGovernancePayload\n> = {\n policy_decision: normalizePolicyDecision,\n audit_entry: normalizeAuditEntry,\n authority_scope: normalizeAuthorityScope,\n lifecycle_event: normalizeLifecycleEvent,\n trust_observation: normalizeTrustObservation,\n compliance_observation: normalizeComplianceObservation,\n};\n\nfunction normalizeUpstream(input: unknown): PreservedUpstreamArtifact | undefined {\n if (input === undefined || input === null) return undefined;\n if (typeof input !== 'object' || Array.isArray(input)) {\n throw new NormalizationError('upstream must be a plain object', 'upstream');\n }\n const obj = input as Record<string, unknown>;\n return {\n source_system: optionalString(\n obj.source_system,\n 'upstream.source_system',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_type: optionalString(\n obj.source_event_type,\n 'upstream.source_event_type',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_id: optionalString(\n obj.source_event_id,\n 'upstream.source_event_id',\n FIELD_LIMITS.maxIdentifier\n ),\n source_timestamp: optionalRfc3339(\n obj.source_timestamp,\n 'upstream.source_timestamp',\n FIELD_LIMITS.maxTimestamp\n ),\n source_artifact_hash: optionalDigest(\n obj.source_artifact_hash,\n 'upstream.source_artifact_hash',\n FIELD_LIMITS.maxDigest\n ),\n source_artifact_ref: optionalUri(\n obj.source_artifact_ref,\n 'upstream.source_artifact_ref',\n FIELD_LIMITS.maxUri\n ),\n source_cloud_event_type: optionalString(\n obj.source_cloud_event_type,\n 'upstream.source_cloud_event_type',\n FIELD_LIMITS.maxCloudEventType\n ),\n };\n}\n\n/**\n * Normalize and validate a raw runtime governance event input.\n * Fail-closed: rejects malformed input with descriptive errors.\n */\nexport function normalizeRuntimeGovernanceEvent(input: unknown): RuntimeGovernanceEvent {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) {\n throw new NormalizationError('input must be a plain object', 'input');\n }\n const obj = input as Record<string, unknown>;\n\n const eventName = requireString(obj.event_name, 'event_name', FIELD_LIMITS.maxString);\n\n if (typeof obj.payload !== 'object' || obj.payload === null || Array.isArray(obj.payload)) {\n throw new NormalizationError('payload must be a plain object', 'payload');\n }\n const payloadObj = obj.payload as Record<string, unknown>;\n\n const family = payloadObj.family;\n if (\n typeof family !== 'string' ||\n !(RUNTIME_GOVERNANCE_FAMILIES as readonly string[]).includes(family)\n ) {\n throw new NormalizationError(\n `payload.family must be one of: ${RUNTIME_GOVERNANCE_FAMILIES.join(', ')}`,\n 'payload.family'\n );\n }\n\n const normalizer = FAMILY_NORMALIZERS[family as RuntimeGovernanceFamily];\n const payload = normalizer(payloadObj);\n\n return {\n event_name: eventName,\n payload,\n upstream: normalizeUpstream(obj.upstream),\n };\n}\n","/**\n * @peac/adapter-runtime-governance extension builders\n *\n * Explicit per-family extension data builders. Each builder selects\n * exactly which fields appear in the extension output. Unknown upstream\n * fields never become top-level extension keys.\n */\n\nimport type {\n RuntimeGovernancePayload,\n PolicyDecisionPayload,\n AuditEntryPayload,\n AuthorityScopePayload,\n LifecycleEventPayload,\n TrustObservationPayload,\n ComplianceObservationPayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceFamily,\n} from './types.js';\n\ninterface CommonFields {\n session_id: string;\n event: string;\n agent_id: string;\n provider: string;\n}\n\nfunction stripUndefined(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const nested = stripUndefined(value as Record<string, unknown>);\n if (Object.keys(nested).length > 0) {\n result[key] = nested;\n }\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nfunction buildPolicyDecisionExtension(\n payload: PolicyDecisionPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n action: payload.action,\n matched_rule: payload.matched_rule,\n policy_name: payload.policy_name,\n reason: payload.reason,\n evaluation_ms: payload.evaluation_ms,\n upstream,\n });\n}\n\nfunction buildAuditEntryExtension(\n payload: AuditEntryPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n entry_id: payload.entry_id,\n event_type: payload.event_type,\n outcome: payload.outcome,\n previous_hash: payload.previous_hash,\n entry_hash: payload.entry_hash,\n trace_id: payload.trace_id,\n upstream,\n });\n}\n\nfunction buildAuthorityScopeExtension(\n payload: AuthorityScopePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n decision: payload.decision,\n effective_scope: payload.effective_scope,\n trust_tier: payload.trust_tier,\n matched_invariants: payload.matched_invariants,\n upstream,\n });\n}\n\nfunction buildLifecycleEventExtension(\n payload: LifecycleEventPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n lifecycle_event_type: payload.lifecycle_event_type,\n previous_state: payload.previous_state,\n new_state: payload.new_state,\n actor: payload.actor,\n upstream,\n });\n}\n\nfunction buildTrustObservationExtension(\n payload: TrustObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n peer_id: payload.peer_id,\n action: payload.action,\n success: payload.success,\n trust_delta: payload.trust_delta,\n trust_score: payload.trust_score,\n upstream,\n });\n}\n\nfunction buildComplianceObservationExtension(\n payload: ComplianceObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n framework: payload.framework,\n compliance_score: payload.compliance_score,\n violation_count: payload.violation_count,\n evidence_item_count: payload.evidence_item_count,\n upstream,\n });\n}\n\ntype ExtensionBuilder = (\n payload: RuntimeGovernancePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n) => Record<string, unknown>;\n\n/**\n * Per-family extension builder registry.\n * issueRuntimeGovernanceRecord() dispatches to the correct builder.\n */\nexport const FAMILY_BUILDERS: Record<RuntimeGovernanceFamily, ExtensionBuilder> = {\n policy_decision: (p, c, u) => buildPolicyDecisionExtension(p as PolicyDecisionPayload, c, u),\n audit_entry: (p, c, u) => buildAuditEntryExtension(p as AuditEntryPayload, c, u),\n authority_scope: (p, c, u) => buildAuthorityScopeExtension(p as AuthorityScopePayload, c, u),\n lifecycle_event: (p, c, u) => buildLifecycleEventExtension(p as LifecycleEventPayload, c, u),\n trust_observation: (p, c, u) =>\n buildTrustObservationExtension(p as TrustObservationPayload, c, u),\n compliance_observation: (p, c, u) =>\n buildComplianceObservationExtension(p as ComplianceObservationPayload, c, u),\n};\n","/**\n * @peac/adapter-runtime-governance record issuance\n *\n * Generic issuance function that dispatches to per-family extension\n * builders. Source-specific mappers (e.g., mapAgtEvent) produce the\n * RuntimeGovernanceEvent input; this function handles signing.\n *\n * PEAC validates the structure and signature of the PEAC record,\n * not the truth of the upstream governance decision or the operating\n * effectiveness of the upstream control plane.\n */\n\nimport { issue } from '@peac/protocol';\nimport { EXTENSION_NAMESPACE } from './constants.js';\nimport { FAMILY_REGISTRY } from './families.js';\nimport { FAMILY_BUILDERS } from './builders.js';\nimport type { RuntimeGovernanceEvent, IssueOptions, IssueResult } from './types.js';\n\n/**\n * Issue a signed Interaction Record for a normalized runtime governance event.\n *\n * Use source-specific mappers (e.g., mapAgtEvent) to produce the event input.\n * The provider field is always caller-supplied and never hardcoded.\n */\nfunction validateIssueOptions(options: IssueOptions): void {\n if (!(options.privateKey instanceof Uint8Array) || options.privateKey.length !== 32) {\n throw new Error('privateKey must be a 32-byte Uint8Array');\n }\n if (typeof options.kid !== 'string' || options.kid.length === 0 || options.kid.length > 256) {\n throw new Error('kid must be a non-empty string (max 256 chars)');\n }\n if (typeof options.issuer !== 'string' || options.issuer.length === 0) {\n throw new Error('issuer must be a non-empty string');\n }\n if (\n typeof options.sessionId !== 'string' ||\n options.sessionId.length === 0 ||\n options.sessionId.length > 256\n ) {\n throw new Error('sessionId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.agentId !== 'string' ||\n options.agentId.length === 0 ||\n options.agentId.length > 256\n ) {\n throw new Error('agentId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.provider !== 'string' ||\n options.provider.length === 0 ||\n options.provider.length > 256\n ) {\n throw new Error('provider must be a non-empty string (max 256 chars)');\n }\n}\n\nexport async function issueRuntimeGovernanceRecord(\n event: RuntimeGovernanceEvent,\n options: IssueOptions\n): Promise<IssueResult> {\n validateIssueOptions(options);\n const entry = FAMILY_REGISTRY[event.payload.family];\n const { privateKey, kid, issuer, sessionId, agentId, provider } = options;\n\n const common = {\n session_id: sessionId,\n event: event.event_name,\n agent_id: agentId,\n provider,\n };\n\n const extensionData = FAMILY_BUILDERS[event.payload.family](\n event.payload,\n common,\n event.upstream\n );\n\n const { jws } = await issue({\n iss: issuer,\n kind: entry.kind,\n type: entry.type,\n privateKey,\n kid,\n extensions: { [EXTENSION_NAMESPACE]: extensionData },\n });\n\n return { jws, type: entry.type, family: event.payload.family };\n}\n","/**\n * @peac/adapter-runtime-governance session summary builder\n *\n * Aggregates decoded receipts into a session summary.\n * Decode-only (does NOT verify signatures; caller should verify first).\n * Returns deterministic family order (sorted alphabetically).\n * Counts unknown/unsupported type URIs separately.\n * Never implies verification or finality.\n */\n\nimport { decode } from '@peac/crypto';\nimport { EXTENSION_NAMESPACE, TYPE_PREFIX } from './constants.js';\nimport {\n RUNTIME_GOVERNANCE_FAMILIES,\n type RuntimeGovernanceFamily,\n type SessionSummary,\n} from './types.js';\n\n/** Reverse lookup set for known family suffixes. */\nconst KNOWN_SUFFIXES = new Set(RUNTIME_GOVERNANCE_FAMILIES.map((f) => f.replace(/_/g, '-')));\n\n/**\n * Build a session summary from an array of signed JWS receipts.\n *\n * Decodes each JWS (does NOT verify signatures; caller should verify first).\n * Extracts session ID, families, and issuer from claims and extensions.\n * Unknown type URIs are counted but not included in the families list.\n *\n * @param receipts - Array of compact JWS strings (must be valid JWS format)\n * @returns Session summary with deterministic family ordering\n */\nexport function buildSessionSummary(receipts: string[]): SessionSummary {\n if (receipts.length === 0) {\n return { sessionId: '', receipts: 0, families: [], unknownTypeCount: 0, issuer: '' };\n }\n\n let sessionId = '';\n let issuer = '';\n let unknownTypeCount = 0;\n const familySet = new Set<RuntimeGovernanceFamily>();\n\n for (const jws of receipts) {\n const decoded = decode(jws);\n const claims = decoded.payload as Record<string, unknown>;\n\n if (!issuer && typeof claims.iss === 'string') {\n issuer = claims.iss;\n }\n\n const extensions = claims.extensions as Record<string, unknown> | undefined;\n const govExt = extensions?.[EXTENSION_NAMESPACE] as Record<string, unknown> | undefined;\n\n if (govExt) {\n if (!sessionId && typeof govExt.session_id === 'string') {\n sessionId = govExt.session_id;\n }\n }\n\n const type = claims.type as string | undefined;\n if (type?.startsWith(TYPE_PREFIX)) {\n const suffix = type.slice(TYPE_PREFIX.length);\n if (KNOWN_SUFFIXES.has(suffix)) {\n familySet.add(suffix.replace(/-/g, '_') as RuntimeGovernanceFamily);\n } else {\n unknownTypeCount++;\n }\n } else if (type) {\n unknownTypeCount++;\n }\n }\n\n return {\n sessionId,\n receipts: receipts.length,\n families: [...familySet].sort(),\n unknownTypeCount,\n issuer,\n };\n}\n","/**\n * AGT-specific mapper\n *\n * Normalizes AGT-shaped JSON input into the generic\n * RuntimeGovernanceEvent model. Accepts raw JSON (not AGT SDK objects).\n *\n * Pinned to AGT v3.1.0 pre-release documentation (as of 2026-04-13).\n */\n\nimport { normalizeRuntimeGovernanceEvent, NormalizationError } from '../normalize.js';\nimport type { RuntimeGovernanceEvent, RuntimeGovernanceFamily } from '../types.js';\n\n/** AGT-shaped input. Raw JSON, not SDK objects. */\nexport interface AgtEventInput {\n /** Family name matching a RuntimeGovernanceFamily. */\n family: string;\n /** Specific event name (e.g., 'policy.evaluated'). */\n event: string;\n /** Event-specific data fields. */\n data: Record<string, unknown>;\n /** Optional upstream source context. */\n source?: {\n system?: string;\n event_type?: string;\n event_id?: string;\n timestamp?: string;\n artifact_hash?: string;\n artifact_ref?: string;\n cloud_event_type?: string;\n };\n}\n\nconst AGT_FAMILY_MAP: Record<string, RuntimeGovernanceFamily> = {\n policy_decision: 'policy_decision',\n audit_entry: 'audit_entry',\n authority_scope: 'authority_scope',\n lifecycle_event: 'lifecycle_event',\n trust_observation: 'trust_observation',\n compliance_observation: 'compliance_observation',\n};\n\n/**\n * Map an AGT-shaped event input to a normalized RuntimeGovernanceEvent.\n * Throws NormalizationError on unrecognized or malformed input.\n */\nexport function mapAgtEvent(input: AgtEventInput): RuntimeGovernanceEvent {\n const family = AGT_FAMILY_MAP[input.family];\n if (!family) {\n throw new NormalizationError(`unrecognized AGT family: ${input.family}`, 'family');\n }\n\n const raw = {\n event_name: input.event,\n payload: {\n family,\n ...input.data,\n },\n upstream: input.source\n ? {\n source_system: input.source.system,\n source_event_type: input.source.event_type,\n source_event_id: input.source.event_id,\n source_timestamp: input.source.timestamp,\n source_artifact_hash: input.source.artifact_hash,\n source_artifact_ref: input.source.artifact_ref,\n source_cloud_event_type: input.source.cloud_event_type,\n }\n : undefined,\n };\n\n return normalizeRuntimeGovernanceEvent(raw);\n}\n"]} | ||
| {"version":3,"sources":["../src/constants.ts","../src/types.ts","../src/families.ts","../src/normalize.ts","../src/internal/kid.ts","../src/builders.ts","../src/issue.ts","../src/session-summary.ts","../src/mappers/agt.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @peac/adapter-runtime-governance constants\n *\n * Vendor-neutral type URIs and extension namespace for runtime\n * governance record families. Observation-specific suffixes prevent\n * semantic bleed into authoritative claims.\n */\n\n/** Extension namespace for runtime governance record metadata. */\nexport const EXTENSION_NAMESPACE = 'org.peacprotocol/runtime-governance' as const;\n\n/** Reverse-DNS type prefix for all runtime governance record families. */\nexport const TYPE_PREFIX = 'org.peacprotocol/runtime-governance-' as const;\n\n/**\n * Canonical type URIs for the 6 runtime governance record families.\n * Each suffix is observation-specific (e.g., \"policy-decision\" not \"policy\").\n */\nexport const EVENT_TYPES = {\n POLICY_DECISION: `${TYPE_PREFIX}policy-decision`,\n AUDIT_ENTRY: `${TYPE_PREFIX}audit-entry`,\n AUTHORITY_SCOPE: `${TYPE_PREFIX}authority-scope`,\n LIFECYCLE_EVENT: `${TYPE_PREFIX}lifecycle-event`,\n TRUST_OBSERVATION: `${TYPE_PREFIX}trust-observation`,\n COMPLIANCE_OBSERVATION: `${TYPE_PREFIX}compliance-observation`,\n} as const;\n\nexport type EventType = (typeof EVENT_TYPES)[keyof typeof EVENT_TYPES];\n\n/** Maximum field lengths for validation. */\nexport const FIELD_LIMITS = {\n /** Identifiers: provider, agent_id, session_id, entry_id, etc. */\n maxIdentifier: 256,\n /** General string fields: action, matched_rule, policy_name, etc. */\n maxString: 1024,\n /** Digest strings: previous_hash, entry_hash, etc. */\n maxDigest: 512,\n /** URI fields: source_artifact_ref, etc. */\n maxUri: 2048,\n /** Timestamp fields: source_timestamp, etc. */\n maxTimestamp: 64,\n /** CloudEvents type URIs. */\n maxCloudEventType: 256,\n /** Array fields: effective_scope, matched_invariants. */\n maxArrayLength: 64,\n /** Array entry string length. */\n maxArrayEntry: 256,\n /** Framework token length. */\n maxFramework: 128,\n} as const;\n","/**\n * @peac/adapter-runtime-governance types\n *\n * Discriminated union payload model with per-family typing.\n * No weak Record<string, unknown> blobs.\n */\n\n/**\n * Runtime governance record families.\n * String-literal union (not enum) for lighter output and tree-shaking.\n */\nexport const RUNTIME_GOVERNANCE_FAMILIES = [\n 'policy_decision',\n 'audit_entry',\n 'authority_scope',\n 'lifecycle_event',\n 'trust_observation',\n 'compliance_observation',\n] as const;\n\nexport type RuntimeGovernanceFamily = (typeof RUNTIME_GOVERNANCE_FAMILIES)[number];\n\n/**\n * Preserved upstream artifact context.\n * All optional, all observational. Bounded fields, no arbitrary passthrough.\n */\nexport interface PreservedUpstreamArtifact {\n /** Upstream system identifier (max 256 chars). */\n source_system?: string;\n /** Upstream event type identifier (max 256 chars). */\n source_event_type?: string;\n /** Upstream event identifier for deduplication (max 256 chars). */\n source_event_id?: string;\n /** Upstream event timestamp (RFC 3339, max 64 chars). */\n source_timestamp?: string;\n /** Hash of upstream artifact (max 512 chars). */\n source_artifact_hash?: string;\n /** URI or reference to upstream artifact (max 2048 chars). */\n source_artifact_ref?: string;\n /** CloudEvents type URI for cross-system correlation (max 256 chars). */\n source_cloud_event_type?: string;\n}\n\n/** Policy decision payload. */\nexport interface PolicyDecisionPayload {\n family: 'policy_decision';\n action: string;\n matched_rule?: string;\n policy_name?: string;\n reason?: string;\n evaluation_ms?: number;\n}\n\n/** Audit entry payload. */\nexport interface AuditEntryPayload {\n family: 'audit_entry';\n entry_id?: string;\n event_type?: string;\n outcome?: string;\n previous_hash?: string;\n entry_hash?: string;\n trace_id?: string;\n}\n\n/** Authority scope payload. */\nexport interface AuthorityScopePayload {\n family: 'authority_scope';\n decision?: string;\n effective_scope?: string[];\n trust_tier?: string;\n matched_invariants?: string[];\n}\n\n/** Lifecycle event payload. */\nexport interface LifecycleEventPayload {\n family: 'lifecycle_event';\n lifecycle_event_type?: string;\n previous_state?: string;\n new_state?: string;\n actor?: string;\n}\n\n/** Trust observation payload. */\nexport interface TrustObservationPayload {\n family: 'trust_observation';\n peer_id?: string;\n action?: string;\n success?: boolean;\n trust_delta?: number;\n trust_score?: number;\n}\n\n/** Compliance observation payload. */\nexport interface ComplianceObservationPayload {\n family: 'compliance_observation';\n framework?: string;\n compliance_score?: number;\n violation_count?: number;\n evidence_item_count?: number;\n}\n\n/** Discriminated union of all family payloads. */\nexport type RuntimeGovernancePayload =\n | PolicyDecisionPayload\n | AuditEntryPayload\n | AuthorityScopePayload\n | LifecycleEventPayload\n | TrustObservationPayload\n | ComplianceObservationPayload;\n\n/**\n * Normalized runtime governance event.\n * Generic input to issueRuntimeGovernanceRecord().\n */\nexport interface RuntimeGovernanceEvent {\n /** Specific event name (e.g., 'policy.evaluated'). */\n event_name: string;\n /** Typed, validated payload (discriminated by family). */\n payload: RuntimeGovernancePayload;\n /** Optional preserved upstream artifact context. */\n upstream?: PreservedUpstreamArtifact;\n}\n\n/** Options for issuing a runtime governance record. */\nexport interface IssueOptions {\n /** Ed25519 private key (32 bytes). Caller-provided; never stored. */\n privateKey: Uint8Array;\n /** Key ID (max 256 chars). */\n kid: string;\n /** Canonical issuer URL (HTTPS or DID). */\n issuer: string;\n /** Session identifier for event correlation. */\n sessionId: string;\n /** Agent identifier. */\n agentId: string;\n /** Provider name. Caller-supplied; never hardcoded. */\n provider: string;\n}\n\n/** Result of issuing a runtime governance record. */\nexport interface IssueResult {\n /** Compact JWS (signed Interaction Record). */\n jws: string;\n /** PEAC event type URI used. */\n type: string;\n /** Record family. */\n family: RuntimeGovernanceFamily;\n}\n\n/** Session summary aggregated from decoded receipts. */\nexport interface SessionSummary {\n /** Session identifier. */\n sessionId: string;\n /** Total receipts in the session. */\n receipts: number;\n /** Distinct families represented (sorted alphabetically). */\n families: RuntimeGovernanceFamily[];\n /** Count of receipts with unrecognized type URIs. */\n unknownTypeCount: number;\n /** Issuer (from the first receipt, or empty if no receipts). */\n issuer: string;\n}\n","/**\n * Family registry.\n *\n * Maps each RuntimeGovernanceFamily to its canonical type URI\n * and Interaction Record kind. All families produce `evidence` kind.\n */\n\nimport { EVENT_TYPES, type EventType } from './constants.js';\nimport type { RuntimeGovernanceFamily } from './types.js';\n\nexport interface FamilyEntry {\n /** Canonical type URI for this family. */\n type: EventType;\n /** Interaction Record kind. Always 'evidence' for runtime governance. */\n kind: 'evidence';\n}\n\nexport const FAMILY_REGISTRY: Record<RuntimeGovernanceFamily, FamilyEntry> = {\n policy_decision: { type: EVENT_TYPES.POLICY_DECISION, kind: 'evidence' },\n audit_entry: { type: EVENT_TYPES.AUDIT_ENTRY, kind: 'evidence' },\n authority_scope: { type: EVENT_TYPES.AUTHORITY_SCOPE, kind: 'evidence' },\n lifecycle_event: { type: EVENT_TYPES.LIFECYCLE_EVENT, kind: 'evidence' },\n trust_observation: { type: EVENT_TYPES.TRUST_OBSERVATION, kind: 'evidence' },\n compliance_observation: { type: EVENT_TYPES.COMPLIANCE_OBSERVATION, kind: 'evidence' },\n};\n","/**\n * @peac/adapter-runtime-governance normalization and validation\n *\n * Fail-closed input validation for runtime governance payloads.\n * Rejects malformed input with descriptive errors.\n *\n * These are adapter-level shape prechecks: string presence, max lengths,\n * numeric bounds, RFC 3339 format, digest grammar (algorithm:hex), and\n * URI scheme presence. Protocol-layer validation (@peac/protocol issue()\n * and @peac/schema Wire02ClaimsSchema) remains authoritative for issuer\n * canonicality, JOSE hardening, and wire-format compliance. Adapter\n * validators catch obviously malformed input before it reaches the\n * protocol layer.\n *\n * PEAC validates the structure of carried values, not upstream truth.\n * Trust scores are structurally validated (finite, 0-1000 integer)\n * but never derived, recomputed, ranked, or authoritatively assessed.\n */\n\nimport { FIELD_LIMITS } from './constants.js';\nimport { RUNTIME_GOVERNANCE_FAMILIES } from './types.js';\nimport type {\n RuntimeGovernanceFamily,\n RuntimeGovernancePayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceEvent,\n} from './types.js';\n\nexport class NormalizationError extends Error {\n constructor(\n message: string,\n public readonly field: string\n ) {\n super(message);\n this.name = 'NormalizationError';\n }\n}\n\nfunction requireString(value: unknown, field: string, maxLen: number): string {\n if (typeof value !== 'string') {\n throw new NormalizationError(`${field} must be a string`, field);\n }\n if (value.length === 0) {\n throw new NormalizationError(`${field} must not be empty`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value;\n}\n\nfunction optionalString(value: unknown, field: string, maxLen: number): string | undefined {\n if (value === undefined || value === null) return undefined;\n return requireString(value, field, maxLen);\n}\n\nfunction optionalFiniteNumber(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new NormalizationError(`${field} must be a finite number`, field);\n }\n if (min !== undefined && value < min) {\n throw new NormalizationError(`${field} must be >= ${min}`, field);\n }\n if (max !== undefined && value > max) {\n throw new NormalizationError(`${field} must be <= ${max}`, field);\n }\n return value;\n}\n\nfunction optionalInteger(\n value: unknown,\n field: string,\n min?: number,\n max?: number\n): number | undefined {\n const n = optionalFiniteNumber(value, field, min, max);\n if (n !== undefined && !Number.isInteger(n)) {\n throw new NormalizationError(`${field} must be an integer`, field);\n }\n return n;\n}\n\nfunction optionalBoolean(value: unknown, field: string): boolean | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'boolean') {\n throw new NormalizationError(`${field} must be a boolean`, field);\n }\n return value;\n}\n\nconst RFC3339_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction optionalRfc3339(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !RFC3339_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be RFC 3339 format`, field);\n }\n return s;\n}\n\nconst DIGEST_PATTERN = /^[a-zA-Z0-9_-]+:[a-fA-F0-9]+$/;\n\nfunction optionalDigest(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !DIGEST_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must match digest pattern (algorithm:hex)`, field);\n }\n return s;\n}\n\nconst URI_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nfunction optionalUri(value: unknown, field: string, maxLen: number): string | undefined {\n const s = optionalString(value, field, maxLen);\n if (s !== undefined && !URI_PATTERN.test(s)) {\n throw new NormalizationError(`${field} must be a valid URI`, field);\n }\n return s;\n}\n\nfunction optionalStringArray(\n value: unknown,\n field: string,\n maxLen: number,\n maxEntryLen: number\n): string[] | undefined {\n if (value === undefined || value === null) return undefined;\n if (!Array.isArray(value)) {\n throw new NormalizationError(`${field} must be an array`, field);\n }\n if (value.length > maxLen) {\n throw new NormalizationError(`${field} exceeds max length ${maxLen}`, field);\n }\n return value.map((entry, i) => requireString(entry, `${field}[${i}]`, maxEntryLen));\n}\n\nfunction normalizePolicyDecision(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'policy_decision',\n action: requireString(input.action, 'action', FIELD_LIMITS.maxString),\n matched_rule: optionalString(input.matched_rule, 'matched_rule', FIELD_LIMITS.maxString),\n policy_name: optionalString(input.policy_name, 'policy_name', FIELD_LIMITS.maxString),\n reason: optionalString(input.reason, 'reason', FIELD_LIMITS.maxString),\n evaluation_ms: optionalFiniteNumber(input.evaluation_ms, 'evaluation_ms', 0),\n };\n}\n\nfunction normalizeAuditEntry(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'audit_entry',\n entry_id: optionalString(input.entry_id, 'entry_id', FIELD_LIMITS.maxIdentifier),\n event_type: optionalString(input.event_type, 'event_type', FIELD_LIMITS.maxString),\n outcome: optionalString(input.outcome, 'outcome', FIELD_LIMITS.maxString),\n previous_hash: optionalDigest(input.previous_hash, 'previous_hash', FIELD_LIMITS.maxDigest),\n entry_hash: optionalDigest(input.entry_hash, 'entry_hash', FIELD_LIMITS.maxDigest),\n trace_id: optionalString(input.trace_id, 'trace_id', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeAuthorityScope(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'authority_scope',\n decision: optionalString(input.decision, 'decision', FIELD_LIMITS.maxString),\n effective_scope: optionalStringArray(\n input.effective_scope,\n 'effective_scope',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n trust_tier: optionalString(input.trust_tier, 'trust_tier', FIELD_LIMITS.maxString),\n matched_invariants: optionalStringArray(\n input.matched_invariants,\n 'matched_invariants',\n FIELD_LIMITS.maxArrayLength,\n FIELD_LIMITS.maxArrayEntry\n ),\n };\n}\n\nfunction normalizeLifecycleEvent(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'lifecycle_event',\n lifecycle_event_type: optionalString(\n input.lifecycle_event_type,\n 'lifecycle_event_type',\n FIELD_LIMITS.maxString\n ),\n previous_state: optionalString(input.previous_state, 'previous_state', FIELD_LIMITS.maxString),\n new_state: optionalString(input.new_state, 'new_state', FIELD_LIMITS.maxString),\n actor: optionalString(input.actor, 'actor', FIELD_LIMITS.maxIdentifier),\n };\n}\n\nfunction normalizeTrustObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'trust_observation',\n peer_id: optionalString(input.peer_id, 'peer_id', FIELD_LIMITS.maxIdentifier),\n action: optionalString(input.action, 'action', FIELD_LIMITS.maxString),\n success: optionalBoolean(input.success, 'success'),\n trust_delta: optionalInteger(input.trust_delta, 'trust_delta', -1000, 1000),\n trust_score: optionalInteger(input.trust_score, 'trust_score', 0, 1000),\n };\n}\n\nfunction normalizeComplianceObservation(input: Record<string, unknown>): RuntimeGovernancePayload {\n return {\n family: 'compliance_observation',\n framework: optionalString(input.framework, 'framework', FIELD_LIMITS.maxFramework),\n compliance_score: optionalFiniteNumber(input.compliance_score, 'compliance_score', 0, 100),\n violation_count: optionalInteger(input.violation_count, 'violation_count', 0),\n evidence_item_count: optionalInteger(input.evidence_item_count, 'evidence_item_count', 0),\n };\n}\n\nconst FAMILY_NORMALIZERS: Record<\n RuntimeGovernanceFamily,\n (input: Record<string, unknown>) => RuntimeGovernancePayload\n> = {\n policy_decision: normalizePolicyDecision,\n audit_entry: normalizeAuditEntry,\n authority_scope: normalizeAuthorityScope,\n lifecycle_event: normalizeLifecycleEvent,\n trust_observation: normalizeTrustObservation,\n compliance_observation: normalizeComplianceObservation,\n};\n\nfunction normalizeUpstream(input: unknown): PreservedUpstreamArtifact | undefined {\n if (input === undefined || input === null) return undefined;\n if (typeof input !== 'object' || Array.isArray(input)) {\n throw new NormalizationError('upstream must be a plain object', 'upstream');\n }\n const obj = input as Record<string, unknown>;\n return {\n source_system: optionalString(\n obj.source_system,\n 'upstream.source_system',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_type: optionalString(\n obj.source_event_type,\n 'upstream.source_event_type',\n FIELD_LIMITS.maxIdentifier\n ),\n source_event_id: optionalString(\n obj.source_event_id,\n 'upstream.source_event_id',\n FIELD_LIMITS.maxIdentifier\n ),\n source_timestamp: optionalRfc3339(\n obj.source_timestamp,\n 'upstream.source_timestamp',\n FIELD_LIMITS.maxTimestamp\n ),\n source_artifact_hash: optionalDigest(\n obj.source_artifact_hash,\n 'upstream.source_artifact_hash',\n FIELD_LIMITS.maxDigest\n ),\n source_artifact_ref: optionalUri(\n obj.source_artifact_ref,\n 'upstream.source_artifact_ref',\n FIELD_LIMITS.maxUri\n ),\n source_cloud_event_type: optionalString(\n obj.source_cloud_event_type,\n 'upstream.source_cloud_event_type',\n FIELD_LIMITS.maxCloudEventType\n ),\n };\n}\n\n/**\n * Normalize and validate a raw runtime governance event input.\n * Fail-closed: rejects malformed input with descriptive errors.\n */\nexport function normalizeRuntimeGovernanceEvent(input: unknown): RuntimeGovernanceEvent {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) {\n throw new NormalizationError('input must be a plain object', 'input');\n }\n const obj = input as Record<string, unknown>;\n\n const eventName = requireString(obj.event_name, 'event_name', FIELD_LIMITS.maxString);\n\n if (typeof obj.payload !== 'object' || obj.payload === null || Array.isArray(obj.payload)) {\n throw new NormalizationError('payload must be a plain object', 'payload');\n }\n const payloadObj = obj.payload as Record<string, unknown>;\n\n const family = payloadObj.family;\n if (\n typeof family !== 'string' ||\n !(RUNTIME_GOVERNANCE_FAMILIES as readonly string[]).includes(family)\n ) {\n throw new NormalizationError(\n `payload.family must be one of: ${RUNTIME_GOVERNANCE_FAMILIES.join(', ')}`,\n 'payload.family'\n );\n }\n\n const normalizer = FAMILY_NORMALIZERS[family as RuntimeGovernanceFamily];\n const payload = normalizer(payloadObj);\n\n return {\n event_name: eventName,\n payload,\n upstream: normalizeUpstream(obj.upstream),\n };\n}\n","/**\n * The PEAC `kid` rule: a non-empty, well-formed Unicode string whose UTF-8 serialization is at\n * most MAX_KID_UTF8_BYTES bytes. RFC 7515 leaves the structure of `kid` unspecified; the bound\n * and well-formedness requirements are PEAC application-level constraints.\n *\n * Adapter-private. The authoritative implementation lives in `@peac/crypto` (`src/kid.ts`) and is\n * not part of its public surface, so the rule is restated here and a behavioural parity test holds\n * the two implementations identical. The bound is measured in UTF-8 bytes rather than UTF-16 code\n * units: 256 UTF-16 code units consisting of supplementary-plane characters serialize to 512 UTF-8\n * bytes. A serialized-byte bound is portable across implementations.\n */\n\n/** Maximum `kid` length, measured as UTF-8 bytes of the string's serialization. */\nexport const MAX_KID_UTF8_BYTES = 256;\n\n/** True when every surrogate in `s` belongs to a well-formed pair. */\nexport function isWellFormedUnicode(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c >= 0xd800 && c <= 0xdbff) {\n const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;\n if (next < 0xdc00 || next > 0xdfff) return false;\n i++;\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * UTF-8 byte length of a well-formed string. Throws on malformed UTF-16 so callers cannot silently\n * replace an unpaired surrogate with U+FFFD during UTF-8 encoding and thereby change the supplied\n * identifier.\n */\nexport function utf8ByteLength(s: string): number {\n let n = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) n += 1;\n else if (c < 0x800) n += 2;\n else if (c >= 0xd800 && c <= 0xdbff) {\n const next = i + 1 < s.length ? s.charCodeAt(i + 1) : 0;\n if (next < 0xdc00 || next > 0xdfff) {\n throw new TypeError('utf8ByteLength: unpaired high surrogate');\n }\n n += 4;\n i++;\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n throw new TypeError('utf8ByteLength: unpaired low surrogate');\n } else n += 3;\n }\n return n;\n}\n\n/** The complete PEAC `kid` rule. */\nexport function isValidKid(kid: unknown): kid is string {\n if (typeof kid !== 'string' || kid.length === 0) return false;\n if (!isWellFormedUnicode(kid)) return false;\n return utf8ByteLength(kid) <= MAX_KID_UTF8_BYTES;\n}\n","/**\n * @peac/adapter-runtime-governance extension builders\n *\n * Explicit per-family extension data builders. Each builder selects\n * exactly which fields appear in the extension output. Unknown upstream\n * fields never become top-level extension keys.\n */\n\nimport type {\n RuntimeGovernancePayload,\n PolicyDecisionPayload,\n AuditEntryPayload,\n AuthorityScopePayload,\n LifecycleEventPayload,\n TrustObservationPayload,\n ComplianceObservationPayload,\n PreservedUpstreamArtifact,\n RuntimeGovernanceFamily,\n} from './types.js';\n\ninterface CommonFields {\n session_id: string;\n event: string;\n agent_id: string;\n provider: string;\n}\n\nfunction stripUndefined(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const nested = stripUndefined(value as Record<string, unknown>);\n if (Object.keys(nested).length > 0) {\n result[key] = nested;\n }\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nfunction buildPolicyDecisionExtension(\n payload: PolicyDecisionPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n action: payload.action,\n matched_rule: payload.matched_rule,\n policy_name: payload.policy_name,\n reason: payload.reason,\n evaluation_ms: payload.evaluation_ms,\n upstream,\n });\n}\n\nfunction buildAuditEntryExtension(\n payload: AuditEntryPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n entry_id: payload.entry_id,\n event_type: payload.event_type,\n outcome: payload.outcome,\n previous_hash: payload.previous_hash,\n entry_hash: payload.entry_hash,\n trace_id: payload.trace_id,\n upstream,\n });\n}\n\nfunction buildAuthorityScopeExtension(\n payload: AuthorityScopePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n decision: payload.decision,\n effective_scope: payload.effective_scope,\n trust_tier: payload.trust_tier,\n matched_invariants: payload.matched_invariants,\n upstream,\n });\n}\n\nfunction buildLifecycleEventExtension(\n payload: LifecycleEventPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n lifecycle_event_type: payload.lifecycle_event_type,\n previous_state: payload.previous_state,\n new_state: payload.new_state,\n actor: payload.actor,\n upstream,\n });\n}\n\nfunction buildTrustObservationExtension(\n payload: TrustObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n peer_id: payload.peer_id,\n action: payload.action,\n success: payload.success,\n trust_delta: payload.trust_delta,\n trust_score: payload.trust_score,\n upstream,\n });\n}\n\nfunction buildComplianceObservationExtension(\n payload: ComplianceObservationPayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n): Record<string, unknown> {\n return stripUndefined({\n ...common,\n framework: payload.framework,\n compliance_score: payload.compliance_score,\n violation_count: payload.violation_count,\n evidence_item_count: payload.evidence_item_count,\n upstream,\n });\n}\n\ntype ExtensionBuilder = (\n payload: RuntimeGovernancePayload,\n common: CommonFields,\n upstream?: PreservedUpstreamArtifact\n) => Record<string, unknown>;\n\n/**\n * Per-family extension builder registry.\n * issueRuntimeGovernanceRecord() dispatches to the correct builder.\n */\nexport const FAMILY_BUILDERS: Record<RuntimeGovernanceFamily, ExtensionBuilder> = {\n policy_decision: (p, c, u) => buildPolicyDecisionExtension(p as PolicyDecisionPayload, c, u),\n audit_entry: (p, c, u) => buildAuditEntryExtension(p as AuditEntryPayload, c, u),\n authority_scope: (p, c, u) => buildAuthorityScopeExtension(p as AuthorityScopePayload, c, u),\n lifecycle_event: (p, c, u) => buildLifecycleEventExtension(p as LifecycleEventPayload, c, u),\n trust_observation: (p, c, u) =>\n buildTrustObservationExtension(p as TrustObservationPayload, c, u),\n compliance_observation: (p, c, u) =>\n buildComplianceObservationExtension(p as ComplianceObservationPayload, c, u),\n};\n","/**\n * @peac/adapter-runtime-governance record issuance\n *\n * Generic issuance function that dispatches to per-family extension\n * builders. Source-specific mappers (e.g., mapAgtEvent) produce the\n * RuntimeGovernanceEvent input; this function handles signing.\n *\n * PEAC validates the structure and signature of the PEAC record,\n * not the truth of the upstream governance decision or the operating\n * effectiveness of the upstream control plane.\n */\n\nimport { issue } from '@peac/protocol';\nimport { isValidKid } from './internal/kid.js';\nimport { EXTENSION_NAMESPACE } from './constants.js';\nimport { FAMILY_REGISTRY } from './families.js';\nimport { FAMILY_BUILDERS } from './builders.js';\nimport type { RuntimeGovernanceEvent, IssueOptions, IssueResult } from './types.js';\n\n/**\n * Issue a signed Interaction Record for a normalized runtime governance event.\n *\n * Use source-specific mappers (e.g., mapAgtEvent) to produce the event input.\n * The provider field is always caller-supplied and never hardcoded.\n */\nfunction validateIssueOptions(options: IssueOptions): void {\n if (!(options.privateKey instanceof Uint8Array) || options.privateKey.length !== 32) {\n throw new Error('privateKey must be a 32-byte Uint8Array');\n }\n if (!isValidKid(options.kid)) {\n throw new Error(\n 'kid must be a non-empty, well-formed Unicode string of at most 256 UTF-8 bytes'\n );\n }\n if (typeof options.issuer !== 'string' || options.issuer.length === 0) {\n throw new Error('issuer must be a non-empty string');\n }\n if (\n typeof options.sessionId !== 'string' ||\n options.sessionId.length === 0 ||\n options.sessionId.length > 256\n ) {\n throw new Error('sessionId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.agentId !== 'string' ||\n options.agentId.length === 0 ||\n options.agentId.length > 256\n ) {\n throw new Error('agentId must be a non-empty string (max 256 chars)');\n }\n if (\n typeof options.provider !== 'string' ||\n options.provider.length === 0 ||\n options.provider.length > 256\n ) {\n throw new Error('provider must be a non-empty string (max 256 chars)');\n }\n}\n\nexport async function issueRuntimeGovernanceRecord(\n event: RuntimeGovernanceEvent,\n options: IssueOptions\n): Promise<IssueResult> {\n validateIssueOptions(options);\n const entry = FAMILY_REGISTRY[event.payload.family];\n const { privateKey, kid, issuer, sessionId, agentId, provider } = options;\n\n const common = {\n session_id: sessionId,\n event: event.event_name,\n agent_id: agentId,\n provider,\n };\n\n const extensionData = FAMILY_BUILDERS[event.payload.family](\n event.payload,\n common,\n event.upstream\n );\n\n const { jws } = await issue({\n iss: issuer,\n kind: entry.kind,\n type: entry.type,\n privateKey,\n kid,\n extensions: { [EXTENSION_NAMESPACE]: extensionData },\n });\n\n return { jws, type: entry.type, family: event.payload.family };\n}\n","/**\n * @peac/adapter-runtime-governance session summary builder\n *\n * Aggregates decoded receipts into a session summary.\n * Decode-only (does NOT verify signatures; caller should verify first).\n * Returns deterministic family order (sorted alphabetically).\n * Counts unknown/unsupported type URIs separately.\n * Never implies verification or finality.\n */\n\nimport { decode } from '@peac/crypto';\nimport { EXTENSION_NAMESPACE, TYPE_PREFIX } from './constants.js';\nimport {\n RUNTIME_GOVERNANCE_FAMILIES,\n type RuntimeGovernanceFamily,\n type SessionSummary,\n} from './types.js';\n\n/** Reverse lookup set for known family suffixes. */\nconst KNOWN_SUFFIXES = new Set(RUNTIME_GOVERNANCE_FAMILIES.map((f) => f.replace(/_/g, '-')));\n\n/**\n * Build a session summary from an array of signed JWS receipts.\n *\n * Decodes each JWS (does NOT verify signatures; caller should verify first).\n * Extracts session ID, families, and issuer from claims and extensions.\n * Unknown type URIs are counted but not included in the families list.\n *\n * @param receipts - Array of compact JWS strings (must be valid JWS format)\n * @returns Session summary with deterministic family ordering\n */\nexport function buildSessionSummary(receipts: string[]): SessionSummary {\n if (receipts.length === 0) {\n return { sessionId: '', receipts: 0, families: [], unknownTypeCount: 0, issuer: '' };\n }\n\n let sessionId = '';\n let issuer = '';\n let unknownTypeCount = 0;\n const familySet = new Set<RuntimeGovernanceFamily>();\n\n for (const jws of receipts) {\n const decoded = decode(jws);\n const claims = decoded.payload as Record<string, unknown>;\n\n if (!issuer && typeof claims.iss === 'string') {\n issuer = claims.iss;\n }\n\n const extensions = claims.extensions as Record<string, unknown> | undefined;\n const govExt = extensions?.[EXTENSION_NAMESPACE] as Record<string, unknown> | undefined;\n\n if (govExt) {\n if (!sessionId && typeof govExt.session_id === 'string') {\n sessionId = govExt.session_id;\n }\n }\n\n const type = claims.type as string | undefined;\n if (type?.startsWith(TYPE_PREFIX)) {\n const suffix = type.slice(TYPE_PREFIX.length);\n if (KNOWN_SUFFIXES.has(suffix)) {\n familySet.add(suffix.replace(/-/g, '_') as RuntimeGovernanceFamily);\n } else {\n unknownTypeCount++;\n }\n } else if (type) {\n unknownTypeCount++;\n }\n }\n\n return {\n sessionId,\n receipts: receipts.length,\n families: [...familySet].sort(),\n unknownTypeCount,\n issuer,\n };\n}\n","/**\n * AGT-specific mapper\n *\n * Normalizes AGT-shaped JSON input into the generic\n * RuntimeGovernanceEvent model. Accepts raw JSON (not AGT SDK objects).\n *\n * Pinned to AGT v3.1.0 pre-release documentation (as of 2026-04-13).\n */\n\nimport { normalizeRuntimeGovernanceEvent, NormalizationError } from '../normalize.js';\nimport type { RuntimeGovernanceEvent, RuntimeGovernanceFamily } from '../types.js';\n\n/** AGT-shaped input. Raw JSON, not SDK objects. */\nexport interface AgtEventInput {\n /** Family name matching a RuntimeGovernanceFamily. */\n family: string;\n /** Specific event name (e.g., 'policy.evaluated'). */\n event: string;\n /** Event-specific data fields. */\n data: Record<string, unknown>;\n /** Optional upstream source context. */\n source?: {\n system?: string;\n event_type?: string;\n event_id?: string;\n timestamp?: string;\n artifact_hash?: string;\n artifact_ref?: string;\n cloud_event_type?: string;\n };\n}\n\nconst AGT_FAMILY_MAP: Record<string, RuntimeGovernanceFamily> = {\n policy_decision: 'policy_decision',\n audit_entry: 'audit_entry',\n authority_scope: 'authority_scope',\n lifecycle_event: 'lifecycle_event',\n trust_observation: 'trust_observation',\n compliance_observation: 'compliance_observation',\n};\n\n/**\n * Map an AGT-shaped event input to a normalized RuntimeGovernanceEvent.\n * Throws NormalizationError on unrecognized or malformed input.\n */\nexport function mapAgtEvent(input: AgtEventInput): RuntimeGovernanceEvent {\n const family = AGT_FAMILY_MAP[input.family];\n if (!family) {\n throw new NormalizationError(`unrecognized AGT family: ${input.family}`, 'family');\n }\n\n const raw = {\n event_name: input.event,\n payload: {\n family,\n ...input.data,\n },\n upstream: input.source\n ? {\n source_system: input.source.system,\n source_event_type: input.source.event_type,\n source_event_id: input.source.event_id,\n source_timestamp: input.source.timestamp,\n source_artifact_hash: input.source.artifact_hash,\n source_artifact_ref: input.source.artifact_ref,\n source_cloud_event_type: input.source.cloud_event_type,\n }\n : undefined,\n };\n\n return normalizeRuntimeGovernanceEvent(raw);\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../src/issue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyCpF,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CA4BtB"} | ||
| {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../src/issue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2CpF,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CA4BtB"} |
+3
-3
| { | ||
| "name": "@peac/adapter-runtime-governance", | ||
| "version": "0.16.3", | ||
| "version": "0.16.4", | ||
| "description": "Runtime governance adapter for PEAC interaction records with AGT mapper", | ||
@@ -42,4 +42,4 @@ "main": "dist/index.cjs", | ||
| "dependencies": { | ||
| "@peac/crypto": "0.16.3", | ||
| "@peac/protocol": "0.16.3" | ||
| "@peac/crypto": "0.16.4", | ||
| "@peac/protocol": "0.16.4" | ||
| }, | ||
@@ -46,0 +46,0 @@ "devDependencies": { |
183228
7.11%29
7.41%1442
7.85%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
Updated
Updated