import type { OwnershipScope } from "./contracts.js"; /** Host-authenticated actor (user, service, or agent principal). */ export interface Principal { readonly kind: "user" | "service" | "agent" | string; readonly id: string; readonly displayName?: string; } /** * Host-verified identity context. Projects onto {@link OwnershipScope}. * `verified: true` marks host-verifier output; trust boundaries must obtain this * via {@link IdentityVerifier}, never by accepting caller-asserted claims alone. */ export interface AgentIdentity { readonly tenantId: string; readonly accountId?: string; readonly userId?: string; /** Acting principal for this run/tool/delegation. */ readonly principal: Principal; /** Human sponsor accountable for the agent lifecycle (Entra-style). */ readonly sponsor?: Principal; /** Resource owner when distinct from sponsor. */ readonly owner?: Principal; /** Parent principal when this identity is a narrowed delegation. */ readonly delegatedFrom?: Principal; readonly scopes: readonly string[]; /** Late-bound credential resolver keys — never secret material. */ readonly credentialRefs?: readonly string[]; readonly issuedAt: string; readonly expiresAt?: string; readonly revokedAt?: string; readonly metadata?: Readonly>; readonly verified: true; } export interface IdentityVerifier { verify(input: unknown): AgentIdentity | Promise; } export interface AssertIdentityActiveOptions { readonly now?: number; /** When set, identity.tenantId must equal this value. */ readonly expectedTenantId?: string; readonly limits?: IdentityLimits; } export interface NarrowIdentityOptions { readonly scopes: readonly string[]; readonly principal?: Principal; readonly credentialRefs?: readonly string[]; readonly expiresAt?: string; readonly metadata?: Readonly>; readonly limits?: IdentityLimits; } export interface IdentityLimits { readonly maxScopes?: number; readonly maxScopeBytes?: number; readonly maxMetadataBytes?: number; readonly maxCredentialRefBytes?: number; readonly maxPrincipalIdBytes?: number; } export interface ResolvedIdentityLimits { readonly maxScopes: number; readonly maxScopeBytes: number; readonly maxMetadataBytes: number; readonly maxCredentialRefBytes: number; readonly maxPrincipalIdBytes: number; } export declare const DEFAULT_IDENTITY_LIMITS: ResolvedIdentityLimits; export declare const HARD_IDENTITY_LIMITS: ResolvedIdentityLimits; export declare class IdentityError extends Error { readonly reason: string; readonly code = "ERR_PRISM_IDENTITY"; constructor(message: string, reason: string); } export declare function resolveIdentityLimits(input?: IdentityLimits): ResolvedIdentityLimits; /** Project verified identity onto ownership scope fields used by persistence/server. */ export declare function ownershipFromIdentity(identity: AgentIdentity): OwnershipScope; /** * Fail closed on shape/limits/expiry/revocation/tenant mismatch. * Sync and network-free — host {@link IdentityVerifier} owns remote checks. */ export declare function assertIdentityActive(identity: AgentIdentity, options?: AssertIdentityActiveOptions): void; /** Delegation may only narrow scopes; tenant and ownership ids stay immutable. */ export declare function narrowIdentity(parent: AgentIdentity, options: NarrowIdentityOptions): AgentIdentity; /** Refuse ownership that widens or conflicts with a verified identity. */ export declare function assertIdentityMatchesOwnership(identity: AgentIdentity, ownership?: OwnershipScope): void; /** * Propagation check: child must share tenant, not widen scopes, and remain active. * Used by supervisor/A2A/MCP/server when forwarding identity across a boundary. */ export declare function assertIdentityPropagation(parent: AgentIdentity, child: AgentIdentity, options?: AssertIdentityActiveOptions): void; /** Redacted identity refs safe for telemetry/ledger metadata (no secrets, no raw JWT). */ export declare function identityTelemetryAttributes(identity: AgentIdentity): Readonly>; /** Resolve run identity: explicit option wins; otherwise agent default. Assert when present. */ export declare function resolveRunIdentity(runIdentity: AgentIdentity | undefined, agentIdentity: AgentIdentity | undefined, ownership: OwnershipScope | undefined, options?: AssertIdentityActiveOptions): AgentIdentity | undefined;