{"version":3,"file":"IndexerBaseClient-BXL3f89a.cjs","names":["mapIndexerEvent","mapIndexerFundingRate","mapIndexerFundingRateHistory","mapIndexerPortfolio","mapIndexerPortfolioCalendar","mapIndexerPerpPrices","mapIndexerCandlesticks","mapIndexerServerProduct","mapIndexerEventWithTx","mapIndexerOrder","mapIndexerMatchEventBalances","mapIndexerPosition","mapIndexerProductPayment","mapSnapshotsIntervalToServerParams","mapIndexerMarketSnapshot","mapIndexerMakerStatistics","mapIndexerLeaderboardPosition","mapIndexerLeaderboardRegistration","mapIndexerLeaderboardContest","getValidatedHex","mapIndexerNlpSnapshot","mapIndexerV2Ticker","mapIndexerV2Symbols","WalletNotProvidedError","isIndexerServerFailureResponse","IndexerServerFailureError"],"sources":["../src/IndexerBaseClient.ts"],"sourcesContent":["import {\n  EIP712LeaderboardAuthenticationParams,\n  EIP712LeaderboardAuthenticationValues,\n  EIP712SocialAuthenticationParams,\n  getDefaultRecvTime,\n  getNadoClientTypeHeaders,\n  getNadoEIP712Values,\n  getSignedTransactionRequest,\n  getValidatedAddress,\n  getValidatedHex,\n  mapValues,\n  nowInSeconds,\n  removeDecimals,\n  SignableRequestType,\n  SignableRequestTypeToParams,\n  SignedTx,\n  subaccountFromHex,\n  subaccountToHex,\n  toBigInt,\n  toBigNumber,\n  toIntegerString,\n  WalletClientWithAccount,\n  WalletNotProvidedError,\n} from '@nadohq/shared';\nimport axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport {\n  mapIndexerCandlesticks,\n  mapIndexerEvent,\n  mapIndexerEventWithTx,\n  mapIndexerFundingRate,\n  mapIndexerFundingRateHistory,\n  mapIndexerLeaderboardContest,\n  mapIndexerLeaderboardPosition,\n  mapIndexerLeaderboardRegistration,\n  mapIndexerMakerStatistics,\n  mapIndexerMarketSnapshot,\n  mapIndexerMatchEventBalances,\n  mapIndexerNlpSnapshot,\n  mapIndexerOrder,\n  mapIndexerPerpPrices,\n  mapIndexerPortfolio,\n  mapIndexerPortfolioCalendar,\n  mapIndexerPosition,\n  mapIndexerProductPayment,\n  mapIndexerServerProduct,\n  mapIndexerV2Symbols,\n  mapIndexerV2Ticker,\n  mapSnapshotsIntervalToServerParams,\n} from './dataMappers';\nimport {\n  ConnectSocialAccountParams,\n  ConnectSocialAccountResponse,\n  GetIndexerBacklogResponse,\n  GetIndexerCandlesticksParams,\n  GetIndexerCandlesticksResponse,\n  GetIndexerCashIncentivesParams,\n  GetIndexerCashIncentivesResponse,\n  GetIndexerEdgeCandlesticksParams,\n  GetIndexerEdgeCandlesticksResponse,\n  GetIndexerEdgeMarketSnapshotResponse,\n  GetIndexerEdgeMarketSnapshotsParams,\n  GetIndexerEventsParams,\n  GetIndexerEventsResponse,\n  GetIndexerFastWithdrawalSignatureParams,\n  GetIndexerFastWithdrawalSignatureResponse,\n  GetIndexerFundingRateHistoryParams,\n  GetIndexerFundingRateHistoryResponse,\n  GetIndexerFundingRateParams,\n  GetIndexerFundingRateResponse,\n  GetIndexerInterestFundingPaymentsParams,\n  GetIndexerInterestFundingPaymentsResponse,\n  GetIndexerLeaderboardContestsParams,\n  GetIndexerLeaderboardContestsResponse,\n  GetIndexerLeaderboardParams,\n  GetIndexerLeaderboardParticipantParams,\n  GetIndexerLeaderboardParticipantResponse,\n  GetIndexerLeaderboardRegistrationsParams,\n  GetIndexerLeaderboardRegistrationsResponse,\n  GetIndexerLeaderboardResponse,\n  GetIndexerLinkedSignerParams,\n  GetIndexerLinkedSignerResponse,\n  GetIndexerMakerStatisticsParams,\n  GetIndexerMakerStatisticsResponse,\n  GetIndexerMarketSnapshotsParams,\n  GetIndexerMarketSnapshotsResponse,\n  GetIndexerMatchEventsParams,\n  GetIndexerMatchEventsResponse,\n  GetIndexerMultiProductFundingRatesParams,\n  GetIndexerMultiProductFundingRatesResponse,\n  GetIndexerMultiProductPerpPricesParams,\n  GetIndexerMultiProductPerpPricesResponse,\n  GetIndexerMultiProductSnapshotsParams,\n  GetIndexerMultiProductSnapshotsResponse,\n  GetIndexerMultiSubaccountSnapshotsParams,\n  GetIndexerMultiSubaccountSnapshotsResponse,\n  GetIndexerNlpSnapshotsParams,\n  GetIndexerNlpSnapshotsResponse,\n  GetIndexerOraclePricesParams,\n  GetIndexerOraclePricesResponse,\n  GetIndexerOrdersParams,\n  GetIndexerOrdersResponse,\n  GetIndexerPerpPricesParams,\n  GetIndexerPerpPricesResponse,\n  GetIndexerPointsParams,\n  GetIndexerPointsResponse,\n  GetIndexerPortfolioCalendarParams,\n  GetIndexerPortfolioCalendarResponse,\n  GetIndexerPortfolioParams,\n  GetIndexerPortfolioResponse,\n  GetIndexerPositionsParams,\n  GetIndexerPositionsResponse,\n  GetIndexerPrivateAlphaChoiceParams,\n  GetIndexerPrivateAlphaChoiceResponse,\n  GetIndexerProductSnapshotsParams,\n  GetIndexerProductSnapshotsResponse,\n  GetIndexerQuotePriceResponse,\n  GetIndexerReferralCodeParams,\n  GetIndexerReferralCodeResponse,\n  GetIndexerSubaccountDDAParams,\n  GetIndexerSubaccountDDAResponse,\n  GetIndexerV2SymbolsParams,\n  GetIndexerV2SymbolsResponse,\n  GetIndexerV2TickersParams,\n  GetIndexerV2TickersResponse,\n  GetIndexerXPointsParams,\n  GetIndexerXPointsResponse,\n  IndexerEventWithTx,\n  IndexerMatchEvent,\n  IndexerOraclePrice,\n  IndexerServerEventsParams,\n  IndexerServerFailureError,\n  IndexerServerQueryRequestByType,\n  IndexerServerQueryRequestType,\n  IndexerServerQueryResponseByType,\n  IndexerServerV2SymbolsResponse,\n  IndexerServerV2TickersResponse,\n  IndexerSnapshotBalance,\n  IndexerSubaccountSnapshot,\n  isIndexerServerFailureResponse,\n  ListIndexerSocialAccountsParams,\n  ListIndexerSocialAccountsResponse,\n  ListIndexerSubaccountsParams,\n  ListIndexerSubaccountsResponse,\n  RegisterLeaderboardParams,\n  RegisterLeaderboardResponse,\n  RevokeSocialAccountParams,\n  RevokeSocialAccountResponse,\n} from './types';\n\nexport interface IndexerClientOpts {\n  // Server base URL, without a version segment (ex. `https://api.prod.nado.xyz/archive`)\n  url: string;\n  // Rewards service base URL, including the version segment (ex. `https://api.prod.nado.xyz/rewards/v1`).\n  // Defaults to `${url}/rewards/v1`.\n  rewardsUrl?: string;\n  // Wallet Client for EIP712 signing\n  walletClient?: WalletClientWithAccount;\n  // Linked signer registered through the engine, if provided, execute requests will use this signer\n  linkedSignerWalletClient?: WalletClientWithAccount;\n  // If provided, identifies the calling client, sent as a header with every request\n  clientType?: string;\n}\n\ntype IndexerQueryRequestBody = Partial<IndexerServerQueryRequestByType>;\n\n/**\n * Base client for all indexer requests\n */\nexport class IndexerBaseClient {\n  readonly opts: IndexerClientOpts;\n  readonly v1Url: string;\n  readonly v2Url: string;\n  readonly rewardsUrl: string;\n  readonly axiosInstance: AxiosInstance;\n\n  constructor(opts: IndexerClientOpts) {\n    this.opts = opts;\n    this.axiosInstance = axios.create({\n      withCredentials: true,\n      // We have custom logic to validate response status and create an appropriate error\n      validateStatus: () => true,\n      headers: getNadoClientTypeHeaders(opts.clientType),\n    });\n    this.v1Url = `${opts.url}/v1`;\n    this.v2Url = `${opts.url}/v2`;\n    this.rewardsUrl = opts.rewardsUrl ?? `${opts.url}/rewards/v1`;\n  }\n\n  /**\n   * Sets the linked signer for execute requests\n   *\n   * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer\n   */\n  public setLinkedSigner(\n    linkedSignerWalletClient: WalletClientWithAccount | null,\n  ) {\n    this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? undefined;\n  }\n\n  /**\n   * List all subaccounts\n   *\n   * @param params\n   */\n  async listSubaccounts(\n    params: ListIndexerSubaccountsParams,\n  ): Promise<ListIndexerSubaccountsResponse> {\n    const baseResponse = await this.query('subaccounts', params);\n\n    return baseResponse.subaccounts.map((item) => {\n      const subaccount = subaccountFromHex(item.subaccount);\n      return {\n        hexId: item.subaccount,\n        createdAt: Number(item.created_at),\n        isolated: item.isolated,\n        ...subaccount,\n      };\n    });\n  }\n\n  /**\n   * Retrieve snapshots of multiple subaccounts at multiple points in time.\n   * Each snapshot is a view of the subaccount's balances at this point in time, with tracked variables for interest, funding, etc.\n   *\n   * @param params\n   */\n  async getMultiSubaccountSnapshots(\n    params: GetIndexerMultiSubaccountSnapshotsParams,\n  ): Promise<GetIndexerMultiSubaccountSnapshotsResponse> {\n    const subaccountHexIds = params.subaccounts.map(\n      ({ subaccountOwner, subaccountName }) =>\n        subaccountToHex({\n          subaccountOwner,\n          subaccountName,\n        }),\n    );\n\n    const baseResponse = await this.query('account_snapshots', {\n      subaccounts: subaccountHexIds,\n      timestamps: params.timestamps,\n      isolated: params.isolated,\n    });\n\n    const snapshotsBySubaccount = mapValues(\n      baseResponse.snapshots,\n      (balanceSnapshots) => {\n        const snapshotByTimestamp: Record<string, IndexerSubaccountSnapshot> =\n          {};\n\n        Object.entries(balanceSnapshots).forEach(([timestamp, events]) => {\n          const balances: IndexerSnapshotBalance[] =\n            events.map(mapIndexerEvent);\n\n          snapshotByTimestamp[timestamp] = {\n            timestamp: toBigNumber(timestamp),\n            balances,\n          };\n        });\n\n        return snapshotByTimestamp;\n      },\n    );\n\n    return {\n      subaccountHexIds,\n      snapshots: snapshotsBySubaccount,\n    };\n  }\n\n  /**\n   * Retrieves referral code for an address\n   *\n   * @param params\n   */\n  async getReferralCode(\n    params: GetIndexerReferralCodeParams,\n  ): Promise<GetIndexerReferralCodeResponse> {\n    const baseResponse = await this.query('referral_code', {\n      subaccount: subaccountToHex({\n        subaccountOwner: params.subaccount.subaccountOwner,\n        subaccountName: params.subaccount.subaccountName,\n      }),\n    });\n\n    return {\n      referralCode: baseResponse.referral_code,\n    };\n  }\n\n  /**\n   * Retrieves funding rate for a product, where 1 = 100%\n   * @param params\n   */\n  async getFundingRate(\n    params: GetIndexerFundingRateParams,\n  ): Promise<GetIndexerFundingRateResponse> {\n    const baseResponse = await this.query('funding_rate', {\n      product_id: params.productId,\n    });\n\n    return mapIndexerFundingRate(baseResponse);\n  }\n\n  /**\n   * Retrieves funding rate for multiple products, where 1 = 100%\n   * @param params\n   */\n  async getMultiProductFundingRates(\n    params: GetIndexerMultiProductFundingRatesParams,\n  ): Promise<GetIndexerMultiProductFundingRatesResponse> {\n    const baseResponse = await this.query('funding_rates', {\n      product_ids: params.productIds,\n    });\n\n    return mapValues(baseResponse, mapIndexerFundingRate);\n  }\n\n  /**\n   * Retrieves a perp product's historical (realized hourly) funding rates,\n   * ordered ascending by timestamp, where 1 = 100%.\n   *\n   * To paginate forward, pass the last entry's `timestamp + 1` as the next\n   * request's `startTimeInclusive`.\n   *\n   * @param params\n   */\n  async getFundingRateHistory(\n    params: GetIndexerFundingRateHistoryParams,\n  ): Promise<GetIndexerFundingRateHistoryResponse> {\n    const baseResponse = await this.query('funding_rate_history', {\n      product_id: params.productId,\n      start_time: params.startTimeInclusive,\n      end_time: params.endTimeInclusive,\n      limit: params.limit,\n    });\n\n    return baseResponse.funding_rates.map(mapIndexerFundingRateHistory);\n  }\n\n  /**\n   * Retrieves a subaccount's account-value, PnL, traded-volume, average-trade-size,\n   * and markets-traded history across all timeframes, keyed by period. The value\n   * aggregates the cross-margin account plus every isolated child; the queried\n   * subaccount must be cross-margin.\n   *\n   * Points are downsampled per timeframe, so the most recent point can be up to\n   * ~20 minutes stale. For the exact live value, use the engine client's\n   * `getSubaccountSummary` query instead.\n   *\n   * @param params\n   */\n  async getPortfolio(\n    params: GetIndexerPortfolioParams,\n  ): Promise<GetIndexerPortfolioResponse> {\n    const baseResponse = await this.query('portfolio', {\n      subaccount: subaccountToHex(params.subaccount),\n    });\n\n    return mapIndexerPortfolio(baseResponse);\n  }\n\n  /**\n   * Retrieves a subaccount's per-UTC-day PnL, traded volume, trade count, and\n   * markets traded between `startTime` and `endTime` (inclusive), split into\n   * `spot` and `perp` scopes. The value aggregates the cross-margin account plus\n   * every isolated child; the queried subaccount must be cross-margin.\n   *\n   * Use this for calendar/heat-map style views of daily performance. For\n   * continuous time series, use `getPortfolio` instead.\n   *\n   * `startTime`/`endTime` must be UTC midnight (divisible by 86400); the range\n   * is capped at 500 days. Days before the subaccount's first recorded activity\n   * return zeroed entries; days after the latest available data are omitted, so\n   * a range ending in the future stops at today. The current (partial) day is\n   * measured up to the latest available snapshot, which can be up to ~20\n   * minutes stale.\n   *\n   * @param params\n   */\n  async getPortfolioCalendar(\n    params: GetIndexerPortfolioCalendarParams,\n  ): Promise<GetIndexerPortfolioCalendarResponse> {\n    const baseResponse = await this.query('portfolio_calendar', {\n      subaccount: subaccountToHex(params.subaccount),\n      start_time: params.startTime,\n      end_time: params.endTime,\n    });\n\n    return mapIndexerPortfolioCalendar(baseResponse);\n  }\n\n  /**\n   * Retrieves latest mark/index price for a perp product\n   * @param params\n   */\n  async getPerpPrices(\n    params: GetIndexerPerpPricesParams,\n  ): Promise<GetIndexerPerpPricesResponse> {\n    const baseResponse = await this.query('price', {\n      product_id: params.productId,\n    });\n\n    return mapIndexerPerpPrices(baseResponse);\n  }\n\n  /**\n   * Retrieves latest mark/index price for multiple perp products\n   * @param params\n   */\n  async getMultiProductPerpPrices(\n    params: GetIndexerMultiProductPerpPricesParams,\n  ): Promise<GetIndexerMultiProductPerpPricesResponse> {\n    const baseResponse = await this.query('perp_prices', {\n      product_ids: params.productIds,\n    });\n\n    return mapValues(baseResponse, mapIndexerPerpPrices);\n  }\n\n  /**\n   * Retrieves latest oracle prices for provided products\n   * @param params\n   */\n  async getOraclePrices(\n    params: GetIndexerOraclePricesParams,\n  ): Promise<GetIndexerOraclePricesResponse> {\n    const baseResponse = await this.query('oracle_price', {\n      product_ids: params.productIds,\n    });\n\n    return baseResponse.prices.map((price): IndexerOraclePrice => {\n      return {\n        oraclePrice: removeDecimals(price.oracle_price_x18),\n        updateTime: toBigNumber(price.update_time),\n        productId: price.product_id,\n      };\n    });\n  }\n\n  /**\n   * Retrieves candlesticks for a product\n   * @param params\n   */\n  async getCandlesticks(\n    params: GetIndexerCandlesticksParams,\n  ): Promise<GetIndexerCandlesticksResponse> {\n    const baseResponse = await this.query('candlesticks', {\n      product_id: params.productId,\n      max_time: params.maxTimeInclusive,\n      limit: params.limit,\n      granularity: params.period,\n    });\n\n    return baseResponse.candlesticks.map(mapIndexerCandlesticks);\n  }\n\n  /**\n   * Retrieves candlesticks for a product from Edge\n   * @param params\n   */\n  async getEdgeCandlesticks(\n    params: GetIndexerEdgeCandlesticksParams,\n  ): Promise<GetIndexerEdgeCandlesticksResponse> {\n    const baseResponse = await this.query('edge_candlesticks', {\n      product_id: params.productId,\n      max_time: params.maxTimeInclusive,\n      limit: params.limit,\n      granularity: params.period,\n    });\n\n    return baseResponse.candlesticks.map(mapIndexerCandlesticks);\n  }\n\n  /**\n   * Retrieves historical snapshots for a product\n   * @param params\n   */\n  async getProductSnapshots(\n    params: GetIndexerProductSnapshotsParams,\n  ): Promise<GetIndexerProductSnapshotsResponse> {\n    const baseResponse = await this.query('products', {\n      product_id: params.productId,\n      max_time: params.maxTimestampInclusive,\n      limit: params.limit,\n      idx: params.startCursor,\n    });\n\n    return baseResponse.products.map((product) => {\n      return {\n        ...mapIndexerServerProduct(product.product),\n        submissionIndex: product.submission_idx,\n      };\n    });\n  }\n\n  /**\n   * Retrieves historical snapshots for multiple products\n   * @param params\n   */\n  async getMultiProductSnapshots(\n    params: GetIndexerMultiProductSnapshotsParams,\n  ): Promise<GetIndexerMultiProductSnapshotsResponse> {\n    const timestampToProductsMap = await this.query('product_snapshots', {\n      product_ids: params.productIds,\n      max_time: params.maxTimestampInclusive ?? [nowInSeconds()],\n    });\n\n    return mapValues(timestampToProductsMap, (productIdToProduct) => {\n      return mapValues(productIdToProduct, (indexerProduct) => {\n        return {\n          ...mapIndexerServerProduct(indexerProduct.product),\n          submissionIndex: indexerProduct.submission_idx,\n        };\n      });\n    });\n  }\n\n  /**\n   * Retrieves historical events\n   *\n   * @param params\n   */\n  async getEvents(\n    params: GetIndexerEventsParams,\n  ): Promise<GetIndexerEventsResponse> {\n    const serverLimit = ((): IndexerServerEventsParams['limit'] | undefined => {\n      if (!params.limit) {\n        return;\n      }\n\n      if (params.limit.type === 'events') {\n        return {\n          raw: params.limit.value,\n        };\n      }\n      return {\n        txs: params.limit.value,\n      };\n    })();\n\n    const baseResponse = await this.query('events', {\n      subaccounts: params.subaccounts?.map((subaccount) =>\n        subaccountToHex({\n          subaccountOwner: subaccount.subaccountOwner,\n          subaccountName: subaccount.subaccountName,\n        }),\n      ),\n      product_ids: params.productIds,\n      isolated: params.isolated,\n      event_types: params.eventTypes,\n      max_time: params.maxTimestampInclusive,\n      desc: params.desc,\n      limit: serverLimit,\n      idx: params.startCursor,\n    });\n\n    // Keep track of the last tx index, and go to the next one if the submission_idx for the currently processed event does not match\n    // txs are ordered the same as events, so this should be correct\n    let lastTxIdx = 0;\n    return baseResponse.events.map((event): IndexerEventWithTx => {\n      if (baseResponse.txs[lastTxIdx].submission_idx !== event.submission_idx) {\n        lastTxIdx += 1;\n      }\n      const tx = baseResponse.txs[lastTxIdx];\n      return mapIndexerEventWithTx(event, tx);\n    });\n  }\n\n  /**\n   * Retrieves historical orders\n   * @param params\n   */\n  async getOrders(\n    params: GetIndexerOrdersParams,\n  ): Promise<GetIndexerOrdersResponse> {\n    const baseResponse = await this.query('orders', {\n      subaccounts: params?.subaccounts?.map((subaccount) =>\n        subaccountToHex({\n          subaccountOwner: subaccount.subaccountOwner,\n          subaccountName: subaccount.subaccountName,\n        }),\n      ),\n      product_ids: params.productIds,\n      trigger_types: params.triggerTypes,\n      isolated: params.isolated,\n      digests: params.digests,\n      max_time: params.maxTimestampInclusive,\n      limit: params.limit,\n      idx: params.startCursor,\n    });\n\n    return baseResponse.orders.map(mapIndexerOrder);\n  }\n\n  /**\n   * Gets match order events, this will return the same events as the events query, but with additional information\n   * to identify the order that was matched\n   *\n   * @param params\n   */\n  async getMatchEvents(\n    params: GetIndexerMatchEventsParams,\n  ): Promise<GetIndexerMatchEventsResponse> {\n    const baseResponse = await this.query('matches', {\n      subaccounts: params?.subaccounts?.map((subaccount) =>\n        subaccountToHex({\n          subaccountOwner: subaccount.subaccountOwner,\n          subaccountName: subaccount.subaccountName,\n        }),\n      ),\n      product_ids: params.productIds,\n      isolated: params.isolated,\n      max_time: params.maxTimestampInclusive,\n      limit: params.limit,\n      idx: params.startCursor,\n    });\n\n    // Same as logic in `getEvents`\n    let lastTxIdx = 0;\n    return baseResponse.matches.map((matchEvent): IndexerMatchEvent => {\n      if (\n        baseResponse.txs[lastTxIdx].submission_idx !== matchEvent.submission_idx\n      ) {\n        lastTxIdx += 1;\n      }\n      const { tx, timestamp } = baseResponse.txs[lastTxIdx];\n\n      // We use this to derive the product ID for the match\n      const postBalances = mapIndexerMatchEventBalances(\n        matchEvent.post_balance,\n      );\n\n      return {\n        productId: postBalances.base.productId,\n        isolated: matchEvent.isolated,\n        totalFee: toBigNumber(matchEvent.fee),\n        sequencerFee: toBigNumber(matchEvent.sequencer_fee),\n        builderFee: toBigNumber(matchEvent.builder_fee),\n        baseFilled: toBigNumber(matchEvent.base_filled),\n        quoteFilled: toBigNumber(matchEvent.quote_filled),\n        cumulativeFee: toBigNumber(matchEvent.cumulative_fee),\n        cumulativeBaseFilled: toBigNumber(matchEvent.cumulative_base_filled),\n        cumulativeQuoteFilled: toBigNumber(matchEvent.cumulative_quote_filled),\n        digest: matchEvent.digest,\n        order: matchEvent.order,\n        submissionIndex: matchEvent.submission_idx,\n        timestamp: toBigNumber(timestamp),\n        preEventTrackedVars: {\n          netEntryUnrealized: toBigNumber(matchEvent.net_entry_unrealized),\n          netEntryCumulative: toBigNumber(matchEvent.net_entry_cumulative),\n        },\n        preBalances: mapIndexerMatchEventBalances(matchEvent.pre_balance),\n        postBalances,\n        tx,\n        isTaker: matchEvent.is_taker,\n        realizedPnl: toBigNumber(matchEvent.realized_pnl),\n        closedAmount: toBigNumber(matchEvent.closed_amount),\n        closedNetEntry: toBigNumber(matchEvent.closed_net_entry),\n        margin: matchEvent.margin ? toBigNumber(matchEvent.margin) : null,\n        ...subaccountFromHex(matchEvent.order.sender),\n      };\n    });\n  }\n\n  /**\n   * Retrieves a subaccount's historical positions, ordered descending by `openId`.\n   * Positions are tracked for every product except the quote product.\n   *\n   * The response also includes the boundary events (with their transactions) at each\n   * position's open and close, or open and latest update while still open; join them\n   * to positions via `openId` / `closeId` / `submissionIndex`.\n   *\n   * To paginate, pass the last returned position's `openId - 1` as the next request's\n   * `startCursor`.\n   *\n   * @param params\n   */\n  async getPositions(\n    params: GetIndexerPositionsParams,\n  ): Promise<GetIndexerPositionsResponse> {\n    const baseResponse = await this.query('positions', {\n      subaccount: subaccountToHex({\n        subaccountOwner: params.subaccount.subaccountOwner,\n        subaccountName: params.subaccount.subaccountName,\n      }),\n      product_id: params.productId,\n      isolated: params.isolated,\n      open: params.open,\n      idx: params.startCursor,\n      limit: params.limit,\n    });\n\n    // Unlike `getEvents`, boundary events aren't strictly ordered against txs, so join by submission index\n    const txsBySubmissionIdx = new Map(\n      baseResponse.txs.map((tx) => [tx.submission_idx, tx]),\n    );\n\n    return {\n      positions: baseResponse.positions.map(mapIndexerPosition),\n      events: baseResponse.events.map((event) => {\n        const tx = txsBySubmissionIdx.get(event.submission_idx);\n        if (!tx) {\n          throw Error(\n            `No tx found for position boundary event with submission_idx ${event.submission_idx}`,\n          );\n        }\n        return mapIndexerEventWithTx(event, tx);\n      }),\n    };\n  }\n\n  /**\n   * Retrieves historical funding & interest payments.\n   * NOTE: `limit` is an upperbound. If a user changes position size such that his position is 0 during each funding/interest tick,\n   *        then the indexer will return fewer than `limit` results per page. However, more events can be present. This means that\n   *        there isn't a reliable way to determine whether there is a next page. We just need to keep paginating until the next cursor is null.\n   *\n   * @param params\n   */\n  async getInterestFundingPayments(\n    params: GetIndexerInterestFundingPaymentsParams,\n  ): Promise<GetIndexerInterestFundingPaymentsResponse> {\n    const baseResponse = await this.query('interest_and_funding', {\n      subaccount: subaccountToHex({\n        subaccountOwner: params.subaccount.subaccountOwner,\n        subaccountName: params.subaccount.subaccountName,\n      }),\n      product_ids: params.productIds,\n      max_time: params.maxTimestampInclusive,\n      limit: params.limit,\n      max_idx: params.startCursor,\n    });\n\n    return {\n      fundingPayments: baseResponse.funding_payments.map(\n        mapIndexerProductPayment,\n      ),\n      interestPayments: baseResponse.interest_payments.map(\n        mapIndexerProductPayment,\n      ),\n      nextCursor: baseResponse.next_idx,\n    };\n  }\n\n  /**\n   * Gets quote (USDT) price in terms of USD\n   */\n  async getQuotePrice(): Promise<GetIndexerQuotePriceResponse> {\n    const baseResponse = await this.query('quote_price', {});\n    return {\n      price: removeDecimals(baseResponse.price_x18),\n    };\n  }\n\n  /**\n   * Fetches currently registered linked signer with the remaining txs allowed for the subaccount\n   */\n  async getLinkedSignerWithRateLimit(\n    params: GetIndexerLinkedSignerParams,\n  ): Promise<GetIndexerLinkedSignerResponse> {\n    const baseResponse = await this.query('linked_signer_rate_limit', {\n      subaccount: subaccountToHex(params.subaccount),\n    });\n    return {\n      totalTxLimit: toBigNumber(baseResponse.total_tx_limit),\n      remainingTxs: toBigNumber(baseResponse.remaining_tx),\n      signer: baseResponse.signer,\n      waitTimeUntilNextTx: toBigNumber(baseResponse.wait_time),\n    };\n  }\n\n  /**\n   * Retrieve historical market snapshots\n   * @param params\n   */\n  async getMarketSnapshots(\n    params: GetIndexerMarketSnapshotsParams,\n  ): Promise<GetIndexerMarketSnapshotsResponse> {\n    const baseResponse = await this.query('market_snapshots', {\n      interval: mapSnapshotsIntervalToServerParams(params),\n      product_ids: params.productIds,\n    });\n\n    return baseResponse.snapshots.map(mapIndexerMarketSnapshot);\n  }\n\n  /**\n   * Retrieve historical market snapshots from Edge\n   * @param params\n   */\n  async getEdgeMarketSnapshots(\n    params: GetIndexerEdgeMarketSnapshotsParams,\n  ): Promise<GetIndexerEdgeMarketSnapshotResponse> {\n    const baseResponse = await this.query('edge_market_snapshots', {\n      interval: mapSnapshotsIntervalToServerParams(params),\n    });\n\n    return mapValues(baseResponse.snapshots, (snapshots) =>\n      snapshots.map(mapIndexerMarketSnapshot),\n    );\n  }\n\n  /**\n   * Retrieve maker statistics for a given epoch\n   *\n   * @param params\n   */\n  async getMakerStatistics(\n    params: GetIndexerMakerStatisticsParams,\n  ): Promise<GetIndexerMakerStatisticsResponse> {\n    const baseResponse = await this.query('maker_statistics', {\n      product_id: params.productId,\n      epoch: params.epoch,\n      interval: params.interval,\n    });\n\n    return {\n      rewardCoefficient: toBigNumber(baseResponse.reward_coefficient),\n      makers: baseResponse.makers.map(mapIndexerMakerStatistics),\n    };\n  }\n\n  /**\n   * Retrieve leaderboard stats for a given contest\n   *\n   * @param params\n   */\n  async getLeaderboard(\n    params: GetIndexerLeaderboardParams,\n  ): Promise<GetIndexerLeaderboardResponse> {\n    const baseResponse = await this.rewardsQuery('leaderboard', {\n      contest_id: params.contestId,\n      rank_type: params.rankType,\n      start: params.startCursor,\n      limit: params.limit,\n      order: params.order,\n    });\n\n    return {\n      participants: baseResponse.positions.map(mapIndexerLeaderboardPosition),\n    };\n  }\n\n  /**\n   * Retrieve leaderboard ranking of a subaccount on a given contest\n   *\n   * @param params\n   */\n  async getLeaderboardParticipant(\n    params: GetIndexerLeaderboardParticipantParams,\n  ): Promise<GetIndexerLeaderboardParticipantResponse> {\n    const baseResponse = await this.rewardsQuery('leaderboard_rank', {\n      subaccount: subaccountToHex(params.subaccount),\n      contest_ids: params.contestIds,\n    });\n\n    return {\n      participant: mapValues(baseResponse.positions, (position) =>\n        mapIndexerLeaderboardPosition(position),\n      ),\n    };\n  }\n\n  /**\n   * Registers a subaccount for one or more contests. Requires EIP-712 signing.\n   *\n   * @param params - Registration parameters including contest IDs and signing config.\n   */\n  async registerLeaderboard(\n    params: RegisterLeaderboardParams,\n  ): Promise<RegisterLeaderboardResponse> {\n    const signatureParams: EIP712LeaderboardAuthenticationParams = {\n      expiration: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n      subaccountName: params.subaccountName,\n      subaccountOwner: params.subaccountOwner,\n      contestIds: params.contestIds,\n    };\n\n    const tx = getNadoEIP712Values(\n      'leaderboard_authentication',\n      signatureParams,\n    );\n    const signature = await this.sign(\n      'leaderboard_authentication',\n      params.verifyingAddr,\n      params.chainId,\n      signatureParams,\n    );\n\n    const updateRegistrationTx: SignedTx<EIP712LeaderboardAuthenticationValues> =\n      {\n        tx,\n        signature,\n      };\n\n    const baseResponse = await this.rewardsQuery('leaderboard_register', {\n      update_registration: updateRegistrationTx,\n    });\n\n    return {\n      registrations: baseResponse.registrations.map(\n        mapIndexerLeaderboardRegistration,\n      ),\n    };\n  }\n\n  /**\n   * Retrieves contest registrations for a subaccount. Supports batch lookup\n   * across multiple contests with an optional active filter.\n   *\n   * @param params - Query parameters including subaccount and contest IDs.\n   */\n  async getLeaderboardRegistrations(\n    params: GetIndexerLeaderboardRegistrationsParams,\n  ): Promise<GetIndexerLeaderboardRegistrationsResponse> {\n    const baseResponse = await this.rewardsQuery('leaderboard_registrations', {\n      subaccount: subaccountToHex(params.subaccount),\n      contest_ids: params.contestIds,\n      active: params.active,\n    });\n\n    return {\n      registrations: baseResponse.registrations.map(\n        mapIndexerLeaderboardRegistration,\n      ),\n    };\n  }\n\n  /**\n   * Retrieve metadata of provided leaderboard contests\n   *\n   * @param params\n   */\n  async getLeaderboardContests(\n    params: GetIndexerLeaderboardContestsParams,\n  ): Promise<GetIndexerLeaderboardContestsResponse> {\n    const baseResponse = await this.rewardsQuery('leaderboard_contests', {\n      contest_ids: params.contestIds,\n      active: params.active,\n    });\n\n    return {\n      contests: baseResponse.contests.map(mapIndexerLeaderboardContest),\n    };\n  }\n\n  /**\n   * Retrieve signature and tx to submit a fast withdrawal\n   *\n   * @param params\n   */\n  async getFastWithdrawalSignature(\n    params: GetIndexerFastWithdrawalSignatureParams,\n  ): Promise<GetIndexerFastWithdrawalSignatureResponse> {\n    const baseResponse = await this.query('fast_withdrawal_signature', params);\n    return {\n      idx: toBigInt(baseResponse.idx),\n      tx: baseResponse.tx,\n      txV2: baseResponse.tx_v2,\n      txBytes: getValidatedHex(baseResponse.tx_bytes),\n      signatures: baseResponse.signatures.map(getValidatedHex),\n    };\n  }\n\n  async getNlpSnapshots(\n    params: GetIndexerNlpSnapshotsParams,\n  ): Promise<GetIndexerNlpSnapshotsResponse> {\n    const baseResponse = await this.query('nlp_snapshots', {\n      interval: {\n        count: params.limit,\n        max_time: params.maxTimeInclusive\n          ? toIntegerString(params.maxTimeInclusive)\n          : undefined,\n        granularity: params.granularity,\n      },\n    });\n\n    return {\n      snapshots: baseResponse.snapshots.map(mapIndexerNlpSnapshot),\n    };\n  }\n\n  /**\n   * Retrieves the subaccount's DDA (Direct Deposit Address)\n   * @param params\n   */\n  async getSubaccountDDA(\n    params: GetIndexerSubaccountDDAParams,\n  ): Promise<GetIndexerSubaccountDDAResponse> {\n    const baseResponse = await this.query('direct_deposit_address', {\n      subaccount: subaccountToHex(params.subaccount),\n    });\n\n    return {\n      address: getValidatedAddress(baseResponse.v1_address),\n    };\n  }\n\n  async getSequencerBacklog(): Promise<GetIndexerBacklogResponse> {\n    const baseResponse = await this.query('backlog', {});\n\n    return {\n      totalTxs: toBigNumber(baseResponse.total_txs),\n      totalSubmissions: toBigNumber(baseResponse.total_submissions),\n      backlogSize: toBigNumber(baseResponse.backlog_size),\n      updatedAt: toBigNumber(baseResponse.updated_at),\n      backlogEtaInSeconds: baseResponse.backlog_eta_in_seconds\n        ? toBigNumber(baseResponse.backlog_eta_in_seconds)\n        : null,\n      txsPerSecond: baseResponse.txs_per_second\n        ? toBigNumber(baseResponse.txs_per_second)\n        : null,\n    };\n  }\n\n  /**\n   * Retrieves private alpha choice information for a given address\n   * @param params\n   */\n  async getPrivateAlphaChoice(\n    params: GetIndexerPrivateAlphaChoiceParams,\n  ): Promise<GetIndexerPrivateAlphaChoiceResponse> {\n    const baseResponse = await this.rewardsQuery('private_alpha_choice', {\n      address: params.address,\n    });\n\n    return {\n      points: toBigNumber(baseResponse.points),\n      feeRefund: toBigNumber(baseResponse.fee_refund),\n      nftEligibility: baseResponse.nft_eligibility,\n    };\n  }\n\n  /**\n   * Retrieves points information for a given address, including points per epoch and all-time points\n   * @param params\n   */\n  async getPoints(\n    params: GetIndexerPointsParams,\n  ): Promise<GetIndexerPointsResponse> {\n    const baseResponse = await this.rewardsQuery('nado_points', {\n      address: params.address,\n    });\n\n    return {\n      pointsPerEpoch: baseResponse.points_per_epoch.map((epoch) => ({\n        epoch: epoch.epoch,\n        description: epoch.description,\n        startTime: toBigNumber(epoch.start_time),\n        endTime: toBigNumber(epoch.end_time),\n        totalPoints: toBigNumber(epoch.total_points),\n        points: toBigNumber(epoch.points),\n        rank: epoch.rank,\n        tier: epoch.tier,\n      })),\n      allTimePoints: {\n        points: toBigNumber(baseResponse.all_time_points.points),\n        rank: baseResponse.all_time_points.rank,\n        tier: baseResponse.all_time_points.tier,\n      },\n    };\n  }\n\n  /**\n   * Retrieves xPoints information (Nado x xStocks points program) for a given address,\n   * including per-epoch points, all-time points, and per-quest breakdowns.\n   * @param params\n   */\n  async getXPoints(\n    params: GetIndexerXPointsParams,\n  ): Promise<GetIndexerXPointsResponse> {\n    const baseResponse = await this.rewardsQuery('nado_xpoints', {\n      address: params.address,\n    });\n\n    const mapQuests = (\n      quests: typeof baseResponse.all_time_points.quests,\n    ): GetIndexerXPointsResponse['allTimePoints']['quests'] =>\n      quests.map((quest) => ({\n        questType: quest.quest_type,\n        points: toBigNumber(quest.points),\n      }));\n\n    return {\n      pointsPerEpoch: baseResponse.points_per_epoch.map((epoch) => ({\n        epoch: epoch.epoch,\n        description: epoch.description,\n        startTime: toBigNumber(epoch.start_time),\n        endTime: toBigNumber(epoch.end_time),\n        totalPoints: toBigNumber(epoch.total_points),\n        rank: epoch.rank,\n        quests: mapQuests(epoch.quests),\n      })),\n      allTimePoints: {\n        totalPoints: toBigNumber(baseResponse.all_time_points.total_points),\n        rank: baseResponse.all_time_points.rank,\n        quests: mapQuests(baseResponse.all_time_points.quests),\n      },\n    };\n  }\n\n  /**\n   * Retrieves cash incentives information for a given wallet address: per-event platform volume,\n   * unlocked rewards, and `wallet.claim`, which carries the claim status plus the merkle proof when\n   * that status is `claimable`.\n   * @param params\n   */\n  async getCashIncentives(\n    params: GetIndexerCashIncentivesParams,\n  ): Promise<GetIndexerCashIncentivesResponse> {\n    const baseResponse = await this.rewardsQuery('cash_incentives', {\n      wallet_address: params.address,\n    });\n\n    return {\n      events: baseResponse.events.map((event) => ({\n        metadata: {\n          eventId: event.metadata.event_id,\n          description: event.metadata.description,\n          epochStart: toBigNumber(event.metadata.epoch_start),\n          epochEnd: toBigNumber(event.metadata.epoch_end),\n          maxVolume: removeDecimals(event.metadata.max_volume),\n          maxReward: removeDecimals(event.metadata.max_reward),\n          minVolume: removeDecimals(event.metadata.min_volume),\n          minReward: removeDecimals(event.metadata.min_reward),\n        },\n        platform: {\n          platformVolume: removeDecimals(event.platform.platform_volume),\n          unlockedReward: removeDecimals(event.platform.unlocked_reward),\n        },\n        wallet: {\n          reward: removeDecimals(event.wallet.reward),\n          claim:\n            event.wallet.claim.status === 'claimable'\n              ? {\n                  status: 'claimable',\n                  airdropAddress: getValidatedAddress(\n                    event.wallet.claim.airdrop_address,\n                  ),\n                  week: event.wallet.claim.week,\n                  // Kept in raw token units so it can be passed to the airdrop contract unchanged\n                  totalAmount: toBigNumber(event.wallet.claim.total_amount),\n                  proof: event.wallet.claim.proof.map(getValidatedHex),\n                }\n              : { status: event.wallet.claim.status },\n        },\n      })),\n      walletSummary: {\n        totalReward: removeDecimals(baseResponse.wallet_summary.total_reward),\n        claimableReward: removeDecimals(\n          baseResponse.wallet_summary.claimable_reward,\n        ),\n      },\n    };\n  }\n\n  /**\n   * Initiates a social account connection flow. Returns a URL the user must visit to complete the OAuth flow.\n   * Requires EIP-712 signing.\n   *\n   * @param params - Connection parameters including provider and signing config.\n   */\n  async connectSocialAccount(\n    params: ConnectSocialAccountParams,\n  ): Promise<ConnectSocialAccountResponse> {\n    const signatureParams: EIP712SocialAuthenticationParams = {\n      expiration: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n      subaccountName: params.subaccountName,\n      subaccountOwner: params.subaccountOwner,\n      provider: params.provider,\n    };\n\n    const tx = getNadoEIP712Values('social_authentication', signatureParams);\n    const signature = await this.sign(\n      'social_authentication',\n      params.verifyingAddr,\n      params.chainId,\n      signatureParams,\n    );\n\n    const baseResponse = await this.rewardsQuery('social_connect', {\n      update_social_account: { tx, signature },\n    });\n\n    return { url: baseResponse.url };\n  }\n\n  /**\n   * Lists linked social accounts for a given address.\n   *\n   * @param params - Query parameters including the wallet address.\n   */\n  async listSocialAccounts(\n    params: ListIndexerSocialAccountsParams,\n  ): Promise<ListIndexerSocialAccountsResponse> {\n    const baseResponse = await this.rewardsQuery('list_social_accounts', {\n      address: params.address,\n    });\n\n    return {\n      accounts: baseResponse.accounts.map((a) => ({\n        provider: a.provider,\n        username: a.username,\n        displayName: a.display_name,\n        profileImageUrl: a.profile_image_url,\n      })),\n    };\n  }\n\n  /**\n   * Revokes a linked social account. Requires EIP-712 signing.\n   *\n   * @param params - Revocation parameters including provider and signing config.\n   */\n  async revokeSocialAccount(\n    params: RevokeSocialAccountParams,\n  ): Promise<RevokeSocialAccountResponse> {\n    const signatureParams: EIP712SocialAuthenticationParams = {\n      expiration: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n      subaccountName: params.subaccountName,\n      subaccountOwner: params.subaccountOwner,\n      provider: params.provider,\n    };\n\n    const tx = getNadoEIP712Values('social_authentication', signatureParams);\n    const signature = await this.sign(\n      'social_authentication',\n      params.verifyingAddr,\n      params.chainId,\n      signatureParams,\n    );\n\n    const baseResponse = await this.rewardsQuery('revoke_social_account', {\n      update_social_account: { tx, signature },\n    });\n\n    return {\n      accounts: baseResponse.accounts.map((a) => ({\n        provider: a.provider,\n        username: a.username,\n        displayName: a.display_name,\n        profileImageUrl: a.profile_image_url,\n      })),\n    };\n  }\n\n  /**\n   * Get tickers from the v2 indexer endpoint\n   * @param params\n   */\n  async getV2Tickers(\n    params: GetIndexerV2TickersParams,\n  ): Promise<GetIndexerV2TickersResponse> {\n    const response =\n      await this.axiosInstance.get<IndexerServerV2TickersResponse>(\n        `${this.v2Url}/tickers`,\n        { params },\n      );\n\n    this.checkResponseStatus(response);\n\n    return mapValues(response.data, mapIndexerV2Ticker);\n  }\n\n  /**\n   * Get symbols with market hours from the v2 indexer endpoint\n   * @param params\n   */\n  async getV2Symbols(\n    params?: GetIndexerV2SymbolsParams,\n  ): Promise<GetIndexerV2SymbolsResponse> {\n    const response =\n      await this.axiosInstance.get<IndexerServerV2SymbolsResponse>(\n        `${this.v2Url}/symbols`,\n        {\n          params: {\n            product_type: params?.productType,\n            product_ids: params?.productIds,\n          },\n        },\n      );\n\n    this.checkResponseStatus(response);\n\n    return mapValues(response.data, mapIndexerV2Symbols);\n  }\n\n  protected query<TRequestType extends IndexerServerQueryRequestType>(\n    requestType: TRequestType,\n    params: IndexerServerQueryRequestByType[TRequestType],\n  ): Promise<IndexerServerQueryResponseByType[TRequestType]> {\n    return this.queryWithUrl(this.v1Url, requestType, params);\n  }\n\n  /**\n   * Runs a query against the rewards endpoint, which serves leaderboard, points,\n   * cash incentives, private alpha, and social account queries\n   */\n  protected rewardsQuery<TRequestType extends IndexerServerQueryRequestType>(\n    requestType: TRequestType,\n    params: IndexerServerQueryRequestByType[TRequestType],\n  ): Promise<IndexerServerQueryResponseByType[TRequestType]> {\n    return this.queryWithUrl(this.rewardsUrl, requestType, params);\n  }\n\n  private async queryWithUrl<\n    TRequestType extends IndexerServerQueryRequestType,\n  >(\n    url: string,\n    requestType: TRequestType,\n    params: IndexerServerQueryRequestByType[TRequestType],\n  ): Promise<IndexerServerQueryResponseByType[TRequestType]> {\n    const reqBody: IndexerQueryRequestBody = {\n      [requestType]: params,\n    };\n    const response = await this.axiosInstance.post<\n      IndexerServerQueryResponseByType[TRequestType]\n    >(url, reqBody);\n\n    this.checkResponseStatus(response);\n\n    return response.data;\n  }\n\n  protected async sign<T extends SignableRequestType>(\n    requestType: T,\n    verifyingContract: string,\n    chainId: number,\n    params: SignableRequestTypeToParams[T],\n  ) {\n    const walletClient =\n      this.opts.linkedSignerWalletClient ?? this.opts.walletClient;\n\n    if (!walletClient) {\n      throw new WalletNotProvidedError();\n    }\n\n    return getSignedTransactionRequest({\n      chainId,\n      requestParams: params,\n      requestType,\n      walletClient,\n      verifyingContract,\n    });\n  }\n\n  private checkResponseStatus(response: AxiosResponse) {\n    if (isIndexerServerFailureResponse(response.data)) {\n      throw new IndexerServerFailureError(response.data, response.status);\n    }\n    if (response.status !== 200 || !response.data) {\n      throw Error(\n        `Unexpected response from server: ${response.status} ${response.statusText}`,\n      );\n    }\n  }\n}\n"],"mappings":"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"}