Skip to main content
Version: 2.x

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

PostgresStoreOptions

Returns

PostgresStore

Overrides

CreditStore.constructor

Properties

providerEnvironment

readonly providerEnvironment: 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

AddCreditsOptions

Returns

Promise<AddCreditsResult>

Overrides

CreditStore.addCredits


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

CreditStore.addTeamMember


aggregateStats()

aggregateStats(start, end): Promise<AggregateStats>

Defined in: javascript/src/credits/postgres/store.ts:883

Parameters

start

Date

end

Date

Returns

Promise<AggregateStats>

Overrides

CreditStore.aggregateStats


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

CreditStore.checkAllowance


checkFeature()

checkFeature(userId, feature): Promise<CheckFeatureResult>

Defined in: javascript/src/credits/postgres/store.ts:715

Parameters

userId

string

feature

string

Returns

Promise<CheckFeatureResult>

Overrides

CreditStore.checkFeature


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

CreateLeaseOptions

Returns

Promise<LeaseResult>

Overrides

CreditStore.createLease


createTeam()

createTeam(ownerSubjectId, name, options): Promise<CreateTeamResult>

Defined in: javascript/src/credits/postgres/store.ts:1005

Parameters

ownerSubjectId

string

name

string

options

CreateTeamOptions

Returns

Promise<CreateTeamResult>

Overrides

CreditStore.createTeam


dailySpend()

dailySpend(start, end): Promise<DailySpendRow[]>

Defined in: javascript/src/credits/postgres/store.ts:923

Parameters

start

Date

end

Date

Returns

Promise<DailySpendRow[]>

Overrides

CreditStore.dailySpend


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

DeductTeamOptions

Returns

Promise<TeamDeductionResult>

Overrides

CreditStore.deductTeam


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

DeductWithAllowanceOptions

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

ExecuteGrantProgramRequest

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

CreditStore.expireLeases


getActiveCatalog()

getActiveCatalog(): Promise<CatalogRevision | null>

Defined in: javascript/src/credits/postgres/store.ts:562

Returns

Promise<CatalogRevision | null>

Overrides

CreditStore.getActiveCatalog


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

CreditStore.getAvailable


getBalance()

getBalance(userId): Promise<BalanceResult>

Defined in: javascript/src/credits/postgres/store.ts:248

Parameters

userId

string

Returns

Promise<BalanceResult>

Overrides

CreditStore.getBalance


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

CreditStore.getBucketBalances


getCatalogHistory()

getCatalogHistory(): Promise<CatalogRevisionSummary[]>

Defined in: javascript/src/credits/postgres/store.ts:598

Returns

Promise<CatalogRevisionSummary[]>

Overrides

CreditStore.getCatalogHistory


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

CreditStore.getLedgerEntry


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

CreditStore.getQuotaState


getTeamBalance()

getTeamBalance(teamId): Promise<TeamBalanceResult | null>

Defined in: javascript/src/credits/postgres/store.ts:1026

Parameters

teamId

string

Returns

Promise<TeamBalanceResult | null>

Overrides

CreditStore.getTeamBalance


getTeamMembers()

getTeamMembers(teamId): Promise<TeamMember[]>

Defined in: javascript/src/credits/postgres/store.ts:1056

Parameters

teamId

string

Returns

Promise<TeamMember[]>

Overrides

CreditStore.getTeamMembers


getUserPlan()

getUserPlan(userId): Promise<GetUserPlanResult>

Defined in: javascript/src/credits/postgres/store.ts:630

Parameters

userId

string

Returns

Promise<GetUserPlanResult>

Overrides

CreditStore.getUserPlan


listLedgerEntries()

listLedgerEntries(userId, options?): Promise<LedgerPage>

Defined in: javascript/src/credits/postgres/store.ts:970

Parameters

userId

string

options?

ListLedgerEntriesOptions

Returns

Promise<LedgerPage>

Overrides

CreditStore.listLedgerEntries


listQuotaEvents()

listQuotaEvents(userId, options?): Promise<QuotaEvent[]>

Defined in: javascript/src/credits/postgres/store.ts:800

Parameters

userId

string

options?

ListQuotaEventsOptions

Returns

Promise<QuotaEvent[]>

Overrides

CreditStore.listQuotaEvents


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?

ListUsageChargesOptions

Returns

Promise<UsageChargePage>

Overrides

CreditStore.listUsageCharges


listUsageEntries()

listUsageEntries(userId, options?): Promise<LedgerPage>

Defined in: javascript/src/credits/postgres/store.ts:974

Parameters

userId

string

options?

ListUsageEntriesOptions

Returns

Promise<LedgerPage>

Overrides

CreditStore.listUsageEntries


migratePlanBatch()

migratePlanBatch(migrationId, batchSize?): Promise<PlanMigrationBatchResult>

Defined in: javascript/src/credits/postgres/store.ts:769

Parameters

migrationId

string

batchSize?

number

Returns

Promise<PlanMigrationBatchResult>

Overrides

CreditStore.migratePlanBatch


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

DeductWithAllowanceOptions

Returns

Promise<UsageRecordResult>

Overrides

CreditStore.recordUsage


refundCredits()

refundCredits(entryId, options): Promise<RefundResult>

Defined in: javascript/src/credits/postgres/store.ts:852

Parameters

entryId

string

options

RefundCreditsOptions

Returns

Promise<RefundResult>

Overrides

CreditStore.refundCredits


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

CreditStore.releaseLease


removeTeamMember()

removeTeamMember(teamId, userId): Promise<boolean>

Defined in: javascript/src/credits/postgres/store.ts:1066

Parameters

teamId

string

userId

string

Returns

Promise<boolean>

Overrides

CreditStore.removeTeamMember


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

CreditStore.renewLease


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?

SettleLeaseOptions

Returns

Promise<DeductionResult>

Overrides

CreditStore.settleLease


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

CreditStore.setUserPlan


spendByModel()

spendByModel(start, end): Promise<SpendByModelRow[]>

Defined in: javascript/src/credits/postgres/store.ts:906

Parameters

start

Date

end

Date

Returns

Promise<SpendByModelRow[]>

Overrides

CreditStore.spendByModel


spendByUser()

spendByUser(start, end): Promise<SpendByUserRow[]>

Defined in: javascript/src/credits/postgres/store.ts:897

Parameters

start

Date

end

Date

Returns

Promise<SpendByUserRow[]>

Overrides

CreditStore.spendByUser


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

CreditStore.topUsers


unsetUserPlan()

unsetUserPlan(userId): Promise<UnsetUserPlanResult>

Defined in: javascript/src/credits/postgres/store.ts:745

Parameters

userId

string

Returns

Promise<UnsetUserPlanResult>

Overrides

CreditStore.unsetUserPlan