import {z} from 'zod' export type SettableContactType = 'contract' | 'recipient' | 'recipient_contract'; export type AptosChainUniqueId = 'aptos_mainnet' | 'aptos_testnet' | 'aptos_movement_mainnet' | 'aptos_movement_testnet'; export type AptosNativeAssetIdentifierRequest = {type: 'native', chain: AptosChainUniqueId}; export type AptosCoinTypeRequest = {chain: AptosChainUniqueId, coin_type_str: string}; export type AptosCoinAssetIdentifierRequest = {type: 'coin', coin_type: AptosCoinTypeRequest}; export type AptosNewCoinTypeRequest = {chain: AptosChainUniqueId, metadata_address: string}; export type AptosNewCoinAssetIdentifierRequest = {type: 'new_coin', new_coin_type: AptosNewCoinTypeRequest}; export type AptosAssetIdentifierRequest = {type: 'aptos', details: AptosNativeAssetIdentifierRequest | AptosCoinAssetIdentifierRequest | AptosNewCoinAssetIdentifierRequest}; export type EditAptosContactRequest = {name: string, contact_type: SettableContactType, type: 'aptos', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type ArchChainUniqueId = 'arch_mainnet' | 'arch_testnet'; export type ArchNativeAssetIdentifierRequest = {type: 'native', chain: ArchChainUniqueId}; export type ArchAddressRequest = {chain: ArchChainUniqueId, base58_repr: string}; export type ArchAplTokenAssetIdentifierRequest = {type: 'apl_token', token: ArchAddressRequest}; export type ArchAssetIdentifierRequest = {type: 'arch', details: ArchNativeAssetIdentifierRequest | ArchAplTokenAssetIdentifierRequest}; export type EditArchContactRequest = {name: string, contact_type: SettableContactType, type: 'arch', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type CantonChainUniqueId = 'canton_mainnet' | 'canton_testnet'; export type CantonNativeAssetIdentifierRequest = {type: 'native', chain: CantonChainUniqueId}; export type CantonAddressRequest = {chain: CantonChainUniqueId, account: string}; export type CantonInstrumentIdRequest = {address: CantonAddressRequest, id: string}; export type CantonCip56TokenAssetIdentifierRequest = {type: 'cip56_token', token: CantonInstrumentIdRequest}; export type CantonAssetIdentifierRequest = {type: 'canton', details: CantonNativeAssetIdentifierRequest | CantonCip56TokenAssetIdentifierRequest}; export type EditCantonContactRequest = {name: string, contact_type: SettableContactType, type: 'canton', chains?: Array | undefined, assets_identifiers?: Array | undefined, memo?: string | undefined}; export type CosmosChainUniqueId = 'cosmos_agoric-3' | 'cosmos_akashnet-2' | 'cosmos_archway-1' | 'cosmos_axelar-dojo-1' | 'cosmos_bbn-1' | 'cosmos_celestia' | 'cosmos_cosmoshub-4' | 'cosmos_dydx-mainnet-1' | 'cosmos_dydx-testnet-4' | 'cosmos_dymension_1100-1' | 'cosmos_injective-1' | 'cosmos_neutron-1' | 'cosmos_nillion-1' | 'cosmos_noble-1' | 'cosmos_osmosis-1' | 'cosmos_provider' | 'cosmos_ssc-1' | 'cosmos_pacific-1' | 'cosmos_stride-1' | 'cosmos_thorchain-1' | 'cosmos_mantra-1'; export type CosmosNativeAssetIdentifierRequest = {type: 'native', chain: CosmosChainUniqueId}; export type CosmosTokenAssetIdentifierRequest = {type: 'token', chain: CosmosChainUniqueId, denom: string}; export type CosmosAssetIdentifierRequest = {type: 'cosmos', details: CosmosNativeAssetIdentifierRequest | CosmosTokenAssetIdentifierRequest}; export type EditCosmosContactRequest = {name: string, contact_type: SettableContactType, type: 'cosmos', assets_identifiers?: Array | undefined, memo?: string | undefined}; export type EvmNativeAssetIdentifierRequest = {type: 'native', chain: string}; export type EvmAddressRequest = {chain: string, hex_repr: string}; export type EvmErc20AssetIdentifierRequest = {type: 'erc20', token: EvmAddressRequest}; export type EvmErc721AssetIdentifierRequest = {type: 'erc721', token: EvmAddressRequest, token_id: string}; export type EvmErc1155AssetIdentifierRequest = {type: 'erc1155', token: EvmAddressRequest, token_id: string}; export type EvmHyperLiquidAssetIdentifierRequest = {type: 'hyperliquid', chain: string, token_id: string, index: number}; export type EvmAssetIdentifierRequest = {type: 'evm', details: EvmNativeAssetIdentifierRequest | EvmErc20AssetIdentifierRequest | EvmErc721AssetIdentifierRequest | EvmErc1155AssetIdentifierRequest | EvmHyperLiquidAssetIdentifierRequest}; export type EditEvmContactRequest = {name: string, contact_type: SettableContactType, type: 'evm', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type RippleChainUniqueId = 'ripple_mainnet' | 'ripple_testnet'; export type RippleNativeAssetIdentifierRequest = {type: 'native', chain: RippleChainUniqueId}; export type RippleAddressRequest = {chain: RippleChainUniqueId, base58_repr: string}; export type RippleTrustLineAssetIdentifierRequest = {type: 'trust_line_asset', currency: string, issuer: RippleAddressRequest}; export type RippleAssetIdentifierRequest = {type: 'ripple', details: RippleNativeAssetIdentifierRequest | RippleTrustLineAssetIdentifierRequest}; export type EditRippleContactRequest = {name: string, contact_type: SettableContactType, type: 'ripple', chains?: Array | undefined, assets_identifiers?: Array | undefined, tag?: string | undefined}; export type SolanaChainUniqueId = 'solana_mainnet' | 'solana_devnet' | 'solana_eclipse_mainnet' | 'solana_fogo_mainnet' | 'solana_fogo_testnet'; export type SolanaNativeAssetIdentifierRequest = {type: 'native', chain: SolanaChainUniqueId}; export type SolanaAddressRequest = {chain: SolanaChainUniqueId, base58_repr: string}; export type SolanaSplTokenAssetIdentifierRequest = {type: 'spl_token', token: SolanaAddressRequest}; export type SolanaAssetIdentifierRequest = {type: 'solana', details: SolanaNativeAssetIdentifierRequest | SolanaSplTokenAssetIdentifierRequest}; export type EditSolanaContactRequest = {name: string, contact_type: SettableContactType, type: 'solana', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type StacksChainUniqueId = 'stacks_mainnet'; export type StacksNativeAssetIdentifierRequest = {type: 'native', chain: StacksChainUniqueId}; export type StacksAddressRequest = {chain: StacksChainUniqueId, hex_repr: string}; export type StacksSip10AssetIdentifierRequest = {type: 'sip10', sip10: StacksAddressRequest}; export type StacksAssetIdentifierRequest = {type: 'stacks', details: StacksNativeAssetIdentifierRequest | StacksSip10AssetIdentifierRequest}; export type EditStacksContactRequest = {name: string, contact_type: SettableContactType, type: 'stacks', chains?: Array | undefined, assets_identifiers?: Array | undefined, memo?: string | undefined}; export type StarknetChainUniqueId = 'starknet_mainnet'; export type StarknetNativeAssetIdentifierRequest = {type: 'native', chain: StarknetChainUniqueId}; export type StarknetAddressRequest = {chain: StarknetChainUniqueId, hex_repr: string}; export type StarknetErc20AssetIdentifierRequest = {type: 'erc20', erc20: StarknetAddressRequest}; export type StarknetAssetIdentifierRequest = {type: 'starknet', details: StarknetNativeAssetIdentifierRequest | StarknetErc20AssetIdentifierRequest}; export type EditStarknetContactRequest = {name: string, contact_type: SettableContactType, type: 'starknet', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type StellarChainUniqueId = 'stellar_mainnet' | 'stellar_testnet'; export type StellarNativeAssetIdentifierRequest = {type: 'native', chain: StellarChainUniqueId}; export type StellarAddressRequest = {chain: StellarChainUniqueId, base32_repr: string}; export type StellarClassicAssetIdentifierRequest = {type: 'classic_asset', code: string, issuer: StellarAddressRequest, chain: StellarChainUniqueId}; export type StellarSorobanAssetIdentifierRequest = {type: 'soroban_asset', address: string, chain: StellarChainUniqueId}; export type StellarAssetIdentifierRequest = {type: 'stellar', details: StellarNativeAssetIdentifierRequest | StellarClassicAssetIdentifierRequest | StellarSorobanAssetIdentifierRequest}; export type EditStellarContactRequest = {name: string, contact_type: SettableContactType, type: 'stellar', chains?: Array | undefined, assets_identifiers?: Array | undefined, memo?: string | undefined}; export type SuiChainUniqueId = 'sui_mainnet' | 'sui_testnet'; export type SuiNativeAssetIdentifierRequest = {type: 'native', chain: SuiChainUniqueId}; export type SuiCoinTypeRequest = {chain: SuiChainUniqueId, coin_type_str: string}; export type SuiCoinAssetIdentifierRequest = {type: 'coin', coin_type: SuiCoinTypeRequest}; export type SuiAssetIdentifierRequest = {type: 'sui', details: SuiNativeAssetIdentifierRequest | SuiCoinAssetIdentifierRequest}; export type EditSuiContactRequest = {name: string, contact_type: SettableContactType, type: 'sui', chains?: Array | undefined, assets_identifiers?: Array | undefined}; export type TonChainUniqueId = 'ton_mainnet' | 'ton_testnet'; export type TonNativeAssetIdentifierRequest = {type: 'native', chain: TonChainUniqueId}; export type TonAddressRequest = {chain: TonChainUniqueId, address: string}; export type TonJettonAssetIdentifierRequest = {type: 'jetton', jetton: TonAddressRequest}; export type TonAssetIdentifierRequest = {type: 'ton', details: TonNativeAssetIdentifierRequest | TonJettonAssetIdentifierRequest}; export type EditTonContactRequest = {name: string, contact_type: SettableContactType, type: 'ton', chains?: Array | undefined, assets_identifiers?: Array | undefined, comment?: string | undefined}; export type TronChainUniqueId = 'tron_mainnet' | 'tron_shasta'; export type TronNativeAssetIdentifierRequest = {type: 'native', chain: TronChainUniqueId}; export type TronAddressRequest = {chain: TronChainUniqueId, base58_repr: string}; export type TronTrc20AssetIdentifierRequest = {type: 'trc20', trc20: TronAddressRequest}; export type TronAssetIdentifierRequest = {type: 'tron', details: TronNativeAssetIdentifierRequest | TronTrc20AssetIdentifierRequest}; export type EditTronContactRequest = {name: string, contact_type: SettableContactType, type: 'tron', chains?: Array | undefined, assets_identifiers?: Array | undefined, memo?: string | undefined}; export type UtxoChainUniqueId = 'bitcoin_mainnet' | 'bitcoin_testnet' | 'bitcoin_testnet_v4' | 'dogecoin_mainnet' | 'bitcoin_cash_mainnet' | 'pearl_testnet' | 'pearl_mainnet' | 'litecoin_mainnet' | 'litecoin_testnet' | 'bitcoin_cash_testnet' | 'dogecoin_testnet'; export type UtxoNativeAssetIdentifierRequest = {type: 'native', chain: UtxoChainUniqueId}; export type UtxoAssetIdentifierRequest = {type: 'utxo', details: UtxoNativeAssetIdentifierRequest}; export type EditUtxoContactRequest = {name: string, contact_type: SettableContactType, type: 'utxo', assets_identifiers?: Array | undefined}; export type EditContactRequest = EditAptosContactRequest | EditArchContactRequest | EditCantonContactRequest | EditCosmosContactRequest | EditEvmContactRequest | EditRippleContactRequest | EditSolanaContactRequest | EditStacksContactRequest | EditStarknetContactRequest | EditStellarContactRequest | EditSuiContactRequest | EditTonContactRequest | EditTronContactRequest | EditUtxoContactRequest; export type CreateApiApiV1AddressbookContactsIdProposalsArgs = {id: string, 'x-signature'?: string | undefined, 'x-timestamp'?: number | undefined, body: EditContactRequest}; export type CreateApiApiV1AddressbookContactsIdProposalsOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const createApiApiV1AddressbookContactsIdProposalsResponse = z.unknown(); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Edit Contact * * POST /api/v1/addressbook/contacts/{id}/proposals */ export const createApiApiV1AddressbookContactsIdProposals = async (args: CreateApiApiV1AddressbookContactsIdProposalsArgs, options?: CreateApiApiV1AddressbookContactsIdProposalsOptions) => { const {baseUrl = "https://api.fordefi.com", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['x-signature'] != null) headers.set("x-signature", String(args['x-signature'])) if (args['x-timestamp'] != null) headers.set("x-timestamp", String(args['x-timestamp'])) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/addressbook/contacts/${encodeURIComponent(String(args.id))}/proposals${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiApiV1AddressbookContactsIdProposalsResponse, await res.json()) };