Skip to main content

Class: HttpxSupabaseStore

Defined in: javascript/src/stores/supabase-store.ts:154

Credit store backed by Supabase RPCs via raw HTTP (fetch).

No supabase-js dependency — makes direct POST requests to the Supabase REST API.

Error handling (M10 parity): network/fetch failures and JSON-decode errors are wrapped in StoreError; a non-2xx HTTP response throws StoreError. Business outcomes that the RPC returns as a {"error": code} envelope (insufficient credits, cap reached, over-refund, …) are NOT thrown — they are surfaced on the result model's .error field (e.g. DeductionResult.error), consistent with how the Postgres store and the Python SDK behave. The manager maps codes to typed exceptions.

Args: url: Supabase project URL (e.g. https://<project>.supabase.co). key: Supabase service_role key.

Extends

Constructors

Constructor

new HttpxSupabaseStore(url, key): HttpxSupabaseStore

Defined in: javascript/src/stores/supabase-store.ts:158

Parameters

url

string

key

string

Returns

HttpxSupabaseStore

Overrides

CreditStore.constructor

Methods

activatePricing()

activatePricing(version): Promise<string>

Defined in: javascript/src/stores/supabase-store.ts:579

Parameters

version

number

Returns

Promise<string>

Overrides

CreditStore.activatePricing


addCredits()

addCredits(userId, amount, type?, metadata?, expiresAt?, tier?, idempotencyKey?): Promise<AddCreditsResult>

Defined in: javascript/src/stores/supabase-store.ts:257

Parameters

userId

string

amount

Decimal

type?

string = "adjustment"

metadata?

CreditMetadata | null

expiresAt?

Date | null

tier?

string | null

idempotencyKey?

string | null

Returns

Promise<AddCreditsResult>

Overrides

CreditStore.addCredits


addTeamMember()

addTeamMember(teamId, userId, role?, spendCap?): Promise<AddTeamMemberResult>

Defined in: javascript/src/stores/supabase-store.ts:916

Parameters

teamId

string

userId

string

role?

string = "member"

spendCap?

Decimal | null

Returns

Promise<AddTeamMemberResult>

Overrides

CreditStore.addTeamMember


aggregateStats()

aggregateStats(start, end): Promise<AggregateStats>

Defined in: javascript/src/stores/supabase-store.ts:874

Parameters

start

Date

end

Date

Returns

Promise<AggregateStats>

Overrides

CreditStore.aggregateStats


checkAllowance()

checkAllowance(userId, periodStart?): Promise<AllowanceResult>

Defined in: javascript/src/stores/supabase-store.ts:637

Parameters

userId

string

periodStart?

Date | null

Returns

Promise<AllowanceResult>

Overrides

CreditStore.checkAllowance


checkFeature()

checkFeature(userId, feature): Promise<CheckFeatureResult>

Defined in: javascript/src/stores/supabase-store.ts:611

Parameters

userId

string

feature

string

Returns

Promise<CheckFeatureResult>

Overrides

CreditStore.checkFeature


checkFeatureLimit()

checkFeatureLimit(userId, feature, maxCalls, periodStart, periodEnd): Promise<FeatureLimitResult>

Defined in: javascript/src/stores/supabase-store.ts:666

Advisory, non-locking read of invocation-count usage (UI only). Mirrors checkSpendCap.

Parameters

userId

string

feature

string

maxCalls

number

periodStart

Date

periodEnd

Date

Returns

Promise<FeatureLimitResult>

Overrides

CreditStore.checkFeatureLimit


checkSpendCap()

checkSpendCap(userId, model?, amount?): Promise<CapCheckResult>

Defined in: javascript/src/stores/supabase-store.ts:710

Parameters

userId

string

model?

string | null

amount?

Decimal

Returns

Promise<CapCheckResult>

Overrides

CreditStore.checkSpendCap


createLease()

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

Defined in: javascript/src/stores/supabase-store.ts:361

Atomically acquire a lease (hold) — the only admission control (D4).

Under one critical section the store: (1) ensures the balance row exists; (2) enforces maxConcurrent by counting active leases for (userId, operationType); (3) enforces deny spend caps for amount; (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(name, initialBalance?): Promise<CreateTeamResult>

Defined in: javascript/src/stores/supabase-store.ts:890

Parameters

name

string

initialBalance?

Decimal = ZERO

Returns

Promise<CreateTeamResult>

Overrides

CreditStore.createTeam


dailySpend()

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

Defined in: javascript/src/stores/supabase-store.ts:805

Parameters

start

Date

end

Date

Returns

Promise<DailySpendRow[]>

Overrides

CreditStore.dailySpend


deductTeam()

deductTeam(teamId, userId, amount, metadata?, idempotencyKey?): Promise<TeamDeductionResult>

Defined in: javascript/src/stores/supabase-store.ts:947

Parameters

teamId

string

userId

string

amount

Decimal

metadata?

CreditMetadata | null

idempotencyKey?

string | null

Returns

Promise<TeamDeductionResult>

Overrides

CreditStore.deductTeam


deductWithAllowance()

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

Defined in: javascript/src/stores/supabase-store.ts:295

Atomically calculate-and-charge in one server-side transaction: consume free allowance, enforce spend caps, apply the balance floor, and debit the net amount — idempotency-keyed end-to-end. See contract §2.

Parameters

userId

string

amount

Decimal

options?

DeductWithAllowanceOptions

Returns

Promise<DeductionResult>

Overrides

CreditStore.deductWithAllowance


getActivePricing()

getActivePricing(): Promise<PricingConfigResult | null>

Defined in: javascript/src/stores/supabase-store.ts:534

Returns

Promise<PricingConfigResult | null>

Overrides

CreditStore.getActivePricing


getAvailable()

getAvailable(userId): Promise<AvailableResult>

Defined in: javascript/src/stores/supabase-store.ts:524

Advisory, non-locking read of available = balance − Σ active holds.

For UI only — never an admission gate (D4/H3); may be stale the instant read.

Parameters

userId

string

Returns

Promise<AvailableResult>

Overrides

CreditStore.getAvailable


getBalance()

getBalance(userId): Promise<BalanceResult>

Defined in: javascript/src/stores/supabase-store.ts:246

Parameters

userId

string

Returns

Promise<BalanceResult>

Overrides

CreditStore.getBalance


getCreditTiers()

getCreditTiers(userId): Promise<TierBalancesResult>

Defined in: javascript/src/stores/supabase-store.ts:1005

Per-tier credit balances for a user (credit tiers).

Sorted by priority ascending. When no tiers are configured, synthesizes a single "default" entry from the aggregate balance so the shape is uniform either way.

Parameters

userId

string

Returns

Promise<TierBalancesResult>

Overrides

CreditStore.getCreditTiers


getPricingConfig()

getPricingConfig(version): Promise<PricingConfigResult | null>

Defined in: javascript/src/stores/supabase-store.ts:567

Parameters

version

number

Returns

Promise<PricingConfigResult | null>

Overrides

CreditStore.getPricingConfig


getPricingHistory()

getPricingHistory(): Promise<PricingConfigHistoryItem[]>

Defined in: javascript/src/stores/supabase-store.ts:554

Returns

Promise<PricingConfigHistoryItem[]>

Overrides

CreditStore.getPricingHistory


getTeamBalance()

getTeamBalance(teamId): Promise<TeamBalanceResult>

Defined in: javascript/src/stores/supabase-store.ts:903

Parameters

teamId

string

Returns

Promise<TeamBalanceResult>

Overrides

CreditStore.getTeamBalance


getTeamMembers()

getTeamMembers(teamId): Promise<TeamMember[]>

Defined in: javascript/src/stores/supabase-store.ts:937

Parameters

teamId

string

Returns

Promise<TeamMember[]>

Overrides

CreditStore.getTeamMembers


getUserPlan()

getUserPlan(userId): Promise<GetUserPlanResult>

Defined in: javascript/src/stores/supabase-store.ts:588

Parameters

userId

string

Returns

Promise<GetUserPlanResult>

Overrides

CreditStore.getUserPlan


incrementUsageWindow()

incrementUsageWindow(userId, planId, amount): Promise<void>

Defined in: javascript/src/stores/supabase-store.ts:655

Parameters

userId

string

planId

string

amount

Decimal

Returns

Promise<void>

Overrides

CreditStore.incrementUsageWindow


listUsageEvents()

listUsageEvents(userId, options?): Promise<PaginatedTransactions>

Defined in: javascript/src/stores/supabase-store.ts:846

Parameters

userId

string

options?

ListUsageEventsOptions

Returns

Promise<PaginatedTransactions>

Overrides

CreditStore.listUsageEvents


listUserTransactions()

listUserTransactions(userId, options?): Promise<PaginatedTransactions>

Defined in: javascript/src/stores/supabase-store.ts:819

Parameters

userId

string

options?

ListTransactionsOptions

Returns

Promise<PaginatedTransactions>

Overrides

CreditStore.listUserTransactions


refundCredits()

refundCredits(transactionId, amount?, reason?, metadata?): Promise<RefundResult>

Defined in: javascript/src/stores/supabase-store.ts:734

Parameters

transactionId

string

amount?

Decimal

reason?

string

metadata?

CreditMetadata | null

Returns

Promise<RefundResult>

Overrides

CreditStore.refundCredits


releaseLease()

releaseLease(userId, leaseId): Promise<ReleaseResult>

Defined in: javascript/src/stores/supabase-store.ts:484

Release a lease without charging (work failed/aborted) — idempotent (H1).

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


renewLease()

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

Defined in: javascript/src/stores/supabase-store.ts:494

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


setActivePricing()

setActivePricing(config, label?): Promise<string>

Defined in: javascript/src/stores/supabase-store.ts:542

Parameters

config

PricingConfigData

label?

string | null

Returns

Promise<string>

Overrides

CreditStore.setActivePricing


settleLease()

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

Defined in: javascript/src/stores/supabase-store.ts:423

Charge the actual cost against a lease, then mark it settled (D5).

De-clamped: charges amount even if it exceeds the lease hold (overdraft), and never clamps to the reserved ceiling. Spend caps are advisory at settle (a breach sets capWarning but never blocks); no floor block, so 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


setup()

setup(_databaseUrl?): Promise<SetupResult>

Defined in: javascript/src/stores/supabase-store.ts:238

Parameters

_databaseUrl?

string | null

Returns

Promise<SetupResult>

Overrides

CreditStore.setup


setUserPlan()

setUserPlan(userId, planId): Promise<SetUserPlanResult>

Defined in: javascript/src/stores/supabase-store.ts:624

Parameters

userId

string

planId

string

Returns

Promise<SetUserPlanResult>

Overrides

CreditStore.setUserPlan


spendByModel()

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

Defined in: javascript/src/stores/supabase-store.ts:781

Parameters

start

Date

end

Date

Returns

Promise<SpendByModelRow[]>

Overrides

CreditStore.spendByModel


spendByUser()

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

Defined in: javascript/src/stores/supabase-store.ts:769

Parameters

start

Date

end

Date

Returns

Promise<SpendByUserRow[]>

Overrides

CreditStore.spendByUser


sweepExpiredCredits()

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

Defined in: javascript/src/stores/supabase-store.ts:984

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 CreditManager's lazy-on-read expiry, options.lazyExpiry).

Parameters

dryRun?

boolean = false

userId?

string

Returns

Promise<SweepResult>

Overrides

CreditStore.sweepExpiredCredits


topUsers()

topUsers(limit, start, end): Promise<TopUserRow[]>

Defined in: javascript/src/stores/supabase-store.ts:793

Parameters

limit

number

start

Date

end

Date

Returns

Promise<TopUserRow[]>

Overrides

CreditStore.topUsers