{"version":3,"sources":["../src/constants.ts","../src/dca.services.ts","../src/paymaster.services.ts","../src/schemas.ts","../src/enums.ts","../src/utils.ts","../src/types.ts","../src/fixtures.ts","../src/impulse.services.ts","../src/privacy.services.ts","../src/swap.services.ts","../src/staking.services.ts","../src/token.services.ts"],"sourcesContent":["export const SEPOLIA_BASE_URL = 'https://sepolia.api.avnu.fi';\nexport const BASE_URL = 'https://starknet.api.avnu.fi';\nexport const IMPULSE_BASE_URL = 'https://starknet.impulse.avnu.fi';\nexport const SEPOLIA_IMPULSE_BASE_URL = 'https://sepolia.impulse.avnu.fi';\nexport const PAYMASTER_BASE_URL = 'https://starknet.paymaster.avnu.fi';\nexport const SEPOLIA_PAYMASTER_BASE_URL = 'https://sepolia.paymaster.avnu.fi';\n\n// Privacy pool contracts whitelisted by the AVNU privacy paymaster (see `poolAddress`\n// in the private swap services). Exported for integrators; the parameter stays explicit\n// because pools may be redeployed.\nexport const PRIVACY_POOL_ADDRESS = '0x040337b1af3c663e86e333bab5a4b28da8d4652a15a69beee2b677776ffe812a';\nexport const SEPOLIA_PRIVACY_POOL_ADDRESS = '0x254a6b2997ef52e9f830ce1f543f6b29768295e8d17e2267d672c552cfe0d91';\n\nexport const TOKEN_API_VERSION = 'v1';\nexport const IMPULSE_API_VERSION = 'v3';\nexport const SWAP_API_VERSION = 'v3';\nexport const PRICES_API_VERSION = 'v3';\nexport const STAKING_API_VERSION = 'v3';\nexport const DCA_API_VERSION = 'v3';\n","import qs from 'qs';\nimport { DCA_API_VERSION } from './constants';\nimport { executeAllPaymasterFlow } from './paymaster.services';\nimport { DcaOrderSchema, PageSchema } from './schemas';\nimport {\n  AvnuCalls,\n  AvnuOptions,\n  CreateDcaOrder,\n  DcaOrder,\n  GetDcaOrdersParams,\n  InvokeCancelDcaParams,\n  InvokeCreateDcaParams,\n  InvokeTransactionResponse,\n  Page,\n} from './types';\nimport { getBaseUrl, getRequest, parseResponse, parseResponseWithSchema, postRequest } from './utils';\n\n/**\n * Get the DCA orders for a given trader\n * @param params.traderAddress The trader address\n * @param params.status The status of the orders (ACTIVE, CLOSED, INDEXING)\n * @param params.page The page number\n * @param params.size The page size\n * @param params.sort The sort order\n * @param options Optional SDK configuration\n * @returns The page of DCA orders corresponding to the request params\n */\nconst getDcaOrders = async (\n  { traderAddress, status, page, size, sort }: GetDcaOrdersParams,\n  options?: AvnuOptions,\n): Promise<Page<DcaOrder>> => {\n  const params = qs.stringify({ traderAddress, status, page, size, sort }, { arrayFormat: 'repeat' });\n\n  return fetch(`${getBaseUrl(options)}/dca/${DCA_API_VERSION}/orders?${params}`, getRequest(options)).then((response) =>\n    parseResponseWithSchema(response, PageSchema(DcaOrderSchema), options?.avnuPublicKey),\n  );\n};\n\n/**\n * Build the calls to execute a DCA action\n * @param endpoint The endpoint to execute\n * @param body The body of the request\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst actionToCalls = async (endpoint: string, body: unknown, options?: AvnuOptions): Promise<AvnuCalls> => {\n  return fetch(\n    `${getBaseUrl(options)}/dca/${DCA_API_VERSION}/orders${endpoint ? `/${endpoint}` : ''}`,\n    postRequest(body, options),\n  ).then((response) => parseResponse<AvnuCalls>(response, options?.avnuPublicKey));\n};\n\n/**\n * Build the calls to execute a \"create DCA order\" action\n * @param order The DCA order to create\n * @param order.sellTokenAddress The address of the token to sell\n * @param order.buyTokenAddress The address of the token to buy\n * @param order.sellAmount The amount of the token to sell\n * @param order.sellAmountPerCycle The amount of the token to sell per cycle\n * @param order.frequency The frequency of the DCA order\n * @param order.pricingStrategy The pricing strategy to use (tokenToMinAmount and/or tokenToMaxAmount)\n * @param order.traderAddress The address of the trader\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst createDcaToCalls = async (order: CreateDcaOrder, options?: AvnuOptions): Promise<AvnuCalls> =>\n  actionToCalls('', order, options);\n\n/**\n * Build the calls to execute a \"cancel DCA order\" action\n * @param orderAddress The address of the DCA contract order to cancel\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst cancelDcaToCalls = async (orderAddress: string, options?: AvnuOptions): Promise<AvnuCalls> =>\n  actionToCalls(`${orderAddress}/cancel`, undefined, options);\n\n/**\n * Execute a \"create DCA order\" action\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.order The DCA order to create\n * @param params.order.sellTokenAddress The address of the token to sell\n * @param params.order.buyTokenAddress The address of the token to buy\n * @param params.order.sellAmount The amount of the token to sell\n * @param params.order.sellAmountPerCycle The amount of the token to sell per cycle\n * @param params.order.frequency The frequency of the DCA order\n * @param params.order.pricingStrategy The pricing strategy to use (tokenToMinAmount and/or tokenToMaxAmount)\n * @param params.order.traderAddress The address of the trader\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeCreateDca = async (\n  params: InvokeCreateDcaParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, order } = params;\n  const { calls } = await createDcaToCalls(order, options);\n\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n  const result = await provider.execute(calls);\n  return { transactionHash: result.transaction_hash };\n};\n\n/**\n * Execute a \"cancel DCA order\" action\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.orderAddress The address of the DCA contract order to cancel\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeCancelDca = async (\n  params: InvokeCancelDcaParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, orderAddress } = params;\n  const { calls } = await cancelDcaToCalls(orderAddress, options);\n\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n\n  const result = await provider.execute(calls);\n  return { transactionHash: result.transaction_hash };\n};\n\nexport { cancelDcaToCalls, createDcaToCalls, executeCancelDca, executeCreateDca, getDcaOrders };\n","import { toBeHex } from 'ethers';\nimport { AccountInterface, Call, PreparedInvokeTransaction } from 'starknet';\nimport {\n  BuildPaymasterTransactionParams,\n  ExecutePaymasterTransactionParams,\n  InvokePaymasterParams,\n  InvokeTransactionResponse,\n  SignedPaymasterTransaction,\n  SignTransactionParams,\n} from './types';\n\n/**\n * Build a paymaster transaction\n * !! Be careful if you run this on a client it will leak your PAYMASTER_API_KEY if you have one!!\n * !! Use it in a server-side environment instead !!\n *\n * @param params The paymaster transaction parameters\n * @param params.takerAddress The address of the taker who will execute the transaction\n * @param params.paymaster The paymaster params\n * @param params.calls The calls to execute\n * @returns The prepared paymaster transaction containing the typed data to sign\n */\nconst buildPaymasterTransaction = async (\n  params: BuildPaymasterTransactionParams,\n): Promise<PreparedInvokeTransaction> => {\n  const { takerAddress, paymaster, calls } = params;\n  return paymaster.provider.buildTransaction(\n    { type: 'invoke', invoke: { userAddress: takerAddress, calls } },\n    paymaster.params,\n  ) as Promise<PreparedInvokeTransaction>;\n};\n\n/**\n * Sign the paymaster transaction\n *\n * @param params The signature parameters\n * @param params.provider The account which will sign the transaction, must implement the AccountInterface\n * @param params.typedData The typed data to sign\n * @returns The prepared paymaster transaction containing the typed data and the signature\n */\nconst signPaymasterTransaction = async (params: SignTransactionParams): Promise<SignedPaymasterTransaction> => {\n  const { provider, typedData } = params;\n  const rawSignature = await provider.signMessage(typedData);\n  let signature: string[] = [];\n  if (Array.isArray(rawSignature)) {\n    signature = rawSignature.map((sig) => toBeHex(BigInt(sig)));\n  } else if (rawSignature.r && rawSignature.s) {\n    signature = [toBeHex(BigInt(rawSignature.r)), toBeHex(BigInt(rawSignature.s))];\n  }\n  return {\n    typedData,\n    signature,\n  };\n};\n\n/**\n * Execute a paymaster transaction\n * !! Be careful if you run this on a client it will leak your PAYMASTER_API_KEY if you have one!!\n * !! Use it in a server-side environment instead !!\n *\n * @param params The execution parameters\n * @param params.takerAddress The address of the taker who will execute the transaction\n * @param params.paymaster The paymaster params\n * @param params.signedTransaction The signed transaction with typed data and signature\n * @returns The transaction hash\n */\nconst executePaymasterTransaction = async (\n  params: ExecutePaymasterTransactionParams,\n): Promise<InvokeTransactionResponse> => {\n  const { takerAddress, paymaster, signedTransaction } = params;\n  const { provider, params: executionParams } = paymaster;\n  const { typedData, signature } = signedTransaction;\n  return provider\n    .executeTransaction(\n      {\n        type: 'invoke',\n        invoke: { userAddress: takerAddress, typedData, signature },\n      },\n      executionParams,\n    )\n    .then((result) => ({ transactionHash: result.transaction_hash }));\n};\n\n/**\n * Execute the complete paymaster flow\n * !! Be careful if you run this on a client it will leak your PAYMASTER_API_KEY if you have one!!\n * !! Use it in a server-side environment instead !!\n *\n * @param paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param paymaster.params The paymaster parameters\n * @param provider The account which will execute the transaction, must implement the AccountInterface\n * @param calls The calls to execute\n * @returns The transaction hash\n */\nconst executeAllPaymasterFlow = async ({\n  paymaster,\n  provider,\n  calls,\n}: {\n  paymaster: InvokePaymasterParams;\n  provider: AccountInterface;\n  calls: Call[];\n}): Promise<InvokeTransactionResponse> => {\n  const prepared = await buildPaymasterTransaction({\n    takerAddress: provider.address,\n    paymaster,\n    calls,\n  });\n  const signed = await signPaymasterTransaction({\n    provider,\n    typedData: prepared.typed_data,\n  });\n  return executePaymasterTransaction({\n    takerAddress: provider.address,\n    paymaster,\n    signedTransaction: signed,\n  });\n};\n\nexport { buildPaymasterTransaction, executeAllPaymasterFlow, executePaymasterTransaction, signPaymasterTransaction };\n","import { z } from 'zod';\nimport { DcaOrderStatus, DcaTradeStatus, SourceType } from './enums';\nimport {\n  type CandleDataPoint,\n  type DataPoint,\n  type DataPointWithUsd,\n  type DcaOrder,\n  DcaTrade,\n  type ExchangeDataPoint,\n  type ExchangeRangeDataPoint,\n  Fee,\n  type GlobalMarket,\n  MarketPrice,\n  type Quote,\n  Route,\n  Source,\n  type StakingInfo,\n  type StarknetMarket,\n  type Token,\n  type TokenMarketData,\n  TokenPrice,\n  type UserStakingInfo,\n} from './types';\n\n/**\n * Type-safe schema validation helper\n *\n * This ensures that a Zod schema's inferred type exactly matches the expected TypeScript type.\n * If the schema is missing fields or has incorrect types, TypeScript will show an error.\n *\n * Usage:\n * ```typescript\n * const _MySchema = z.object({ ... });\n * export const MySchema = _MySchema satisfies z.ZodType<MyType>;\n * ```\n *\n * Note: This creates a bidirectional check:\n * - If you forget a field in the schema → TypeScript error\n * - If you add a field in the type but not the schema → TypeScript error\n */\n\n/**\n * Custom Zod transformers for AVNU API responses\n */\n\n// Transform hex string to BigInt\nexport const hexToBigInt = z.union([z.string(), z.number(), z.bigint()]).transform((val) => {\n  if (typeof val === 'bigint') return val;\n  return BigInt(val);\n});\n\nexport const hexToNumber = z.union([z.string(), z.number(), z.bigint()]).transform((val) => {\n  if (typeof val === 'number') return val;\n  return Number(val);\n});\n\n// Transform ISO date string to Date\nexport const isoStringToDate = z.string().transform((val) => new Date(val));\n\n// Transform hex timestamp to Date (for fields ending with *Time)\nexport const hexTimestampToDate = z.union([z.string(), z.number(), z.null(), z.undefined()]).transform((val) => {\n  if (val === null || val === undefined) return undefined;\n  if (typeof val === 'string') {\n    // Hex string like \"0x...\"\n    return new Date(parseInt(val, 16) * 1000);\n  }\n  // Already a number (Unix timestamp in seconds)\n  return new Date(val * 1000);\n});\n\n/**\n * Token Schema\n */\n\nexport const TokenSchema = z.object({\n  address: z.string(),\n  name: z.string(),\n  symbol: z.string(),\n  decimals: z.number(),\n  logoUri: z.string().nullable(),\n  lastDailyVolumeUsd: z.number(),\n  extensions: z.record(z.string(), z.string()),\n  tags: z.array(z.enum(['Unknown', 'Verified', 'Community', 'Unruggable', 'AVNU'])),\n}) satisfies z.ZodType<Token>;\n\n/** Source Schemas */\n\nexport const SourceTypeSchema = z.enum(SourceType);\n\nexport const SourceSchema = z.object({\n  name: z.string(),\n  type: SourceTypeSchema,\n}) satisfies z.ZodType<Source>;\n\n/**\n * DCA (Dollar Cost Averaging) Schemas\n */\n\nexport const DcaTradeStatusSchema = z.enum(DcaTradeStatus);\n\nexport const DcaTradeSchema = z.object({\n  sellAmount: hexToBigInt,\n  sellAmountInUsd: z.number().optional(),\n  buyAmount: hexToBigInt.optional(),\n  buyAmountInUsd: z.number().optional(),\n  expectedTradeDate: isoStringToDate,\n  actualTradeDate: isoStringToDate.optional(),\n  status: DcaTradeStatusSchema,\n  txHash: z.string().optional(),\n  errorReason: z.string().optional(),\n}) satisfies z.ZodType<DcaTrade>;\n\nexport const DcaOrderStatusSchema = z.enum(DcaOrderStatus);\n\nexport const PricingStrategySchema = z.union([\n  z.object({\n    tokenToMinAmount: z.string().or(z.undefined()),\n    tokenToMaxAmount: z.string().or(z.undefined()),\n  }),\n  z.object({}).strict(),\n]) as z.ZodType<{ tokenToMinAmount: string | undefined; tokenToMaxAmount: string | undefined } | Record<string, never>>;\n\nexport const DcaOrderSchema = z.object({\n  id: z.string(),\n  blockNumber: z.number(),\n  timestamp: isoStringToDate,\n  traderAddress: z.string(),\n  orderAddress: z.string(),\n  creationTransactionHash: z.string(),\n  orderClassHash: z.string(),\n  sellTokenAddress: z.string(),\n  sellAmount: hexToBigInt,\n  sellAmountPerCycle: hexToBigInt,\n  buyTokenAddress: z.string(),\n  startDate: isoStringToDate,\n  endDate: isoStringToDate,\n  closeDate: isoStringToDate.optional(),\n  frequency: z.string(),\n  iterations: z.number(),\n  status: DcaOrderStatusSchema,\n  pricingStrategy: PricingStrategySchema,\n  amountSold: hexToBigInt,\n  amountBought: hexToBigInt,\n  averageAmountBought: hexToBigInt,\n  executedTradesCount: z.number(),\n  cancelledTradesCount: z.number(),\n  pendingTradesCount: z.number(),\n  trades: z.array(DcaTradeSchema),\n}) satisfies z.ZodType<DcaOrder>;\n\n/**\n * Swap Schemas\n */\n\nexport const RouteSchema: z.ZodType<Route> = z.lazy(() =>\n  z.object({\n    name: z.string(),\n    address: z.string(),\n    percent: z.number(),\n    sellTokenAddress: z.string(),\n    buyTokenAddress: z.string(),\n    routeInfo: z.record(z.string(), z.string()).optional(),\n    routes: z.array(RouteSchema),\n    alternativeSwapCount: z.number(),\n  }),\n);\n\nexport const FeeSchema = z.object({\n  feeToken: z.string(),\n  avnuFees: hexToBigInt,\n  avnuFeesInUsd: z.number(),\n  avnuFeesBps: hexToBigInt,\n  integratorFees: hexToBigInt,\n  integratorFeesInUsd: z.number(),\n  integratorFeesBps: hexToBigInt,\n}) satisfies z.ZodType<Fee>;\n\nexport const QuoteSchema = z.object({\n  quoteId: z.string(),\n  sellTokenAddress: z.string(),\n  sellAmount: hexToBigInt,\n  sellAmountInUsd: z.number(),\n  buyTokenAddress: z.string(),\n  buyAmount: hexToBigInt,\n  buyAmountInUsd: z.number(),\n  fee: FeeSchema,\n  blockNumber: hexToNumber.optional(),\n  chainId: z.string(),\n  expiry: z.number().optional().nullable(),\n  routes: z.array(RouteSchema),\n  gasFees: hexToBigInt,\n  gasFeesInUsd: z.number().optional(),\n  priceImpact: z.number(),\n  sellTokenPriceInUsd: z.number().nullish(),\n  buyTokenPriceInUsd: z.number().nullish(),\n  exactTokenTo: z.boolean().optional(),\n  estimatedSlippage: z.number().optional(),\n}) satisfies z.ZodType<Quote>;\n\n/**\n * Staking Schemas\n */\n\nexport const GasFeeInfoSchema = z.object({\n  gasFeeAmount: hexToBigInt.optional(),\n  gasFeeAmountUsd: z.number().optional(),\n  gasFeeTokenAddress: z.string().optional(),\n});\n\nexport const SwapMetadataSchema = z.object({\n  sellTokenAddress: z.string(),\n  sellAmount: hexToBigInt,\n  sellAmountUsd: z.number().optional(),\n  buyTokenAddress: z.string(),\n  buyAmount: hexToBigInt,\n  buyAmountUsd: z.number().optional(),\n  integratorName: z.string().optional(),\n});\n\nexport const DcaOrderMetadataSchema = z.object({\n  orderClassHash: z.string(),\n  orderAddress: z.string(),\n  sellTokenAddress: z.string(),\n  sellAmount: hexToBigInt,\n  sellAmountUsd: z.number().optional(),\n  sellAmountPerCycle: hexToBigInt,\n  buyTokenAddress: z.string(),\n  cycleFrequency: hexToBigInt,\n  startDate: isoStringToDate,\n  endDate: isoStringToDate,\n});\n\nexport const CancelDcaOrderMetadataSchema = z.object({\n  orderAddress: z.string(),\n});\n\nexport const DcaTradeMetadataSchema = z.object({\n  sellTokenAddress: z.string(),\n  sellAmount: hexToBigInt,\n  sellAmountUsd: z.number().optional(),\n  buyTokenAddress: z.string(),\n  buyAmount: hexToBigInt,\n  buyAmountUsd: z.number().optional(),\n});\n\nexport const StakingInitiateUnstakeMetadataSchema = z.object({\n  delegationPoolAddress: z.string(),\n  exitTimestamp: isoStringToDate,\n  amount: hexToBigInt,\n  amountUsd: z.number().optional(),\n  oldDelegatedStake: hexToBigInt,\n  oldDelegatedStakeUsd: z.number().optional(),\n  newDelegatedStake: hexToBigInt,\n  newDelegatedStakeUsd: z.number().optional(),\n});\n\nexport const StakingCancelUnstakeMetadataSchema = z.object({\n  delegationPoolAddress: z.string(),\n  oldDelegatedStake: hexToBigInt,\n  oldDelegatedStakeUsd: z.number().optional(),\n  newDelegatedStake: hexToBigInt,\n  newDelegatedStakeUsd: z.number().optional(),\n});\n\nexport const StakingStakeMetadataSchema = z.object({\n  delegationPoolAddress: z.string(),\n  oldDelegatedStake: hexToBigInt,\n  oldDelegatedStakeUsd: z.number().optional(),\n  newDelegatedStake: hexToBigInt,\n  newDelegatedStakeUsd: z.number().optional(),\n});\n\nexport const StakingClaimRewardsMetadataSchema = z.object({\n  delegationPoolAddress: z.string(),\n  rewardAddress: z.string(),\n  amount: hexToBigInt,\n  amountUsd: z.number().optional(),\n});\n\nexport const StakingUnstakeMetadataSchema = z.object({\n  delegationPoolAddress: z.string(),\n  amount: hexToBigInt,\n  amountUsd: z.number().optional(),\n});\n\nexport const ActionMetadataSchema = z.union([\n  SwapMetadataSchema,\n  DcaOrderMetadataSchema,\n  CancelDcaOrderMetadataSchema,\n  DcaTradeMetadataSchema,\n  StakingInitiateUnstakeMetadataSchema,\n  StakingCancelUnstakeMetadataSchema,\n  StakingStakeMetadataSchema,\n  StakingClaimRewardsMetadataSchema,\n  StakingUnstakeMetadataSchema,\n]);\n\nexport const ActionTypeSchema = z.enum([\n  'Swap',\n  'OpenDcaOrder',\n  'CancelDcaOrder',\n  'DcaTrade',\n  'StakingStake',\n  'StakingInitiateWithdrawal',\n  'StakingCancelWithdrawal',\n  'StakingWithdraw',\n  'StakingClaimRewards',\n]);\n\nexport const ActionSchema = z.object({\n  blockNumber: hexToBigInt,\n  date: isoStringToDate,\n  transactionHash: z.string(),\n  gasFee: GasFeeInfoSchema.nullable(),\n  type: ActionTypeSchema,\n  metadata: ActionMetadataSchema,\n});\n\nexport const AprSchema = z.object({\n  date: isoStringToDate,\n  apr: z.number(),\n});\n\nexport const UserStakingInfoSchema = z.object({\n  tokenAddress: z.string(),\n  tokenPriceInUsd: z.number(),\n  poolAddress: z.string(),\n  userAddress: z.string(),\n  amount: hexToBigInt,\n  amountInUsd: z.number().or(z.undefined()),\n  unclaimedRewards: hexToBigInt,\n  unclaimedRewardsInUsd: z.number().or(z.undefined()),\n  unpoolAmount: hexToBigInt,\n  unpoolAmountInUsd: z.number().or(z.undefined()),\n  unpoolTime: hexTimestampToDate,\n  totalClaimedRewards: hexToBigInt,\n  totalClaimedRewardsHistoricalUsd: z.number().optional(),\n  totalClaimedRewardsUsd: z.number(),\n  userActions: z.array(ActionSchema),\n  totalUserActionsCount: z.number(),\n  expectedYearlyStrkRewards: hexToBigInt,\n  aprs: z.array(AprSchema),\n}) satisfies z.ZodType<UserStakingInfo>;\n\nexport const DelegationPoolSchema = z.object({\n  poolAddress: z.string(),\n  tokenAddress: z.string(),\n  stakedAmount: hexToBigInt,\n  stakedAmountInUsd: z.number().or(z.undefined()),\n  apr: z.number(),\n});\n\nexport const StakingInfoSchema = z.object({\n  selfStakedAmount: hexToBigInt,\n  selfStakedAmountInUsd: z.number().or(z.undefined()),\n  operationalAddress: z.string(),\n  rewardAddress: z.string(),\n  stakerAddress: z.string(),\n  commission: z.number(),\n  delegationPools: z.array(DelegationPoolSchema),\n}) satisfies z.ZodType<StakingInfo>;\n\n/**\n * Market Schemas\n */\n\nexport const StarknetMarketSchema = z.object({\n  usd: z.number(),\n  usdTvl: z.number(),\n  usdPriceChange1h: z.number(),\n  usdPriceChangePercentage1h: z.number().nullable(),\n  usdPriceChange24h: z.number(),\n  usdPriceChangePercentage24h: z.number().nullable(),\n  usdPriceChange7d: z.number(),\n  usdPriceChangePercentage7d: z.number().nullable(),\n  usdVolume24h: z.number(),\n  usdTradingVolume24h: z.number(),\n}) satisfies z.ZodType<StarknetMarket>;\n\nexport const GlobalMarketSchema = z.object({\n  usd: z.number(),\n  usdMarketCap: z.number(),\n  usdFdv: z.number(),\n  usdMarketCapChange24h: z.number(),\n  usdMarketCapChangePercentage24h: z.number(),\n}) satisfies z.ZodType<GlobalMarket>;\n\nexport const DataPointSchema = z.object({\n  date: z.string(),\n  value: z.number(),\n}) satisfies z.ZodType<DataPoint>;\n\nexport const DataPointWithUsdSchema = z.object({\n  date: z.string(),\n  value: z.number(),\n  valueUsd: z.number(),\n}) satisfies z.ZodType<DataPointWithUsd>;\n\nexport const ExchangeDataPointSchema = z.object({\n  date: z.string(),\n  value: z.number(),\n  valueUsd: z.number(),\n  exchange: z.string(),\n}) satisfies z.ZodType<ExchangeDataPoint>;\n\nexport const ExchangeRangeDataPointSchema = z.object({\n  value: z.number(),\n  valueUsd: z.number(),\n  exchange: z.string(),\n  startDate: z.string(),\n  endDate: z.string(),\n}) satisfies z.ZodType<ExchangeRangeDataPoint>;\n\nexport const CandleDataPointSchema = z.object({\n  date: z.string(),\n  close: z.number(),\n  high: z.number(),\n  low: z.number(),\n  open: z.number(),\n  volume: z.number(),\n}) satisfies z.ZodType<CandleDataPoint>;\n\nexport const TokenMarketDataSchema = z.object({\n  name: z.string(),\n  symbol: z.string(),\n  address: z.string(),\n  decimals: z.number(),\n  logoUri: z.string().nullable().optional(),\n  coingeckoId: z.string().nullable().optional(),\n  verified: z.boolean(),\n  starknet: StarknetMarketSchema,\n  global: GlobalMarketSchema.nullable(),\n  tags: z.array(z.enum(['Unknown', 'Verified', 'Community', 'Unruggable', 'AVNU'])).default([]),\n  linePriceFeedInUsd: z.array(DataPointSchema).default([]),\n}) satisfies z.ZodType<TokenMarketData>;\n\nexport const MarketPriceSchema = z.object({\n  usd: z.number(),\n}) satisfies z.ZodType<MarketPrice>;\n\nexport const TokenPriceSchema = z.object({\n  address: z.string(),\n  decimals: z.number(),\n  globalMarket: MarketPriceSchema.nullable(),\n  starknetMarket: MarketPriceSchema.nullable(),\n}) satisfies z.ZodType<TokenPrice>;\n\n/**\n * Pagination Schema\n */\nexport const PageSchema = <T extends z.ZodTypeAny>(contentSchema: T) =>\n  z.object({\n    content: z.array(contentSchema),\n    totalPages: z.number(),\n    totalElements: z.number(),\n    size: z.number(),\n    number: z.number(),\n  });\n","export enum FeedDateRange {\n  ONE_HOUR = '1H',\n  ONE_DAY = '1D',\n  ONE_WEEK = '1W',\n  ONE_MONTH = '1M',\n  ONE_YEAR = '1Y',\n}\n\nexport enum PriceFeedType {\n  LINE = 'LINE',\n  CANDLE = 'CANDLE',\n}\n\nexport enum VolumeFeedType {\n  LINE = 'LINE',\n  BAR = 'BAR',\n}\n\nexport enum FeedResolution {\n  ONE_MIN = '1',\n  FIVE_MIN = '5',\n  FIFTEEN_MIN = '15',\n  HOURLY = '1H',\n  FOUR_HOUR = '4H',\n  DAILY = '1D',\n  WEEKLY = '1W',\n  MONTHLY = '1M',\n  YEARLY = '1Y',\n}\n\nexport enum SourceType {\n  DEX = 'DEX',\n  MARKET_MAKER = 'MARKET_MAKER',\n  TOKEN_WRAPPER = 'TOKEN_WRAPPER',\n  ORDERBOOK = 'ORDERBOOK',\n}\n\nexport enum DcaTradeStatus {\n  CANCELLED = 'CANCELLED',\n  PENDING = 'PENDING',\n  SUCCEEDED = 'SUCCEEDED',\n}\n\nexport enum DcaOrderStatus {\n  INDEXING = 'INDEXING',\n  ACTIVE = 'ACTIVE',\n  CLOSED = 'CLOSED',\n}\n","import { ec, hash } from 'starknet';\nimport { z } from 'zod';\nimport { BASE_URL, IMPULSE_BASE_URL, PAYMASTER_BASE_URL } from './constants';\nimport { AvnuOptions, ContractError, RequestError } from './types';\n\nexport const getBaseUrl = (options?: AvnuOptions): string => options?.baseUrl ?? BASE_URL;\n\nexport const getImpulseBaseUrl = (options?: AvnuOptions): string => options?.impulseBaseUrl ?? IMPULSE_BASE_URL;\n\nexport const getPaymasterBaseUrl = (options?: AvnuOptions): string => options?.paymasterBaseUrl ?? PAYMASTER_BASE_URL;\n\nexport const getRequest = (options?: AvnuOptions): RequestInit => ({\n  signal: options?.abortSignal,\n  headers: {\n    ...(options?.avnuPublicKey !== undefined && { 'ask-signature': 'true' }),\n  },\n});\nexport const postRequest = (body: unknown, options?: AvnuOptions): RequestInit => ({\n  method: 'POST',\n  headers: {\n    Accept: 'application/json',\n    'Content-Type': 'application/json',\n    ...(options?.avnuPublicKey && { 'ask-signature': 'true' }),\n  },\n  ...(body !== undefined && { body: JSON.stringify(body) }),\n});\n\n/**\n * Parse API response\n * @param response The fetch Response object\n * @param avnuPublicKey Optional public key for signature verification\n * @returns The parsed response if the response is successful\n * @throws An error if the response is not successful\n */\nexport const parseResponse = <T>(response: Response, avnuPublicKey?: string): Promise<T> => {\n  if (response.status === 400) {\n    return response.json().then((error: RequestError) => {\n      throw new Error(error.messages[0]);\n    });\n  }\n  if (response.status === 500) {\n    return response.json().then((error: RequestError) => {\n      if (error.messages.length >= 0 && error.messages[0].includes('Contract error')) {\n        throw new ContractError(error.messages[0], error.revertError || '');\n      } else {\n        throw new Error(error.messages[0]);\n      }\n    });\n  }\n  if (response.status > 400) {\n    throw new Error(`${response.status} ${response.statusText}`);\n  }\n  if (avnuPublicKey) {\n    const signature = response.headers.get('signature');\n    if (!signature) throw new Error('No server signature');\n    return response\n      .clone()\n      .text()\n      .then((textResponse) => {\n        const hashResponse = hash.computeHashOnElements([hash.starknetKeccak(textResponse)]);\n        const formattedSig = signature.split(',').map((s) => BigInt(s));\n        const signatureType = new ec.starkCurve.Signature(formattedSig[0], formattedSig[1]);\n        if (!ec.starkCurve.verify(signatureType, hashResponse, avnuPublicKey))\n          throw new Error('Invalid server signature');\n      })\n      .then(() => response.json());\n  }\n  return response.json();\n};\n\n/**\n * Parse API response with Zod schema validation and transformation\n * @param response The fetch Response object\n * @param schema Zod schema for validation and transformation\n * @param avnuPublicKey Optional public key for signature verification\n * @returns Parsed and validated data\n */\nexport const parseResponseWithSchema = <T extends z.ZodTypeAny>(\n  response: Response,\n  schema: T,\n  avnuPublicKey?: string,\n): Promise<z.infer<T>> => {\n  return parseResponse<unknown>(response, avnuPublicKey).then((data) => {\n    try {\n      return schema.parse(data);\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        throw new Error(`Invalid API response: ${error.message}`);\n      }\n      throw error;\n    }\n  });\n};\n","import { OutsideExecutionTypedData } from '@starknet-io/starknet-types-09';\nimport type { Duration } from 'moment';\nimport type { STRK20_ACTION, STRK20_CALL_AND_PROOF } from 'starknet';\nimport { AccountInterface, Call, ExecutionParameters, PaymasterInterface } from 'starknet';\nimport { DcaOrderStatus, DcaTradeStatus, FeedDateRange, FeedResolution, PriceFeedType, SourceType } from './enums';\n\nexport interface AvnuOptions {\n  baseUrl?: string;\n  impulseBaseUrl?: string;\n  paymasterBaseUrl?: string;\n  abortSignal?: AbortSignal;\n  avnuPublicKey?: string;\n}\n\n/* Pagination Part */\nexport interface Pageable {\n  page?: number;\n  size?: number;\n  sort?: string;\n}\n\nexport interface Page<T> {\n  content: T[];\n  totalPages: number;\n  totalElements: number;\n  size: number;\n  number: number;\n}\n\nexport const getLastPageNumber = <T>(page: Page<T> | undefined): number =>\n  page ? Math.ceil(page.totalElements / page.size) - 1 : 0;\n\n/* Token Part */\n\nexport type TokenTag = 'Unknown' | 'Verified' | 'Community' | 'Unruggable' | 'AVNU';\n\nexport interface Token {\n  address: string;\n  name: string;\n  symbol: string;\n  decimals: number;\n  logoUri: string | null;\n  lastDailyVolumeUsd: number;\n  extensions: { [key: string]: string };\n  tags: TokenTag[];\n}\n\nexport interface GetTokensRequest extends Pageable {\n  search?: string;\n  tags?: TokenTag[];\n}\n\nexport interface MarketPrice {\n  usd: number;\n}\n\nexport interface TokenPrice {\n  address: string;\n  decimals: number;\n  globalMarket: MarketPrice | null;\n  starknetMarket: MarketPrice | null;\n}\n\nexport type TokenPriceResponse = TokenPrice[];\n\n/* Transactions Part */\n\nexport interface InvokeTransactionResponse {\n  transactionHash: string;\n}\n\nexport interface InvokeParams {\n  provider: AccountInterface;\n  paymaster?: InvokePaymasterParams;\n}\n\n/* Error Part */\nexport interface RequestError {\n  messages: string[];\n  revertError: string | undefined;\n}\n\nexport class ContractError extends Error {\n  public readonly revertError: string;\n  constructor(message: string, revertError: string) {\n    super(message);\n    this.revertError = revertError;\n  }\n}\n\nexport class PaymasterRpcError extends Error {\n  constructor(\n    public readonly method: string,\n    message: string,\n    public readonly code: number,\n    public readonly data?: unknown,\n  ) {\n    super(`Paymaster ${method}: ${message} (code: ${code})`);\n    this.name = 'PaymasterRpcError';\n  }\n}\n\n/* Paymaster Part */\n\nexport interface PaymasterParams {\n  provider: PaymasterInterface;\n  params: ExecutionParameters;\n}\n\nexport interface InvokePaymasterParams extends PaymasterParams {\n  active: boolean;\n}\n\nexport interface BuildPaymasterTransactionParams {\n  takerAddress: string;\n  paymaster: PaymasterParams;\n  calls: Call[];\n}\n\nexport interface SignTransactionParams {\n  provider: AccountInterface;\n  typedData: OutsideExecutionTypedData;\n}\n\nexport interface ExecutePaymasterTransactionParams {\n  takerAddress: string;\n  paymaster: PaymasterParams;\n  signedTransaction: SignedPaymasterTransaction;\n}\n\nexport interface SignedPaymasterTransaction {\n  typedData: OutsideExecutionTypedData;\n  signature: string[];\n}\n\n/* Swap Part */\n\nexport interface InvokeSwapParams extends InvokeParams {\n  quote: Quote;\n  slippage: number;\n  executeApprove?: boolean;\n}\n\nexport interface AvnuCalls {\n  chainId: string;\n  calls: Call[];\n  executorAddress?: string;\n}\n\n/* Privacy (private swap) Part */\n\n/**\n * Priority tip for the AVNU privacy paymaster. Defaults to 'normal' server-side.\n */\nexport type PrivacyTip = 'slow' | 'normal' | 'fast';\n\n/**\n * Fee mode for a private swap. The paymaster sponsors the gas and reimburses\n * itself with a pool fee taken from the shielded balance in `poolFeeToken`.\n */\nexport interface PrivateFeeMode {\n  poolFeeToken: string;\n  tip?: PrivacyTip;\n}\n\n/**\n * A single call as expected by the privacy paymaster JSON-RPC endpoints.\n */\nexport interface PaymasterCall {\n  to: string;\n  selector: string;\n  calldata: string[];\n}\n\n/**\n * The pool fee returned by the paymaster `apply_action` build step. It must be\n * withdrawn (inside the private transaction) to `recipient` so the paymaster is\n * reimbursed for the sponsored gas.\n */\nexport interface PrivateSwapFee {\n  token: string;\n  recipient: string;\n  amount: bigint;\n}\n\n/**\n * The zero-knowledge proof materialized by the injected prover (a STRK20 wallet\n * or the Starknet privacy SDK). `data` and `proofFacts` are forwarded verbatim\n * to the paymaster.\n */\nexport interface PrivacyProof {\n  data: string;\n  proofFacts: string[];\n}\n\n/**\n * The prepared call and its proof. Both proving backends (wallet or privacy SDK)\n * converge to this artifact, which the paymaster submits on-chain.\n */\nexport interface PrivateSwapCallAndProof {\n  call: Call;\n  proof: PrivacyProof;\n}\n\n/**\n * A backend-neutral description of the private swap the prover must materialize:\n * withdraw `sellAmount` of the sell token to the executor, withdraw the pool fee\n * to its recipient, open a note for the buy token, then invoke the executor with\n * the swap calls.\n */\nexport interface PrivateSwapPlan {\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  buyTokenAddress: string;\n  executorAddress: string;\n  executorCalls: Call[];\n  fee: PrivateSwapFee;\n  takerAddress: string;\n}\n\n/**\n * The injected proof provider. Implement it with a STRK20-capable wallet\n * (`wallet_strk20PrepareInvoke`) or the Starknet privacy SDK. The SDK never\n * handles private keys, notes, or proof generation itself.\n */\nexport interface PrivateSwapProver {\n  buildAndProve(plan: PrivateSwapPlan): Promise<PrivateSwapCallAndProof>;\n}\n\n/**\n * The STRK20 privacy wallet API surface needed to prove a private swap\n * (starknet.js `WalletAccountV6` / `wallet_strk20PrepareInvoke`).\n */\nexport interface Strk20ProverAccount {\n  strk20PrepareInvoke(actions: STRK20_ACTION[], simulate?: boolean): Promise<STRK20_CALL_AND_PROOF>;\n}\n\nexport interface BuildPrivateSwapFeeParams {\n  poolAddress: string;\n  feeMode: PrivateFeeMode;\n  paymasterApiKey?: string;\n}\n\nexport interface SubmitPrivateSwapParams {\n  callAndProof: PrivateSwapCallAndProof;\n  feeMode: PrivateFeeMode;\n  paymasterApiKey?: string;\n}\n\nexport interface ExecutePrivateSwapParams {\n  quote: Quote;\n  slippage: number;\n  takerAddress: string;\n  poolAddress: string;\n  feeMode: PrivateFeeMode;\n  prover: PrivateSwapProver;\n  paymasterApiKey?: string;\n  /**\n   * The chain the caller operates on (e.g. from the wallet). When provided, it is\n   * checked against `quote.chainId` before any network call so an obvious network\n   * mismatch fails fast, before the expensive proof generation.\n   */\n  chainId?: string;\n}\n\nexport interface QuoteRequest {\n  sellTokenAddress: string;\n  buyTokenAddress: string;\n  sellAmount?: bigint;\n  buyAmount?: bigint;\n  takerAddress?: string;\n  size?: number;\n  excludeSources?: string[];\n  integratorFees?: bigint;\n  integratorFeeRecipient?: string;\n  integratorName?: string;\n  onlyDirect?: boolean;\n}\n\nexport interface Route {\n  name: string;\n  address: string;\n  percent: number;\n  sellTokenAddress: string;\n  buyTokenAddress: string;\n  routeInfo?: Record<string, string>;\n  routes: Route[];\n  alternativeSwapCount: number;\n}\n\nexport interface Fee {\n  feeToken: string;\n  avnuFees: bigint;\n  avnuFeesInUsd: number;\n  avnuFeesBps: bigint;\n  integratorFees: bigint;\n  integratorFeesInUsd: number;\n  integratorFeesBps: bigint;\n}\nexport interface Quote {\n  quoteId: string;\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  sellAmountInUsd: number;\n  buyTokenAddress: string;\n  buyAmount: bigint;\n  buyAmountInUsd: number;\n  fee: Fee;\n  blockNumber?: number;\n  chainId: string;\n  expiry?: number | null;\n  routes: Route[];\n  gasFees: bigint; // In FRI\n  gasFeesInUsd?: number;\n  priceImpact: number;\n  sellTokenPriceInUsd?: number | null;\n  buyTokenPriceInUsd?: number | null;\n  exactTokenTo?: boolean;\n  estimatedSlippage?: number;\n}\n\nexport interface QuoteToCallsParams {\n  quoteId: string;\n  slippage: number;\n  takerAddress?: string;\n  executeApprove?: boolean;\n  /** Build a private swap. Mutually exclusive with takerAddress: the API sets the taker to its executor. */\n  private?: boolean;\n}\n\nexport interface Source {\n  name: string;\n  type: SourceType;\n}\n\n/* Staking Part */\n\nexport interface StakingActionToCallsParams {\n  poolAddress: string;\n  userAddress: string;\n}\n\nexport interface StakeToCallsParams extends StakingActionToCallsParams {\n  amount: bigint;\n}\n\nexport interface UnstakeToCallsParams extends StakingActionToCallsParams {}\n\nexport interface ClaimRewardsToCallsParams extends StakingActionToCallsParams {\n  restake: boolean;\n}\n\nexport interface InvokeStakeParams extends InvokeParams {\n  poolAddress: string;\n  amount: bigint;\n}\n\nexport interface InvokeInitiateUnstakeParams extends InvokeParams {\n  poolAddress: string;\n  amount: bigint;\n}\n\nexport interface InvokeUnstakeParams extends InvokeParams {\n  poolAddress: string;\n}\n\nexport interface InvokeClaimRewardsParams extends InvokeParams {\n  poolAddress: string;\n  restake: boolean;\n}\n\nexport interface StakingInfo {\n  selfStakedAmount: bigint;\n  selfStakedAmountInUsd: number | undefined;\n  operationalAddress: string;\n  rewardAddress: string;\n  stakerAddress: string;\n  commission: number;\n  delegationPools: DelegationPool[];\n}\n\nexport interface DelegationPool {\n  poolAddress: string;\n  tokenAddress: string;\n  stakedAmount: bigint;\n  stakedAmountInUsd: number | undefined;\n  apr: number;\n}\n\nexport interface UserStakingInfo {\n  tokenAddress: string;\n  tokenPriceInUsd: number;\n  poolAddress: string;\n  userAddress: string;\n  amount: bigint;\n  amountInUsd: number | undefined;\n  unclaimedRewards: bigint;\n  unclaimedRewardsInUsd: number | undefined;\n  unpoolAmount: bigint;\n  unpoolAmountInUsd: number | undefined;\n  unpoolTime: Date | undefined;\n  totalClaimedRewards: bigint;\n  totalClaimedRewardsHistoricalUsd?: number;\n  totalClaimedRewardsUsd: number;\n  userActions: Action[];\n  totalUserActionsCount: number;\n  expectedYearlyStrkRewards: bigint;\n  aprs: Apr[];\n}\n\nexport interface Apr {\n  date: Date;\n  apr: number;\n}\n\n/* DCA Part */\n\nexport interface GetDcaOrdersParams extends Pageable {\n  traderAddress: string;\n  status?: DcaOrderStatus;\n}\n\nexport interface PricingStrategy {\n  tokenToMinAmount: string | undefined;\n  tokenToMaxAmount: string | undefined;\n}\n\nexport interface DcaTrade {\n  sellAmount: bigint;\n  sellAmountInUsd?: number;\n  buyAmount?: bigint;\n  buyAmountInUsd?: number;\n  expectedTradeDate: Date;\n  actualTradeDate?: Date;\n  status: DcaTradeStatus;\n  txHash?: string;\n  errorReason?: string;\n}\n\nexport interface DcaOrder {\n  id: string;\n  blockNumber: number;\n  timestamp: Date;\n  traderAddress: string;\n  orderAddress: string;\n  creationTransactionHash: string;\n  orderClassHash: string;\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  sellAmountPerCycle: bigint;\n  buyTokenAddress: string;\n  startDate: Date;\n  endDate: Date;\n  closeDate?: Date;\n  frequency: string;\n  iterations: number;\n  status: DcaOrderStatus;\n  pricingStrategy: PricingStrategy | Record<string, never>;\n  amountSold: bigint;\n  amountBought: bigint;\n  averageAmountBought: bigint;\n  executedTradesCount: number;\n  cancelledTradesCount: number;\n  pendingTradesCount: number;\n  trades: DcaTrade[];\n}\n\nexport interface CreateDcaOrder {\n  sellTokenAddress: string | undefined;\n  buyTokenAddress: string | undefined;\n  sellAmount: string;\n  sellAmountPerCycle: string;\n  frequency: Duration;\n  pricingStrategy: PricingStrategy | Record<string, never>;\n  traderAddress: string;\n}\n\nexport interface InvokeCreateDcaParams extends InvokeParams {\n  order: CreateDcaOrder;\n}\n\nexport interface InvokeCancelDcaParams extends InvokeParams {\n  orderAddress: string;\n}\n\n/* User Actions Part */\nexport interface Action {\n  blockNumber: bigint;\n  date: Date;\n  transactionHash: string;\n  gasFee: GasFeeInfo | null;\n  type: ActionType;\n  metadata: ActionMetadata;\n}\n\nexport type ActionType =\n  | 'Swap'\n  | 'OpenDcaOrder'\n  | 'CancelDcaOrder'\n  | 'DcaTrade'\n  | 'StakingStake'\n  | 'StakingInitiateWithdrawal'\n  | 'StakingCancelWithdrawal'\n  | 'StakingWithdraw'\n  | 'StakingClaimRewards';\n\nexport interface GasFeeInfo {\n  gasFeeAmount?: bigint;\n  gasFeeAmountUsd?: number;\n  gasFeeTokenAddress?: string;\n}\n\nexport type ActionMetadata =\n  | SwapMetadata\n  | DcaOrderMetadata\n  | CancelDcaOrderMetadata\n  | DcaTradeMetadata\n  | StakingInitiateUnstakeMetadata\n  | StakingCancelUnstakeMetadata\n  | StakingStakeMetadata\n  | StakingClaimRewardsMetadata\n  | StakingUnstakeMetadata;\n\nexport interface SwapMetadata {\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  sellAmountUsd?: number;\n  buyTokenAddress: string;\n  buyAmount: bigint;\n  buyAmountUsd?: number;\n  integratorName?: string;\n}\n\nexport interface DcaOrderMetadata {\n  orderClassHash: string;\n  orderAddress: string;\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  sellAmountUsd?: number;\n  sellAmountPerCycle: bigint;\n  buyTokenAddress: string;\n  cycleFrequency: bigint;\n  startDate: Date;\n  endDate: Date;\n}\n\nexport interface CancelDcaOrderMetadata {\n  orderAddress: string;\n}\n\nexport interface DcaTradeMetadata {\n  sellTokenAddress: string;\n  sellAmount: bigint;\n  sellAmountUsd?: number;\n  buyTokenAddress: string;\n  buyAmount: bigint;\n  buyAmountUsd?: number;\n}\n\nexport interface StakingInitiateUnstakeMetadata {\n  delegationPoolAddress: string;\n  exitTimestamp: Date;\n  amount: bigint;\n  amountUsd?: number;\n  oldDelegatedStake: bigint;\n  oldDelegatedStakeUsd?: number;\n  newDelegatedStake: bigint;\n  newDelegatedStakeUsd?: number;\n}\n\nexport interface StakingCancelUnstakeMetadata {\n  delegationPoolAddress: string;\n  oldDelegatedStake: bigint;\n  oldDelegatedStakeUsd?: number;\n  newDelegatedStake: bigint;\n  newDelegatedStakeUsd?: number;\n}\n\nexport interface StakingStakeMetadata {\n  delegationPoolAddress: string;\n  oldDelegatedStake: bigint;\n  oldDelegatedStakeUsd?: number;\n  newDelegatedStake: bigint;\n  newDelegatedStakeUsd?: number;\n}\n\nexport interface StakingClaimRewardsMetadata {\n  delegationPoolAddress: string;\n  rewardAddress: string;\n  amount: bigint;\n  amountUsd?: number;\n}\n\nexport interface StakingUnstakeMetadata {\n  delegationPoolAddress: string;\n  amount: bigint;\n  amountUsd?: number;\n}\n\n/* Impulse Market Part */\n\nexport interface SimpleDateProps {\n  date?: string | Date;\n}\n\nexport interface SimpleFeedProps {\n  dateRange: FeedDateRange;\n}\n\nexport interface FeedProps extends SimpleFeedProps {\n  resolution: FeedResolution;\n}\n\nexport interface PriceFeedProps extends FeedProps {\n  type: PriceFeedType;\n}\n\nexport interface StarknetMarket {\n  usd: number;\n  usdTvl: number;\n  usdPriceChange1h: number;\n  usdPriceChangePercentage1h: number | null;\n  usdPriceChange24h: number;\n  usdPriceChangePercentage24h: number | null;\n  usdPriceChange7d: number;\n  usdPriceChangePercentage7d: number | null;\n  usdVolume24h: number;\n  usdTradingVolume24h: number;\n}\n\nexport interface GlobalMarket {\n  usd: number;\n  usdMarketCap: number;\n  usdFdv: number;\n  usdMarketCapChange24h: number;\n  usdMarketCapChangePercentage24h: number;\n}\n\nexport interface DataPoint {\n  date: string;\n  value: number;\n}\n\nexport interface DataPointWithUsd {\n  date: string;\n  value: number;\n  valueUsd: number;\n}\n\nexport interface ExchangeDataPoint extends DataPointWithUsd {\n  exchange: string;\n}\n\nexport interface ExchangeRangeDataPoint {\n  value: number;\n  valueUsd: number;\n  exchange: string;\n  startDate: string;\n  endDate: string;\n}\n\nexport interface CandleDataPoint {\n  date: string;\n  open: number;\n  high: number;\n  low: number;\n  close: number;\n  volume: number;\n}\n\nexport interface TokenMarketData {\n  name: string;\n  symbol: string;\n  address: string;\n  decimals: number;\n  logoUri?: string | null;\n  coingeckoId?: string | null;\n  verified: boolean;\n  starknet: StarknetMarket;\n  global: GlobalMarket | null;\n  tags: TokenTag[];\n  linePriceFeedInUsd: DataPoint[];\n}\n","import { OutsideExecutionTypedData } from '@starknet-io/starknet-types-09';\nimport { parseUnits, toBeHex } from 'ethers';\nimport moment from 'moment';\nimport { Call, constants } from 'starknet';\nimport { DcaOrderStatus, SourceType } from './enums';\nimport {\n  Action,\n  Apr,\n  AvnuCalls,\n  CandleDataPoint,\n  CreateDcaOrder,\n  DataPoint,\n  DataPointWithUsd,\n  DcaOrder,\n  DelegationPool,\n  ExchangeDataPoint,\n  ExchangeRangeDataPoint,\n  GlobalMarket,\n  InvokeTransactionResponse,\n  Page,\n  PrivacyProof,\n  PrivateFeeMode,\n  PrivateSwapCallAndProof,\n  PrivateSwapFee,\n  PrivateSwapPlan,\n  Quote,\n  QuoteRequest,\n  SignedPaymasterTransaction,\n  Source,\n  StakingInfo,\n  StarknetMarket,\n  Token,\n  TokenMarketData,\n  TokenPrice,\n  UserStakingInfo,\n} from './types';\n\n/* SWAP PART */\n\nexport const aPriceRequest = (): { tokens: string[] } => ({\n  tokens: ['0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7'],\n});\n\nexport const aQuoteRequest = (): QuoteRequest => ({\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  size: 1,\n  takerAddress: '0x0',\n});\n\nexport const aPrice = (): TokenPrice => ({\n  address: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  decimals: 18,\n  globalMarket: { usd: 1700 },\n  starknetMarket: { usd: 1700 },\n});\n\nexport const aQuote = (): Quote => ({\n  quoteId: 'quoteId',\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  sellAmountInUsd: 1700,\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  buyAmount: parseUnits('2', 18),\n  buyAmountInUsd: 1700,\n  blockNumber: 1,\n  chainId: constants.StarknetChainId.SN_SEPOLIA,\n  expiry: 100000000000,\n  routes: [\n    {\n      name: 'AMM1',\n      address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n      percent: 1,\n      sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n      buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n      routes: [],\n      alternativeSwapCount: 0,\n    },\n  ],\n  gasFees: BigInt('0x0'),\n  gasFeesInUsd: 0,\n  fee: {\n    feeToken: '0x0',\n    avnuFees: BigInt('0x0'),\n    avnuFeesInUsd: 0,\n    avnuFeesBps: BigInt('0x0'),\n    integratorFees: BigInt('0x0'),\n    integratorFeesInUsd: 0,\n    integratorFeesBps: BigInt('0x0'),\n  },\n  priceImpact: 0,\n});\n\nexport const aQuoteWithManySubRoutes = (): Quote => ({\n  quoteId: 'quoteId',\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  sellAmountInUsd: 1700,\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  buyAmount: parseUnits('2', 18),\n  buyAmountInUsd: 1700,\n  fee: {\n    feeToken: '0x0',\n    avnuFees: BigInt('0x0'),\n    avnuFeesInUsd: 0,\n    avnuFeesBps: BigInt('0x0'),\n    integratorFees: BigInt('0x0'),\n    integratorFeesInUsd: 0,\n    integratorFeesBps: BigInt('0x0'),\n  },\n  blockNumber: 1,\n  chainId: constants.StarknetChainId.SN_SEPOLIA,\n  expiry: 100000000000,\n  priceImpact: 0,\n  routes: [\n    {\n      name: 'AMM1',\n      address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n      percent: 1,\n      sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n      buyTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n      alternativeSwapCount: 0,\n      routes: [\n        {\n          name: 'AMM2',\n          address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c662',\n          percent: 1,\n          sellTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n          buyTokenAddress: '0x2e2faab2cad8ecdde5e991798673ddcc08983b872304a66e5f99fbb24e14abc',\n          alternativeSwapCount: 0,\n          routes: [\n            {\n              name: 'AMM1',\n              address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n              percent: 1,\n              sellTokenAddress: '0x2e2faab2cad8ecdde5e991798673ddcc08983b872304a66e5f99fbb24e14abc',\n              buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n              routes: [],\n              alternativeSwapCount: 0,\n            },\n          ],\n        },\n      ],\n    },\n  ],\n  gasFees: BigInt('0x0'),\n  gasFeesInUsd: 0,\n});\n\nexport const aQuoteWithManyComplexRoutes = (): Quote => ({\n  quoteId: 'quoteId',\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  sellAmountInUsd: 1700,\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  buyAmount: parseUnits('2', 18),\n  buyAmountInUsd: 1700,\n  fee: {\n    feeToken: '0x0',\n    avnuFees: BigInt('0x0'),\n    avnuFeesInUsd: 0,\n    avnuFeesBps: BigInt('0x0'),\n    integratorFees: BigInt('0x0'),\n    integratorFeesInUsd: 0,\n    integratorFeesBps: BigInt('0x0'),\n  },\n  blockNumber: 1,\n  chainId: constants.StarknetChainId.SN_SEPOLIA,\n  expiry: 100000000000,\n  gasFees: BigInt('0x0'),\n  gasFeesInUsd: 0,\n  priceImpact: 0,\n  routes: [\n    {\n      name: 'AMM1',\n      address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n      percent: 0.5,\n      sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n      buyTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n      alternativeSwapCount: 0,\n      routes: [\n        {\n          name: 'AMM2',\n          address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c662',\n          percent: 0.5,\n          sellTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n          buyTokenAddress: '0x2e2faab2cad8ecdde5e991798673ddcc08983b872304a66e5f99fbb24e14abc',\n          alternativeSwapCount: 0,\n          routes: [\n            {\n              name: 'AMM1',\n              address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n              percent: 1,\n              sellTokenAddress: '0x2e2faab2cad8ecdde5e991798673ddcc08983b872304a66e5f99fbb24e14abc',\n              buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n              routes: [],\n              alternativeSwapCount: 0,\n            },\n          ],\n        },\n        {\n          name: 'AMM1',\n          address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n          percent: 0.5,\n          sellTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n          buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n          routes: [],\n          alternativeSwapCount: 0,\n        },\n      ],\n    },\n    {\n      name: 'AMM1',\n      address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n      percent: 0.2,\n      sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n      buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n      routes: [],\n      alternativeSwapCount: 0,\n    },\n    {\n      name: 'AMM1',\n      address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n      percent: 0.3,\n      sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n      buyTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n      alternativeSwapCount: 0,\n      routes: [\n        {\n          name: 'AMM2',\n          address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c662',\n          percent: 0.2,\n          sellTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n          buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n          routes: [],\n          alternativeSwapCount: 0,\n        },\n        {\n          name: 'AMM1',\n          address: '0x975910cd99bc56bd289eaaa5cee6cd557f0ddafdb2ce6ebea15b158eb2c661',\n          percent: 0.8,\n          sellTokenAddress: '0x3e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9',\n          buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n          routes: [],\n          alternativeSwapCount: 0,\n        },\n      ],\n    },\n  ],\n});\n\nexport const anInvokeTransactionResponse = (): InvokeTransactionResponse => ({\n  transactionHash: '0x0',\n});\n\nexport const aAvnuCalls = (): AvnuCalls => ({\n  chainId: constants.StarknetChainId.SN_SEPOLIA,\n  calls: [\n    {\n      contractAddress: '0x0',\n      entrypoint: 'execute',\n      calldata: [],\n    },\n  ],\n});\n\nexport const aCall = (overrides: Partial<Call> = {}): Call => ({\n  contractAddress: '0xcontract',\n  entrypoint: 'transfer',\n  calldata: ['0x1', '0x2'],\n  ...overrides,\n});\n\nexport const ethToken = (): Token => ({\n  name: 'Ethereum',\n  address: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  symbol: 'ETH',\n  decimals: 18,\n  logoUri:\n    'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png',\n  tags: ['AVNU'],\n  lastDailyVolumeUsd: 0,\n  extensions: {},\n});\n\nexport const btcToken = (): Token => ({\n  name: 'Wrapped Bitcoin',\n  address: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  symbol: 'WBTC',\n  decimals: 18,\n  logoUri:\n    'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png',\n  tags: ['AVNU'],\n  lastDailyVolumeUsd: 0,\n  extensions: {},\n});\n\nexport const aPage = <T>(content: T[], size = 10, number = 0, totalPages = 1, totalElements = 1): Page<T> => ({\n  content,\n  size,\n  totalPages,\n  number,\n  totalElements,\n});\n\nexport const aSource = (): Source => ({\n  name: 'AMM1',\n  type: SourceType.DEX,\n});\n\n/* DCA PART */\n\nexport const aDCACreateOrder = (): CreateDcaOrder => ({\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: toBeHex(parseUnits('1', 18)),\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  sellAmountPerCycle: toBeHex(parseUnits('1', 18)),\n  frequency: moment.duration('1'),\n  pricingStrategy: {\n    tokenToMinAmount: toBeHex(parseUnits('1', 18)),\n    tokenToMaxAmount: toBeHex(parseUnits('1', 18)),\n  },\n  traderAddress: '0x0',\n});\n\nexport const aDCAOrder = (): DcaOrder => ({\n  id: '1',\n  blockNumber: 1,\n  timestamp: new Date(),\n  traderAddress: '0x0',\n  orderAddress: '0x123',\n  creationTransactionHash: '0x123',\n  orderClassHash: '0x123',\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  sellAmountPerCycle: parseUnits('1', 18),\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  startDate: new Date(),\n  endDate: new Date(),\n  closeDate: new Date(),\n  frequency: '1',\n  iterations: 1,\n  status: DcaOrderStatus.ACTIVE,\n  pricingStrategy: {\n    tokenToMinAmount: '1',\n    tokenToMaxAmount: '1',\n  },\n  amountSold: parseUnits('1', 18),\n  amountBought: parseUnits('1', 18),\n  averageAmountBought: parseUnits('1', 18),\n  executedTradesCount: 1,\n  cancelledTradesCount: 1,\n  pendingTradesCount: 1,\n  trades: [],\n});\n\n/* STAKING PART */\n\nexport const aDelegationPool = (): DelegationPool => ({\n  poolAddress: '0x0pool1',\n  tokenAddress: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  stakedAmount: parseUnits('500', 18),\n  stakedAmountInUsd: 850000,\n  apr: 5.5,\n});\n\nexport const aStakingInfo = (): StakingInfo => ({\n  selfStakedAmount: parseUnits('1000', 18),\n  selfStakedAmountInUsd: 1700000,\n  operationalAddress: '0x0operational',\n  rewardAddress: '0x0reward',\n  stakerAddress: '0x0staker',\n  commission: 5,\n  delegationPools: [aDelegationPool()],\n});\n\nexport const anApr = (): Apr => ({\n  date: new Date('2024-01-01'),\n  apr: 5.5,\n});\n\nexport const anAction = (): Action => ({\n  blockNumber: BigInt(1000),\n  date: new Date('2024-01-01'),\n  transactionHash: '0x0txhash',\n  gasFee: {\n    gasFeeAmount: BigInt('1000000000000000'),\n    gasFeeAmountUsd: 0.01,\n    gasFeeTokenAddress: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  },\n  type: 'Swap',\n  metadata: {\n    sellTokenAddress: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n    sellAmount: parseUnits('1', 18),\n    sellAmountUsd: 1700,\n    buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n    buyAmount: parseUnits('1700', 6),\n    buyAmountUsd: 1700,\n  },\n});\n\nexport const aUserStakingInfo = (): UserStakingInfo => ({\n  tokenAddress: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  tokenPriceInUsd: 1700,\n  poolAddress: '0x0pool1',\n  userAddress: '0x0user',\n  amount: parseUnits('100', 18),\n  amountInUsd: 170000,\n  unclaimedRewards: parseUnits('10', 18),\n  unclaimedRewardsInUsd: 17000,\n  unpoolAmount: BigInt(0),\n  unpoolAmountInUsd: 0,\n  unpoolTime: undefined,\n  totalClaimedRewards: parseUnits('5', 18),\n  totalClaimedRewardsHistoricalUsd: 8000,\n  totalClaimedRewardsUsd: 8500,\n  userActions: [],\n  totalUserActionsCount: 0,\n  expectedYearlyStrkRewards: parseUnits('50', 18),\n  aprs: [anApr()],\n});\n\n/* PAYMASTER PART */\n\nexport const aPreparedTypedData = (): OutsideExecutionTypedData =>\n  ({\n    domain: { name: 'test', version: '1', chainId: '0x1' },\n    message: {},\n    types: {},\n    primaryType: 'test',\n  }) as unknown as OutsideExecutionTypedData;\n\nexport const aSignedPaymasterTransaction = (): SignedPaymasterTransaction => ({\n  typedData: aPreparedTypedData(),\n  signature: ['0x1', '0x2'],\n});\n\n/* PRIVACY (PRIVATE SWAP) PART */\n\nexport const aPrivateFeeMode = (overrides: Partial<PrivateFeeMode> = {}): PrivateFeeMode => ({\n  poolFeeToken: '0xfee',\n  tip: 'normal',\n  ...overrides,\n});\n\nexport const aPrivateSwapFee = (overrides: Partial<PrivateSwapFee> = {}): PrivateSwapFee => ({\n  token: '0xfee',\n  recipient: '0xrecipient',\n  amount: 1000n,\n  ...overrides,\n});\n\nexport const aPrivacyProof = (overrides: Partial<PrivacyProof> = {}): PrivacyProof => ({\n  data: '0xproof',\n  proofFacts: ['0xfact1'],\n  ...overrides,\n});\n\nexport const aPrivateSwapCallAndProof = (\n  overrides: Partial<PrivateSwapCallAndProof> = {},\n): PrivateSwapCallAndProof => ({\n  call: aCall(),\n  proof: aPrivacyProof(),\n  ...overrides,\n});\n\nexport const aPrivateSwapPlan = (overrides: Partial<PrivateSwapPlan> = {}): PrivateSwapPlan => ({\n  sellTokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  sellAmount: parseUnits('1', 18),\n  buyTokenAddress: '0x72df4dc5b6c4df72e4288857317caf2ce9da166ab8719ab8306516a2fddfff7',\n  executorAddress: '0xexecutor',\n  executorCalls: [aCall()],\n  fee: aPrivateSwapFee(),\n  takerAddress: '0x0',\n  ...overrides,\n});\n\n/* IMPULSE / MARKET DATA PART */\n\nexport const aStarknetMarket = (): StarknetMarket => ({\n  usd: 1700,\n  usdTvl: 50000000,\n  usdPriceChange1h: 0.5,\n  usdPriceChangePercentage1h: 0.03,\n  usdPriceChange24h: 10,\n  usdPriceChangePercentage24h: 0.6,\n  usdPriceChange7d: 50,\n  usdPriceChangePercentage7d: 3,\n  usdVolume24h: 1000000,\n  usdTradingVolume24h: 900000,\n});\n\nexport const aGlobalMarket = (): GlobalMarket => ({\n  usd: 1700,\n  usdMarketCap: 200000000000,\n  usdFdv: 200000000000,\n  usdMarketCapChange24h: 1000000,\n  usdMarketCapChangePercentage24h: 0.5,\n});\n\nexport const aDataPoint = (): DataPoint => ({\n  date: '2024-01-01T00:00:00Z',\n  value: 1700,\n});\n\nexport const aCandleDataPoint = (): CandleDataPoint => ({\n  date: '2024-01-01T00:00:00Z',\n  open: 1690,\n  high: 1720,\n  low: 1680,\n  close: 1700,\n  volume: 1000000,\n});\n\nexport const aDataPointWithUsd = (): DataPointWithUsd => ({\n  date: '2024-01-01T00:00:00Z',\n  value: 1000000,\n  valueUsd: 1000000,\n});\n\nexport const anExchangeRangeDataPoint = (): ExchangeRangeDataPoint => ({\n  value: 500000,\n  valueUsd: 500000,\n  exchange: 'JediSwap',\n  startDate: '2024-01-01',\n  endDate: '2024-01-02',\n});\n\nexport const anExchangeDataPoint = (): ExchangeDataPoint => ({\n  date: '2024-01-01T00:00:00Z',\n  value: 500000,\n  valueUsd: 500000,\n  exchange: 'JediSwap',\n});\n\nexport const aTokenMarketData = (): TokenMarketData => ({\n  name: 'Ethereum',\n  symbol: 'ETH',\n  address: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n  decimals: 18,\n  logoUri: 'https://example.com/eth.png',\n  coingeckoId: 'ethereum',\n  verified: true,\n  starknet: aStarknetMarket(),\n  global: aGlobalMarket(),\n  tags: ['Verified'],\n  linePriceFeedInUsd: [aDataPoint()],\n});\n","import dayjs from 'dayjs';\nimport qs from 'qs';\nimport { z } from 'zod';\nimport { IMPULSE_API_VERSION, PRICES_API_VERSION } from './constants';\nimport { FeedDateRange, PriceFeedType } from './enums';\nimport {\n  CandleDataPointSchema,\n  DataPointSchema,\n  DataPointWithUsdSchema,\n  ExchangeDataPointSchema,\n  ExchangeRangeDataPointSchema,\n  TokenMarketDataSchema,\n  TokenPriceSchema,\n} from './schemas';\nimport {\n  AvnuOptions,\n  CandleDataPoint,\n  DataPoint,\n  DataPointWithUsd,\n  ExchangeDataPoint,\n  ExchangeRangeDataPoint,\n  FeedProps,\n  PriceFeedProps,\n  SimpleDateProps,\n  SimpleFeedProps,\n  TokenMarketData,\n  TokenPriceResponse,\n} from './types';\nimport { getImpulseBaseUrl, getRequest, parseResponseWithSchema, postRequest } from './utils';\n\n/**\n * Internal utils to get the start and end dates for a given date range\n * @param dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param fullDate True if the date should be in full ISO format, false if it should be in YYYY-MM-DD format\n * @returns The start and end dates\n */\nconst getDatesFromRange = (dateRange?: FeedDateRange, fullDate: boolean = true) => {\n  const now = dayjs();\n  let start;\n  switch (dateRange) {\n    case FeedDateRange.ONE_HOUR:\n      start = now.subtract(1, 'hour');\n      break;\n    case FeedDateRange.ONE_DAY:\n      start = now.subtract(1, 'day');\n      break;\n    case FeedDateRange.ONE_WEEK:\n      start = now.subtract(1, 'week');\n      break;\n    case FeedDateRange.ONE_MONTH:\n      start = now.subtract(1, 'month');\n      break;\n    case FeedDateRange.ONE_YEAR:\n      start = now.subtract(1, 'year');\n      break;\n    default:\n      return undefined;\n  }\n  const format = 'YYYY-MM-DD';\n  return {\n    start: fullDate ? start.toISOString() : start.format(format),\n    end: fullDate ? now.toISOString() : now.format(format),\n  };\n};\n\n/**\n * Internal utils to get the date from a string\n * @param date The date string\n * @returns The date\n */\nconst getDate = (date: string | Date) => {\n  return dayjs(date).toISOString();\n};\n\n/**\n * Internal utils to get the query params for a given date props\n * @param dateProps The date props (date)\n * @returns The query params\n */\nconst getDateQueryParams = (dateProps: SimpleDateProps) => {\n  const date = dateProps.date ? getDate(dateProps.date) : undefined;\n  return qs.stringify({ date }, { arrayFormat: 'repeat' });\n};\n/**\n * Internal utils to get the query params for a given feed props\n * @param feedProps The feed props (date range and resolution)\n * @param quoteTokenAddress The address of the quote token\n * @returns The query params\n */\nconst getFeedQueryParams = (feedProps: FeedProps, quoteTokenAddress?: string) => {\n  const dates = getDatesFromRange(feedProps.dateRange, true);\n  return qs.stringify(\n    { resolution: feedProps.resolution, startDate: dates?.start, endDate: dates?.end, quoteTokenAddress },\n    { arrayFormat: 'repeat' },\n  );\n};\n\n/**\n * Internal utils to get the query params for a given simple feed props\n * @param simpleProps The simple feed props (date range)\n * @returns The query params\n */\nconst getSimpleQueryParams = (simpleProps: SimpleFeedProps) => {\n  const dates = getDatesFromRange(simpleProps.dateRange, false);\n  return qs.stringify({ startDate: dates?.start, endDate: dates?.end }, { arrayFormat: 'repeat' });\n};\n\n/**\n * Get the most popular tokens on Starknet, including their market data\n * @param options Optional SDK configuration\n * @returns The list of tokens with their market data\n */\nconst getMarketData = (options?: AvnuOptions): Promise<TokenMarketData[]> =>\n  fetch(`${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens`, getRequest(options)).then((response) =>\n    parseResponseWithSchema(response, z.array(TokenMarketDataSchema), options?.avnuPublicKey),\n  );\n\n/**\n * Get the market data for a specific token\n * @param tokenAddress The address of the token\n * @param options Optional SDK configuration\n * @returns The market data for the token\n */\nconst getTokenMarketData = (tokenAddress: string, options?: AvnuOptions): Promise<TokenMarketData> =>\n  fetch(`${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}`, getRequest(options)).then(\n    (response) => parseResponseWithSchema(response, TokenMarketDataSchema, options?.avnuPublicKey),\n  );\n\n/**\n * Get the price feed for a given token\n * @param tokenAddress The address of the token\n * @param feedProps.type The type of feed (LINE or CANDLE)\n * @param feedProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param feedProps.resolution The resolution (1, 5, 15, 1H, 4H, 1D, 1W, 1M, 1Y)\n * @param quoteTokenAddress The address of the quoted token (optional)\n * @param options Optional SDK configuration\n * @returns The price feed data\n */\nconst getPriceFeed = (\n  tokenAddress: string,\n  feedProps: PriceFeedProps,\n  quoteTokenAddress?: string,\n  options?: AvnuOptions,\n): Promise<DataPoint[] | CandleDataPoint[]> => {\n  const type = feedProps.type === PriceFeedType.CANDLE ? 'candle' : 'line';\n  const queryParams = getFeedQueryParams(feedProps, quoteTokenAddress);\n  const schema = feedProps.type === PriceFeedType.CANDLE ? z.array(CandleDataPointSchema) : z.array(DataPointSchema);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/prices/${type}?${queryParams}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, schema, options?.avnuPublicKey));\n};\n\n/**\n * Get the volume by exchange for a given token and a given date range\n * @param tokenAddress The address of the token\n * @param simpleProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param options Optional SDK configuration\n * @returns The volume by exchange data\n */\nconst getVolumeByExchange = (\n  tokenAddress: string,\n  simpleProps: SimpleFeedProps,\n  options?: AvnuOptions,\n): Promise<ExchangeRangeDataPoint[]> => {\n  const queryParams = getSimpleQueryParams(simpleProps);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/exchange-volumes?${queryParams}`,\n    getRequest(options),\n  ).then((response) =>\n    parseResponseWithSchema(response, z.array(ExchangeRangeDataPointSchema), options?.avnuPublicKey),\n  );\n};\n\n/**\n * Get the exchange volume feed for a given token\n * @param tokenAddress The address of the token\n * @param feedProps.type The type of feed (LINE or CANDLE)\n * @param feedProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param feedProps.resolution The resolution (1, 5, 15, 1H, 4H, 1D, 1W, 1M, 1Y)\n * @param options Optional SDK configuration\n * @returns The exchange volume feed data\n */\nconst getExchangeVolumeFeed = (\n  tokenAddress: string,\n  feedProps: FeedProps,\n  options?: AvnuOptions,\n): Promise<ExchangeDataPoint[]> => {\n  const queryParams = getFeedQueryParams(feedProps);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/exchange-volumes/line?${queryParams}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, z.array(ExchangeDataPointSchema), options?.avnuPublicKey));\n};\n\n/**\n * Get the TVL by exchange for a given token and a given date range\n * @param tokenAddress The address of the token\n * @param simpleProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param options Optional SDK configuration\n * @returns The TVL by exchange data\n */\nconst getTVLByExchange = (\n  tokenAddress: string,\n  simpleDateProps: SimpleDateProps,\n  options?: AvnuOptions,\n): Promise<ExchangeDataPoint[]> => {\n  const queryParams = getDateQueryParams(simpleDateProps);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/exchange-tvl?${queryParams}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, z.array(ExchangeDataPointSchema), options?.avnuPublicKey));\n};\n\n/**\n * Get the exchange TVL feed for a given token\n * @param tokenAddress The address of the token\n * @param feedProps.type The type of feed (LINE or CANDLE)\n * @param feedProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param feedProps.resolution The resolution (1, 5, 15, 1H, 4H, 1D, 1W, 1M, 1Y)\n * @param options Optional SDK configuration\n * @returns The exchange TVL feed data\n */\nconst getExchangeTVLFeed = (\n  tokenAddress: string,\n  feedProps: FeedProps,\n  options?: AvnuOptions,\n): Promise<ExchangeDataPoint[]> => {\n  const queryParams = getFeedQueryParams(feedProps);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/exchange-tvl/line?${queryParams}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, z.array(ExchangeDataPointSchema), options?.avnuPublicKey));\n};\n\n/**\n * Get the transfer volume feed for a given token\n * @param tokenAddress The address of the token\n * @param feedProps.type The type of feed (LINE or CANDLE)\n * @param feedProps.dateRange The date range (ONE_HOUR, ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR)\n * @param feedProps.resolution The resolution (1, 5, 15, 1H, 4H, 1D, 1W, 1M, 1Y)\n * @param options Optional SDK configuration\n * @returns The transfer volume feed data\n */\nconst getTransferVolumeFeed = (\n  tokenAddress: string,\n  feedProps: FeedProps,\n  options?: AvnuOptions,\n): Promise<DataPointWithUsd[]> => {\n  const queryParams = getFeedQueryParams(feedProps);\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${IMPULSE_API_VERSION}/tokens/${tokenAddress}/volumes/line?${queryParams}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, z.array(DataPointWithUsdSchema), options?.avnuPublicKey));\n};\n\n/**\n * Get the market prices for a given list of tokens\n * @param tokenAddresses The list of token addresses\n * @param options Optional SDK configuration\n * @returns The market prices for the tokens\n */\nconst getPrices = (tokenAddresses: string[], options?: AvnuOptions): Promise<TokenPriceResponse> => {\n  const requestBody: { tokens: string[] } = {\n    tokens: tokenAddresses,\n  };\n  return fetch(\n    `${getImpulseBaseUrl(options)}/${PRICES_API_VERSION}/tokens/prices`,\n    postRequest(requestBody, options),\n  ).then((response) => parseResponseWithSchema(response, z.array(TokenPriceSchema), options?.avnuPublicKey));\n};\n\nexport {\n  getExchangeTVLFeed,\n  getExchangeVolumeFeed,\n  getMarketData,\n  getPriceFeed,\n  getPrices,\n  getTokenMarketData,\n  getTransferVolumeFeed,\n  getTVLByExchange,\n  getVolumeByExchange,\n};\n","import type { STRK20_ACTION } from 'starknet';\nimport { Call, hash, num, transaction } from 'starknet';\nimport { quoteToCalls } from './swap.services';\nimport {\n  AvnuOptions,\n  BuildPrivateSwapFeeParams,\n  ExecutePrivateSwapParams,\n  InvokeTransactionResponse,\n  PaymasterCall,\n  PaymasterRpcError,\n  PrivateFeeMode,\n  PrivateSwapFee,\n  PrivateSwapPlan,\n  PrivateSwapProver,\n  Strk20ProverAccount,\n  SubmitPrivateSwapParams,\n} from './types';\nimport { getPaymasterBaseUrl } from './utils';\n\nconst PAYMASTER_PARAMETERS_VERSION = '0x1';\n\n// Wallet-resolved placeholder expanding to the id of the note opened for the bought token\nconst OPEN_NOTE_ID_PLACEHOLDER = '${openNoteIds[0]}';\n\n// STRK20 felts are hex strings; amounts and serialized calldata are normalized accordingly\nconst toFelt = (value: string | bigint): string => num.toHex(value);\n\ninterface JsonRpcResponse<T> {\n  result?: T;\n  error?: { code: number; message: string; data?: unknown };\n}\n\n/**\n * Low-level JSON-RPC call against the AVNU privacy paymaster.\n * !! Be careful if you run this on a client with a paymaster API key: it will leak the key.\n * !! Prefer a server-side environment when a key is required. !!\n */\nconst paymasterRpcCall = <T>(\n  method: string,\n  params: unknown,\n  options?: AvnuOptions,\n  paymasterApiKey?: string,\n): Promise<T> =>\n  fetch(getPaymasterBaseUrl(options), {\n    method: 'POST',\n    headers: {\n      Accept: 'application/json',\n      'Content-Type': 'application/json',\n      ...(paymasterApiKey && { 'x-paymaster-api-key': paymasterApiKey }),\n    },\n    body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),\n    signal: options?.abortSignal,\n  })\n    .then((response) => response.json() as Promise<JsonRpcResponse<T>>)\n    .then((json) => {\n      if (json.error) {\n        throw new PaymasterRpcError(method, json.error.message, json.error.code, json.error.data);\n      }\n      return json.result as T;\n    });\n\n/**\n * Convert the public fee mode into the `sponsored_private` shape expected by the paymaster.\n */\nconst toRpcFeeMode = (feeMode: PrivateFeeMode) => ({\n  mode: 'sponsored_private' as const,\n  pool_fee_token: feeMode.poolFeeToken,\n  ...(feeMode.tip && { tip: feeMode.tip }),\n});\n\n/**\n * Convert a starknet.js Call into the paymaster call shape (to/selector/calldata).\n */\nconst toPaymasterCall = (call: Call): PaymasterCall => ({\n  to: call.contractAddress,\n  selector: hash.getSelectorFromName(call.entrypoint),\n  calldata: (call.calldata as string[]) ?? [],\n});\n\n/**\n * Build the pool fee for a private swap through the paymaster `apply_action` flow.\n * The returned fee must be withdrawn to `recipient` inside the private transaction.\n *\n * @param params.poolAddress The privacy pool contract address\n * @param params.feeMode The `sponsored_private` fee configuration\n * @param params.paymasterApiKey Optional paymaster API key (server-side only)\n * @param options Optional SDK configuration\n * @returns The pool fee (token, recipient, amount)\n */\nconst buildPrivateSwapFee = (params: BuildPrivateSwapFeeParams, options?: AvnuOptions): Promise<PrivateSwapFee> =>\n  paymasterRpcCall<{ fee_action: { token: string; recipient: string; amount: string } }>(\n    'paymaster_buildTransaction',\n    {\n      transaction: { type: 'apply_action', apply_action: { pool_address: params.poolAddress } },\n      parameters: { version: PAYMASTER_PARAMETERS_VERSION, fee_mode: toRpcFeeMode(params.feeMode) },\n    },\n    options,\n    params.paymasterApiKey,\n  ).then(({ fee_action }) => ({\n    token: fee_action.token,\n    recipient: fee_action.recipient,\n    amount: BigInt(fee_action.amount),\n  }));\n\n/**\n * Submit a proven private swap through the paymaster `apply_action` flow.\n * No user signature is required: the transaction settles on-chain straight from the proof.\n *\n * @param params.callAndProof The prepared call and its zero-knowledge proof\n * @param params.feeMode The `sponsored_private` fee configuration\n * @param params.paymasterApiKey Optional paymaster API key (server-side only)\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst submitPrivateSwap = (\n  params: SubmitPrivateSwapParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> =>\n  paymasterRpcCall<{ transaction_hash: string }>(\n    'paymaster_executeTransaction',\n    {\n      transaction: {\n        type: 'apply_action',\n        apply_action: {\n          apply_actions_call: toPaymasterCall(params.callAndProof.call),\n          proof: params.callAndProof.proof.data,\n          proof_facts: params.callAndProof.proof.proofFacts,\n        },\n      },\n      parameters: { version: PAYMASTER_PARAMETERS_VERSION, fee_mode: toRpcFeeMode(params.feeMode) },\n    },\n    options,\n    params.paymasterApiKey,\n  ).then(({ transaction_hash }) => ({ transactionHash: transaction_hash }));\n\n/**\n * Translate a `PrivateSwapPlan` into the STRK20 action vocabulary: withdraw the\n * sell amount to the executor, withdraw the pool fee to its recipient, open a\n * note for the bought token, then invoke the executor with the serialized swap\n * calls (the executor expects `[buyToken, ...calls, openNoteId]`).\n *\n * Use it directly when driving `wallet_strk20PrepareInvoke` yourself; prefer\n * `createStrk20WalletProver` for the ready-made `PrivateSwapProver`.\n *\n * @param plan The backend-neutral private swap plan. See `PrivateSwapPlan`\n * @returns The STRK20 actions to prove with a STRK20-capable wallet\n */\nconst buildStrk20Actions = (plan: PrivateSwapPlan): STRK20_ACTION[] => [\n  {\n    type: 'withdraw',\n    token: plan.sellTokenAddress,\n    amount: toFelt(plan.sellAmount),\n    recipient: plan.executorAddress,\n  },\n  {\n    type: 'withdraw',\n    token: plan.fee.token,\n    amount: toFelt(plan.fee.amount),\n    recipient: plan.fee.recipient,\n  },\n  {\n    type: 'transfer',\n    token: plan.buyTokenAddress,\n    amount: 'OPEN',\n    recipient: plan.takerAddress,\n  },\n  {\n    type: 'invoke',\n    contract: plan.executorAddress,\n    calldata: [\n      plan.buyTokenAddress,\n      ...transaction.fromCallsToExecuteCalldata_cairo1(plan.executorCalls).map(toFelt),\n      OPEN_NOTE_ID_PLACEHOLDER,\n    ],\n  },\n];\n\n/**\n * Create a `PrivateSwapProver` backed by a STRK20-capable wallet (starknet.js\n * `WalletAccountV6` / `wallet_strk20PrepareInvoke`). The wallet keeps the keys\n * and notes and generates the proof; the prover only describes actions and maps\n * the wallet artifact to the `PrivateSwapCallAndProof` shape.\n *\n * @param account The STRK20-capable account (e.g. a connected wallet exposing `strk20PrepareInvoke`)\n * @returns A prover to inject into `executePrivateSwap`\n */\nconst createStrk20WalletProver = (account: Strk20ProverAccount): PrivateSwapProver => ({\n  buildAndProve: async (plan) => {\n    const { call, proof } = await account.strk20PrepareInvoke(buildStrk20Actions(plan));\n    return {\n      call: {\n        contractAddress: call.contract_address,\n        entrypoint: call.entry_point,\n        calldata: call.calldata ?? [],\n      },\n      proof: { data: proof.data, proofFacts: proof.proof_facts },\n    };\n  },\n});\n\n/**\n * Execute a private swap end to end.\n *\n * Orchestrates the four steps of the private swap flow while keeping all\n * cryptography outside the SDK:\n * 1. Fetch the pool fee from the paymaster (`apply_action` build).\n * 2. Build the private swap calls through AVNU's private executor (`quoteToCalls` with `private: true`).\n * 3. Delegate proof generation to the injected `prover` (STRK20 wallet or privacy SDK).\n * 4. Submit the proven transaction through the paymaster (`apply_action` execute).\n *\n * !! When a paymaster API key is required (sponsored_private), run this on a server —\n * !! calling it from a browser leaks the key. Browser dapps should split the flow:\n * !! `buildPrivateSwapFee` and `submitPrivateSwap` behind server endpoints, proving\n * !! (`prover`) client-side with the user's wallet.\n *\n * @param params.quote The selected quote. See `getQuotes`\n * @param params.slippage The maximum acceptable slippage for the trade\n * @param params.takerAddress The address of the trader\n * @param params.poolAddress The privacy pool contract address\n * @param params.feeMode The `sponsored_private` fee configuration\n * @param params.prover The injected proof provider. The SDK never handles keys or notes.\n *                      For STRK20 wallets, use `createStrk20WalletProver(account)`\n * @param params.paymasterApiKey Optional paymaster API key (server-side only)\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executePrivateSwap = async (\n  params: ExecutePrivateSwapParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { quote, slippage, takerAddress, poolAddress, feeMode, prover, paymasterApiKey, chainId } = params;\n\n  // Fail fast on a network mismatch, before the expensive paymaster and proving round-trips\n  if (chainId && chainId !== quote.chainId) {\n    throw new Error('Invalid chainId');\n  }\n\n  // 1. Fetch the pool fee from the paymaster (required for private swaps)\n  const fee = await buildPrivateSwapFee({ poolAddress, feeMode, paymasterApiKey }, options);\n\n  // 2. Build the private swap calls through AVNU's private executor.\n  // takerAddress must NOT be sent: the API rejects it alongside private=true\n  // (the executor is the taker; the user address only appears inside the proof)\n  const { calls, executorAddress } = await quoteToCalls({ quoteId: quote.quoteId, slippage, private: true }, options);\n  if (!executorAddress) {\n    throw new Error('Private swap requires an executorAddress from quoteToCalls (ensure private swap is enabled)');\n  }\n\n  // 3. Delegate proof generation to the injected prover (wallet or privacy SDK)\n  const callAndProof = await prover.buildAndProve({\n    sellTokenAddress: quote.sellTokenAddress,\n    sellAmount: quote.sellAmount,\n    buyTokenAddress: quote.buyTokenAddress,\n    executorAddress,\n    executorCalls: calls,\n    fee,\n    takerAddress,\n  });\n\n  // 4. Submit the proven transaction through the AVNU privacy paymaster\n  return submitPrivateSwap({ callAndProof, feeMode, paymasterApiKey }, options);\n};\n\nexport {\n  buildPrivateSwapFee,\n  buildStrk20Actions,\n  createStrk20WalletProver,\n  executePrivateSwap,\n  submitPrivateSwap,\n  toPaymasterCall,\n};\n","import { toBeHex } from 'ethers';\nimport qs from 'qs';\nimport { z } from 'zod';\nimport { SWAP_API_VERSION } from './constants';\nimport { executeAllPaymasterFlow } from './paymaster.services';\nimport { QuoteSchema, SourceSchema } from './schemas';\nimport {\n  AvnuCalls,\n  AvnuOptions,\n  InvokeSwapParams,\n  InvokeTransactionResponse,\n  Quote,\n  QuoteRequest,\n  QuoteToCallsParams,\n  Source,\n} from './types';\nimport { getBaseUrl, getRequest, parseResponse, parseResponseWithSchema, postRequest } from './utils';\n\n/**\n * Get the supported sources\n *\n * @param options Optional SDK configuration\n * @returns The available liquidity sources\n */\nconst getSources = (options?: AvnuOptions): Promise<Source[]> =>\n  fetch(`${getBaseUrl(options)}/swap/${SWAP_API_VERSION}/sources`, getRequest(options)).then((response) =>\n    parseResponseWithSchema(response, z.array(SourceSchema), options?.avnuPublicKey),\n  );\n\n/**\n * Get the best quotes.\n * It allows to find the best quotes from on-chain and off-chain liquidity. The best quotes will be returned and are sorted (best first).\n *\n * @param request The request params for the avnu API `/swap/v2/quotes` endpoint.\n * @param options Optional SDK configuration\n * @returns The best quotes sorted by best first\n */\nconst getQuotes = (request: QuoteRequest, options?: AvnuOptions): Promise<Quote[]> => {\n  if (!request.sellAmount && !request.buyAmount) throw new Error('Sell amount or buy amount is required');\n  const queryParams = qs.stringify(\n    {\n      ...request,\n      buyAmount: request.buyAmount ? toBeHex(request.buyAmount) : undefined,\n      sellAmount: request.sellAmount ? toBeHex(request.sellAmount) : undefined,\n      integratorFees: request.integratorFees ? toBeHex(request.integratorFees) : undefined,\n    },\n    { arrayFormat: 'repeat' },\n  );\n  return fetch(`${getBaseUrl(options)}/swap/${SWAP_API_VERSION}/quotes?${queryParams}`, getRequest(options)).then(\n    (response) => parseResponseWithSchema(response, z.array(QuoteSchema), options?.avnuPublicKey),\n  );\n};\n\n/**\n * Build calls for executing the trade through AVNU router\n * It allows trader to build the calls needed for executing the trade on AVNU router\n *\n * @param params The parameters to build the swap calls\n * @param params.quoteId The id of the selected quote\n * @param params.takerAddress Required when taker address was not provided during the quote request. Mutually exclusive with private\n * @param params.slippage The maximum acceptable slippage of the buyAmount amount (required)\n * @param params.executeApprove If true, the response will contain the approve call. True by default\n * @param params.private If true, builds the swap for private execution: the API sets the taker to its executor and returns executorAddress\n * @param options Optional SDK configuration\n * @returns The AvnuCalls containing the calls to execute the trade and the chainId\n */\nconst quoteToCalls = (params: QuoteToCallsParams, options?: AvnuOptions): Promise<AvnuCalls> => {\n  const { quoteId, takerAddress, slippage, executeApprove, private: isPrivate } = params;\n  return fetch(\n    `${getBaseUrl(options)}/swap/${SWAP_API_VERSION}/build`,\n    postRequest(\n      { quoteId, takerAddress, slippage, includeApprove: executeApprove, ...(isPrivate && { private: true }) },\n      options,\n    ),\n  ).then((response) => parseResponse<AvnuCalls>(response, options?.avnuPublicKey));\n};\n\n/**\n * Execute the swap transaction\n *\n * @param params The swap execution parameters\n * @param params.provider The account which will execute/sign the transaction, must implement the AccountInterface\n * @param params.paymaster The paymaster information, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster parameters\n * @param params.quote The selected quote. See `getQuotes`\n * @param params.executeApprove False if the taker already executed `approve`. Defaults to true\n * @param params.slippage The maximum acceptable slippage for the trade\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeSwap = async (params: InvokeSwapParams, options?: AvnuOptions): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, quote, executeApprove = true, slippage } = params;\n\n  const chainId = await provider.provider.getChainId();\n  if (chainId !== quote.chainId) {\n    throw Error(`Invalid chainId`);\n  }\n\n  const { calls } = await quoteToCalls(\n    { quoteId: quote.quoteId, takerAddress: provider.address, slippage, executeApprove },\n    options,\n  );\n\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n\n  const result = await provider.execute(calls);\n  return { transactionHash: result.transaction_hash };\n};\n\n/**\n * Calculate the min amount received from amount and slippage\n *\n * @param amount The amount to apply slippage\n * @param slippage The slippage to apply as a decimal (0..1). 0.01 is 1%\n * @returns bigint\n */\nconst calculateMinReceivedAmount = (amount: bigint, slippage: number): bigint =>\n  amount - (amount * BigInt(Math.round(slippage * 10000))) / BigInt(10000);\n\n/**\n * Calculate the max amount spent from amount and slippage\n *\n * @param amount The amount to apply slippage\n * @param slippage The slippage to apply as a decimal (0..1). 0.01 is 1%\n * @returns bigint\n */\nconst calculateMaxSpendAmount = (amount: bigint, slippage: number): bigint =>\n  amount + (amount * BigInt(Math.round(slippage * 10000))) / BigInt(10000);\n\nexport { calculateMaxSpendAmount, calculateMinReceivedAmount, executeSwap, getQuotes, getSources, quoteToCalls };\n","import { toBeHex } from 'ethers';\nimport { STAKING_API_VERSION } from './constants';\nimport { executeAllPaymasterFlow } from './paymaster.services';\nimport { StakingInfoSchema, UserStakingInfoSchema } from './schemas';\nimport {\n  AvnuCalls,\n  AvnuOptions,\n  ClaimRewardsToCallsParams,\n  InvokeClaimRewardsParams,\n  InvokeInitiateUnstakeParams,\n  InvokeStakeParams,\n  InvokeTransactionResponse,\n  InvokeUnstakeParams,\n  StakeToCallsParams,\n  StakingInfo,\n  UnstakeToCallsParams,\n  UserStakingInfo,\n} from './types';\nimport { getBaseUrl, getRequest, parseResponse, parseResponseWithSchema, postRequest } from './utils';\n\n/**\n * Get the AVNU staking info, including the self staked amount and the operational address\n * @param options Optional SDK configuration\n * @returns The AVNU staking info\n */\nconst getAvnuStakingInfo = async (options?: AvnuOptions): Promise<StakingInfo> => {\n  return fetch(`${getBaseUrl(options)}/staking/${STAKING_API_VERSION}`, getRequest(options)).then((response) =>\n    parseResponseWithSchema(response, StakingInfoSchema, options?.avnuPublicKey),\n  );\n};\n\n/**\n * Get the user staking info for a given staking pool\n * @param tokenAddress The staked token address\n * @param userAddress The user address\n * @param options Optional SDK configuration\n * @returns The user staking info\n */\nconst getUserStakingInfo = async (\n  tokenAddress: string,\n  userAddress: string,\n  options?: AvnuOptions,\n): Promise<UserStakingInfo> => {\n  return fetch(\n    `${getBaseUrl(options)}/staking/${STAKING_API_VERSION}/pools/${tokenAddress}/members/${userAddress}`,\n    getRequest(options),\n  ).then((response) => parseResponseWithSchema(response, UserStakingInfoSchema, options?.avnuPublicKey));\n};\n\n/**\n * Build the calls to execute a staking action\n * @param endpoint The endpoint to execute\n * @param poolAddress The staking pool address\n * @param userAddress The user address\n * @param body The body of the request\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst actionToCalls = async (\n  endpoint: string,\n  poolAddress: string,\n  userAddress: string,\n  body: unknown,\n  options?: AvnuOptions,\n): Promise<AvnuCalls> => {\n  return fetch(\n    `${getBaseUrl(options)}/staking/${STAKING_API_VERSION}/pools/${poolAddress}/members/${userAddress}/${endpoint}`,\n    postRequest(body, options),\n  ).then((response) => parseResponse<AvnuCalls>(response, options?.avnuPublicKey));\n};\n\n/**\n * Build the calls to execute a \"stake\" action\n * @param params.poolAddress The staking pool address\n * @param params.userAddress The user address\n * @param params.amount The amount to stake\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst stakeToCalls = async (params: StakeToCallsParams, options?: AvnuOptions): Promise<AvnuCalls> => {\n  const { poolAddress, userAddress, amount } = params;\n  const body = { userAddress, amount: toBeHex(amount) };\n  return actionToCalls('stake', poolAddress, userAddress, body, options);\n};\n\n/**\n * Build the calls to execute a \"initiate withdrawal\" action\n * @param params.poolAddress The staking pool address\n * @param params.userAddress The user address\n * @param params.amount The amount to initiate withdrawal\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst initiateUnstakeToCalls = async (params: StakeToCallsParams, options?: AvnuOptions): Promise<AvnuCalls> => {\n  const { poolAddress, userAddress, amount } = params;\n  const body = { userAddress, amount: toBeHex(amount) };\n  return actionToCalls('initiate-withdraw', poolAddress, userAddress, body, options);\n};\n\n/**\n * Build the calls to execute a \"claim withdrawal\" action after the withdrawal period has ended\n * @param params.poolAddress The staking pool address\n * @param params.userAddress The user address\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst unstakeToCalls = async (params: UnstakeToCallsParams, options?: AvnuOptions): Promise<AvnuCalls> => {\n  const { poolAddress, userAddress } = params;\n  const body = { userAddress };\n  return actionToCalls('claim-withdraw', poolAddress, userAddress, body, options);\n};\n\n/**\n * Build the calls to execute a \"claim rewards\" action\n * @param params.poolAddress The staking pool address\n * @param params.userAddress The user address\n * @param params.restake Whether to restake the rewards or not(only for STRK rewards)\n * @param options Optional SDK configuration\n * @returns The calls to execute\n */\nconst claimRewardsToCalls = async (params: ClaimRewardsToCallsParams, options?: AvnuOptions): Promise<AvnuCalls> => {\n  const { poolAddress, userAddress, restake } = params;\n  const body = { userAddress, restake };\n  return actionToCalls('claim-rewards', poolAddress, userAddress, body, options);\n};\n\n/**\n * Execute a \"stake\" action\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.poolAddress The staking pool address\n * @param params.amount The amount to stake\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeStake = async (params: InvokeStakeParams, options?: AvnuOptions): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, poolAddress, amount } = params;\n  const { calls } = await stakeToCalls({ poolAddress, userAddress: provider.address, amount }, options);\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n  return provider.execute(calls).then((result) => ({ transactionHash: result.transaction_hash }));\n};\n\n/**\n * Execute a \"initiate withdrawal\" action\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.poolAddress The staking pool address\n * @param params.amount The amount to initiate withdrawal\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeInitiateUnstake = async (\n  params: InvokeInitiateUnstakeParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, poolAddress, amount } = params;\n  const { calls } = await initiateUnstakeToCalls({ poolAddress, userAddress: provider.address, amount }, options);\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n  return provider.execute(calls).then((result) => ({ transactionHash: result.transaction_hash }));\n};\n\n/**\n * Execute a \"claim withdrawal\" action after the withdrawal period has ended\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.poolAddress The staking pool address\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeUnstake = async (\n  params: InvokeUnstakeParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, poolAddress } = params;\n  const { calls } = await unstakeToCalls({ poolAddress, userAddress: provider.address }, options);\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n  return provider.execute(calls).then((result) => ({ transactionHash: result.transaction_hash }));\n};\n\n/**\n * Execute a \"claim rewards\" action\n * @param params.provider The provider to execute the action\n * @param params.paymaster The paymaster to execute the action, if needed\n * @param params.paymaster.active True if the tx must be executed through a paymaster\n * @param params.paymaster.provider The paymaster provider, must implement the PaymasterInterface\n * @param params.paymaster.params The paymaster tx parameters\n * @param params.poolAddress The staking pool address\n * @param params.restake Whether to restake the rewards or not(only for STRK rewards)\n * @param options Optional SDK configuration\n * @returns The transaction hash\n */\nconst executeClaimRewards = async (\n  params: InvokeClaimRewardsParams,\n  options?: AvnuOptions,\n): Promise<InvokeTransactionResponse> => {\n  const { provider, paymaster, poolAddress, restake } = params;\n  const { calls } = await claimRewardsToCalls({ poolAddress, userAddress: provider.address, restake }, options);\n  if (paymaster && paymaster.active) {\n    return executeAllPaymasterFlow({ paymaster, provider, calls });\n  }\n  return provider.execute(calls).then((result) => ({ transactionHash: result.transaction_hash }));\n};\n\nexport {\n  claimRewardsToCalls,\n  executeClaimRewards,\n  executeInitiateUnstake,\n  executeStake,\n  executeUnstake,\n  getAvnuStakingInfo,\n  getUserStakingInfo,\n  initiateUnstakeToCalls,\n  stakeToCalls,\n  unstakeToCalls,\n};\n","import qs from 'qs';\nimport { TOKEN_API_VERSION } from './constants';\nimport { PageSchema, TokenSchema } from './schemas';\nimport { AvnuOptions, GetTokensRequest, Page, Token } from './types';\nimport { getBaseUrl, getRequest, parseResponseWithSchema } from './utils';\n\n/**\n * Fetches ERC-20 tokens from the API.\n * You can filter tokens by tags and search for specific tokens by name, symbol or address.\n *\n * @param request.page The page number\n * @param request.size The page size\n * @param request.search The search token name, symbol or address query\n * @param request.tags The tags to filter the tokens (see TokenTag enum)\n * @param options Optional SDK configuration\n * @returns The page of tokens corresponding to the request params\n */\nconst fetchTokens = async (request?: GetTokensRequest, options?: AvnuOptions): Promise<Page<Token>> => {\n  const queryParams = qs.stringify(\n    {\n      page: request?.page,\n      size: request?.size,\n      search: request?.search,\n      tag: request?.tags,\n    },\n    { arrayFormat: 'repeat' },\n  );\n  return fetch(`${getBaseUrl(options)}/${TOKEN_API_VERSION}/starknet/tokens?${queryParams}`, getRequest(options)).then(\n    (response) => parseResponseWithSchema(response, PageSchema(TokenSchema), options?.avnuPublicKey),\n  );\n};\n\n/**\n * Fetch a token by address\n * @param tokenAddress The token address\n * @param options Optional SDK configuration\n * @returns The token if found\n */\nconst fetchTokenByAddress = async (tokenAddress: string, options?: AvnuOptions): Promise<Token> => {\n  return fetch(`${getBaseUrl(options)}/${TOKEN_API_VERSION}/starknet/tokens/${tokenAddress}`, getRequest(options)).then(\n    (response) => parseResponseWithSchema(response, TokenSchema, options?.avnuPublicKey),\n  );\n};\n\n/**\n * Fetch a **verified** or **unruggable** token by symbol\n * @param symbol The token symbol\n * @param options Optional SDK configuration\n * @returns The **verified** or **unruggable** token if found\n */\nconst fetchVerifiedTokenBySymbol = async (symbol: string, options?: AvnuOptions): Promise<Token | undefined> => {\n  return fetchTokens({ page: 0, size: 1, tags: ['Verified', 'Unruggable'], search: symbol }, options).then((page) => {\n    const token = page.content[0];\n    if (token && token.symbol.toLowerCase() === symbol.toLowerCase()) {\n      return token;\n    }\n    throw undefined;\n  });\n};\n\nexport { fetchTokenByAddress, fetchTokens, fetchVerifiedTokenBySymbol };\n"],"mappings":"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","names":["FeedDateRange","PriceFeedType","VolumeFeedType","FeedResolution","SourceType","DcaTradeStatus","DcaOrderStatus","z","z","toBeHex","toBeHex","qs","z","qs","z","hash","toBeHex","qs","z","z","qs","toBeHex","hash","toBeHex","actionToCalls","toBeHex","qs","qs"]}