// Code generated by protoc-gen-ts_proto. DO NOT EDIT. // versions: // protoc-gen-ts_proto v2.11.4 // protoc v7.34.0 // source: ledger.proto /* eslint-disable */ import { GrpcMethod, GrpcStreamMethod } from "@nestjs/microservices"; import { Observable } from "rxjs"; export const protobufPackage = "ledger.v1"; export enum TransactionSortBy { TRANSACTION_SORT_BY_CREATED_AT = 0, TRANSACTION_SORT_BY_TYPE = 1, TRANSACTION_SORT_BY_ASSET = 2, TRANSACTION_SORT_BY_NETWORK = 3, TRANSACTION_SORT_BY_AMOUNT = 4, UNRECOGNIZED = -1, } export enum TransactionSortOrder { TRANSACTION_SORT_ORDER_DESC = 0, TRANSACTION_SORT_ORDER_ASC = 1, UNRECOGNIZED = -1, } export interface RegisterDepositAddressRequest { /** Идентификатор пользователя (строка, часто decimal bigint). */ userId: string; /** On-chain адрес приёма. */ address: string; /** Код актива, напр. USDT. */ asset: string; /** Сеть, напр. TRON, BSC. */ network: string; /** Опционально: id кошелька/аккаунта в custody. */ custodyWalletId?: string | undefined; } export interface RegisterDepositAddressResponse { /** Id записи адреса в ledger. */ id: string; userId: string; address: string; asset: string; network: string; custodyWalletId?: | string | undefined; /** ISO 8601. */ createdAt: string; } export interface CreditUserBalanceRequest { userId: string; asset: string; network: string; /** Десятичная строка (фиксированная точность по правилам сервиса). */ amount: string; /** Идентификатор транзакции в сети или суррогат для идемпотентности. */ txHash: string; /** Внешний id операции (custody, провайдер). */ externalOperationId: string; /** Ключ идемпотентности вызова. */ idempotencyKey: string; /** Опционально: число подтверждений на момент зачисления. */ confirmations?: | number | undefined; /** Для EVM: индекс лога; для TRON — 0 или не задано. */ logIndex?: number | undefined; } export interface CreditUserBalanceResponse { /** Id созданной/найденной записи депозита. */ depositId: string; /** Id ledger-операции. */ ledgerOperationId: string; /** Доступно после операции. */ available: string; reserved: string; total: string; /** id строки ленты (DEPOSIT), для сокетов / UI. */ transactionFeedItemId?: string | undefined; } export interface CreditDepositHoldRequest { userId: string; asset: string; network: string; amount: string; txHash: string; externalOperationId: string; idempotencyKey: string; confirmations?: number | undefined; logIndex?: number | undefined; } export interface CreditDepositHoldResponse { depositId: string; ledgerOperationId: string; available: string; reserved: string; total: string; transactionFeedItemId?: string | undefined; } export interface ReleaseDepositHoldRequest { userId: string; externalOperationId: string; idempotencyKey: string; } export interface ReleaseDepositHoldResponse { depositId: string; ledgerOperationId: string; available: string; reserved: string; total: string; transactionFeedItemId?: string | undefined; } export interface ForfeitDepositHoldRequest { userId: string; externalOperationId: string; idempotencyKey: string; reason: string; } export interface ForfeitDepositHoldResponse { depositId: string; ledgerOperationId: string; available: string; reserved: string; total: string; transactionFeedItemId?: string | undefined; } export interface RegisterWithdrawalRequest { userId: string; asset: string; network: string; amount: string; /** Адрес получателя в сети. */ destinationAddress: string; /** Внешний id заявки (idempotency с точки зрения продукта). */ requestId: string; /** Id трансфера в custody (BitGo), если уже известен. */ externalWithdrawalId?: | string | undefined; /** Комиссия сервиса, строка decimal. */ serviceFee: string; /** Сетевая комиссия, строка decimal. */ networkFee: string; /** Ключ идемпотентности вызова RegisterWithdrawal. */ idempotencyKey: string; } export interface RegisterWithdrawalResponse { /** Внутренний id вывода в ledger. */ withdrawalId: string; /** Текущий статус (enum строкой, см. реализацию). */ status: string; /** Устар.; первая строка ленты — после ReserveFunds (WITHDRAWAL_RESERVED). */ transactionFeedItemId?: string | undefined; } export interface ReserveFundsRequest { userId: string; asset: string; network: string; amount: string; /** Внутренний id вывода, под который резервируются средства. */ withdrawalId: string; idempotencyKey: string; } export interface ReserveFundsResponse { ledgerOperationId: string; available: string; reserved: string; total: string; /** id строки ленты (WITHDRAWAL_RESERVED), после RegisterWithdrawal без WITHDRAWAL_CREATED. */ transactionFeedItemId?: string | undefined; } export interface ReleaseFundsRequest { withdrawalId: string; /** Причина снятия резерва (аудит). */ reason: string; idempotencyKey: string; } export interface ReleaseFundsResponse { ledgerOperationId: string; available: string; reserved: string; total: string; } export interface FinalizeWithdrawalRequest { withdrawalId: string; txHash: string; /** ISO 8601 время финализации. */ finalizedAt: string; idempotencyKey: string; } export interface FinalizeWithdrawalResponse { ledgerOperationId: string; available: string; reserved: string; total: string; } export interface UpdateWithdrawalStatusRequest { /** Внутренний id вывода в ledger. */ withdrawalId?: | string | undefined; /** Id в custody (например BitGo transfer id). */ externalWithdrawalId?: | string | undefined; /** Целевой статус (строка enum Prisma/ledger). */ newStatus: string; txHash?: | string | undefined; /** Сырой JSON от custody/webhook для аудита. */ rawPayloadJson?: | string | undefined; /** * Тот же request_id, что при RegisterWithdrawal (UUID заявки). Нужен, если в Ledger * external_withdrawal_id = request_id от withdrawal_service, а custody шлёт BitGo transfer id. */ withdrawRequestId?: string | undefined; } export interface UpdateWithdrawalStatusResponse { withdrawalId: string; status: string; /** Была ли выполнена финализация в рамках этого вызова. */ finalized: boolean; /** Был ли снят резерв (отмена/ошибка). */ released: boolean; } export interface GetBalanceRequest { userId: string; asset: string; network: string; } export interface GetBalanceResponse { userId: string; asset: string; network: string; available: string; reserved: string; total: string; } export interface GetBalancesRequest { userId: string; } export interface BalanceRow { userId: string; asset: string; network: string; available: string; reserved: string; total: string; } export interface GetBalancesResponse { balances: BalanceRow[]; } export interface GetBalancesBatchRequest { userIds: string[]; } export interface UserBalancesRow { userId: string; balances: BalanceRow[]; } export interface GetBalancesBatchResponse { users: UserBalancesRow[]; } export interface GetFxRatesUsdRequest { } export interface FxRateUsdRow { asset: string; priceUsd: string; } export interface GetFxRatesUsdResponse { quoteCurrency: string; updatedAt: string; stale: boolean; rates: FxRateUsdRow[]; } export interface TransactionFeedItem { id: string; /** Тип события ленты (строка, см. TransactionFeedType в реализации). */ type: string; asset: string; network: string; amount?: string | undefined; referenceType?: string | undefined; referenceId?: string | undefined; title?: string | undefined; createdAt: string; /** JSON-строка с доп. полями. */ metadataJson?: string | undefined; } export interface GetTransactionFeedRequest { userId: string; limit: number; /** Курсор для следующей страницы. */ cursorId?: string | undefined; offset?: | number | undefined; /** Фильтр по активу, напр. USDT. */ asset?: | string | undefined; /** Фильтр по сети, напр. TRON, BSC. */ network?: | string | undefined; /** * Фильтр для UI: "wallet" | "card" | "withdrawal" | "deposit" | "internal_transfer". * wallet — UNION transaction_feed_items + card_operation; card — только card_operation (+ reference_id = cardId). * deposit включает записи reference_type deposit и deposit_hold. */ referenceKind?: | string | undefined; /** true: все события по выводу (RESERVED, WITHDRAWAL_STATUS, FINALIZED, …). По умолчанию — одна строка на вывод (последнее событие). */ expandWithdrawalTimeline?: boolean | undefined; referenceId?: string | undefined; } export interface GetTransactionFeedResponse { items: TransactionFeedItem[]; nextCursorId?: | string | undefined; /** Число элементов в этом ответе. */ totalReturned: number; } export interface AppendTransactionFeedItemRequest { userId: string; type: string; asset: string; network: string; amount?: string | undefined; referenceType?: string | undefined; referenceId?: string | undefined; title?: string | undefined; metadataJson?: string | undefined; idempotencyKey: string; createdAt?: string | undefined; } export interface ListTransactionsRequest { page?: number | undefined; limit?: number | undefined; sortBy?: TransactionSortBy | undefined; order?: TransactionSortOrder | undefined; search?: string | undefined; typeValue?: string | undefined; assetValue?: string | undefined; networkValue?: string | undefined; userId?: string | undefined; referenceTypeValue?: string | undefined; } export interface ListTransactionsResponse { items: TransactionFeedItem[]; allCount: number; page: number; limit: number; } export interface InternalTransferRequest { fromUserId: string; toUserId: string; asset: string; /** Необязательно: если пусто — сумма делится поровну между всеми сетями, где у отправителя есть available по активу. */ network: string; /** Десятичная строка; списание с available отправителя. */ amount: string; idempotencyKey: string; /** Как задан получатель на стороне Gateway: user_id | uid | email | phone | telegram */ recipientKind: string; /** Введённое пользователем значение */ recipientValue: string; } export interface InternalTransferResponse { transferId: string; senderLedgerOperationId: string; receiverLedgerOperationId: string; /** Агрегат по всем сетям для актива (после перевода), не только по одной сети. */ senderAvailable: string; senderReserved: string; senderTotal: string; receiverAvailable: string; receiverReserved: string; receiverTotal: string; /** id строки TransactionFeedItem у отправителя (INTERNAL_TRANSFER_SENT) — для истории / деталей */ transactionId: string; } export const LEDGER_V1_PACKAGE_NAME = "ledger.v1"; export interface LedgerServiceClient { /** Регистрация депозитного адреса: привязка on-chain адреса к пользователю, активу и сети (до зачисления средств). */ registerDepositAddress(request: RegisterDepositAddressRequest): Observable; /** Зачисление средств на доступный баланс пользователя (подтверждённый депозит); идемпотентность по ключу и внешнему id операции. */ creditUserBalance(request: CreditUserBalanceRequest): Observable; /** Зачисление депозита в резерв (AML review): total и reserved растут, available без изменений. */ creditDepositHold(request: CreditDepositHoldRequest): Observable; /** Перевод суммы из резерва в available (админ: HELD → зачислено). */ releaseDepositHold(request: ReleaseDepositHoldRequest): Observable; /** Списание из резерва и уменьшение total без возврата в available (блокировка / compliance). */ forfeitDepositHold(request: ForfeitDepositHoldRequest): Observable; /** Создание записи о выводе в учёте (черновик заявки); дальнейшие шаги — резерв, смена статусов, финализация. */ registerWithdrawal(request: RegisterWithdrawalRequest): Observable; /** Блокировка (резерв) средств на балансе под конкретный вывод после прохождения проверок. */ reserveFunds(request: ReserveFundsRequest): Observable; /** Снятие резерва (отмена вывода, ошибка custody и т.п.) с возвратом средств в available. */ releaseFunds(request: ReleaseFundsRequest): Observable; /** Фиксация успешного вывода в сеть: списание из резерва, сохранение tx hash. */ finalizeWithdrawal(request: FinalizeWithdrawalRequest): Observable; /** Обновление статуса вывода по внутреннему id или внешнему id custody (BitGo transfer id); переходы валидируются по правилам ledger. */ updateWithdrawalStatus(request: UpdateWithdrawalStatusRequest): Observable; /** Снимок баланса пользователя по одной паре (asset, network): available / reserved / total. */ getBalance(request: GetBalanceRequest): Observable; /** Все балансовые позиции пользователя по всем активам и сетям. */ getBalances(request: GetBalancesRequest): Observable; /** Балансовые позиции сразу для массива пользователей. */ getBalancesBatch(request: GetBalancesBatchRequest): Observable; /** Курсы поддерживаемых активов к USD (внешний провайдер, кэш в Ledger); без user_id — публичная справка для UI. */ getFxRatesUsd(request: GetFxRatesUsdRequest): Observable; /** Постраничная лента операций пользователя (история для UI); курсор и offset — на усмотрение сервера. */ getTransactionFeed(request: GetTransactionFeedRequest): Observable; /** Идемпотентное добавление внешнего события в UI-ленту (например card provider events). */ appendTransactionFeedItem(request: AppendTransactionFeedItemRequest): Observable; /** Админский список всех транзакций с пагинацией/фильтрами/поиском. */ listTransactions(request: ListTransactionsRequest): Observable; /** Внутренний перевод между пользователями приложения (только ledger, без сетевой комиссии). */ internalTransfer(request: InternalTransferRequest): Observable; } export interface LedgerServiceController { /** Регистрация депозитного адреса: привязка on-chain адреса к пользователю, активу и сети (до зачисления средств). */ registerDepositAddress( request: RegisterDepositAddressRequest, ): | Promise | Observable | RegisterDepositAddressResponse; /** Зачисление средств на доступный баланс пользователя (подтверждённый депозит); идемпотентность по ключу и внешнему id операции. */ creditUserBalance( request: CreditUserBalanceRequest, ): Promise | Observable | CreditUserBalanceResponse; /** Зачисление депозита в резерв (AML review): total и reserved растут, available без изменений. */ creditDepositHold( request: CreditDepositHoldRequest, ): Promise | Observable | CreditDepositHoldResponse; /** Перевод суммы из резерва в available (админ: HELD → зачислено). */ releaseDepositHold( request: ReleaseDepositHoldRequest, ): Promise | Observable | ReleaseDepositHoldResponse; /** Списание из резерва и уменьшение total без возврата в available (блокировка / compliance). */ forfeitDepositHold( request: ForfeitDepositHoldRequest, ): Promise | Observable | ForfeitDepositHoldResponse; /** Создание записи о выводе в учёте (черновик заявки); дальнейшие шаги — резерв, смена статусов, финализация. */ registerWithdrawal( request: RegisterWithdrawalRequest, ): Promise | Observable | RegisterWithdrawalResponse; /** Блокировка (резерв) средств на балансе под конкретный вывод после прохождения проверок. */ reserveFunds( request: ReserveFundsRequest, ): Promise | Observable | ReserveFundsResponse; /** Снятие резерва (отмена вывода, ошибка custody и т.п.) с возвратом средств в available. */ releaseFunds( request: ReleaseFundsRequest, ): Promise | Observable | ReleaseFundsResponse; /** Фиксация успешного вывода в сеть: списание из резерва, сохранение tx hash. */ finalizeWithdrawal( request: FinalizeWithdrawalRequest, ): Promise | Observable | FinalizeWithdrawalResponse; /** Обновление статуса вывода по внутреннему id или внешнему id custody (BitGo transfer id); переходы валидируются по правилам ledger. */ updateWithdrawalStatus( request: UpdateWithdrawalStatusRequest, ): | Promise | Observable | UpdateWithdrawalStatusResponse; /** Снимок баланса пользователя по одной паре (asset, network): available / reserved / total. */ getBalance( request: GetBalanceRequest, ): Promise | Observable | GetBalanceResponse; /** Все балансовые позиции пользователя по всем активам и сетям. */ getBalances( request: GetBalancesRequest, ): Promise | Observable | GetBalancesResponse; /** Балансовые позиции сразу для массива пользователей. */ getBalancesBatch( request: GetBalancesBatchRequest, ): Promise | Observable | GetBalancesBatchResponse; /** Курсы поддерживаемых активов к USD (внешний провайдер, кэш в Ledger); без user_id — публичная справка для UI. */ getFxRatesUsd( request: GetFxRatesUsdRequest, ): Promise | Observable | GetFxRatesUsdResponse; /** Постраничная лента операций пользователя (история для UI); курсор и offset — на усмотрение сервера. */ getTransactionFeed( request: GetTransactionFeedRequest, ): Promise | Observable | GetTransactionFeedResponse; /** Идемпотентное добавление внешнего события в UI-ленту (например card provider events). */ appendTransactionFeedItem( request: AppendTransactionFeedItemRequest, ): Promise | Observable | TransactionFeedItem; /** Админский список всех транзакций с пагинацией/фильтрами/поиском. */ listTransactions( request: ListTransactionsRequest, ): Promise | Observable | ListTransactionsResponse; /** Внутренний перевод между пользователями приложения (только ledger, без сетевой комиссии). */ internalTransfer( request: InternalTransferRequest, ): Promise | Observable | InternalTransferResponse; } export function LedgerServiceControllerMethods() { return function (constructor: Function) { const grpcMethods: string[] = [ "registerDepositAddress", "creditUserBalance", "creditDepositHold", "releaseDepositHold", "forfeitDepositHold", "registerWithdrawal", "reserveFunds", "releaseFunds", "finalizeWithdrawal", "updateWithdrawalStatus", "getBalance", "getBalances", "getBalancesBatch", "getFxRatesUsd", "getTransactionFeed", "appendTransactionFeedItem", "listTransactions", "internalTransfer", ]; for (const method of grpcMethods) { const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method); GrpcMethod("LedgerService", method)(constructor.prototype[method], method, descriptor); } const grpcStreamMethods: string[] = []; for (const method of grpcStreamMethods) { const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method); GrpcStreamMethod("LedgerService", method)(constructor.prototype[method], method, descriptor); } }; } export const LEDGER_SERVICE_NAME = "LedgerService";