import { type IntegrationScopeAccess, type IntegrationScopeKey } from "./scope-store.js"; /** All budget values are integer millionths of one billing currency unit. */ export declare const INTEGRATION_BUDGET_COST_UNIT: "currency_micros"; export type IntegrationBudgetPeriod = "day" | "month"; export type IntegrationBudgetSubject = { type: "org"; orgId: string; } | { type: "user"; userEmail: string; } | { type: "scope"; scope: IntegrationScopeKey; }; export interface IntegrationUsageBudget { id: string; subjectType: IntegrationBudgetSubject["type"]; subjectId: string; period: IntegrationBudgetPeriod; /** Integer millionths of one billing currency unit. */ limitMicros: number; /** Threshold in basis points: 8,000 means 80%. */ thresholdBps: number; ownerEmail: string; orgId: string | null; createdAt: number; updatedAt: number; } export interface IntegrationBudgetSnapshot { budget: IntegrationUsageBudget; windowStart: number; windowEnd: number; usedMicros: number; reservedMicros: number; remainingMicros: number; costUnit: typeof INTEGRATION_BUDGET_COST_UNIT; } export type IntegrationReservationStatus = "pending" | "reserved" | "denied" | "settled" | "released"; export interface IntegrationBudgetReservationResult { allowed: boolean; reservationId: string; status: IntegrationReservationStatus; estimatedCostMicros: number; settledCostMicros: number | null; thresholdEventEmitted: boolean; snapshot: IntegrationBudgetSnapshot; } export interface IntegrationBudgetThresholdEvent { id: string; budgetId: string; windowStart: number; thresholdBps: number; observedMicros: number; createdAt: number; } export declare function saveIntegrationUsageBudget(input: { subject: IntegrationBudgetSubject; period: IntegrationBudgetPeriod; limitMicros: number; thresholdBps?: number; }, accessInput: IntegrationScopeAccess): Promise; export declare function getIntegrationUsageBudget(budgetIdInput: string, accessInput: IntegrationScopeAccess): Promise; /** List budgets visible in the caller's personal/active-org partition. */ export declare function listIntegrationUsageBudgets(accessInput: IntegrationScopeAccess): Promise; export declare function getIntegrationBudgetSnapshot(budgetIdInput: string, accessInput: IntegrationScopeAccess, timestamp?: number): Promise; export declare function reserveIntegrationUsageBudget(input: { budgetId: string; reservationId: string; estimatedCostMicros: number; timestamp?: number; }, accessInput: IntegrationScopeAccess): Promise; export declare function settleIntegrationUsageBudget(input: { budgetId: string; reservationId: string; actualCostMicros: number; }, accessInput: IntegrationScopeAccess): Promise; export declare function releaseIntegrationUsageBudget(input: { budgetId: string; reservationId: string; }, accessInput: IntegrationScopeAccess): Promise; export declare function listIntegrationBudgetThresholdEvents(budgetIdInput: string, accessInput: IntegrationScopeAccess): Promise; /** Test-only reset for suites that swap the injected database. */ export declare function _resetIntegrationUsageBudgetStoreForTests(): void; //# sourceMappingURL=usage-budget-store.d.ts.map