Class: PostgresStore
Defined in: javascript/src/credits/postgres/store.ts:118
Abstract base for credit storage backends.
Split into two tiers:
- Core (abstract, must be implemented): balance/credit ops, the atomic lease lifecycle, bursar-config versioning, plan management, refunds, and expiry sweeping. Every backend needs these.
- Optional capabilities (concrete, default-throwing): usage analytics, ledger listing, and shared team-balance pools. A custom store that doesn't need these can skip them entirely — the default implementation throws CapabilityNotSupportedError instead of forcing a stub.
Extends
Constructors
Constructor
new PostgresStore(
options):PostgresStore
Defined in: javascript/src/credits/postgres/store.ts:187
Parameters
options
Returns
PostgresStore
Overrides
Properties
providerEnvironment
readonlyproviderEnvironment:NonNullable<"live"|"test"|"sandbox"|undefined>
Defined in: javascript/src/credits/postgres/store.ts:119
Optional provider namespace exposed by environment-aware stores.
Overrides
CreditStore.providerEnvironment
Methods
activateCatalogRevision()
activateCatalogRevision(
version,rollout?):Promise<string>
Defined in: javascript/src/credits/postgres/store.ts:614
Parameters
version
number
rollout?
CatalogRollout | null
Returns
Promise<string>
Overrides
CreditStore.activateCatalogRevision
addCredits()
addCredits(
userId,amount,options):Promise<AddCreditsResult>
Defined in: javascript/src/credits/postgres/store.ts:260
Parameters
userId
string
amount
Decimal
options
Returns
Promise<AddCreditsResult>
Overrides
addTeamMember()
addTeamMember(
teamId,userId,role?,spendCap?):Promise<AddTeamMemberResult>
Defined in: javascript/src/credits/postgres/store.ts:1037
Parameters
teamId
string
userId
string
role?
TeamRole = "member"
spendCap?
Decimal | null
Returns
Promise<AddTeamMemberResult>
Overrides
aggregateStats()
aggregateStats(
start,end):Promise<AggregateStats>
Defined in: javascript/src/credits/postgres/store.ts:883
Parameters
start
Date
end
Date
Returns
Promise<AggregateStats>
Overrides
applyDuePlanChanges()
applyDuePlanChanges(
limit?):Promise<number>
Defined in: javascript/src/credits/postgres/store.ts:754
Parameters
limit?
number = 100
Returns
Promise<number>
Overrides
CreditStore.applyDuePlanChanges
checkAllowance()
checkAllowance(
userId):Promise<AllowanceResult|null>
Defined in: javascript/src/credits/postgres/store.ts:828
Parameters
userId
string
Returns
Promise<AllowanceResult | null>
Overrides
checkFeature()
checkFeature(
userId,feature):Promise<CheckFeatureResult>
Defined in: javascript/src/credits/postgres/store.ts:715
Parameters
userId
string
feature
string
Returns
Promise<CheckFeatureResult>
Overrides
close()
close():
Promise<void>
Defined in: javascript/src/credits/postgres/store.ts:216
Returns
Promise<void>
createLease()
createLease(
userId,amount,operationType,options):Promise<LeaseResult>
Defined in: javascript/src/credits/postgres/store.ts:387
Atomically acquire a lease (hold) — the only authoritative admission control.
Under one critical section the store: (1) ensures the balance row exists;
(2) enforces maxConcurrent by counting active leases for (userId, operationType); (3) enforces plan entitlements and quotas; (4) computes
available = balance − Σ active holds and rejects with
error="insufficient_credits" if available − amount < floor; (5) inserts
an active lease expiring after ttlSeconds. Business failures are
returned via LeaseResult.error; the store never raises domain exceptions.
Parameters
userId
string
amount
Decimal
operationType
string
options
Returns
Promise<LeaseResult>
Overrides
createTeam()
createTeam(
ownerSubjectId,name,options):Promise<CreateTeamResult>
Defined in: javascript/src/credits/postgres/store.ts:1005
Parameters
ownerSubjectId
string
name
string
options
Returns
Promise<CreateTeamResult>
Overrides
dailySpend()
dailySpend(
start,end):Promise<DailySpendRow[]>
Defined in: javascript/src/credits/postgres/store.ts:923
Parameters
start
Date
end
Date
Returns
Promise<DailySpendRow[]>
Overrides
deductTeam()
deductTeam(
teamId,userId,amount,options):Promise<TeamDeductionResult>
Defined in: javascript/src/credits/postgres/store.ts:1070
Parameters
teamId
string
userId
string
amount
Decimal
options
Returns
Promise<TeamDeductionResult>
Overrides
deductWithAllowance()
deductWithAllowance(
userId,amount,options):Promise<DeductionResult>
Defined in: javascript/src/credits/postgres/store.ts:293
Atomically calculate-and-charge in one server-side transaction: consume free allowance, enforce plan policy and quotas, and debit the net amount, idempotency-keyed end-to-end.
Parameters
userId
string
amount
Decimal
options
Returns
Promise<DeductionResult>
Overrides
CreditStore.deductWithAllowance
executeGrantProgram()
executeGrantProgram(
request):Promise<GrantProgramAwardResult[]>
Defined in: javascript/src/credits/postgres/store.ts:1137
Execute one configured grant-program event.
Parameters
request
Returns
Promise<GrantProgramAwardResult[]>
Overrides
CreditStore.executeGrantProgram
expireLeases()
expireLeases(
limit?):Promise<number>
Defined in: javascript/src/credits/postgres/store.ts:542
Expire a bounded batch of abandoned leases and release their reservations.
Parameters
limit?
number = 100
Returns
Promise<number>
Overrides
getActiveCatalog()
getActiveCatalog():
Promise<CatalogRevision|null>
Defined in: javascript/src/credits/postgres/store.ts:562
Returns
Promise<CatalogRevision | null>
Overrides
getAvailable()
getAvailable(
userId):Promise<AvailableResult>
Defined in: javascript/src/credits/postgres/store.ts:549
Advisory, non-locking read of available = balance − Σ active holds.
For UI only — never an admission gate; may be stale the instant it is read.
Parameters
userId
string
Returns
Promise<AvailableResult>
Overrides
getBalance()
getBalance(
userId):Promise<BalanceResult>
Defined in: javascript/src/credits/postgres/store.ts:248
Parameters
userId
string
Returns
Promise<BalanceResult>
Overrides
getBucketBalances()
getBucketBalances(
userId):Promise<BucketBalancesResult>
Defined in: javascript/src/credits/postgres/store.ts:1125
Per-bucket credit balances for a user (credit buckets).
Sorted by priority ascending. When no buckets are configured, synthesizes
a single "default" entry from the aggregate balance so the shape is
uniform either way.
Parameters
userId
string
Returns
Promise<BucketBalancesResult>
Overrides
getCatalogHistory()
getCatalogHistory():
Promise<CatalogRevisionSummary[]>
Defined in: javascript/src/credits/postgres/store.ts:598
Returns
Promise<CatalogRevisionSummary[]>
Overrides
getCatalogRevision()
getCatalogRevision(
version):Promise<CatalogRevision|null>
Defined in: javascript/src/credits/postgres/store.ts:609
Parameters
version
number
Returns
Promise<CatalogRevision | null>
Overrides
CreditStore.getCatalogRevision
getLeasePricingContext()
getLeasePricingContext(
userId,leaseId):Promise<LeasePricingContext|null>
Defined in: javascript/src/credits/postgres/store.ts:484
Read the immutable catalog and rate card captured at lease admission.
Parameters
userId
string
leaseId
string
Returns
Promise<LeasePricingContext | null>
Overrides
CreditStore.getLeasePricingContext
getLedgerEntry()
getLedgerEntry(
userId,entryId):Promise<LedgerEntry|null>
Defined in: javascript/src/credits/postgres/store.ts:932
Fetch a single transaction by ID. Returns null when the transaction
does not exist or belongs to a different user.
Parameters
userId
string
entryId
string
Returns
Promise<LedgerEntry | null>
Overrides
getQuotaState()
getQuotaState(
userId,quotaKey?):Promise<QuotaState[]>
Defined in: javascript/src/credits/postgres/store.ts:781
Parameters
userId
string
quotaKey?
string | null
Returns
Promise<QuotaState[]>
Overrides
getTeamBalance()
getTeamBalance(
teamId):Promise<TeamBalanceResult|null>
Defined in: javascript/src/credits/postgres/store.ts:1026
Parameters
teamId
string
Returns
Promise<TeamBalanceResult | null>
Overrides
getTeamMembers()
getTeamMembers(
teamId):Promise<TeamMember[]>
Defined in: javascript/src/credits/postgres/store.ts:1056
Parameters
teamId
string
Returns
Promise<TeamMember[]>
Overrides
getUserPlan()
getUserPlan(
userId):Promise<GetUserPlanResult>
Defined in: javascript/src/credits/postgres/store.ts:630
Parameters
userId
string
Returns
Promise<GetUserPlanResult>
Overrides
listLedgerEntries()
listLedgerEntries(
userId,options?):Promise<LedgerPage>
Defined in: javascript/src/credits/postgres/store.ts:970
Parameters
userId
string
options?
Returns
Promise<LedgerPage>
Overrides
listQuotaEvents()
listQuotaEvents(
userId,options?):Promise<QuotaEvent[]>
Defined in: javascript/src/credits/postgres/store.ts:800
Parameters
userId
string
options?
Returns
Promise<QuotaEvent[]>
Overrides
listUsageCharges()
listUsageCharges(
userId,options?):Promise<UsageChargePage>
Defined in: javascript/src/credits/postgres/store.ts:978
Read metered usage charges, including allowance-covered events.
Parameters
userId
string
options?
Returns
Promise<UsageChargePage>
Overrides
listUsageEntries()
listUsageEntries(
userId,options?):Promise<LedgerPage>
Defined in: javascript/src/credits/postgres/store.ts:974
Parameters
userId
string
options?
Returns
Promise<LedgerPage>
Overrides
migratePlanBatch()
migratePlanBatch(
migrationId,batchSize?):Promise<PlanMigrationBatchResult>
Defined in: javascript/src/credits/postgres/store.ts:769
Parameters
migrationId
string
batchSize?
number
Returns
Promise<PlanMigrationBatchResult>
Overrides
publishAndActivateCatalog()
publishAndActivateCatalog(
config,label?,rollout?):Promise<string>
Defined in: javascript/src/credits/postgres/store.ts:571
Parameters
config
BursarConfig
label?
string | null
rollout?
CatalogRollout | null
Returns
Promise<string>
Overrides
CreditStore.publishAndActivateCatalog
publishCatalogDraft()
publishCatalogDraft(
config,label?):Promise<string>
Defined in: javascript/src/credits/postgres/store.ts:589
Parameters
config
BursarConfig
label?
string | null
Returns
Promise<string>
Overrides
CreditStore.publishCatalogDraft
recordUsage()
recordUsage(
userId,operation,amount,options):Promise<UsageRecordResult>
Defined in: javascript/src/credits/postgres/store.ts:350
Append priced usage telemetry without debiting the account again.
Parameters
userId
string
operation
string
amount
Decimal
options
Returns
Promise<UsageRecordResult>
Overrides
refundCredits()
refundCredits(
entryId,options):Promise<RefundResult>
Defined in: javascript/src/credits/postgres/store.ts:852
Parameters
entryId
string
options
Returns
Promise<RefundResult>
Overrides
releaseLease()
releaseLease(
userId,leaseId):Promise<ReleaseResult>
Defined in: javascript/src/credits/postgres/store.ts:498
Release a lease without charging; safe to repeat after failed or aborted work.
Transitions an active/expired lease to released and reports
released=true; otherwise reports released=false with a reason.
Parameters
userId
string
leaseId
string
Returns
Promise<ReleaseResult>
Overrides
removeTeamMember()
removeTeamMember(
teamId,userId):Promise<boolean>
Defined in: javascript/src/credits/postgres/store.ts:1066
Parameters
teamId
string
userId
string
Returns
Promise<boolean>
Overrides
renewLease()
renewLease(
userId,leaseId,ttlSeconds):Promise<LeaseResult>
Defined in: javascript/src/credits/postgres/store.ts:508
Extend an active lease's TTL (long batch/agentic jobs, resolves B4).
Returns error="lease_expired" if the TTL already elapsed and
error="lease_not_found" if missing/other-user/finalized.
Parameters
userId
string
leaseId
string
ttlSeconds
number
Returns
Promise<LeaseResult>
Overrides
revokeCreditsByEntryType()
revokeCreditsByEntryType(
userId,entryType):Promise<RevokeCreditsResult>
Defined in: javascript/src/credits/postgres/store.ts:839
Parameters
userId
string
entryType
string
Returns
Promise<RevokeCreditsResult>
Overrides
CreditStore.revokeCreditsByEntryType
setPlanRevisionPin()
setPlanRevisionPin(
userId,pinned):Promise<boolean>
Defined in: javascript/src/credits/postgres/store.ts:750
Parameters
userId
string
pinned
boolean
Returns
Promise<boolean>
Overrides
CreditStore.setPlanRevisionPin
settleLease()
settleLease(
userId,leaseId,amount,options?):Promise<DeductionResult>
Defined in: javascript/src/credits/postgres/store.ts:435
Charge the actual cost against a lease, then mark it settled.
De-clamped: charges amount even if it exceeds the lease hold (overdraft)
and never clamps to the reserved ceiling. The balance may go negative in
overdraft. amount === 0 releases the lease without charging.
Lease-state failures (lease_not_found/lease_expired) are returned via
DeductionResult.error; a replay returns the original result idempotently.
Parameters
userId
string
leaseId
string
amount
Decimal
options?
Returns
Promise<DeductionResult>
Overrides
setUserPlan()
setUserPlan(
userId,planKey,planAssignedAt?):Promise<SetUserPlanResult>
Defined in: javascript/src/credits/postgres/store.ts:726
Parameters
userId
string
planKey
string
planAssignedAt?
Date | null
Returns
Promise<SetUserPlanResult>
Overrides
spendByModel()
spendByModel(
start,end):Promise<SpendByModelRow[]>
Defined in: javascript/src/credits/postgres/store.ts:906
Parameters
start
Date
end
Date
Returns
Promise<SpendByModelRow[]>
Overrides
spendByUser()
spendByUser(
start,end):Promise<SpendByUserRow[]>
Defined in: javascript/src/credits/postgres/store.ts:897
Parameters
start
Date
end
Date
Returns
Promise<SpendByUserRow[]>
Overrides
startPlanMigration()
startPlanMigration(
fromPlanId,toPlanId):Promise<PlanMigrationStartResult>
Defined in: javascript/src/credits/postgres/store.ts:761
Parameters
fromPlanId
string | null
toPlanId
string
Returns
Promise<PlanMigrationStartResult>
Overrides
CreditStore.startPlanMigration
sweepExpiredCredits()
sweepExpiredCredits(
dryRun?,userId?,limit?):Promise<SweepResult>
Defined in: javascript/src/credits/postgres/store.ts:1113
Sweep expired credit grants and debit the aggregate/tier balances.
When userId is omitted (default), sweeps globally across every user —
unchanged behaviour/output shape from before this parameter existed. When
given, restricts the scan/expiry to that user's transactions only (used by
bounded expiry sweep operation).
Parameters
dryRun?
boolean = false
userId?
string
limit?
number = 100
Returns
Promise<SweepResult>
Overrides
CreditStore.sweepExpiredCredits
topUsers()
topUsers(
limit,start,end):Promise<TopUserRow[]>
Defined in: javascript/src/credits/postgres/store.ts:915
Parameters
limit
number
start
Date
end
Date
Returns
Promise<TopUserRow[]>
Overrides
unsetUserPlan()
unsetUserPlan(
userId):Promise<UnsetUserPlanResult>
Defined in: javascript/src/credits/postgres/store.ts:745
Parameters
userId
string
Returns
Promise<UnsetUserPlanResult>