/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// import type { FilterQuery, Types } from 'mongoose'; import type { IBalance, IBalanceUpdate, TransactionData } from '~/types'; import type { ITransaction } from '~/schema/transaction'; type MultiplierParams = { model?: string; valueKey?: string; tokenType?: 'prompt' | 'completion'; inputTokenCount?: number; endpointTokenConfig?: Record>; }; type CacheMultiplierParams = { cacheType?: 'write' | 'read'; model?: string; endpointTokenConfig?: Record>; }; /** Input data for creating a transaction */ export interface TxData { user: string | Types.ObjectId; conversationId?: string; model?: string; context?: string; tokenType?: 'prompt' | 'completion' | 'credits'; rawAmount?: number; valueKey?: string; endpointTokenConfig?: Record> | null; inputTokenCount?: number; inputTokens?: number; writeTokens?: number; readTokens?: number; balance?: { enabled?: boolean; }; transactions?: { enabled?: boolean; }; } /** Return value from a successful transaction that also updates the balance */ export interface TransactionResult { rate: number; user: string; balance: number; prompt?: number; completion?: number; credits?: number; } export declare function createTransactionMethods(mongoose: typeof import('mongoose'), txMethods: { getMultiplier: (params: MultiplierParams) => number; getCacheMultiplier: (params: CacheMultiplierParams) => number | null; }): { updateBalance: ({ user, incrementValue, setValues, }: { user: string; incrementValue: number; setValues?: IBalanceUpdate | undefined; }) => Promise; bulkInsertTransactions: (docs: TransactionData[]) => Promise; findBalanceByUser: (user: string) => Promise; upsertBalanceFields: (user: string, fields: IBalanceUpdate) => Promise; getTransactions: (filter: FilterQuery) => Promise<(import("mongoose").FlattenMaps & Required<{ _id: unknown; }> & { __v: number; })[]>; deleteTransactions: (filter: FilterQuery) => Promise; deleteBalances: (filter: FilterQuery) => Promise; createTransaction: (_txData: TxData) => Promise; createAutoRefillTransaction: (txData: TxData) => Promise<{ rate: number; user: string; balance: number; transaction: any; } | undefined>; createStructuredTransaction: (_txData: TxData) => Promise; }; export type TransactionMethods = ReturnType; export {};