fix(billing): apply margin multiplier to subscription quota consumption
Memind CI / Test, build, and release guards (push) Successful in 5m1s

Subscription plans now deduct period_tokens_used as upstream tokens ×
marginMultiplier, aligning package quota burn with wallet cost-mode pricing.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-08-28 20:31:38 +08:00
parent e85b9b986a
commit 6f48cad4c2
6 changed files with 146 additions and 9 deletions
+8 -2
View File
@@ -3,7 +3,12 @@ import fs from 'node:fs';
import net from 'node:net';
import path from 'node:path';
import { Algorithm as Argon2Algorithm, hashRawSync as argon2HashRawSync } from '@node-rs/argon2';
import { computeDeltaCostCents, loadBillingConfig, normalizeTokenState } from './billing.mjs';
import {
computeDeltaCostCents,
computeSubscriptionQuotaTokens,
loadBillingConfig,
normalizeTokenState,
} from './billing.mjs';
import { buildInsufficientBalancePayload, loadRechargeConfig } from './billing-recharge.mjs';
import {
buildAgentExtensionPolicy,
@@ -1444,6 +1449,7 @@ export function createUserAuth(pool, options = {}) {
tokenState.accumulatedOutputTokens - Number(previous?.lastOutputTokens ?? 0),
);
const deltaTokens = deltaIn + deltaOut;
const subscriptionQuotaTokens = computeSubscriptionQuotaTokens(deltaIn, deltaOut, config);
await conn.query(
`INSERT INTO h5_session_billing_state
@@ -1467,7 +1473,7 @@ export function createUserAuth(pool, options = {}) {
// Subscription quota check: consume tokens from active plan before touching balance.
let subscriptionCovered = false;
if (costCents > 0 && subscriptionService) {
const coverage = await subscriptionService.consumeQuota(userId, deltaTokens, conn);
const coverage = await subscriptionService.consumeQuota(userId, subscriptionQuotaTokens, conn);
if (coverage.fullyCovers) {
costCents = 0;
subscriptionCovered = true;