/**
 * relay-auth (P5) public barrel — the authorization surface P1/P3/P6 import. Imports
 * relay-contracts (§4) read-only; never redefines a frozen contract. Socket-free (no ws/xterm/ANSI
 * parser → INV2/INV11 hold by construction).
 */
export * from './types.js'

// Config (INV9)
export {
  configureVerifyKey,
  loadVerifyKeyFromEnv,
  getVerifyKey,
  KeyConfigError,
} from './config/keys.js'

// T2 capability tokens + DPoP + device-auth proof
export { issueCapabilityToken, CONNECT_TOKEN_MIN_TTL_SEC, CONNECT_TOKEN_MAX_TTL_SEC } from './capability/issue.js'
export {
  verifyCapabilityToken,
  verifyDpopProof,
  readCnfJkt,
  subAccountId,
  hasRight,
  peekExp,
  type DpopContext,
} from './capability/verify.js'
export { CapabilityError } from './capability/errors.js'
export {
  signDeviceAuthProof,
  verifyDeviceProof,
  deviceProofAccount,
  type DeviceProofBinding,
} from './capability/device-proof.js'

// T3 authz
export {
  authorizeConnect,
  authorizeReattach,
  type AuthzOutcome,
  type ConnectRequest,
  type ReattachRequest,
} from './authz/decide.js'
export { accountIdFromToken, principalFromToken, AuthzInputError } from './authz/principal.js'

// T4 audit
export { buildAuditEvent, audit } from './audit/log.js'
export { assertZeroPayload, ZeroPayloadViolation, MAX_METADATA_LEN } from './audit/redact.js'
export { onAuditEvent, type Alerter, type AlertKind } from './audit/alert.js'

// T5–T8 human auth
export { startRegistration, finishRegistration } from './human/webauthn/register.js'
export { startAuthentication, finishAuthentication } from './human/webauthn/authenticate.js'
export * from './human/webauthn/verifier.js'
export {
  generateTotpSecret,
  verifyTotp,
  checkTotpAttemptRate,
  recordTotpFailure,
} from './human/totp/totp.js'
export {
  buildAuthUrl,
  exchangeCode,
  verifyIdToken,
  randomUrlToken,
  pkceChallenge,
  OidcError,
  type OidcConfig,
  type OidcTokenSet,
} from './human/oidc/oidc.js'
export {
  policyForHost,
  needsStepUp,
  recordStepUp,
  DEFAULT_STEPUP_MAX_AGE_SECONDS,
} from './human/stepup/stepup.js'

// T9 mTLS / SPIFFE
export { spiffeIdFor, parseSpiffeId, trustDomain, SpiffeError } from './agent/spiffe.js'
export type { SpiffeKind } from './agent/spiffe.js'
export {
  verifyAgentCert,
  defaultParseX509,
  type MtlsVerifyResult,
  type ParsedCert,
  type ParseCert,
} from './agent/verify-mtls.js'
export { shouldRotate, DEFAULT_ROTATION_PLAN, DEFAULT_CERT_TTL_SECONDS, type RotationPlan } from './agent/rotate.js'

// T10 revocation
export { revoke, revokeToken } from './revocation/revoke.js'
export { isTokenRevoked, killsScope } from './revocation/check.js'

// T11 rate-limits
export {
  policyForPlan,
  PRE_AUTH_POLICY,
  checkPreAuthRate,
  checkConnectRate,
  checkConcurrentSessions,
  checkEnrollRate,
} from './ratelimit/quota.js'

// T12 enforcement
export { onUpgrade, type UpgradeContext, type EnforceDeps } from './enforce/onUpgrade.js'
export { onReattach, type ReattachContext } from './enforce/onReattach.js'
