Skip to main content
Version: 2.x

Abstract Class: CreditStore

Defined in: javascript/src/credits/store.ts:111

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.

Extended by

Constructors

Constructor

new CreditStore(): CreditStore

Defined in: javascript/src/credits/store.ts:114

Returns

CreditStore

Properties

providerEnvironment?

readonly optional providerEnvironment?: "live" | "test" | "sandbox"

Defined in: javascript/src/credits/store.ts:113

Optional provider namespace exposed by environment-aware stores.

Methods

activateCatalogRevision()

abstract activateCatalogRevision(version, rollout?): Promise<string>

Defined in: javascript/src/credits/store.ts:221

Parameters

version

number

rollout?

CatalogRollout | null

Returns

Promise<string>


addCredits()

abstract addCredits(userId, amount, options): Promise<AddCreditsResult>

Defined in: javascript/src/credits/store.ts:117

Parameters

userId

string

amount

Decimal

options

AddCreditsOptions

Returns

Promise<AddCreditsResult>


addTeamMember()

addTeamMember(_teamId, _userId, _role?, _spendCap?): Promise<AddTeamMemberResult>

Defined in: javascript/src/credits/store.ts:352

Parameters

_teamId

string

_userId

string

_role?

TeamRole

_spendCap?

Decimal | null

Returns

Promise<AddTeamMemberResult>


aggregateStats()

aggregateStats(_start, _end): Promise<AggregateStats>

Defined in: javascript/src/credits/store.ts:301

Parameters

_start

Date

_end

Date

Returns

Promise<AggregateStats>


applyDuePlanChanges()

abstract applyDuePlanChanges(limit?): Promise<number>

Defined in: javascript/src/credits/store.ts:234

Parameters

limit?

number

Returns

Promise<number>


checkAllowance()

abstract checkAllowance(userId): Promise<AllowanceResult | null>

Defined in: javascript/src/credits/store.ts:246

Parameters

userId

string

Returns

Promise<AllowanceResult | null>


checkFeature()

abstract checkFeature(userId, feature): Promise<CheckFeatureResult>

Defined in: javascript/src/credits/store.ts:243

Parameters

userId

string

feature

string

Returns

Promise<CheckFeatureResult>


createLease()

abstract createLease(userId, amount, operationType, options): Promise<LeaseResult>

Defined in: javascript/src/credits/store.ts:152

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>


createTeam()

createTeam(_ownerSubjectId, _name, _options): Promise<CreateTeamResult>

Defined in: javascript/src/credits/store.ts:342

Parameters

_ownerSubjectId

string

_name

string

_options

CreateTeamOptions

Returns

Promise<CreateTeamResult>


dailySpend()

dailySpend(_start, _end): Promise<DailySpendRow[]>

Defined in: javascript/src/credits/store.ts:298

Parameters

_start

Date

_end

Date

Returns

Promise<DailySpendRow[]>


deductTeam()

deductTeam(_teamId, _userId, _amount, _options): Promise<TeamDeductionResult>

Defined in: javascript/src/credits/store.ts:366

Parameters

_teamId

string

_userId

string

_amount

Decimal

_options

DeductTeamOptions

Returns

Promise<TeamDeductionResult>


deductWithAllowance()

abstract deductWithAllowance(userId, amount, options): Promise<DeductionResult>

Defined in: javascript/src/credits/store.ts:127

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>


executeGrantProgram()

executeGrantProgram(_request): Promise<GrantProgramAwardResult[]>

Defined in: javascript/src/credits/store.ts:282

Execute one configured grant-program event.

Parameters

_request

ExecuteGrantProgramRequest

Returns

Promise<GrantProgramAwardResult[]>


expireLeases()

expireLeases(_limit?): Promise<number>

Defined in: javascript/src/credits/store.ts:198

Expire a bounded batch of abandoned leases and release their reservations.

Parameters

_limit?

number

Returns

Promise<number>


getActiveCatalog()

abstract getActiveCatalog(): Promise<CatalogRevision | null>

Defined in: javascript/src/credits/store.ts:210

Returns

Promise<CatalogRevision | null>


getAvailable()

abstract getAvailable(userId): Promise<AvailableResult>

Defined in: javascript/src/credits/store.ts:208

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>


getBalance()

abstract getBalance(userId): Promise<BalanceResult>

Defined in: javascript/src/credits/store.ts:116

Parameters

userId

string

Returns

Promise<BalanceResult>


getBucketBalances()

abstract getBucketBalances(userId): Promise<BucketBalancesResult>

Defined in: javascript/src/credits/store.ts:279

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>


getCatalogHistory()

abstract getCatalogHistory(): Promise<CatalogRevisionSummary[]>

Defined in: javascript/src/credits/store.ts:219

Returns

Promise<CatalogRevisionSummary[]>


getCatalogRevision()

abstract getCatalogRevision(version): Promise<CatalogRevision | null>

Defined in: javascript/src/credits/store.ts:220

Parameters

version

number

Returns

Promise<CatalogRevision | null>


getLeasePricingContext()

abstract getLeasePricingContext(userId, leaseId): Promise<LeasePricingContext | null>

Defined in: javascript/src/credits/store.ts:176

Read the immutable catalog and rate card captured at lease admission.

Parameters

userId

string

leaseId

string

Returns

Promise<LeasePricingContext | null>


getLedgerEntry()

getLedgerEntry(_userId, _entryId): Promise<LedgerEntry | null>

Defined in: javascript/src/credits/store.ts:337

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>


getQuotaState()

abstract getQuotaState(userId, quotaKey?): Promise<QuotaState[]>

Defined in: javascript/src/credits/store.ts:244

Parameters

userId

string

quotaKey?

string | null

Returns

Promise<QuotaState[]>


getTeamBalance()

getTeamBalance(_teamId): Promise<TeamBalanceResult | null>

Defined in: javascript/src/credits/store.ts:349

Parameters

_teamId

string

Returns

Promise<TeamBalanceResult | null>


getTeamMembers()

getTeamMembers(_teamId): Promise<TeamMember[]>

Defined in: javascript/src/credits/store.ts:360

Parameters

_teamId

string

Returns

Promise<TeamMember[]>


getUserPlan()

abstract getUserPlan(userId): Promise<GetUserPlanResult>

Defined in: javascript/src/credits/store.ts:226

Parameters

userId

string

Returns

Promise<GetUserPlanResult>


listLedgerEntries()

listLedgerEntries(_userId, _options?): Promise<LedgerPage>

Defined in: javascript/src/credits/store.ts:306

Parameters

_userId

string

_options?

ListLedgerEntriesOptions

Returns

Promise<LedgerPage>


listQuotaEvents()

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

Defined in: javascript/src/credits/store.ts:245

Parameters

userId

string

options?

ListQuotaEventsOptions

Returns

Promise<QuotaEvent[]>


listUsageCharges()

listUsageCharges(_userId, _options?): Promise<UsageChargePage>

Defined in: javascript/src/credits/store.ts:315

Read metered usage charges, including allowance-covered events.

Parameters

_userId

string

_options?

ListUsageChargesOptions

Returns

Promise<UsageChargePage>


listUsageEntries()

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

Defined in: javascript/src/credits/store.ts:312

Parameters

userId

string

options?

ListUsageEntriesOptions

Returns

Promise<LedgerPage>


migratePlanBatch()

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

Defined in: javascript/src/credits/store.ts:239

Parameters

migrationId

string

batchSize?

number

Returns

Promise<PlanMigrationBatchResult>


publishAndActivateCatalog()

abstract publishAndActivateCatalog(config, label?, rollout?): Promise<string>

Defined in: javascript/src/credits/store.ts:211

Parameters

config

BursarConfig

label?

string | null

rollout?

CatalogRollout | null

Returns

Promise<string>


publishCatalogDraft()

abstract publishCatalogDraft(config, label?): Promise<string>

Defined in: javascript/src/credits/store.ts:216

Parameters

config

BursarConfig

label?

string | null

Returns

Promise<string>


recordUsage()

recordUsage(_userId, _operation, _requested, _options): Promise<UsageRecordResult>

Defined in: javascript/src/credits/store.ts:323

Append priced usage telemetry without debiting the account again.

Parameters

_userId

string

_operation

string

_requested

Decimal

_options

DeductWithAllowanceOptions

Returns

Promise<UsageRecordResult>


refundCredits()

abstract refundCredits(entryId, options): Promise<RefundResult>

Defined in: javascript/src/credits/store.ts:254

Parameters

entryId

string

options

RefundCreditsOptions

Returns

Promise<RefundResult>


releaseLease()

abstract releaseLease(userId, leaseId): Promise<ReleaseResult>

Defined in: javascript/src/credits/store.ts:187

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>


removeTeamMember()

removeTeamMember(_teamId, _userId): Promise<boolean>

Defined in: javascript/src/credits/store.ts:363

Parameters

_teamId

string

_userId

string

Returns

Promise<boolean>


renewLease()

abstract renewLease(userId, leaseId, ttlSeconds): Promise<LeaseResult>

Defined in: javascript/src/credits/store.ts:195

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>


revokeCreditsByEntryType()

abstract revokeCreditsByEntryType(userId, entryType): Promise<RevokeCreditsResult>

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

Parameters

userId

string

entryType

string

Returns

Promise<RevokeCreditsResult>


setPlanRevisionPin()

abstract setPlanRevisionPin(userId, pinned): Promise<boolean>

Defined in: javascript/src/credits/store.ts:233

Parameters

userId

string

pinned

boolean

Returns

Promise<boolean>


settleLease()

abstract settleLease(userId, leaseId, amount, options?): Promise<DeductionResult>

Defined in: javascript/src/credits/store.ts:168

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>


setUserPlan()

abstract setUserPlan(userId, planKey, planAssignedAt?): Promise<SetUserPlanResult>

Defined in: javascript/src/credits/store.ts:227

Parameters

userId

string

planKey

string

planAssignedAt?

Date | null

Returns

Promise<SetUserPlanResult>


spendByModel()

spendByModel(_start, _end): Promise<SpendByModelRow[]>

Defined in: javascript/src/credits/store.ts:292

Parameters

_start

Date

_end

Date

Returns

Promise<SpendByModelRow[]>


spendByUser()

spendByUser(_start, _end): Promise<SpendByUserRow[]>

Defined in: javascript/src/credits/store.ts:289

Parameters

_start

Date

_end

Date

Returns

Promise<SpendByUserRow[]>


startPlanMigration()

abstract startPlanMigration(fromPlanId, toPlanId): Promise<PlanMigrationStartResult>

Defined in: javascript/src/credits/store.ts:235

Parameters

fromPlanId

string | null

toPlanId

string

Returns

Promise<PlanMigrationStartResult>


sweepExpiredCredits()

abstract sweepExpiredCredits(dryRun?, userId?, limit?): Promise<SweepResult>

Defined in: javascript/src/credits/store.ts:265

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

userId?

string

limit?

number

Returns

Promise<SweepResult>


topUsers()

topUsers(_limit, _start, _end): Promise<TopUserRow[]>

Defined in: javascript/src/credits/store.ts:295

Parameters

_limit

number

_start

Date

_end

Date

Returns

Promise<TopUserRow[]>


unsetUserPlan()

abstract unsetUserPlan(userId): Promise<UnsetUserPlanResult>

Defined in: javascript/src/credits/store.ts:232

Parameters

userId

string

Returns

Promise<UnsetUserPlanResult>