import { type Dinero, type DineroCurrency, type DineroSnapshot, } from "dinero.js"; /** * Map of ISO 4217 currency codes to Dinero currency objects */ export declare const CURRENCY_MAP: Record>; /** * Derived type of all built-in ISO 4217 currency codes. * Enables IDE autocomplete while allowing any string for dynamic currencies. */ export type ISO4217Code = keyof typeof CURRENCY_MAP; /** * Scaled integer rate for Dinero.js conversion. * Avoids floating-point errors by using integer amounts with a scale. */ export type ScaledRate = { amount: number; scale: number; }; /** * Map of currency codes to their exchange rates relative to a base currency. * Rates can be plain numbers (integers) or ScaledRate objects. */ export type RateMap = Record; /** * Converts a human-readable float rate (e.g., 17.23) into a ScaledRate. * Defaults to 4 decimal places of precision if not specified. */ export declare function scaledRate( float: number, precision?: number, ): ScaledRate; /** * Register a new currency in CURRENCY_MAP atomically. * Ensures the core registry and any store-level registries stay in sync. */ export declare function registerCurrency( code: string, currency: DineroCurrency, ): void; /** * Normalizes an unknown input into a valid integer for Dinero.js. * Exported so consumers can apply the same defensive coercion. */ export declare function safeAmount(amount: unknown): number; /** * Converts a major-unit amount (e.g., pesos) to a minor-unit integer (e.g., centavos). * Uses the currency's exponent from CURRENCY_MAP. */ export declare function toMinorUnit( amount: unknown, currencyCode: ISO4217Code | string, ): number; /** * Create a Dinero monetary value from an amount. * @param amount - Amount (normalized internally via safeAmount) * @param currencyCode - ISO 4217 currency code (e.g., "USD") */ export declare function createMoney( amount: unknown, currencyCode: ISO4217Code | string, ): Dinero; /** * Format a Dinero value as a locale-aware string * @param money - Dinero monetary value * @param locale - BCP 47 locale string (e.g., "en-US", "es-MX") * @param currencyCode - ISO 4217 code for Intl.NumberFormat (e.g., "USD") */ export declare function formatMoney( money: Dinero, locale?: string, currencyCode?: string, ): string; /** * Format a raw amount as a locale-aware currency string. * Convenience wrapper around createMoney + formatMoney. */ export declare function formatAmount( amount: unknown, currencyCode: ISO4217Code | string, locale?: string, ): string; /** * Add two monetary values (must be same currency) */ export declare function addMoney( a: Dinero, b: Dinero, ): Dinero; /** * Subtract two monetary values (must be same currency) */ export declare function subtractMoney( a: Dinero, b: Dinero, ): Dinero; /** * Multiply a monetary value by a factor */ export declare function multiplyMoney( money: Dinero, factor: number, ): Dinero; /** * Converts a Dinero object to another currency. * Both currencies must share the same base (base 10 for all standard ISO currencies). */ export declare function convertMoney( money: Dinero, toCurrencyCode: string, rates: RateMap, ): Dinero; /** * Converts a raw minor-unit amount between currencies. * Returns the original amount if from and to currencies are the same. */ export declare function convertAmount( amount: number, fromCode: string, toCode: string, rates: RateMap, ): number; /** * Converts Dinero object to a Stripe-compatible payload. */ export declare function toStripeMoney(money: Dinero): { amount: number; currency: string; }; /** * Converts Dinero object to a PayPal-compatible payload. */ export declare function toPaypalMoney(money: Dinero): { value: string; currency_code: string; }; /** * Converts Dinero object to an Adyen-compatible payload. */ export declare function toAdyenMoney(money: Dinero): { value: number; currency: string; }; /** * Converts Dinero object to a Square-compatible payload (uses BigInt). */ export declare function toSquareMoney(money: Dinero): { amount: bigint; currency: string; }; /** * Serializes a Dinero object into a plain object snapshot. */ export declare function toMoneySnapshot(money: Dinero): { amount: number; currency: string; scale: number; }; /** * Restores a Dinero object from a snapshot. */ export declare function fromMoneySnapshot(snapshot: { amount: number; currency: string; scale?: number; }): Dinero; export type { Dinero, DineroCurrency, DineroSnapshot };