///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
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 {};