import { type AuthorityBoundFulfilment, type AuthorityExhaustion, type BoundEvaluation } from './types.js'; export interface IssueFulfilmentInput { readonly bound_id: string; readonly delegation_id: string; readonly attestor: string; readonly verification_method: string; /** Canonical UTC-millisecond time, supplied by the caller. Issuance never reads a clock, * so the same inputs produce the same bytes on every run, which is what makes the * signature reproducible in a test and in a conformance vector. */ readonly attested_at: string; readonly outcome: 'fulfilled' | 'not_fulfilled'; readonly reason_code: string; /** Omitted from the record entirely when not supplied, never written as null. */ readonly detail?: string; } /** * Mint a signed fulfilment attestation. * * What this function does NOT establish: that the holder of `privateKey` is in fact * `attestor`, that `verification_method` is one of that party's keys, or that the attestor * holds any fulfilment-attestor role. All three are a resolver's answer, not a local one. * `assessFulfilment` makes those checks, and it asks about standing BEFORE it asks about the * signature, because a record can be perfectly authentic and still come from somebody with * no standing to make the statement. * * Proposed. Concept source: aeoess/agent-authority-lifecycle. */ export declare function issueAuthorityBoundFulfilment(input: IssueFulfilmentInput, privateKeyHex: string): AuthorityBoundFulfilment; export interface IssueExhaustionInput { readonly boundary: string; readonly verification_method: string; /** Canonical UTC-millisecond time the finding was made. Never read from a clock. */ readonly found_at: string; readonly detail?: string; } /** * Mint the OPTIONAL signed exhaustion record for a `BoundEvaluation` that reached * `exhausted`. * * REFUSES on any other state, and the refusal is the design. A record that says "I found * this bound exhausted" when the evaluation said `not_established` would be a boundary * asserting a finding it did not make, which is precisely what CAND-01 forbids. There is no * flag to override it. * * `evidence` is derived from the evaluation's own accepted fulfilment records, and it is * EMPTY for a `use_count` or `budget` bound. That emptiness is honest rather than * incomplete: the basis for those two is the boundary's own ledger, which is the one thing * an outside verifier cannot check, and a placeholder there would hide the gap. The same * limit applies to the whole record, and ./types.ts states it: the record attests the * boundary's finding, not the state of the world, on the model draft-03 section 5.3.3 uses * for an action result. * * Proposed. Concept source: aeoess/agent-authority-lifecycle, invariant L10. */ export declare function issueAuthorityExhaustion(evaluation: BoundEvaluation, delegationId: string, input: IssueExhaustionInput, privateKeyHex: string): AuthorityExhaustion; export type AuthorityExhaustionFailureCode = 'SCHEMA_INVALID' | 'UNSUPPORTED_RECORD_TYPE' | 'ID_MISMATCH' | 'KEY_UNRESOLVED' | 'SIGNATURE_INVALID'; export interface AuthorityExhaustionVerification { /** `valid` or `invalid` only. This function answers a question about ONE record's bytes * and its signer, which is genuinely two sided, so it does not borrow the lifecycle * vocabulary. What the record means for a grant's state is `evaluateBound`'s question, * and a verified record is evidence toward it, never a substitute for it. */ readonly status: 'valid' | 'invalid'; readonly failures: readonly AuthorityExhaustionFailureCode[]; } /** * Verify an exhaustion record's bytes, identifier and signature. * * A `valid` answer here means: the record recomputes its own identifier, and the key * resolved for its `boundary` at its `found_at` signed it. It does NOT mean the bound is * exhausted. It means the named boundary said so, at that time, over those bytes. Treating * the two as the same thing is the substitution draft-03's own security considerations warn * about for receipts generally, verbatim: "Verifiers MUST treat receipts as evidence of what * was attested, not as proof of what is true." * * Proposed. */ export declare function verifyAuthorityExhaustion(record: AuthorityExhaustion, resolveVerificationKey: (boundary: string, verificationMethod: string, foundAt: string) => string | null): AuthorityExhaustionVerification; //# sourceMappingURL=record.d.ts.map