@nadohq/indexer-client 0.1.0-alpha.1 → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IndexerBaseClient.cjs +71 -58
- package/dist/IndexerBaseClient.cjs.map +1 -1
- package/dist/IndexerBaseClient.d.cts +8 -4
- package/dist/IndexerBaseClient.d.ts +8 -4
- package/dist/IndexerBaseClient.js +23 -10
- package/dist/IndexerBaseClient.js.map +1 -1
- package/dist/IndexerClient.cjs +20 -20
- package/dist/IndexerClient.cjs.map +1 -1
- package/dist/IndexerClient.d.cts +4 -5
- package/dist/IndexerClient.d.ts +4 -5
- package/dist/IndexerClient.js +9 -9
- package/dist/IndexerClient.js.map +1 -1
- package/dist/dataMappers.cjs +107 -112
- package/dist/dataMappers.cjs.map +1 -1
- package/dist/dataMappers.d.cts +5 -6
- package/dist/dataMappers.d.ts +5 -6
- package/dist/dataMappers.js +11 -17
- package/dist/dataMappers.js.map +1 -1
- package/dist/endpoints.cjs +2 -2
- package/dist/endpoints.cjs.map +1 -1
- package/dist/endpoints.d.cts +1 -1
- package/dist/endpoints.d.ts +1 -1
- package/dist/endpoints.js +2 -2
- package/dist/endpoints.js.map +1 -1
- package/dist/index.d.cts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/types/IndexerEventType.cjs.map +1 -1
- package/dist/types/IndexerEventType.d.cts +1 -1
- package/dist/types/IndexerEventType.d.ts +1 -1
- package/dist/types/NadoTx.cjs.map +1 -1
- package/dist/types/clientTypes.cjs.map +1 -1
- package/dist/types/clientTypes.d.cts +16 -14
- package/dist/types/clientTypes.d.ts +16 -14
- package/dist/types/index.d.cts +5 -6
- package/dist/types/index.d.ts +5 -6
- package/dist/types/paginatedEventsTypes.cjs.map +1 -1
- package/dist/types/paginatedEventsTypes.d.cts +7 -8
- package/dist/types/paginatedEventsTypes.d.ts +7 -8
- package/dist/types/serverModelTypes.cjs.map +1 -1
- package/dist/types/serverModelTypes.d.cts +5 -5
- package/dist/types/serverModelTypes.d.ts +5 -5
- package/dist/types/serverTypes.cjs.map +1 -1
- package/dist/types/serverTypes.d.cts +16 -8
- package/dist/types/serverTypes.d.ts +16 -8
- package/dist/utils/index.d.cts +2 -3
- package/dist/utils/index.d.ts +2 -3
- package/dist/utils/indexerBalanceValue.cjs.map +1 -1
- package/dist/utils/indexerBalanceValue.d.cts +2 -3
- package/dist/utils/indexerBalanceValue.d.ts +2 -3
- package/dist/utils/indexerBalanceValue.js.map +1 -1
- package/package.json +4 -5
- package/src/IndexerBaseClient.ts +35 -16
- package/src/IndexerClient.ts +17 -17
- package/src/dataMappers.ts +16 -22
- package/src/endpoints.ts +2 -2
- package/src/types/IndexerEventType.ts +2 -2
- package/src/types/NadoTx.ts +1 -1
- package/src/types/clientTypes.ts +21 -16
- package/src/types/paginatedEventsTypes.ts +7 -8
- package/src/types/serverModelTypes.ts +4 -4
- package/src/types/serverTypes.ts +17 -7
- package/src/utils/indexerBalanceValue.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/IndexerClient.ts"],"sourcesContent":["import {\n ProductEngineType,\n QUOTE_PRODUCT_ID,\n subaccountFromHex,\n VLP_PRODUCT_ID,\n} from '@nadohq/contracts';\nimport { toBigDecimal, toIntegerString } from '@nadohq/utils';\n\nimport { IndexerBaseClient } from './IndexerBaseClient';\nimport {\n BaseIndexerPaginatedEvent,\n CollateralEventType,\n GetIndexerPaginatedInterestFundingPaymentsResponse,\n GetIndexerPaginatedLeaderboardParams,\n GetIndexerPaginatedLeaderboardResponse,\n GetIndexerPaginatedOrdersParams,\n GetIndexerPaginatedOrdersResponse,\n GetIndexerSubaccountCollateralEventsParams,\n GetIndexerSubaccountCollateralEventsResponse,\n GetIndexerSubaccountInterestFundingPaymentsParams,\n GetIndexerSubaccountLiquidationEventsParams,\n GetIndexerSubaccountLiquidationEventsResponse,\n GetIndexerSubaccountMatchEventParams,\n GetIndexerSubaccountMatchEventsResponse,\n GetIndexerSubaccountSettlementEventsParams,\n GetIndexerSubaccountSettlementEventsResponse,\n GetIndexerSubaccountVlpEventsParams,\n GetIndexerSubaccountVlpEventsResponse,\n IndexerCollateralEvent,\n IndexerEventPerpStateSnapshot,\n IndexerEventSpotStateSnapshot,\n IndexerEventWithTx,\n IndexerLiquidationEvent,\n IndexerSettlementEvent,\n IndexerVlpEvent,\n PaginatedIndexerEventsResponse,\n} from './types';\n\n/**\n * Indexer client providing paginated queries for historical data from the Nado indexer service\n */\nexport class IndexerClient extends IndexerBaseClient {\n async getPaginatedSubaccountMatchEvents(\n params: GetIndexerSubaccountMatchEventParams,\n ): Promise<GetIndexerSubaccountMatchEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n isolated,\n productIds,\n } = params;\n\n const limit = requestedLimit + 1;\n const events = await this.getMatchEvents({\n startCursor,\n maxTimestampInclusive,\n limit,\n subaccount: { subaccountName, subaccountOwner },\n productIds,\n isolated,\n });\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountVlpEvents(\n params: GetIndexerSubaccountVlpEventsParams,\n ): Promise<GetIndexerSubaccountVlpEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // There are 2 events per mint/burn for spot - one associated with the VLP product & the other with the primary quote\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['mint_vlp', 'burn_vlp'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n // Now aggregate results by the submission index, use map to maintain insertion order\n const eventsBySubmissionIdx = new Map<string, IndexerVlpEvent>();\n\n baseResponse.forEach((event) => {\n const mappedEvent = (() => {\n const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);\n if (existingEvent) {\n return existingEvent;\n }\n\n const newEvent: IndexerVlpEvent = {\n vlpDelta: toBigDecimal(0),\n primaryQuoteDelta: toBigDecimal(0),\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n eventsBySubmissionIdx.set(event.submissionIndex, newEvent);\n\n return newEvent;\n })();\n\n const balanceDelta = event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n );\n\n const productId = event.state.market.productId;\n if (productId === QUOTE_PRODUCT_ID) {\n mappedEvent.primaryQuoteDelta = balanceDelta;\n } else if (productId === VLP_PRODUCT_ID) {\n mappedEvent.vlpDelta = balanceDelta;\n } else {\n throw Error(`Invalid product ID for VLP event ${productId}`);\n }\n });\n\n // Force cast to get rid of the `Partial`\n const events = Array.from(eventsBySubmissionIdx.values());\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountCollateralEvents(\n params: GetIndexerSubaccountCollateralEventsParams,\n ): Promise<GetIndexerSubaccountCollateralEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n eventTypes,\n isolated,\n } = params;\n\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: eventTypes ?? [\n 'deposit_collateral',\n 'withdraw_collateral',\n 'transfer_quote',\n ],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n isolated,\n });\n\n const events = baseResponse.map((event): IndexerCollateralEvent => {\n if (event.state.type !== ProductEngineType.SPOT) {\n throw Error('Incorrect event state for collateral event');\n }\n\n return {\n timestamp: event.timestamp,\n // This cast is safe as the query param restricts to collateral events\n eventType: event.eventType as CollateralEventType,\n submissionIndex: event.submissionIndex,\n snapshot: event.state,\n amount: event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n ),\n newAmount: event.state.postBalance.amount,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n });\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountOrders(\n params: GetIndexerPaginatedOrdersParams,\n ): Promise<GetIndexerPaginatedOrdersResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n productIds,\n isolated,\n } = params;\n\n const limit = requestedLimit + 1;\n const baseResponse = await this.getOrders({\n startCursor,\n maxTimestampInclusive,\n subaccount: { subaccountName, subaccountOwner },\n limit,\n productIds,\n isolated,\n });\n\n // Same pagination meta logic as events, but duplicate for now as this return type is slightly different\n const truncatedOrders = baseResponse.slice(0, requestedLimit);\n const hasMore = baseResponse.length > truncatedOrders.length;\n return {\n meta: {\n hasMore,\n nextCursor: baseResponse[truncatedOrders.length]?.submissionIndex,\n },\n orders: truncatedOrders,\n };\n }\n\n async getPaginatedSubaccountSettlementEvents(\n params: GetIndexerSubaccountSettlementEventsParams,\n ): Promise<GetIndexerSubaccountSettlementEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // Each settlement has a quote & perp balance change, so 2 events per settlement tx\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['settle_pnl'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n const events = baseResponse\n .map((event): IndexerSettlementEvent | undefined => {\n if (event.state.market.productId === QUOTE_PRODUCT_ID) {\n return;\n }\n if (event.state.type !== ProductEngineType.PERP) {\n throw Error('Incorrect event state for settlement event');\n }\n\n return {\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n snapshot: event.state,\n // Spot quote delta = -vQuote delta\n quoteDelta: event.state.preBalance.vQuoteBalance.minus(\n event.state.postBalance.vQuoteBalance,\n ),\n isolated: event.isolated,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n })\n .filter((event): event is IndexerSettlementEvent => !!event);\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountLiquidationEvents(\n params: GetIndexerSubaccountLiquidationEventsParams,\n ): Promise<GetIndexerSubaccountLiquidationEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // There is 1 event emitted per product, including quote\n // However, if the balance change is 0, then the liquidation did not touch the product\n // A tx operates on a given health group, so only a spot & its associated perp can be actually liquidated within a single tx\n // with an associated quote balance change\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['liquidate_subaccount'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n // Now aggregate results by the submission index, use map to maintain insertion order\n const eventsBySubmissionIdx = new Map<\n string,\n Partial<IndexerLiquidationEvent>\n >();\n\n baseResponse.forEach((event) => {\n const mappedEvent = (() => {\n const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);\n if (existingEvent) {\n return existingEvent;\n }\n\n const newEvent: Partial<IndexerLiquidationEvent> = {\n perp: undefined,\n spot: undefined,\n quote: undefined,\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n };\n\n return newEvent;\n })();\n\n // The original balance is the negated delta\n const balanceDelta = event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n );\n\n // Event without balance change - not part of this liq\n // However, we could have zero balance changes for the quote product if this was a partial liquidation\n if (\n balanceDelta.isZero() &&\n event.state.market.productId !== QUOTE_PRODUCT_ID\n ) {\n return;\n }\n\n if (event.state.type === ProductEngineType.PERP) {\n mappedEvent.perp = {\n amountLiquidated: balanceDelta.negated(),\n // This cast is safe because we're checking for event.state.type\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventPerpStateSnapshot>,\n };\n } else if (event.state.market.productId === QUOTE_PRODUCT_ID) {\n mappedEvent.quote = {\n balanceDelta,\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventSpotStateSnapshot>,\n };\n } else {\n mappedEvent.spot = {\n amountLiquidated: balanceDelta.negated(),\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventSpotStateSnapshot>,\n };\n }\n\n eventsBySubmissionIdx.set(event.submissionIndex, mappedEvent);\n });\n\n // Force cast to get rid of the `Partial`\n const events = Array.from(\n eventsBySubmissionIdx.values(),\n ) as IndexerLiquidationEvent[];\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n /**\n * Get all interest funding payments for a given subaccount with the standard pagination response\n * This is a simple wrapper over the underlying `getInterestFundingPayments` function. Very little\n * additional processing is needed because the endpoint is well structured for pagination\n *\n * @param params\n */\n async getPaginatedSubaccountInterestFundingPayments(\n params: GetIndexerSubaccountInterestFundingPaymentsParams,\n ): Promise<GetIndexerPaginatedInterestFundingPaymentsResponse> {\n const {\n limit,\n productIds,\n startCursor,\n maxTimestampInclusive,\n subaccountName,\n subaccountOwner,\n } = params;\n const baseResponse = await this.getInterestFundingPayments({\n limit,\n productIds,\n startCursor,\n maxTimestampInclusive,\n subaccount: {\n subaccountName,\n subaccountOwner,\n },\n });\n\n return {\n ...baseResponse,\n meta: {\n hasMore: baseResponse.nextCursor != null,\n nextCursor: baseResponse.nextCursor ?? undefined,\n },\n };\n }\n\n /**\n * Paginated leaderboard query that paginates on rank number.\n *\n * @param params\n */\n async getPaginatedLeaderboard(\n params: GetIndexerPaginatedLeaderboardParams,\n ): Promise<GetIndexerPaginatedLeaderboardResponse> {\n const requestedLimit = params.limit;\n\n const baseResponse = await this.getLeaderboard({\n contestId: params.contestId,\n rankType: params.rankType,\n // Query for 1 more result for proper pagination\n limit: requestedLimit + 1,\n // Start cursor is the next rank number\n startCursor: params.startCursor,\n });\n\n // Next cursor is the rank number of the (requestedLimit+1)th item\n const nextCursor =\n params.rankType === 'pnl'\n ? baseResponse.participants[requestedLimit]?.pnlRank\n : baseResponse.participants[requestedLimit]?.roiRank;\n\n return {\n ...baseResponse,\n // Truncate the response to the requested limit\n participants: baseResponse.participants.slice(0, requestedLimit),\n meta: {\n hasMore: baseResponse.participants.length > requestedLimit,\n nextCursor:\n nextCursor !== undefined ? toIntegerString(nextCursor) : undefined,\n },\n };\n }\n\n /**\n * A util function to generate the standard pagination response for events\n * @param events\n * @param requestedLimit given by consumers of the SDK\n * @private\n */\n private getPaginationEventsResponse<T extends BaseIndexerPaginatedEvent>(\n events: T[],\n requestedLimit: number,\n ): PaginatedIndexerEventsResponse<T> {\n const truncatedEvents = events.slice(0, requestedLimit);\n const hasMore = events.length > truncatedEvents.length;\n\n return {\n events: truncatedEvents,\n meta: {\n hasMore,\n // We want the NEXT available cursor, so we use the first event after the truncation cutoff\n // If len(events) === len(truncatedEvents), there are no more entries and this is undefined\n nextCursor: events[truncatedEvents.length]?.submissionIndex,\n },\n };\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/IndexerClient.ts"],"sourcesContent":["import {\n ProductEngineType,\n QUOTE_PRODUCT_ID,\n subaccountFromHex,\n NLP_PRODUCT_ID,\n} from '@nadohq/shared';\nimport { toBigDecimal, toIntegerString } from '@nadohq/shared';\n\nimport { IndexerBaseClient } from './IndexerBaseClient';\nimport {\n BaseIndexerPaginatedEvent,\n CollateralEventType,\n GetIndexerPaginatedInterestFundingPaymentsResponse,\n GetIndexerPaginatedLeaderboardParams,\n GetIndexerPaginatedLeaderboardResponse,\n GetIndexerPaginatedOrdersParams,\n GetIndexerPaginatedOrdersResponse,\n GetIndexerSubaccountCollateralEventsParams,\n GetIndexerSubaccountCollateralEventsResponse,\n GetIndexerSubaccountInterestFundingPaymentsParams,\n GetIndexerSubaccountLiquidationEventsParams,\n GetIndexerSubaccountLiquidationEventsResponse,\n GetIndexerSubaccountMatchEventParams,\n GetIndexerSubaccountMatchEventsResponse,\n GetIndexerSubaccountSettlementEventsParams,\n GetIndexerSubaccountSettlementEventsResponse,\n GetIndexerSubaccountNlpEventsParams,\n GetIndexerSubaccountNlpEventsResponse,\n IndexerCollateralEvent,\n IndexerEventPerpStateSnapshot,\n IndexerEventSpotStateSnapshot,\n IndexerEventWithTx,\n IndexerLiquidationEvent,\n IndexerSettlementEvent,\n IndexerNlpEvent,\n PaginatedIndexerEventsResponse,\n} from './types';\n\n/**\n * Indexer client providing paginated queries for historical data from the Nado indexer service\n */\nexport class IndexerClient extends IndexerBaseClient {\n async getPaginatedSubaccountMatchEvents(\n params: GetIndexerSubaccountMatchEventParams,\n ): Promise<GetIndexerSubaccountMatchEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n isolated,\n productIds,\n } = params;\n\n const limit = requestedLimit + 1;\n const events = await this.getMatchEvents({\n startCursor,\n maxTimestampInclusive,\n limit,\n subaccount: { subaccountName, subaccountOwner },\n productIds,\n isolated,\n });\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountNlpEvents(\n params: GetIndexerSubaccountNlpEventsParams,\n ): Promise<GetIndexerSubaccountNlpEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // There are 2 events per mint/burn for spot - one associated with the NLP product & the other with the primary quote\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['mint_nlp', 'burn_nlp'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n // Now aggregate results by the submission index, use map to maintain insertion order\n const eventsBySubmissionIdx = new Map<string, IndexerNlpEvent>();\n\n baseResponse.forEach((event) => {\n const mappedEvent = (() => {\n const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);\n if (existingEvent) {\n return existingEvent;\n }\n\n const newEvent: IndexerNlpEvent = {\n nlpDelta: toBigDecimal(0),\n primaryQuoteDelta: toBigDecimal(0),\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n eventsBySubmissionIdx.set(event.submissionIndex, newEvent);\n\n return newEvent;\n })();\n\n const balanceDelta = event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n );\n\n const productId = event.state.market.productId;\n if (productId === QUOTE_PRODUCT_ID) {\n mappedEvent.primaryQuoteDelta = balanceDelta;\n } else if (productId === NLP_PRODUCT_ID) {\n mappedEvent.nlpDelta = balanceDelta;\n } else {\n throw Error(`Invalid product ID for NLP event ${productId}`);\n }\n });\n\n // Force cast to get rid of the `Partial`\n const events = Array.from(eventsBySubmissionIdx.values());\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountCollateralEvents(\n params: GetIndexerSubaccountCollateralEventsParams,\n ): Promise<GetIndexerSubaccountCollateralEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n eventTypes,\n isolated,\n } = params;\n\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: eventTypes ?? [\n 'deposit_collateral',\n 'withdraw_collateral',\n 'transfer_quote',\n ],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n isolated,\n });\n\n const events = baseResponse.map((event): IndexerCollateralEvent => {\n if (event.state.type !== ProductEngineType.SPOT) {\n throw Error('Incorrect event state for collateral event');\n }\n\n return {\n timestamp: event.timestamp,\n // This cast is safe as the query param restricts to collateral events\n eventType: event.eventType as CollateralEventType,\n submissionIndex: event.submissionIndex,\n snapshot: event.state,\n amount: event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n ),\n newAmount: event.state.postBalance.amount,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n });\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountOrders(\n params: GetIndexerPaginatedOrdersParams,\n ): Promise<GetIndexerPaginatedOrdersResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n productIds,\n isolated,\n } = params;\n\n const limit = requestedLimit + 1;\n const baseResponse = await this.getOrders({\n startCursor,\n maxTimestampInclusive,\n subaccount: { subaccountName, subaccountOwner },\n limit,\n productIds,\n isolated,\n });\n\n // Same pagination meta logic as events, but duplicate for now as this return type is slightly different\n const truncatedOrders = baseResponse.slice(0, requestedLimit);\n const hasMore = baseResponse.length > truncatedOrders.length;\n return {\n meta: {\n hasMore,\n nextCursor: baseResponse[truncatedOrders.length]?.submissionIndex,\n },\n orders: truncatedOrders,\n };\n }\n\n async getPaginatedSubaccountSettlementEvents(\n params: GetIndexerSubaccountSettlementEventsParams,\n ): Promise<GetIndexerSubaccountSettlementEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // Each settlement has a quote & perp balance change, so 2 events per settlement tx\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['settle_pnl'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n const events = baseResponse\n .map((event): IndexerSettlementEvent | undefined => {\n if (event.state.market.productId === QUOTE_PRODUCT_ID) {\n return;\n }\n if (event.state.type !== ProductEngineType.PERP) {\n throw Error('Incorrect event state for settlement event');\n }\n\n return {\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n snapshot: event.state,\n // Spot quote delta = -vQuote delta\n quoteDelta: event.state.preBalance.vQuoteBalance.minus(\n event.state.postBalance.vQuoteBalance,\n ),\n isolated: event.isolated,\n tx: event.tx,\n ...subaccountFromHex(event.subaccount),\n };\n })\n .filter((event): event is IndexerSettlementEvent => !!event);\n\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n async getPaginatedSubaccountLiquidationEvents(\n params: GetIndexerSubaccountLiquidationEventsParams,\n ): Promise<GetIndexerSubaccountLiquidationEventsResponse> {\n const {\n startCursor,\n maxTimestampInclusive,\n limit: requestedLimit,\n subaccountName,\n subaccountOwner,\n } = params;\n\n // There is 1 event emitted per product, including quote\n // However, if the balance change is 0, then the liquidation did not touch the product\n // A tx operates on a given health group, so only a spot & its associated perp can be actually liquidated within a single tx\n // with an associated quote balance change\n const limit = requestedLimit + 1;\n const baseResponse = await this.getEvents({\n startCursor,\n maxTimestampInclusive,\n eventTypes: ['liquidate_subaccount'],\n limit: {\n type: 'txs',\n value: limit,\n },\n subaccount: { subaccountName, subaccountOwner },\n });\n\n // Now aggregate results by the submission index, use map to maintain insertion order\n const eventsBySubmissionIdx = new Map<\n string,\n Partial<IndexerLiquidationEvent>\n >();\n\n baseResponse.forEach((event) => {\n const mappedEvent = (() => {\n const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);\n if (existingEvent) {\n return existingEvent;\n }\n\n const newEvent: Partial<IndexerLiquidationEvent> = {\n perp: undefined,\n spot: undefined,\n quote: undefined,\n timestamp: event.timestamp,\n submissionIndex: event.submissionIndex,\n };\n\n return newEvent;\n })();\n\n // The original balance is the negated delta\n const balanceDelta = event.state.postBalance.amount.minus(\n event.state.preBalance.amount,\n );\n\n // Event without balance change - not part of this liq\n // However, we could have zero balance changes for the quote product if this was a partial liquidation\n if (\n balanceDelta.isZero() &&\n event.state.market.productId !== QUOTE_PRODUCT_ID\n ) {\n return;\n }\n\n if (event.state.type === ProductEngineType.PERP) {\n mappedEvent.perp = {\n amountLiquidated: balanceDelta.negated(),\n // This cast is safe because we're checking for event.state.type\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventPerpStateSnapshot>,\n };\n } else if (event.state.market.productId === QUOTE_PRODUCT_ID) {\n mappedEvent.quote = {\n balanceDelta,\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventSpotStateSnapshot>,\n };\n } else {\n mappedEvent.spot = {\n amountLiquidated: balanceDelta.negated(),\n indexerEvent:\n event as IndexerEventWithTx<IndexerEventSpotStateSnapshot>,\n };\n }\n\n eventsBySubmissionIdx.set(event.submissionIndex, mappedEvent);\n });\n\n // Force cast to get rid of the `Partial`\n const events = Array.from(\n eventsBySubmissionIdx.values(),\n ) as IndexerLiquidationEvent[];\n return this.getPaginationEventsResponse(events, requestedLimit);\n }\n\n /**\n * Get all interest funding payments for a given subaccount with the standard pagination response\n * This is a simple wrapper over the underlying `getInterestFundingPayments` function. Very little\n * additional processing is needed because the endpoint is well structured for pagination\n *\n * @param params\n */\n async getPaginatedSubaccountInterestFundingPayments(\n params: GetIndexerSubaccountInterestFundingPaymentsParams,\n ): Promise<GetIndexerPaginatedInterestFundingPaymentsResponse> {\n const {\n limit,\n productIds,\n startCursor,\n maxTimestampInclusive,\n subaccountName,\n subaccountOwner,\n } = params;\n const baseResponse = await this.getInterestFundingPayments({\n limit,\n productIds,\n startCursor,\n maxTimestampInclusive,\n subaccount: {\n subaccountName,\n subaccountOwner,\n },\n });\n\n return {\n ...baseResponse,\n meta: {\n hasMore: baseResponse.nextCursor != null,\n nextCursor: baseResponse.nextCursor ?? undefined,\n },\n };\n }\n\n /**\n * Paginated leaderboard query that paginates on rank number.\n *\n * @param params\n */\n async getPaginatedLeaderboard(\n params: GetIndexerPaginatedLeaderboardParams,\n ): Promise<GetIndexerPaginatedLeaderboardResponse> {\n const requestedLimit = params.limit;\n\n const baseResponse = await this.getLeaderboard({\n contestId: params.contestId,\n rankType: params.rankType,\n // Query for 1 more result for proper pagination\n limit: requestedLimit + 1,\n // Start cursor is the next rank number\n startCursor: params.startCursor,\n });\n\n // Next cursor is the rank number of the (requestedLimit+1)th item\n const nextCursor =\n params.rankType === 'pnl'\n ? baseResponse.participants[requestedLimit]?.pnlRank\n : baseResponse.participants[requestedLimit]?.roiRank;\n\n return {\n ...baseResponse,\n // Truncate the response to the requested limit\n participants: baseResponse.participants.slice(0, requestedLimit),\n meta: {\n hasMore: baseResponse.participants.length > requestedLimit,\n nextCursor:\n nextCursor !== undefined ? toIntegerString(nextCursor) : undefined,\n },\n };\n }\n\n /**\n * A util function to generate the standard pagination response for events\n * @param events\n * @param requestedLimit given by consumers of the SDK\n * @private\n */\n private getPaginationEventsResponse<T extends BaseIndexerPaginatedEvent>(\n events: T[],\n requestedLimit: number,\n ): PaginatedIndexerEventsResponse<T> {\n const truncatedEvents = events.slice(0, requestedLimit);\n const hasMore = events.length > truncatedEvents.length;\n\n return {\n events: truncatedEvents,\n meta: {\n hasMore,\n // We want the NEXT available cursor, so we use the first event after the truncation cutoff\n // If len(events) === len(truncatedEvents), there are no more entries and this is undefined\n nextCursor: events[truncatedEvents.length]?.submissionIndex,\n },\n };\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/dataMappers.cjs
CHANGED
|
@@ -30,22 +30,21 @@ __export(dataMappers_exports, {
|
|
|
30
30
|
mapIndexerMakerStatistics: () => mapIndexerMakerStatistics,
|
|
31
31
|
mapIndexerMarketSnapshot: () => mapIndexerMarketSnapshot,
|
|
32
32
|
mapIndexerMatchEventBalances: () => mapIndexerMatchEventBalances,
|
|
33
|
+
mapIndexerNlpSnapshot: () => mapIndexerNlpSnapshot,
|
|
33
34
|
mapIndexerOrder: () => mapIndexerOrder,
|
|
34
35
|
mapIndexerPerpPrices: () => mapIndexerPerpPrices,
|
|
35
36
|
mapIndexerProductPayment: () => mapIndexerProductPayment,
|
|
36
37
|
mapIndexerServerBalance: () => mapIndexerServerBalance,
|
|
37
38
|
mapIndexerServerProduct: () => mapIndexerServerProduct,
|
|
38
|
-
mapIndexerVlpSnapshot: () => mapIndexerVlpSnapshot,
|
|
39
39
|
mapSnapshotsIntervalToServerParams: () => mapSnapshotsIntervalToServerParams
|
|
40
40
|
});
|
|
41
41
|
module.exports = __toCommonJS(dataMappers_exports);
|
|
42
|
-
var import_contracts = require("@nadohq/contracts");
|
|
43
42
|
var import_engine_client = require("@nadohq/engine-client");
|
|
44
|
-
var
|
|
43
|
+
var import_shared = require("@nadohq/shared");
|
|
45
44
|
function mapSnapshotsIntervalToServerParams(params) {
|
|
46
45
|
return {
|
|
47
46
|
count: params.limit,
|
|
48
|
-
max_time: params.maxTimeInclusive ? (0,
|
|
47
|
+
max_time: params.maxTimeInclusive ? (0, import_shared.toIntegerString)(params.maxTimeInclusive) : void 0,
|
|
49
48
|
granularity: params.granularity
|
|
50
49
|
};
|
|
51
50
|
}
|
|
@@ -58,45 +57,41 @@ function mapIndexerServerProduct(product) {
|
|
|
58
57
|
function mapIndexerServerBalance(balance) {
|
|
59
58
|
if ("spot" in balance) {
|
|
60
59
|
return {
|
|
61
|
-
amount: (0,
|
|
60
|
+
amount: (0, import_shared.toBigDecimal)(balance.spot.balance.amount),
|
|
62
61
|
productId: balance.spot.product_id,
|
|
63
|
-
type:
|
|
62
|
+
type: import_shared.ProductEngineType.SPOT
|
|
64
63
|
};
|
|
65
64
|
}
|
|
66
65
|
return {
|
|
67
|
-
amount: (0,
|
|
66
|
+
amount: (0, import_shared.toBigDecimal)(balance.perp.balance.amount),
|
|
68
67
|
productId: balance.perp.product_id,
|
|
69
|
-
type:
|
|
70
|
-
vQuoteBalance: (0,
|
|
68
|
+
type: import_shared.ProductEngineType.PERP,
|
|
69
|
+
vQuoteBalance: (0, import_shared.toBigDecimal)(balance.perp.balance.v_quote_balance)
|
|
71
70
|
};
|
|
72
71
|
}
|
|
73
72
|
function mapIndexerOrder(order) {
|
|
74
|
-
const
|
|
75
|
-
const expirationEncodedData = (0, import_contracts.parseRawExpirationTimestamp)(order.expiration);
|
|
73
|
+
const appendix = (0, import_shared.unpackOrderAppendix)(order.appendix);
|
|
76
74
|
return {
|
|
77
|
-
amount: (0,
|
|
75
|
+
amount: (0, import_shared.toBigDecimal)(order.amount),
|
|
78
76
|
digest: order.digest,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
nonce: (0, import_utils.toBigDecimal)(order.nonce),
|
|
85
|
-
recvTimeSeconds: (0, import_contracts.getRecvTimeFromOrderNonce)(order.nonce) / 1e3,
|
|
86
|
-
price: (0, import_utils.removeDecimals)(order.price_x18),
|
|
77
|
+
expiration: Number(order.expiration),
|
|
78
|
+
appendix,
|
|
79
|
+
nonce: (0, import_shared.toBigDecimal)(order.nonce),
|
|
80
|
+
recvTimeSeconds: (0, import_shared.getRecvTimeFromOrderNonce)(order.nonce) / 1e3,
|
|
81
|
+
price: (0, import_shared.removeDecimals)(order.price_x18),
|
|
87
82
|
productId: order.product_id,
|
|
88
83
|
subaccount: order.subaccount,
|
|
89
84
|
submissionIndex: order.submission_idx,
|
|
90
|
-
baseFilled: (0,
|
|
91
|
-
quoteFilled: (0,
|
|
92
|
-
totalFee: (0,
|
|
85
|
+
baseFilled: (0, import_shared.toBigDecimal)(order.base_filled),
|
|
86
|
+
quoteFilled: (0, import_shared.toBigDecimal)(order.quote_filled),
|
|
87
|
+
totalFee: (0, import_shared.toBigDecimal)(order.fee)
|
|
93
88
|
};
|
|
94
89
|
}
|
|
95
90
|
function mapIndexerEvent(event) {
|
|
96
91
|
const eventState = (() => {
|
|
97
92
|
if ("spot" in event.pre_balance) {
|
|
98
93
|
return {
|
|
99
|
-
type:
|
|
94
|
+
type: import_shared.ProductEngineType.SPOT,
|
|
100
95
|
market: mapIndexerServerProduct(event.product),
|
|
101
96
|
preBalance: mapIndexerServerBalance(
|
|
102
97
|
event.pre_balance
|
|
@@ -107,7 +102,7 @@ function mapIndexerEvent(event) {
|
|
|
107
102
|
};
|
|
108
103
|
}
|
|
109
104
|
return {
|
|
110
|
-
type:
|
|
105
|
+
type: import_shared.ProductEngineType.PERP,
|
|
111
106
|
market: mapIndexerServerProduct(event.product),
|
|
112
107
|
preBalance: mapIndexerServerBalance(
|
|
113
108
|
event.pre_balance
|
|
@@ -126,18 +121,18 @@ function mapIndexerEvent(event) {
|
|
|
126
121
|
subaccount: event.subaccount,
|
|
127
122
|
submissionIndex: event.submission_idx,
|
|
128
123
|
trackedVars: {
|
|
129
|
-
netEntryCumulative: (0,
|
|
130
|
-
netEntryUnrealized: (0,
|
|
131
|
-
netFundingCumulative: (0,
|
|
132
|
-
netFundingUnrealized: (0,
|
|
133
|
-
netInterestCumulative: (0,
|
|
134
|
-
netInterestUnrealized: (0,
|
|
124
|
+
netEntryCumulative: (0, import_shared.toBigDecimal)(event.net_entry_cumulative),
|
|
125
|
+
netEntryUnrealized: (0, import_shared.toBigDecimal)(event.net_entry_unrealized),
|
|
126
|
+
netFundingCumulative: (0, import_shared.toBigDecimal)(event.net_funding_cumulative),
|
|
127
|
+
netFundingUnrealized: (0, import_shared.toBigDecimal)(event.net_funding_unrealized),
|
|
128
|
+
netInterestCumulative: (0, import_shared.toBigDecimal)(event.net_interest_cumulative),
|
|
129
|
+
netInterestUnrealized: (0, import_shared.toBigDecimal)(event.net_interest_unrealized)
|
|
135
130
|
}
|
|
136
131
|
};
|
|
137
132
|
}
|
|
138
133
|
function mapIndexerEventWithTx(event, tx) {
|
|
139
134
|
return {
|
|
140
|
-
timestamp: (0,
|
|
135
|
+
timestamp: (0, import_shared.toBigDecimal)(tx.timestamp),
|
|
141
136
|
tx: tx.tx,
|
|
142
137
|
...mapIndexerEvent(event)
|
|
143
138
|
};
|
|
@@ -151,11 +146,11 @@ function mapIndexerMatchEventBalances(eventBalances) {
|
|
|
151
146
|
function mapIndexerProductPayment(payment) {
|
|
152
147
|
return {
|
|
153
148
|
submissionIndex: payment.idx,
|
|
154
|
-
timestamp: (0,
|
|
155
|
-
paymentAmount: (0,
|
|
156
|
-
balanceAmount: (0,
|
|
157
|
-
annualPaymentRate: (0,
|
|
158
|
-
oraclePrice: (0,
|
|
149
|
+
timestamp: (0, import_shared.toBigDecimal)(payment.timestamp),
|
|
150
|
+
paymentAmount: (0, import_shared.toBigDecimal)(payment.amount),
|
|
151
|
+
balanceAmount: (0, import_shared.toBigDecimal)(payment.balance_amount),
|
|
152
|
+
annualPaymentRate: (0, import_shared.removeDecimals)(payment.rate_x18),
|
|
153
|
+
oraclePrice: (0, import_shared.removeDecimals)(payment.oracle_price_x18),
|
|
159
154
|
isolated: payment.isolated,
|
|
160
155
|
productId: payment.product_id,
|
|
161
156
|
isolatedProductId: payment.isolated_product_id
|
|
@@ -163,16 +158,16 @@ function mapIndexerProductPayment(payment) {
|
|
|
163
158
|
}
|
|
164
159
|
function mapIndexerPerpPrices(perpPrices) {
|
|
165
160
|
return {
|
|
166
|
-
indexPrice: (0,
|
|
167
|
-
markPrice: (0,
|
|
168
|
-
updateTime: (0,
|
|
161
|
+
indexPrice: (0, import_shared.removeDecimals)(perpPrices.index_price_x18),
|
|
162
|
+
markPrice: (0, import_shared.removeDecimals)(perpPrices.mark_price_x18),
|
|
163
|
+
updateTime: (0, import_shared.toBigDecimal)(perpPrices.update_time),
|
|
169
164
|
productId: perpPrices.product_id
|
|
170
165
|
};
|
|
171
166
|
}
|
|
172
167
|
function mapIndexerFundingRate(fundingRate) {
|
|
173
168
|
return {
|
|
174
|
-
fundingRate: (0,
|
|
175
|
-
updateTime: (0,
|
|
169
|
+
fundingRate: (0, import_shared.removeDecimals)(fundingRate.funding_rate_x18),
|
|
170
|
+
updateTime: (0, import_shared.toBigDecimal)(fundingRate.update_time),
|
|
176
171
|
productId: fundingRate.product_id
|
|
177
172
|
};
|
|
178
173
|
}
|
|
@@ -181,124 +176,124 @@ function mapIndexerMakerStatistics(maker) {
|
|
|
181
176
|
address: maker.address,
|
|
182
177
|
snapshots: maker.data.map((makerData) => {
|
|
183
178
|
return {
|
|
184
|
-
timestamp: (0,
|
|
185
|
-
makerFee: (0,
|
|
186
|
-
uptime: (0,
|
|
187
|
-
sumQMin: (0,
|
|
188
|
-
qScore: (0,
|
|
189
|
-
makerShare: (0,
|
|
190
|
-
expectedMakerReward: (0,
|
|
179
|
+
timestamp: (0, import_shared.toBigDecimal)(makerData.timestamp),
|
|
180
|
+
makerFee: (0, import_shared.toBigDecimal)(makerData.maker_fee),
|
|
181
|
+
uptime: (0, import_shared.toBigDecimal)(makerData.uptime),
|
|
182
|
+
sumQMin: (0, import_shared.toBigDecimal)(makerData.sum_q_min),
|
|
183
|
+
qScore: (0, import_shared.toBigDecimal)(makerData.q_score),
|
|
184
|
+
makerShare: (0, import_shared.toBigDecimal)(makerData.maker_share),
|
|
185
|
+
expectedMakerReward: (0, import_shared.toBigDecimal)(makerData.expected_maker_reward)
|
|
191
186
|
};
|
|
192
187
|
})
|
|
193
188
|
};
|
|
194
189
|
}
|
|
195
190
|
function mapIndexerLeaderboardPosition(position) {
|
|
196
191
|
return {
|
|
197
|
-
subaccount: (0,
|
|
192
|
+
subaccount: (0, import_shared.subaccountFromHex)(position.subaccount),
|
|
198
193
|
contestId: position.contest_id,
|
|
199
|
-
pnl: (0,
|
|
200
|
-
pnlRank: (0,
|
|
201
|
-
percentRoi: (0,
|
|
202
|
-
roiRank: (0,
|
|
203
|
-
accountValue: (0,
|
|
204
|
-
volume: position.volume ? (0,
|
|
205
|
-
updateTime: (0,
|
|
194
|
+
pnl: (0, import_shared.toBigDecimal)(position.pnl),
|
|
195
|
+
pnlRank: (0, import_shared.toBigDecimal)(position.pnl_rank),
|
|
196
|
+
percentRoi: (0, import_shared.toBigDecimal)(position.roi),
|
|
197
|
+
roiRank: (0, import_shared.toBigDecimal)(position.roi_rank),
|
|
198
|
+
accountValue: (0, import_shared.toBigDecimal)(position.account_value),
|
|
199
|
+
volume: position.volume ? (0, import_shared.toBigDecimal)(position.volume) : void 0,
|
|
200
|
+
updateTime: (0, import_shared.toBigDecimal)(position.update_time)
|
|
206
201
|
};
|
|
207
202
|
}
|
|
208
203
|
function mapIndexerLeaderboardRegistration(registration) {
|
|
209
204
|
return {
|
|
210
|
-
subaccount: (0,
|
|
205
|
+
subaccount: (0, import_shared.subaccountFromHex)(registration.subaccount),
|
|
211
206
|
contestId: registration.contest_id,
|
|
212
|
-
updateTime: (0,
|
|
207
|
+
updateTime: (0, import_shared.toBigDecimal)(registration.update_time)
|
|
213
208
|
};
|
|
214
209
|
}
|
|
215
210
|
function mapIndexerLeaderboardContest(contest) {
|
|
216
211
|
return {
|
|
217
212
|
contestId: contest.contest_id,
|
|
218
|
-
startTime: (0,
|
|
219
|
-
endTime: (0,
|
|
220
|
-
period: (0,
|
|
221
|
-
totalParticipants: (0,
|
|
222
|
-
minRequiredAccountValue: (0,
|
|
223
|
-
minRequiredVolume: (0,
|
|
213
|
+
startTime: (0, import_shared.toBigDecimal)(contest.start_time),
|
|
214
|
+
endTime: (0, import_shared.toBigDecimal)(contest.end_time),
|
|
215
|
+
period: (0, import_shared.toBigDecimal)(contest.threshold),
|
|
216
|
+
totalParticipants: (0, import_shared.toBigDecimal)(contest.count),
|
|
217
|
+
minRequiredAccountValue: (0, import_shared.toBigDecimal)(contest.threshold),
|
|
218
|
+
minRequiredVolume: (0, import_shared.toBigDecimal)(contest.volume_threshold),
|
|
224
219
|
requiredProductIds: contest.product_ids,
|
|
225
220
|
active: contest.active,
|
|
226
|
-
lastUpdated: (0,
|
|
221
|
+
lastUpdated: (0, import_shared.toBigDecimal)(contest.last_updated)
|
|
227
222
|
};
|
|
228
223
|
}
|
|
229
224
|
function mapIndexerCandlesticks(candlestick) {
|
|
230
225
|
return {
|
|
231
|
-
close: (0,
|
|
232
|
-
high: (0,
|
|
233
|
-
low: (0,
|
|
234
|
-
open: (0,
|
|
235
|
-
time: (0,
|
|
236
|
-
volume: (0,
|
|
226
|
+
close: (0, import_shared.removeDecimals)(candlestick.close_x18),
|
|
227
|
+
high: (0, import_shared.removeDecimals)(candlestick.high_x18),
|
|
228
|
+
low: (0, import_shared.removeDecimals)(candlestick.low_x18),
|
|
229
|
+
open: (0, import_shared.removeDecimals)(candlestick.open_x18),
|
|
230
|
+
time: (0, import_shared.toBigDecimal)(candlestick.timestamp),
|
|
231
|
+
volume: (0, import_shared.toBigDecimal)(candlestick.volume)
|
|
237
232
|
};
|
|
238
233
|
}
|
|
239
234
|
function mapIndexerMarketSnapshot(snapshot) {
|
|
240
235
|
return {
|
|
241
|
-
timestamp: (0,
|
|
242
|
-
cumulativeUsers: (0,
|
|
243
|
-
dailyActiveUsers: (0,
|
|
244
|
-
tvl: (0,
|
|
245
|
-
borrowRates: (0,
|
|
236
|
+
timestamp: (0, import_shared.toBigDecimal)(snapshot.timestamp),
|
|
237
|
+
cumulativeUsers: (0, import_shared.toBigDecimal)(snapshot.cumulative_users),
|
|
238
|
+
dailyActiveUsers: (0, import_shared.toBigDecimal)(snapshot.daily_active_users),
|
|
239
|
+
tvl: (0, import_shared.toBigDecimal)(snapshot.tvl),
|
|
240
|
+
borrowRates: (0, import_shared.mapValues)(
|
|
246
241
|
snapshot.borrow_rates,
|
|
247
|
-
(value) => (0,
|
|
242
|
+
(value) => (0, import_shared.removeDecimals)(value)
|
|
248
243
|
),
|
|
249
|
-
cumulativeLiquidationAmounts: (0,
|
|
244
|
+
cumulativeLiquidationAmounts: (0, import_shared.mapValues)(
|
|
250
245
|
snapshot.cumulative_liquidation_amounts,
|
|
251
|
-
|
|
246
|
+
import_shared.toBigDecimal
|
|
252
247
|
),
|
|
253
|
-
cumulativeMakerFees: (0,
|
|
248
|
+
cumulativeMakerFees: (0, import_shared.mapValues)(
|
|
254
249
|
snapshot.cumulative_maker_fees,
|
|
255
|
-
|
|
250
|
+
import_shared.toBigDecimal
|
|
256
251
|
),
|
|
257
|
-
cumulativeSequencerFees: (0,
|
|
252
|
+
cumulativeSequencerFees: (0, import_shared.mapValues)(
|
|
258
253
|
snapshot.cumulative_sequencer_fees,
|
|
259
|
-
|
|
254
|
+
import_shared.toBigDecimal
|
|
260
255
|
),
|
|
261
|
-
cumulativeTakerFees: (0,
|
|
256
|
+
cumulativeTakerFees: (0, import_shared.mapValues)(
|
|
262
257
|
snapshot.cumulative_taker_fees,
|
|
263
|
-
|
|
258
|
+
import_shared.toBigDecimal
|
|
264
259
|
),
|
|
265
|
-
cumulativeTrades: (0,
|
|
266
|
-
cumulativeVolumes: (0,
|
|
267
|
-
depositRates: (0,
|
|
260
|
+
cumulativeTrades: (0, import_shared.mapValues)(snapshot.cumulative_trades, import_shared.toBigDecimal),
|
|
261
|
+
cumulativeVolumes: (0, import_shared.mapValues)(snapshot.cumulative_volumes, import_shared.toBigDecimal),
|
|
262
|
+
depositRates: (0, import_shared.mapValues)(
|
|
268
263
|
snapshot.deposit_rates,
|
|
269
|
-
(value) => (0,
|
|
264
|
+
(value) => (0, import_shared.removeDecimals)(value)
|
|
270
265
|
),
|
|
271
|
-
fundingRates: (0,
|
|
266
|
+
fundingRates: (0, import_shared.mapValues)(
|
|
272
267
|
snapshot.funding_rates,
|
|
273
|
-
(value) => (0,
|
|
268
|
+
(value) => (0, import_shared.removeDecimals)(value)
|
|
274
269
|
),
|
|
275
|
-
openInterestsQuote: (0,
|
|
276
|
-
totalBorrows: (0,
|
|
277
|
-
totalDeposits: (0,
|
|
278
|
-
cumulativeTradeSizes: (0,
|
|
270
|
+
openInterestsQuote: (0, import_shared.mapValues)(snapshot.open_interests, import_shared.toBigDecimal),
|
|
271
|
+
totalBorrows: (0, import_shared.mapValues)(snapshot.total_borrows, import_shared.toBigDecimal),
|
|
272
|
+
totalDeposits: (0, import_shared.mapValues)(snapshot.total_deposits, import_shared.toBigDecimal),
|
|
273
|
+
cumulativeTradeSizes: (0, import_shared.mapValues)(
|
|
279
274
|
snapshot.cumulative_trade_sizes,
|
|
280
|
-
|
|
275
|
+
import_shared.toBigDecimal
|
|
281
276
|
),
|
|
282
|
-
cumulativeInflows: (0,
|
|
283
|
-
cumulativeOutflows: (0,
|
|
284
|
-
oraclePrices: (0,
|
|
277
|
+
cumulativeInflows: (0, import_shared.mapValues)(snapshot.cumulative_inflows, import_shared.toBigDecimal),
|
|
278
|
+
cumulativeOutflows: (0, import_shared.mapValues)(snapshot.cumulative_outflows, import_shared.toBigDecimal),
|
|
279
|
+
oraclePrices: (0, import_shared.mapValues)(
|
|
285
280
|
snapshot.oracle_prices,
|
|
286
|
-
(value) => (0,
|
|
281
|
+
(value) => (0, import_shared.removeDecimals)(value)
|
|
287
282
|
)
|
|
288
283
|
};
|
|
289
284
|
}
|
|
290
|
-
function
|
|
285
|
+
function mapIndexerNlpSnapshot(snapshot) {
|
|
291
286
|
return {
|
|
292
287
|
submissionIndex: snapshot.submission_idx,
|
|
293
|
-
timestamp: (0,
|
|
294
|
-
cumulativeBurnAmountUsdc: (0,
|
|
295
|
-
cumulativeMintAmountUsdc: (0,
|
|
296
|
-
cumulativePnl: (0,
|
|
297
|
-
cumulativeTrades: (0,
|
|
298
|
-
cumulativeVolume: (0,
|
|
299
|
-
depositors: (0,
|
|
300
|
-
oraclePrice: (0,
|
|
301
|
-
tvl: (0,
|
|
288
|
+
timestamp: (0, import_shared.toBigDecimal)(snapshot.timestamp),
|
|
289
|
+
cumulativeBurnAmountUsdc: (0, import_shared.toBigDecimal)(snapshot.cumulative_burn_usdc),
|
|
290
|
+
cumulativeMintAmountUsdc: (0, import_shared.toBigDecimal)(snapshot.cumulative_mint_usdc),
|
|
291
|
+
cumulativePnl: (0, import_shared.toBigDecimal)(snapshot.cumulative_pnl),
|
|
292
|
+
cumulativeTrades: (0, import_shared.toBigDecimal)(snapshot.cumulative_trades),
|
|
293
|
+
cumulativeVolume: (0, import_shared.toBigDecimal)(snapshot.cumulative_volume),
|
|
294
|
+
depositors: (0, import_shared.toBigDecimal)(snapshot.depositors),
|
|
295
|
+
oraclePrice: (0, import_shared.removeDecimals)(snapshot.oracle_price_x18),
|
|
296
|
+
tvl: (0, import_shared.toBigDecimal)(snapshot.tvl)
|
|
302
297
|
};
|
|
303
298
|
}
|
|
304
299
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -313,12 +308,12 @@ function mapIndexerVlpSnapshot(snapshot) {
|
|
|
313
308
|
mapIndexerMakerStatistics,
|
|
314
309
|
mapIndexerMarketSnapshot,
|
|
315
310
|
mapIndexerMatchEventBalances,
|
|
311
|
+
mapIndexerNlpSnapshot,
|
|
316
312
|
mapIndexerOrder,
|
|
317
313
|
mapIndexerPerpPrices,
|
|
318
314
|
mapIndexerProductPayment,
|
|
319
315
|
mapIndexerServerBalance,
|
|
320
316
|
mapIndexerServerProduct,
|
|
321
|
-
mapIndexerVlpSnapshot,
|
|
322
317
|
mapSnapshotsIntervalToServerParams
|
|
323
318
|
});
|
|
324
319
|
//# sourceMappingURL=dataMappers.cjs.map
|
package/dist/dataMappers.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dataMappers.ts"],"sourcesContent":["import {\n getRecvTimeFromOrderNonce,\n Market,\n parseRawExpirationTimestamp,\n PerpMarket,\n ProductEngineType,\n SpotMarket,\n subaccountFromHex,\n} from '@nadohq/contracts';\nimport {\n mapEngineServerPerpProduct,\n mapEngineServerSpotProduct,\n} from '@nadohq/engine-client';\nimport {\n mapValues,\n removeDecimals,\n toBigDecimal,\n toIntegerString,\n} from '@nadohq/utils';\nimport {\n Candlestick,\n IndexerEvent,\n IndexerEventWithTx,\n IndexerFundingRate,\n IndexerLeaderboardContest,\n IndexerLeaderboardParticipant,\n IndexerLeaderboardRegistration,\n IndexerMaker,\n IndexerMarketSnapshot,\n IndexerMatchEventBalances,\n IndexerOrder,\n IndexerPerpBalance,\n IndexerPerpPrices,\n IndexerProductPayment,\n IndexerServerBalance,\n IndexerServerCandlestick,\n IndexerServerEvent,\n IndexerServerFundingRate,\n IndexerServerLeaderboardContest,\n IndexerServerLeaderboardPosition,\n IndexerServerLeaderboardRegistration,\n IndexerServerMaker,\n IndexerServerMarketSnapshot,\n IndexerServerMatchEventBalances,\n IndexerServerOrder,\n IndexerServerPerpPrices,\n IndexerServerProduct,\n IndexerServerProductPayment,\n IndexerServerSnapshotsInterval,\n IndexerServerTx,\n IndexerServerVlpSnapshot,\n IndexerSnapshotsIntervalParams,\n IndexerSpotBalance,\n IndexerVlpSnapshot,\n} from './types';\n\nexport function mapSnapshotsIntervalToServerParams(\n params: IndexerSnapshotsIntervalParams,\n): IndexerServerSnapshotsInterval {\n return {\n count: params.limit,\n max_time: params.maxTimeInclusive\n ? toIntegerString(params.maxTimeInclusive)\n : undefined,\n granularity: params.granularity,\n };\n}\n\nexport function mapIndexerServerProduct(product: IndexerServerProduct): Market {\n if ('spot' in product) {\n return mapEngineServerSpotProduct(product.spot);\n }\n return mapEngineServerPerpProduct(product.perp);\n}\n\nexport function mapIndexerServerBalance(\n balance: IndexerServerBalance,\n): IndexerSpotBalance | IndexerPerpBalance {\n if ('spot' in balance) {\n return {\n amount: toBigDecimal(balance.spot.balance.amount),\n productId: balance.spot.product_id,\n type: ProductEngineType.SPOT,\n };\n }\n return {\n amount: toBigDecimal(balance.perp.balance.amount),\n productId: balance.perp.product_id,\n type: ProductEngineType.PERP,\n vQuoteBalance: toBigDecimal(balance.perp.balance.v_quote_balance),\n };\n}\n\nexport function mapIndexerOrder(order: IndexerServerOrder): IndexerOrder {\n const expiration = toBigDecimal(order.expiration);\n const expirationEncodedData = parseRawExpirationTimestamp(order.expiration);\n return {\n amount: toBigDecimal(order.amount),\n digest: order.digest,\n isolated: order.isolated,\n rawExpiration: expiration,\n isReduceOnly: expirationEncodedData.reduceOnly,\n expiration: expirationEncodedData.expirationTime,\n orderType: expirationEncodedData.type,\n nonce: toBigDecimal(order.nonce),\n recvTimeSeconds: getRecvTimeFromOrderNonce(order.nonce) / 1000,\n price: removeDecimals(order.price_x18),\n productId: order.product_id,\n subaccount: order.subaccount,\n submissionIndex: order.submission_idx,\n baseFilled: toBigDecimal(order.base_filled),\n quoteFilled: toBigDecimal(order.quote_filled),\n totalFee: toBigDecimal(order.fee),\n };\n}\n\nexport function mapIndexerEvent(event: IndexerServerEvent): IndexerEvent {\n const eventState: IndexerEvent['state'] = (() => {\n // Assume backend data is consistent\n if ('spot' in event.pre_balance) {\n return {\n type: ProductEngineType.SPOT,\n market: mapIndexerServerProduct(event.product) as SpotMarket,\n preBalance: mapIndexerServerBalance(\n event.pre_balance,\n ) as IndexerSpotBalance,\n postBalance: mapIndexerServerBalance(\n event.post_balance,\n ) as IndexerSpotBalance,\n };\n }\n return {\n type: ProductEngineType.PERP,\n market: mapIndexerServerProduct(event.product) as PerpMarket,\n preBalance: mapIndexerServerBalance(\n event.pre_balance,\n ) as IndexerPerpBalance,\n postBalance: mapIndexerServerBalance(\n event.post_balance,\n ) as IndexerPerpBalance,\n };\n })();\n\n return {\n eventType: event.event_type,\n productId: event.product_id,\n isolated: event.isolated,\n isolatedProductId: event.isolated_product_id,\n state: eventState,\n subaccount: event.subaccount,\n submissionIndex: event.submission_idx,\n trackedVars: {\n netEntryCumulative: toBigDecimal(event.net_entry_cumulative),\n netEntryUnrealized: toBigDecimal(event.net_entry_unrealized),\n netFundingCumulative: toBigDecimal(event.net_funding_cumulative),\n netFundingUnrealized: toBigDecimal(event.net_funding_unrealized),\n netInterestCumulative: toBigDecimal(event.net_interest_cumulative),\n netInterestUnrealized: toBigDecimal(event.net_interest_unrealized),\n },\n };\n}\n\nexport function mapIndexerEventWithTx(\n event: IndexerServerEvent,\n tx: IndexerServerTx,\n): IndexerEventWithTx {\n return {\n timestamp: toBigDecimal(tx.timestamp),\n tx: tx.tx,\n ...mapIndexerEvent(event),\n };\n}\n\nexport function mapIndexerMatchEventBalances(\n eventBalances: IndexerServerMatchEventBalances,\n): IndexerMatchEventBalances {\n return {\n base: mapIndexerServerBalance(eventBalances.base),\n quote: eventBalances.quote\n ? (mapIndexerServerBalance(eventBalances.quote) as IndexerSpotBalance)\n : undefined,\n };\n}\n\nexport function mapIndexerProductPayment(\n payment: IndexerServerProductPayment,\n): IndexerProductPayment {\n return {\n submissionIndex: payment.idx,\n timestamp: toBigDecimal(payment.timestamp),\n paymentAmount: toBigDecimal(payment.amount),\n balanceAmount: toBigDecimal(payment.balance_amount),\n annualPaymentRate: removeDecimals(payment.rate_x18),\n oraclePrice: removeDecimals(payment.oracle_price_x18),\n isolated: payment.isolated,\n productId: payment.product_id,\n isolatedProductId: payment.isolated_product_id,\n };\n}\n\nexport function mapIndexerPerpPrices(\n perpPrices: IndexerServerPerpPrices,\n): IndexerPerpPrices {\n return {\n indexPrice: removeDecimals(perpPrices.index_price_x18),\n markPrice: removeDecimals(perpPrices.mark_price_x18),\n updateTime: toBigDecimal(perpPrices.update_time),\n productId: perpPrices.product_id,\n };\n}\n\nexport function mapIndexerFundingRate(\n fundingRate: IndexerServerFundingRate,\n): IndexerFundingRate {\n return {\n fundingRate: removeDecimals(fundingRate.funding_rate_x18),\n updateTime: toBigDecimal(fundingRate.update_time),\n productId: fundingRate.product_id,\n };\n}\n\nexport function mapIndexerMakerStatistics(\n maker: IndexerServerMaker,\n): IndexerMaker {\n return {\n address: maker.address,\n snapshots: maker.data.map((makerData) => {\n return {\n timestamp: toBigDecimal(makerData.timestamp),\n makerFee: toBigDecimal(makerData.maker_fee),\n uptime: toBigDecimal(makerData.uptime),\n sumQMin: toBigDecimal(makerData.sum_q_min),\n qScore: toBigDecimal(makerData.q_score),\n makerShare: toBigDecimal(makerData.maker_share),\n expectedMakerReward: toBigDecimal(makerData.expected_maker_reward),\n };\n }),\n };\n}\n\nexport function mapIndexerLeaderboardPosition(\n position: IndexerServerLeaderboardPosition,\n): IndexerLeaderboardParticipant {\n return {\n subaccount: subaccountFromHex(position.subaccount),\n contestId: position.contest_id,\n pnl: toBigDecimal(position.pnl),\n pnlRank: toBigDecimal(position.pnl_rank),\n percentRoi: toBigDecimal(position.roi),\n roiRank: toBigDecimal(position.roi_rank),\n accountValue: toBigDecimal(position.account_value),\n volume: position.volume ? toBigDecimal(position.volume) : undefined,\n updateTime: toBigDecimal(position.update_time),\n };\n}\n\nexport function mapIndexerLeaderboardRegistration(\n registration: IndexerServerLeaderboardRegistration,\n): IndexerLeaderboardRegistration {\n return {\n subaccount: subaccountFromHex(registration.subaccount),\n contestId: registration.contest_id,\n updateTime: toBigDecimal(registration.update_time),\n };\n}\n\nexport function mapIndexerLeaderboardContest(\n contest: IndexerServerLeaderboardContest,\n): IndexerLeaderboardContest {\n return {\n contestId: contest.contest_id,\n startTime: toBigDecimal(contest.start_time),\n endTime: toBigDecimal(contest.end_time),\n period: toBigDecimal(contest.threshold),\n totalParticipants: toBigDecimal(contest.count),\n minRequiredAccountValue: toBigDecimal(contest.threshold),\n minRequiredVolume: toBigDecimal(contest.volume_threshold),\n requiredProductIds: contest.product_ids,\n active: contest.active,\n lastUpdated: toBigDecimal(contest.last_updated),\n };\n}\n\nexport function mapIndexerCandlesticks(\n candlestick: IndexerServerCandlestick,\n): Candlestick {\n return {\n close: removeDecimals(candlestick.close_x18),\n high: removeDecimals(candlestick.high_x18),\n low: removeDecimals(candlestick.low_x18),\n open: removeDecimals(candlestick.open_x18),\n time: toBigDecimal(candlestick.timestamp),\n volume: toBigDecimal(candlestick.volume),\n };\n}\n\nexport function mapIndexerMarketSnapshot(\n snapshot: IndexerServerMarketSnapshot,\n): IndexerMarketSnapshot {\n return {\n timestamp: toBigDecimal(snapshot.timestamp),\n cumulativeUsers: toBigDecimal(snapshot.cumulative_users),\n dailyActiveUsers: toBigDecimal(snapshot.daily_active_users),\n tvl: toBigDecimal(snapshot.tvl),\n borrowRates: mapValues(snapshot.borrow_rates, (value) =>\n removeDecimals(value),\n ),\n cumulativeLiquidationAmounts: mapValues(\n snapshot.cumulative_liquidation_amounts,\n toBigDecimal,\n ),\n cumulativeMakerFees: mapValues(\n snapshot.cumulative_maker_fees,\n toBigDecimal,\n ),\n cumulativeSequencerFees: mapValues(\n snapshot.cumulative_sequencer_fees,\n toBigDecimal,\n ),\n cumulativeTakerFees: mapValues(\n snapshot.cumulative_taker_fees,\n toBigDecimal,\n ),\n cumulativeTrades: mapValues(snapshot.cumulative_trades, toBigDecimal),\n cumulativeVolumes: mapValues(snapshot.cumulative_volumes, toBigDecimal),\n depositRates: mapValues(snapshot.deposit_rates, (value) =>\n removeDecimals(value),\n ),\n fundingRates: mapValues(snapshot.funding_rates, (value) =>\n removeDecimals(value),\n ),\n openInterestsQuote: mapValues(snapshot.open_interests, toBigDecimal),\n totalBorrows: mapValues(snapshot.total_borrows, toBigDecimal),\n totalDeposits: mapValues(snapshot.total_deposits, toBigDecimal),\n cumulativeTradeSizes: mapValues(\n snapshot.cumulative_trade_sizes,\n toBigDecimal,\n ),\n cumulativeInflows: mapValues(snapshot.cumulative_inflows, toBigDecimal),\n cumulativeOutflows: mapValues(snapshot.cumulative_outflows, toBigDecimal),\n oraclePrices: mapValues(snapshot.oracle_prices, (value) =>\n removeDecimals(value),\n ),\n };\n}\n\nexport function mapIndexerVlpSnapshot(\n snapshot: IndexerServerVlpSnapshot,\n): IndexerVlpSnapshot {\n return {\n submissionIndex: snapshot.submission_idx,\n timestamp: toBigDecimal(snapshot.timestamp),\n cumulativeBurnAmountUsdc: toBigDecimal(snapshot.cumulative_burn_usdc),\n cumulativeMintAmountUsdc: toBigDecimal(snapshot.cumulative_mint_usdc),\n cumulativePnl: toBigDecimal(snapshot.cumulative_pnl),\n cumulativeTrades: toBigDecimal(snapshot.cumulative_trades),\n cumulativeVolume: toBigDecimal(snapshot.cumulative_volume),\n depositors: toBigDecimal(snapshot.depositors),\n oraclePrice: removeDecimals(snapshot.oracle_price_x18),\n tvl: toBigDecimal(snapshot.tvl),\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/dataMappers.ts"],"sourcesContent":["import {\n mapEngineServerPerpProduct,\n mapEngineServerSpotProduct,\n} from '@nadohq/engine-client';\nimport {\n getRecvTimeFromOrderNonce,\n mapValues,\n Market,\n PerpMarket,\n ProductEngineType,\n removeDecimals,\n SpotMarket,\n subaccountFromHex,\n toBigDecimal,\n toIntegerString,\n unpackOrderAppendix,\n} from '@nadohq/shared';\nimport {\n Candlestick,\n IndexerEvent,\n IndexerEventWithTx,\n IndexerFundingRate,\n IndexerLeaderboardContest,\n IndexerLeaderboardParticipant,\n IndexerLeaderboardRegistration,\n IndexerMaker,\n IndexerMarketSnapshot,\n IndexerMatchEventBalances,\n IndexerNlpSnapshot,\n IndexerOrder,\n IndexerPerpBalance,\n IndexerPerpPrices,\n IndexerProductPayment,\n IndexerServerBalance,\n IndexerServerCandlestick,\n IndexerServerEvent,\n IndexerServerFundingRate,\n IndexerServerLeaderboardContest,\n IndexerServerLeaderboardPosition,\n IndexerServerLeaderboardRegistration,\n IndexerServerMaker,\n IndexerServerMarketSnapshot,\n IndexerServerMatchEventBalances,\n IndexerServerNlpSnapshot,\n IndexerServerOrder,\n IndexerServerPerpPrices,\n IndexerServerProduct,\n IndexerServerProductPayment,\n IndexerServerSnapshotsInterval,\n IndexerServerTx,\n IndexerSnapshotsIntervalParams,\n IndexerSpotBalance,\n} from './types';\n\nexport function mapSnapshotsIntervalToServerParams(\n params: IndexerSnapshotsIntervalParams,\n): IndexerServerSnapshotsInterval {\n return {\n count: params.limit,\n max_time: params.maxTimeInclusive\n ? toIntegerString(params.maxTimeInclusive)\n : undefined,\n granularity: params.granularity,\n };\n}\n\nexport function mapIndexerServerProduct(product: IndexerServerProduct): Market {\n if ('spot' in product) {\n return mapEngineServerSpotProduct(product.spot);\n }\n return mapEngineServerPerpProduct(product.perp);\n}\n\nexport function mapIndexerServerBalance(\n balance: IndexerServerBalance,\n): IndexerSpotBalance | IndexerPerpBalance {\n if ('spot' in balance) {\n return {\n amount: toBigDecimal(balance.spot.balance.amount),\n productId: balance.spot.product_id,\n type: ProductEngineType.SPOT,\n };\n }\n return {\n amount: toBigDecimal(balance.perp.balance.amount),\n productId: balance.perp.product_id,\n type: ProductEngineType.PERP,\n vQuoteBalance: toBigDecimal(balance.perp.balance.v_quote_balance),\n };\n}\n\nexport function mapIndexerOrder(order: IndexerServerOrder): IndexerOrder {\n const appendix = unpackOrderAppendix(order.appendix);\n return {\n amount: toBigDecimal(order.amount),\n digest: order.digest,\n expiration: Number(order.expiration),\n appendix,\n nonce: toBigDecimal(order.nonce),\n recvTimeSeconds: getRecvTimeFromOrderNonce(order.nonce) / 1000,\n price: removeDecimals(order.price_x18),\n productId: order.product_id,\n subaccount: order.subaccount,\n submissionIndex: order.submission_idx,\n baseFilled: toBigDecimal(order.base_filled),\n quoteFilled: toBigDecimal(order.quote_filled),\n totalFee: toBigDecimal(order.fee),\n };\n}\n\nexport function mapIndexerEvent(event: IndexerServerEvent): IndexerEvent {\n const eventState: IndexerEvent['state'] = (() => {\n // Assume backend data is consistent\n if ('spot' in event.pre_balance) {\n return {\n type: ProductEngineType.SPOT,\n market: mapIndexerServerProduct(event.product) as SpotMarket,\n preBalance: mapIndexerServerBalance(\n event.pre_balance,\n ) as IndexerSpotBalance,\n postBalance: mapIndexerServerBalance(\n event.post_balance,\n ) as IndexerSpotBalance,\n };\n }\n return {\n type: ProductEngineType.PERP,\n market: mapIndexerServerProduct(event.product) as PerpMarket,\n preBalance: mapIndexerServerBalance(\n event.pre_balance,\n ) as IndexerPerpBalance,\n postBalance: mapIndexerServerBalance(\n event.post_balance,\n ) as IndexerPerpBalance,\n };\n })();\n\n return {\n eventType: event.event_type,\n productId: event.product_id,\n isolated: event.isolated,\n isolatedProductId: event.isolated_product_id,\n state: eventState,\n subaccount: event.subaccount,\n submissionIndex: event.submission_idx,\n trackedVars: {\n netEntryCumulative: toBigDecimal(event.net_entry_cumulative),\n netEntryUnrealized: toBigDecimal(event.net_entry_unrealized),\n netFundingCumulative: toBigDecimal(event.net_funding_cumulative),\n netFundingUnrealized: toBigDecimal(event.net_funding_unrealized),\n netInterestCumulative: toBigDecimal(event.net_interest_cumulative),\n netInterestUnrealized: toBigDecimal(event.net_interest_unrealized),\n },\n };\n}\n\nexport function mapIndexerEventWithTx(\n event: IndexerServerEvent,\n tx: IndexerServerTx,\n): IndexerEventWithTx {\n return {\n timestamp: toBigDecimal(tx.timestamp),\n tx: tx.tx,\n ...mapIndexerEvent(event),\n };\n}\n\nexport function mapIndexerMatchEventBalances(\n eventBalances: IndexerServerMatchEventBalances,\n): IndexerMatchEventBalances {\n return {\n base: mapIndexerServerBalance(eventBalances.base),\n quote: eventBalances.quote\n ? (mapIndexerServerBalance(eventBalances.quote) as IndexerSpotBalance)\n : undefined,\n };\n}\n\nexport function mapIndexerProductPayment(\n payment: IndexerServerProductPayment,\n): IndexerProductPayment {\n return {\n submissionIndex: payment.idx,\n timestamp: toBigDecimal(payment.timestamp),\n paymentAmount: toBigDecimal(payment.amount),\n balanceAmount: toBigDecimal(payment.balance_amount),\n annualPaymentRate: removeDecimals(payment.rate_x18),\n oraclePrice: removeDecimals(payment.oracle_price_x18),\n isolated: payment.isolated,\n productId: payment.product_id,\n isolatedProductId: payment.isolated_product_id,\n };\n}\n\nexport function mapIndexerPerpPrices(\n perpPrices: IndexerServerPerpPrices,\n): IndexerPerpPrices {\n return {\n indexPrice: removeDecimals(perpPrices.index_price_x18),\n markPrice: removeDecimals(perpPrices.mark_price_x18),\n updateTime: toBigDecimal(perpPrices.update_time),\n productId: perpPrices.product_id,\n };\n}\n\nexport function mapIndexerFundingRate(\n fundingRate: IndexerServerFundingRate,\n): IndexerFundingRate {\n return {\n fundingRate: removeDecimals(fundingRate.funding_rate_x18),\n updateTime: toBigDecimal(fundingRate.update_time),\n productId: fundingRate.product_id,\n };\n}\n\nexport function mapIndexerMakerStatistics(\n maker: IndexerServerMaker,\n): IndexerMaker {\n return {\n address: maker.address,\n snapshots: maker.data.map((makerData) => {\n return {\n timestamp: toBigDecimal(makerData.timestamp),\n makerFee: toBigDecimal(makerData.maker_fee),\n uptime: toBigDecimal(makerData.uptime),\n sumQMin: toBigDecimal(makerData.sum_q_min),\n qScore: toBigDecimal(makerData.q_score),\n makerShare: toBigDecimal(makerData.maker_share),\n expectedMakerReward: toBigDecimal(makerData.expected_maker_reward),\n };\n }),\n };\n}\n\nexport function mapIndexerLeaderboardPosition(\n position: IndexerServerLeaderboardPosition,\n): IndexerLeaderboardParticipant {\n return {\n subaccount: subaccountFromHex(position.subaccount),\n contestId: position.contest_id,\n pnl: toBigDecimal(position.pnl),\n pnlRank: toBigDecimal(position.pnl_rank),\n percentRoi: toBigDecimal(position.roi),\n roiRank: toBigDecimal(position.roi_rank),\n accountValue: toBigDecimal(position.account_value),\n volume: position.volume ? toBigDecimal(position.volume) : undefined,\n updateTime: toBigDecimal(position.update_time),\n };\n}\n\nexport function mapIndexerLeaderboardRegistration(\n registration: IndexerServerLeaderboardRegistration,\n): IndexerLeaderboardRegistration {\n return {\n subaccount: subaccountFromHex(registration.subaccount),\n contestId: registration.contest_id,\n updateTime: toBigDecimal(registration.update_time),\n };\n}\n\nexport function mapIndexerLeaderboardContest(\n contest: IndexerServerLeaderboardContest,\n): IndexerLeaderboardContest {\n return {\n contestId: contest.contest_id,\n startTime: toBigDecimal(contest.start_time),\n endTime: toBigDecimal(contest.end_time),\n period: toBigDecimal(contest.threshold),\n totalParticipants: toBigDecimal(contest.count),\n minRequiredAccountValue: toBigDecimal(contest.threshold),\n minRequiredVolume: toBigDecimal(contest.volume_threshold),\n requiredProductIds: contest.product_ids,\n active: contest.active,\n lastUpdated: toBigDecimal(contest.last_updated),\n };\n}\n\nexport function mapIndexerCandlesticks(\n candlestick: IndexerServerCandlestick,\n): Candlestick {\n return {\n close: removeDecimals(candlestick.close_x18),\n high: removeDecimals(candlestick.high_x18),\n low: removeDecimals(candlestick.low_x18),\n open: removeDecimals(candlestick.open_x18),\n time: toBigDecimal(candlestick.timestamp),\n volume: toBigDecimal(candlestick.volume),\n };\n}\n\nexport function mapIndexerMarketSnapshot(\n snapshot: IndexerServerMarketSnapshot,\n): IndexerMarketSnapshot {\n return {\n timestamp: toBigDecimal(snapshot.timestamp),\n cumulativeUsers: toBigDecimal(snapshot.cumulative_users),\n dailyActiveUsers: toBigDecimal(snapshot.daily_active_users),\n tvl: toBigDecimal(snapshot.tvl),\n borrowRates: mapValues(snapshot.borrow_rates, (value) =>\n removeDecimals(value),\n ),\n cumulativeLiquidationAmounts: mapValues(\n snapshot.cumulative_liquidation_amounts,\n toBigDecimal,\n ),\n cumulativeMakerFees: mapValues(\n snapshot.cumulative_maker_fees,\n toBigDecimal,\n ),\n cumulativeSequencerFees: mapValues(\n snapshot.cumulative_sequencer_fees,\n toBigDecimal,\n ),\n cumulativeTakerFees: mapValues(\n snapshot.cumulative_taker_fees,\n toBigDecimal,\n ),\n cumulativeTrades: mapValues(snapshot.cumulative_trades, toBigDecimal),\n cumulativeVolumes: mapValues(snapshot.cumulative_volumes, toBigDecimal),\n depositRates: mapValues(snapshot.deposit_rates, (value) =>\n removeDecimals(value),\n ),\n fundingRates: mapValues(snapshot.funding_rates, (value) =>\n removeDecimals(value),\n ),\n openInterestsQuote: mapValues(snapshot.open_interests, toBigDecimal),\n totalBorrows: mapValues(snapshot.total_borrows, toBigDecimal),\n totalDeposits: mapValues(snapshot.total_deposits, toBigDecimal),\n cumulativeTradeSizes: mapValues(\n snapshot.cumulative_trade_sizes,\n toBigDecimal,\n ),\n cumulativeInflows: mapValues(snapshot.cumulative_inflows, toBigDecimal),\n cumulativeOutflows: mapValues(snapshot.cumulative_outflows, toBigDecimal),\n oraclePrices: mapValues(snapshot.oracle_prices, (value) =>\n removeDecimals(value),\n ),\n };\n}\n\nexport function mapIndexerNlpSnapshot(\n snapshot: IndexerServerNlpSnapshot,\n): IndexerNlpSnapshot {\n return {\n submissionIndex: snapshot.submission_idx,\n timestamp: toBigDecimal(snapshot.timestamp),\n cumulativeBurnAmountUsdc: toBigDecimal(snapshot.cumulative_burn_usdc),\n cumulativeMintAmountUsdc: toBigDecimal(snapshot.cumulative_mint_usdc),\n cumulativePnl: toBigDecimal(snapshot.cumulative_pnl),\n cumulativeTrades: toBigDecimal(snapshot.cumulative_trades),\n cumulativeVolume: toBigDecimal(snapshot.cumulative_volume),\n depositors: toBigDecimal(snapshot.depositors),\n oraclePrice: removeDecimals(snapshot.oracle_price_x18),\n tvl: toBigDecimal(snapshot.tvl),\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/dataMappers.d.cts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Market } from '@nadohq/
|
|
2
|
-
import { IndexerSnapshotsIntervalParams, IndexerSpotBalance, IndexerPerpBalance, IndexerOrder, IndexerEvent, IndexerEventWithTx, IndexerMatchEventBalances, IndexerProductPayment, IndexerPerpPrices, IndexerFundingRate, IndexerMaker, IndexerLeaderboardParticipant, IndexerLeaderboardRegistration, IndexerLeaderboardContest, Candlestick, IndexerMarketSnapshot,
|
|
1
|
+
import { Market } from '@nadohq/shared';
|
|
2
|
+
import { IndexerSnapshotsIntervalParams, IndexerSpotBalance, IndexerPerpBalance, IndexerOrder, IndexerEvent, IndexerEventWithTx, IndexerMatchEventBalances, IndexerProductPayment, IndexerPerpPrices, IndexerFundingRate, IndexerMaker, IndexerLeaderboardParticipant, IndexerLeaderboardRegistration, IndexerLeaderboardContest, Candlestick, IndexerMarketSnapshot, IndexerNlpSnapshot } from './types/clientTypes.cjs';
|
|
3
3
|
import { IndexerServerPerpPrices, IndexerServerFundingRate } from './types/serverTypes.cjs';
|
|
4
|
-
import { IndexerServerSnapshotsInterval, IndexerServerProduct, IndexerServerBalance, IndexerServerOrder, IndexerServerEvent, IndexerServerTx, IndexerServerMatchEventBalances, IndexerServerProductPayment, IndexerServerMaker, IndexerServerLeaderboardPosition, IndexerServerLeaderboardRegistration, IndexerServerLeaderboardContest, IndexerServerCandlestick, IndexerServerMarketSnapshot,
|
|
5
|
-
import '@nadohq/utils';
|
|
4
|
+
import { IndexerServerSnapshotsInterval, IndexerServerProduct, IndexerServerBalance, IndexerServerOrder, IndexerServerEvent, IndexerServerTx, IndexerServerMatchEventBalances, IndexerServerProductPayment, IndexerServerMaker, IndexerServerLeaderboardPosition, IndexerServerLeaderboardRegistration, IndexerServerLeaderboardContest, IndexerServerCandlestick, IndexerServerMarketSnapshot, IndexerServerNlpSnapshot } from './types/serverModelTypes.cjs';
|
|
6
5
|
import 'viem';
|
|
7
6
|
import './types/CandlestickPeriod.cjs';
|
|
8
7
|
import './types/IndexerEventType.cjs';
|
|
@@ -26,6 +25,6 @@ declare function mapIndexerLeaderboardRegistration(registration: IndexerServerLe
|
|
|
26
25
|
declare function mapIndexerLeaderboardContest(contest: IndexerServerLeaderboardContest): IndexerLeaderboardContest;
|
|
27
26
|
declare function mapIndexerCandlesticks(candlestick: IndexerServerCandlestick): Candlestick;
|
|
28
27
|
declare function mapIndexerMarketSnapshot(snapshot: IndexerServerMarketSnapshot): IndexerMarketSnapshot;
|
|
29
|
-
declare function
|
|
28
|
+
declare function mapIndexerNlpSnapshot(snapshot: IndexerServerNlpSnapshot): IndexerNlpSnapshot;
|
|
30
29
|
|
|
31
|
-
export { mapIndexerCandlesticks, mapIndexerEvent, mapIndexerEventWithTx, mapIndexerFundingRate, mapIndexerLeaderboardContest, mapIndexerLeaderboardPosition, mapIndexerLeaderboardRegistration, mapIndexerMakerStatistics, mapIndexerMarketSnapshot, mapIndexerMatchEventBalances, mapIndexerOrder, mapIndexerPerpPrices, mapIndexerProductPayment, mapIndexerServerBalance, mapIndexerServerProduct,
|
|
30
|
+
export { mapIndexerCandlesticks, mapIndexerEvent, mapIndexerEventWithTx, mapIndexerFundingRate, mapIndexerLeaderboardContest, mapIndexerLeaderboardPosition, mapIndexerLeaderboardRegistration, mapIndexerMakerStatistics, mapIndexerMarketSnapshot, mapIndexerMatchEventBalances, mapIndexerNlpSnapshot, mapIndexerOrder, mapIndexerPerpPrices, mapIndexerProductPayment, mapIndexerServerBalance, mapIndexerServerProduct, mapSnapshotsIntervalToServerParams };
|
package/dist/dataMappers.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Market } from '@nadohq/
|
|
2
|
-
import { IndexerSnapshotsIntervalParams, IndexerSpotBalance, IndexerPerpBalance, IndexerOrder, IndexerEvent, IndexerEventWithTx, IndexerMatchEventBalances, IndexerProductPayment, IndexerPerpPrices, IndexerFundingRate, IndexerMaker, IndexerLeaderboardParticipant, IndexerLeaderboardRegistration, IndexerLeaderboardContest, Candlestick, IndexerMarketSnapshot,
|
|
1
|
+
import { Market } from '@nadohq/shared';
|
|
2
|
+
import { IndexerSnapshotsIntervalParams, IndexerSpotBalance, IndexerPerpBalance, IndexerOrder, IndexerEvent, IndexerEventWithTx, IndexerMatchEventBalances, IndexerProductPayment, IndexerPerpPrices, IndexerFundingRate, IndexerMaker, IndexerLeaderboardParticipant, IndexerLeaderboardRegistration, IndexerLeaderboardContest, Candlestick, IndexerMarketSnapshot, IndexerNlpSnapshot } from './types/clientTypes.js';
|
|
3
3
|
import { IndexerServerPerpPrices, IndexerServerFundingRate } from './types/serverTypes.js';
|
|
4
|
-
import { IndexerServerSnapshotsInterval, IndexerServerProduct, IndexerServerBalance, IndexerServerOrder, IndexerServerEvent, IndexerServerTx, IndexerServerMatchEventBalances, IndexerServerProductPayment, IndexerServerMaker, IndexerServerLeaderboardPosition, IndexerServerLeaderboardRegistration, IndexerServerLeaderboardContest, IndexerServerCandlestick, IndexerServerMarketSnapshot,
|
|
5
|
-
import '@nadohq/utils';
|
|
4
|
+
import { IndexerServerSnapshotsInterval, IndexerServerProduct, IndexerServerBalance, IndexerServerOrder, IndexerServerEvent, IndexerServerTx, IndexerServerMatchEventBalances, IndexerServerProductPayment, IndexerServerMaker, IndexerServerLeaderboardPosition, IndexerServerLeaderboardRegistration, IndexerServerLeaderboardContest, IndexerServerCandlestick, IndexerServerMarketSnapshot, IndexerServerNlpSnapshot } from './types/serverModelTypes.js';
|
|
6
5
|
import 'viem';
|
|
7
6
|
import './types/CandlestickPeriod.js';
|
|
8
7
|
import './types/IndexerEventType.js';
|
|
@@ -26,6 +25,6 @@ declare function mapIndexerLeaderboardRegistration(registration: IndexerServerLe
|
|
|
26
25
|
declare function mapIndexerLeaderboardContest(contest: IndexerServerLeaderboardContest): IndexerLeaderboardContest;
|
|
27
26
|
declare function mapIndexerCandlesticks(candlestick: IndexerServerCandlestick): Candlestick;
|
|
28
27
|
declare function mapIndexerMarketSnapshot(snapshot: IndexerServerMarketSnapshot): IndexerMarketSnapshot;
|
|
29
|
-
declare function
|
|
28
|
+
declare function mapIndexerNlpSnapshot(snapshot: IndexerServerNlpSnapshot): IndexerNlpSnapshot;
|
|
30
29
|
|
|
31
|
-
export { mapIndexerCandlesticks, mapIndexerEvent, mapIndexerEventWithTx, mapIndexerFundingRate, mapIndexerLeaderboardContest, mapIndexerLeaderboardPosition, mapIndexerLeaderboardRegistration, mapIndexerMakerStatistics, mapIndexerMarketSnapshot, mapIndexerMatchEventBalances, mapIndexerOrder, mapIndexerPerpPrices, mapIndexerProductPayment, mapIndexerServerBalance, mapIndexerServerProduct,
|
|
30
|
+
export { mapIndexerCandlesticks, mapIndexerEvent, mapIndexerEventWithTx, mapIndexerFundingRate, mapIndexerLeaderboardContest, mapIndexerLeaderboardPosition, mapIndexerLeaderboardRegistration, mapIndexerMakerStatistics, mapIndexerMarketSnapshot, mapIndexerMatchEventBalances, mapIndexerNlpSnapshot, mapIndexerOrder, mapIndexerPerpPrices, mapIndexerProductPayment, mapIndexerServerBalance, mapIndexerServerProduct, mapSnapshotsIntervalToServerParams };
|