import { ApiClient } from '../core/client'; import { CantonPrepareTransactionResponseDto, CantonSubmitRegisterRequestDto, CantonSubmitTransactionResponseDto, CantonMeResponseDto, CantonActiveContractsResponseDto, CantonEstimateGasRequestDto, CantonEstimateGasResponseDto, CantonQueryCompletionResponseDto, CantonWalletBalancesResponseDto, CantonPrepareTransferRequestDto, CantonPrepareTransferResponseDto, CantonCalculateTransferFeeRequestDto, CantonCalculateTransferFeeResponseDto, CantonPrepareAmuletTransferRequestDto, CantonPrepareAmuletTransferResponseDto, CantonIncomingTransferDto, CantonPrepareResponseIncomingTransferRequestDto, CantonCostEstimationDto, CantonTransactionDto, CantonTransactionsParams, CantonPriceInterval, CantonPriceCandleDto, CantonSubmitMultipleResultDto } from '../core/types'; export { DEFAULT_COMPLETION_POLL_INTERVAL_MS, DEFAULT_COMPLETION_TIMEOUT_MS, } from '../utils/polling'; export type { CantonMeResponseDto, CantonActiveContractsResponseDto, CantonPrepareTransactionResponseDto, CantonEstimateGasRequestDto, CantonEstimateGasResponseDto, CantonQueryCompletionResponseDto, CantonWalletBalancesResponseDto, CantonPrepareTransferRequestDto, CantonPrepareTransferResponseDto, CantonCalculateTransferFeeRequestDto, CantonCalculateTransferFeeResponseDto, CantonPrepareAmuletTransferRequestDto, CantonPrepareAmuletTransferResponseDto, CantonIncomingTransferDto, CantonPrepareResponseIncomingTransferRequestDto, CantonCostEstimationDto, CantonTransactionDto, CantonTransactionsParams, CantonPriceInterval, CantonPriceCandleDto, CantonSubmitMultipleResultDto, }; export interface CantonRegisterParams { /** Base64 public key from Stellar wallet */ publicKey: string; /** Function to sign hash (returns signature in hex) */ signFunction: (hashHex: string) => Promise; /** Optional invite code */ inviteCode?: string; } export interface CantonTapParams { /** Amount of Canton coins to receive */ amount: string; /** Function to sign hash (returns signature in hex) */ signFunction: (hashHex: string) => Promise; } export interface CantonSubmitPreparedOptions { /** Timeout in milliseconds to wait for completion (default: {@link DEFAULT_COMPLETION_TIMEOUT_MS}, 60000) */ timeout?: number; /** Polling interval in milliseconds (default: {@link DEFAULT_COMPLETION_POLL_INTERVAL_MS}, 1000) */ pollInterval?: number; /** Callback fired after submitPrepared returns submissionId (optional) */ onSubmissionId?: (submissionId: string) => void | Promise; /** Callback to receive cost estimation before signing (optional) */ onCostEstimation?: (costEstimation: CantonCostEstimationDto | undefined) => void | Promise; /** Optional command ID for idempotency (passed to prepareTransaction) */ commandId?: string; /** Optional deduplication period (passed to submitPrepared) */ deduplicationPeriod?: any; /** Skip confirmation modal and sign silently. Default: false */ skipModal?: boolean; } export declare class CantonService { private client; private meCache; private meCacheTimestamp; private mePendingPromise; private readonly CACHE_TTL; private static readonly AMULET_INSTRUMENT_ID; constructor(client: ApiClient); /** * Invalidate /me cache * Called after registration/user modification operations */ private invalidateMeCache; /** * Validate decimal places for transfer amount (max 10) */ private validateTransferAmount; /** * Register Canton wallet * Flow: * 1. Call /canton/register/prepare with publicKey -> get hash * 2. Sign hash with Stellar wallet * 3. Call /canton/register/submit with hash + signature * * @param params Registration parameters */ registerCanton(params: CantonRegisterParams, errCounter?: number): Promise; /** * Tap devnet faucet to receive test Canton coins * Flow: * 1. Call /canton/devnet/tap with amount -> get hash * 2. Sign hash with Stellar wallet * 3. Call /canton/api/submit_prepared with hash + signature * 4. Poll for completion * * @param params Tap parameters * @param options Polling options */ tapDevnet(params: CantonTapParams, options?: CantonSubmitPreparedOptions): Promise; /** * Submit signed Canton transaction * @param hash Base64 hash * @param signature Base64 signature */ submitPrepared(hash: string, signature: string, deduplicationPeriod?: any): Promise; /** * Submit multiple signed Canton transactions in a single request * @param txs Array of { hash, signature } (base64) */ submitMultiplePrepared(txs: CantonSubmitRegisterRequestDto[]): Promise; /** * Query completion status for a submission * @param submissionId Submission ID from submitPrepared */ queryCompletion(submissionId: string): Promise; /** * Submit signed Canton transaction and wait for completion * Polls the ledger API until the transaction is completed or timeout is reached * @param hash Base64 hash * @param signature Base64 signature * @param options Polling options (timeout, pollInterval) * @returns Completion data when transaction is completed * @throws Error if timeout is reached before completion */ submitPreparedAndWait(hash: string, signature: string, options?: CantonSubmitPreparedOptions): Promise; /** * Get current Canton user info (partyId and email) * Only works after registration * With 5 minute caching and request deduplication */ getMe(force?: boolean): Promise; /** * Get active contracts with optional template filtering and pagination * @param templateIds Optional array of template IDs to filter by * @param pagination Optional pagination: limit, offset (offset requires limit) */ getActiveContracts(templateIds?: string[], pagination?: { limit: number; offset?: number; } | { limit?: number; }): Promise; /** * Sign text message (client-side only, no backend call) * Converts text to bytes and signs with Stellar wallet * @param message Text message to sign * @param signFunction Function to sign hash (returns signature in hex) */ signMessage(message: string, signFunction: (hashHex: string) => Promise): Promise; /** * Prepare Canton transaction * @param commands Command or array of commands * @param disclosedContracts Optional disclosed contracts */ prepareTransaction(commands: unknown, disclosedContracts?: unknown, commandId?: string): Promise; estimateGas(commands: unknown, disclosedContracts?: unknown): Promise; /** * Check if user has Canton wallet registered * This is inferred - if /me succeeds, user has wallet */ checkRegistrationStatus(): Promise; /** * Prepare transfer preapproval * Flow: prepare -> sign -> submit * No request body required */ prepareTransferPreapproval(): Promise; /** * Prepare initialization transactions for onboarding * Backend may return 0..4 transactions depending on app rules. */ prepareInitializationTransactions(): Promise; /** * Get Canton wallet balances * Returns balances for all tokens grouped by instrument ID * Includes unlocked and locked UTXOs */ getBalances(): Promise; /** * Prepare Canton transfer (Amulet or CIP-56 token) * @param params Transfer parameters * @throws Error if amount has more than 10 decimal places */ prepareTransfer(params: CantonPrepareTransferRequestDto): Promise; /** * Calculate transfer fee (always returned in CC) */ calculateTransferFee(params: CantonCalculateTransferFeeRequestDto): Promise; /** * @deprecated Use `prepareTransfer` with `instrumentId: "Amulet"`. */ prepareAmuletTransfer(params: CantonPrepareAmuletTransferRequestDto): Promise; /** * @deprecated Typo alias. Use `prepareAmuletTransfer`. */ prepareAmuletTranafer(params: CantonPrepareAmuletTransferRequestDto): Promise; /** * Get pending incoming transfers for the current user * Returns a list of transfer offers that can be accepted or rejected * @returns Array of incoming transfer DTOs */ getPendingIncomingTransfers(): Promise; /** * Prepare response to incoming transfer (accept or reject) * Flow: prepare -> sign -> submit * @param params Request with contractId and accept flag * @returns Prepare response with hash to sign */ prepareResponseToIncomingTransfer(params: CantonPrepareResponseIncomingTransferRequestDto): Promise; /** * Get Canton transactions history with pagination * @param params Pagination parameters (limit, beforeOffsetExclusive) * @returns Array of transaction DTOs */ getTransactions(params?: CantonTransactionsParams): Promise; /** * Get Canton price history (candles from Bybit) * @param interval Time interval: '1h' (hour), '1d' (day), '1w' (week), '1M' (month) * @returns Array of price candles */ getPriceHistory(interval: CantonPriceInterval): Promise; } export declare function createCantonService(client: ApiClient): CantonService; export declare function getCantonService(): CantonService;